@3dsource/angular-unreal-module 0.0.70 → 0.0.72

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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injectable, signal, ChangeDetectionStrategy, Component, Pipe, ElementRef, input, HostListener, Input, ViewChild, DestroyRef, computed, viewChild, effect, untracked, output } 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';
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';
@@ -305,9 +305,9 @@ 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.initAfk();
308
+ this.init();
309
309
  }
310
- initAfk() {
310
+ init() {
311
311
  merge(this.store.select(selectWarnTimeout), fromSignal(UnrealInternalSignalEvents.RestAfkTimer))
312
312
  .pipe(withLatestFrom(this.store.select(unrealFeature.selectViewportReady)), filter(([, viewportReady]) => viewportReady))
313
313
  .subscribe(() => this.resetAfkWarningTimer());
@@ -317,9 +317,6 @@ class AFKService extends SubService {
317
317
  .subscribe(() => this.startAfkWarningTimer());
318
318
  this.disconnect$.subscribe(() => this.stop());
319
319
  }
320
- init() {
321
- // do nothing, just to not forget to initialize Service
322
- }
323
320
  hideOverlay() {
324
321
  sendSignal(UnrealInternalSignalEvents.ClickableOverlay);
325
322
  this.store.dispatch(setAfkTimerHide());
@@ -336,7 +333,7 @@ class AFKService extends SubService {
336
333
  */
337
334
  resetAfkWarningTimer() {
338
335
  if (this.active) {
339
- this.stop();
336
+ this.clearTimers();
340
337
  this.warnTimer = setTimeout(() => {
341
338
  this.showAfkOverlay();
342
339
  }, this.selectWarnTimeout() * 1000);
@@ -361,9 +358,12 @@ class AFKService extends SubService {
361
358
  onOverlayClick: () => this.reset(),
362
359
  });
363
360
  }
364
- stop() {
361
+ clearTimers() {
365
362
  clearInterval(this.countdownTimer);
366
363
  clearTimeout(this.warnTimer);
364
+ }
365
+ stop() {
366
+ this.clearTimers();
367
367
  this.hideOverlay();
368
368
  }
369
369
  reset() {
@@ -408,10 +408,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
408
408
 
409
409
  class FreezeFrameService extends SubService {
410
410
  constructor() {
411
- super(...arguments);
411
+ super();
412
412
  this.receiving = false;
413
413
  this.size = 0;
414
414
  this.freezeFrameOverlay = new Image();
415
+ this.init();
415
416
  }
416
417
  init() {
417
418
  this.store
@@ -477,12 +478,12 @@ class FreezeFrameService extends SubService {
477
478
  progress: 1,
478
479
  }));
479
480
  }
480
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: FreezeFrameService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
481
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: FreezeFrameService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
481
482
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: FreezeFrameService }); }
482
483
  }
483
484
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: FreezeFrameService, decorators: [{
484
485
  type: Injectable
485
- }] });
486
+ }], ctorParameters: () => [] });
486
487
 
487
488
  class DataFlowMonitor {
488
489
  /**
@@ -606,6 +607,9 @@ class VideoService extends SubService {
606
607
  ? // IMPORTANT! DO NOT CHANGE THOSE NUMBERS, LBM Stats are based on those values
607
608
  interval(250).pipe(map(() => track.pcClient), switchMap((pcClient) => from(this.getStats(pcClient))), filter(Truthy))
608
609
  : of(null)), filter(Truthy), share());
610
+ this.init();
611
+ }
612
+ init() {
609
613
  Signal.on('setKalmanParams').subscribe((data) => {
610
614
  this.kalmanFilter1D.config(data);
611
615
  BITRATE_MONITOR.config(data);
@@ -866,6 +870,9 @@ class CommandTelemetryService {
866
870
  this.unrealInitialConfig = inject(UNREAL_CONFIG, {
867
871
  optional: true,
868
872
  });
873
+ this.init();
874
+ }
875
+ init() {
869
876
  if (!this.unrealInitialConfig?.commandTelemetryReceiver) {
870
877
  return;
871
878
  }
@@ -1188,6 +1195,9 @@ class SignallingService extends SubService {
1188
1195
  this.onWebRtcAnswer$ = new Subject();
1189
1196
  this.abort$ = this.action$.pipe(ofType(abortEstablishingConnection));
1190
1197
  this.wsMsgHandlers = {};
1198
+ this.init();
1199
+ }
1200
+ init() {
1191
1201
  this.setHandlersFromStream();
1192
1202
  this.store
1193
1203
  .select(unrealFeature.selectDataChannelConnected)
@@ -1400,8 +1410,8 @@ class SignallingService extends SubService {
1400
1410
  Logger.log('WS HANDLERS ADDED');
1401
1411
  OnOpenHandler.call(this);
1402
1412
  }
1403
- showStatusMessage(message) {
1404
- this.store.dispatch(setStatusMessage({ message }));
1413
+ showStatusMessage(statusMessage) {
1414
+ this.store.dispatch(setStatusMessage({ statusMessage }));
1405
1415
  }
1406
1416
  /**
1407
1417
  * Close the connection with the signaling server
@@ -1496,9 +1506,9 @@ class WebRtcPlayerService extends SubService {
1496
1506
  this.useMic = false;
1497
1507
  this.forceTURN = false;
1498
1508
  this.forceMonoAudio = false;
1499
- this.listenSignaling();
1509
+ this.init();
1500
1510
  }
1501
- listenSignaling() {
1511
+ init() {
1502
1512
  const iceCandidateBuffer = [];
1503
1513
  const processBuffer = () => {
1504
1514
  iceCandidateBuffer.forEach((cnd) => {
@@ -1547,7 +1557,6 @@ class WebRtcPlayerService extends SubService {
1547
1557
  }
1548
1558
  createDataChannel(pc, label, options) {
1549
1559
  // This is the primary data channel code path when we are "offering"
1550
- Logger.info(`[DATACHANNEL] Creating datachannel primary (${label})...`);
1551
1560
  const datachannel = pc.createDataChannel(label, options);
1552
1561
  return this.setupDataChannelCallbacks(datachannel);
1553
1562
  }
@@ -1612,7 +1621,8 @@ class WebRtcPlayerService extends SubService {
1612
1621
  this.dcClient.send(data);
1613
1622
  }
1614
1623
  else {
1615
- throw new Error('data channel is not prepared!');
1624
+ const error = `DataChannel connection not prepared or in state: ${this.dcClient?.readyState}`;
1625
+ throw new Error(error);
1616
1626
  }
1617
1627
  }
1618
1628
  setConfig(parOptions = {}) {
@@ -1651,7 +1661,7 @@ class WebRtcPlayerService extends SubService {
1651
1661
  TelemetryStart('Signaling state change');
1652
1662
  this.handlePeerConnectionEvents(this.pcClient);
1653
1663
  await this.setupTransceiversAsync(this.pcClient);
1654
- this.dcClient = this.createDataChannel(this.pcClient, 'cirrus', {
1664
+ this.dcClient = this.createDataChannel(this.pcClient, 'UnrealDcConnection', {
1655
1665
  // See https://www.w3.org/TR/webrtc/#dom-rtcdatachannelinit for values (this is needed for Firefox to be consistent with Chrome.)
1656
1666
  ordered: true,
1657
1667
  });
@@ -1764,6 +1774,7 @@ class WebRtcPlayerService extends SubService {
1764
1774
  }
1765
1775
  setupDataChannelCallbacks(datachannel) {
1766
1776
  try {
1777
+ Logger.log(`[DATACHANNEL] Setting up datachannel "${datachannel.label}" callbacks...`);
1767
1778
  TelemetryStart('DataChannel Connection');
1768
1779
  // Inform browser we would like binary data as an ArrayBuffer (FF chooses Blob by default!)
1769
1780
  datachannel.binaryType = 'arraybuffer';
@@ -1779,12 +1790,12 @@ class WebRtcPlayerService extends SubService {
1779
1790
  fromEvent(datachannel, 'error')
1780
1791
  .pipe(takeUntil(this.disconnect$))
1781
1792
  .subscribe((e) => {
1782
- const message = `[DATACHANNEL] Data channel error: ${datachannel.label}(${datachannel.id})`;
1793
+ const message = `[DATACHANNEL] Data channel "${datachannel.label}" error. id:${datachannel.id}`;
1783
1794
  Logger.error(message, e);
1784
1795
  });
1785
1796
  fromEvent(datachannel, 'open')
1786
1797
  .pipe(tap$1(() => {
1787
- Logger.info(`[DATACHANNEL] Data channel connected: ${datachannel.label}(${datachannel.id})`);
1798
+ Logger.info(`[DATACHANNEL] Data channel "${datachannel.label}" connected. id:${datachannel.id}`);
1788
1799
  }), takeUntil(this.disconnect$))
1789
1800
  .subscribe(() => {
1790
1801
  TelemetryStop('DataChannel Connection');
@@ -1801,12 +1812,12 @@ class WebRtcPlayerService extends SubService {
1801
1812
  }
1802
1813
  }
1803
1814
  onDataChannelConnected() {
1804
- let text = 'Session connected, video stream starting.';
1815
+ let statusMessage = 'Session connected, video stream starting.';
1805
1816
  if (navigator.userAgent.includes('Firefox')) {
1806
- text +=
1817
+ statusMessage +=
1807
1818
  '\n If you are experiencing connection problems please try Google Chrome';
1808
1819
  }
1809
- this.store.dispatch(setDataChannelConnected({ message: text }));
1820
+ this.store.dispatch(setDataChannelConnected({ statusMessage }));
1810
1821
  }
1811
1822
  async createOffer(pcClient) {
1812
1823
  try {
@@ -1879,6 +1890,9 @@ class FileReceiverService extends SubService {
1879
1890
  this.extension = '';
1880
1891
  this.timestampStart = 0;
1881
1892
  this.data = [];
1893
+ this.init();
1894
+ }
1895
+ init() {
1882
1896
  this.store
1883
1897
  .select(unrealFeature.selectViewportReady)
1884
1898
  .pipe(filter(Truthy))
@@ -1993,11 +2007,16 @@ class AggregatorService extends SubService {
1993
2007
  * Never called for now
1994
2008
  */
1995
2009
  this.destroy$ = new Subject();
2010
+ this.init();
2011
+ }
2012
+ init() {
1996
2013
  this.listenWebRTC();
1997
2014
  this.initialize();
1998
2015
  }
1999
- init() {
2000
- // do nothing, just to not forget to initialize Service
2016
+ listenWebRTC() {
2017
+ this.webrtcPlayer.onDataChannelMessage$
2018
+ .pipe(takeUntil(this.destroy$))
2019
+ .subscribe((data) => this.dataChannelMessageHandler(data));
2001
2020
  }
2002
2021
  initialize() {
2003
2022
  this.store
@@ -2085,11 +2104,6 @@ class AggregatorService extends SubService {
2085
2104
  resetResponseList() {
2086
2105
  this.responseEventListeners.clear();
2087
2106
  }
2088
- listenWebRTC() {
2089
- this.webrtcPlayer.onDataChannelMessage$
2090
- .pipe(takeUntil(this.destroy$))
2091
- .subscribe((data) => this.dataChannelMessageHandler(data));
2092
- }
2093
2107
  dataChannelMessageHandler(data) {
2094
2108
  const view = new Uint8Array(data);
2095
2109
  const anyData = data.slice(1);
@@ -2171,13 +2185,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
2171
2185
  }], ctorParameters: () => [] });
2172
2186
 
2173
2187
  class ConsoleExtensionsService extends SubService {
2188
+ #httpClient = inject(HttpClient);
2189
+ #isDevMode = inject(DevModeService).isDevMode;
2174
2190
  constructor() {
2175
- super(...arguments);
2176
- this.httpClient = inject(HttpClient);
2177
- this.isDevMode = inject(DevModeService).isDevMode;
2191
+ super();
2192
+ this.init();
2178
2193
  }
2179
2194
  init() {
2180
- if (!this.isDevMode) {
2195
+ if (!this.#isDevMode) {
2181
2196
  return;
2182
2197
  }
2183
2198
  window.dropConnection = () => {
@@ -2201,7 +2216,7 @@ class ConsoleExtensionsService extends SubService {
2201
2216
  window.restartApp = () => {
2202
2217
  this.store
2203
2218
  .select(unrealFeature.selectAwsInstance)
2204
- .pipe(take(1), filter((data) => !!data.instanceName), tapLog('Instance', `Restart initiated`), switchMap$1((data) => this.httpClient.get(`//${data.instanceName}/restartapp`)), catchError(() => of(null)))
2219
+ .pipe(take(1), filter((data) => !!data.instanceName), tapLog('Instance', `Restart initiated`), switchMap$1((data) => this.#httpClient.get(`//${data.instanceName}/restartapp`)), catchError(() => of(null)))
2205
2220
  .subscribe();
2206
2221
  };
2207
2222
  window.unrealHelp = () => this.unrealHelp();
@@ -2218,12 +2233,12 @@ class ConsoleExtensionsService extends SubService {
2218
2233
  Logger.info('setWarnTime() => set time to appear the AFK window.');
2219
2234
  Logger.info('emitCommand(command) => send command to Unreal Engine.');
2220
2235
  }
2221
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: ConsoleExtensionsService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
2236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: ConsoleExtensionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2222
2237
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: ConsoleExtensionsService }); }
2223
2238
  }
2224
2239
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: ConsoleExtensionsService, decorators: [{
2225
2240
  type: Injectable
2226
- }] });
2241
+ }], ctorParameters: () => [] });
2227
2242
 
2228
2243
  class DevModeService {
2229
2244
  get isDevMode() {
@@ -2403,19 +2418,17 @@ class TouchEmulator {
2403
2418
 
2404
2419
  class UnrealCommunicatorService {
2405
2420
  constructor() {
2421
+ this.store = inject(Store);
2406
2422
  this.telemetry = inject(CommandTelemetryService);
2407
- this.afkService = inject(AFKService);
2408
2423
  this.freezeFrame = inject(FreezeFrameService);
2409
2424
  this.webrtcPlayer = inject(WebRtcPlayerService);
2410
2425
  this.videoService = inject(VideoService);
2411
- this.consoleExtensions = inject(ConsoleExtensionsService);
2412
- this.store = inject(Store);
2413
2426
  this.destroy$ = new Subject();
2414
2427
  this.cirrusConnected = toSignal(this.store.select(unrealFeature.selectCirrusConnected));
2428
+ this.init();
2429
+ }
2430
+ init() {
2415
2431
  this.emitUIInteraction = this.telemetry.decorate(this.emitUIInteraction.bind(this));
2416
- this.consoleExtensions.init();
2417
- this.afkService.init();
2418
- this.freezeFrame.init();
2419
2432
  this.listenVideo();
2420
2433
  this.store
2421
2434
  .select(unrealFeature.selectDataChannelConnected)
@@ -2462,7 +2475,7 @@ class UnrealCommunicatorService {
2462
2475
  }
2463
2476
  catch (error) {
2464
2477
  if (this.cirrusConnected()) {
2465
- Logger.error(`DataChannel connection not established, can't send data=>${error}`);
2478
+ Logger.error(error);
2466
2479
  }
2467
2480
  }
2468
2481
  }
@@ -3104,7 +3117,12 @@ class StreamStatusTelemetryService {
3104
3117
  constructor() {
3105
3118
  this.store = inject(Store);
3106
3119
  this.videoService = inject(VideoService);
3107
- this.initTelemetry();
3120
+ this.init();
3121
+ }
3122
+ 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)))
3125
+ .subscribe((data) => this.trackEventToMixPanel(data));
3108
3126
  }
3109
3127
  mapEventData(data, signalingServer, isLowBandwidth, lbmStats) {
3110
3128
  const { bitrate, VideoEncoderQP, framesPerSecond, frameWidth, frameHeight, jitter, packetsLost, currentRoundTripTime, } = data.aggregatedStats;
@@ -3125,17 +3143,9 @@ class StreamStatusTelemetryService {
3125
3143
  VideoEncoderQP,
3126
3144
  };
3127
3145
  }
3128
- initTelemetry() {
3129
- this.videoService.videoStats$
3130
- .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)))
3131
- .subscribe((data) => this.trackEventToMixPanel(data));
3132
- }
3133
3146
  trackEventToMixPanel(data) {
3134
3147
  this.store.dispatch(trackMixpanelEvent({ event: 'streamStatus', data }));
3135
3148
  }
3136
- init() {
3137
- // do nothing, just to not forget to initialize Service
3138
- }
3139
3149
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: StreamStatusTelemetryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3140
3150
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: StreamStatusTelemetryService }); }
3141
3151
  }
@@ -3144,7 +3154,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
3144
3154
  }], ctorParameters: () => [] });
3145
3155
 
3146
3156
  class AfkPlaywrightService extends AFKService {
3147
- initAfk() {
3157
+ init() {
3148
3158
  return;
3149
3159
  }
3150
3160
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: AfkPlaywrightService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -3161,7 +3171,7 @@ class SignallingPlaywrightService extends SignallingService {
3161
3171
  connectToSignaling() {
3162
3172
  this.store.dispatch(setUnrealPlaywrightConfig());
3163
3173
  this.store.dispatch(setDataChannelConnected({
3164
- message: 'Playwright set data channel connected',
3174
+ statusMessage: 'Playwright set data channel connected',
3165
3175
  }));
3166
3176
  return EMPTY;
3167
3177
  }
@@ -3173,6 +3183,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
3173
3183
  }], ctorParameters: () => [] });
3174
3184
 
3175
3185
  class UnrealCommunicatorPlaywrightService extends UnrealCommunicatorService {
3186
+ init() {
3187
+ return;
3188
+ }
3176
3189
  sendCommandToUnreal() {
3177
3190
  return;
3178
3191
  }
@@ -3190,10 +3203,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
3190
3203
  }] });
3191
3204
 
3192
3205
  class AggregatorPlaywrightService extends AggregatorService {
3193
- listenWebRTC() {
3194
- return;
3195
- }
3196
- initialize() {
3206
+ init() {
3197
3207
  return;
3198
3208
  }
3199
3209
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: AggregatorPlaywrightService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -3207,9 +3217,6 @@ class FreezeFramePlaywrightService extends FreezeFrameService {
3207
3217
  init() {
3208
3218
  return;
3209
3219
  }
3210
- invalidate() {
3211
- return;
3212
- }
3213
3220
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: FreezeFramePlaywrightService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
3214
3221
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: FreezeFramePlaywrightService }); }
3215
3222
  }
@@ -3218,10 +3225,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
3218
3225
  }] });
3219
3226
 
3220
3227
  class CommandTelemetryPlaywrightService extends CommandTelemetryService {
3221
- start() {
3222
- return;
3223
- }
3224
- listenCallbacks() {
3228
+ init() {
3225
3229
  return;
3226
3230
  }
3227
3231
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: CommandTelemetryPlaywrightService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -3232,7 +3236,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
3232
3236
  }] });
3233
3237
 
3234
3238
  class StreamStatusTelemetryPlaywrightService extends StreamStatusTelemetryService {
3235
- initTelemetry() {
3239
+ init() {
3236
3240
  return;
3237
3241
  }
3238
3242
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: StreamStatusTelemetryPlaywrightService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -3242,6 +3246,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
3242
3246
  type: Injectable
3243
3247
  }] });
3244
3248
 
3249
+ class ConsoleExtensionsPlaywrightService extends ConsoleExtensionsService {
3250
+ init() {
3251
+ return;
3252
+ }
3253
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: ConsoleExtensionsPlaywrightService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
3254
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: ConsoleExtensionsPlaywrightService }); }
3255
+ }
3256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: ConsoleExtensionsPlaywrightService, decorators: [{
3257
+ type: Injectable
3258
+ }] });
3259
+
3260
+ class FileReceiverPlaywrightService extends FileReceiverService {
3261
+ init() {
3262
+ return;
3263
+ }
3264
+ }
3265
+
3245
3266
  /*
3246
3267
  * Copyright (c) 2025.
3247
3268
  * 3DSource.com. Sergii Karanda steve@3dsource.com. All Rights Reserved.
@@ -3286,17 +3307,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
3286
3307
  type: Injectable
3287
3308
  }] });
3288
3309
 
3289
- function provideAngularUnrealModule(config) {
3310
+ function providePlaywrightProviders(config) {
3290
3311
  return [
3291
- provideState(unrealFeature),
3292
- provideEffects([UnrealEffects]),
3293
- ConsoleExtensionsService,
3294
- InputService,
3295
- VideoService,
3296
- WebRtcPlayerService,
3297
- RegionsPingService,
3298
- FileReceiverService,
3299
- FileHandlerService,
3300
3312
  {
3301
3313
  provide: StreamStatusTelemetryService,
3302
3314
  useClass: config?.playwright
@@ -3337,9 +3349,43 @@ function provideAngularUnrealModule(config) {
3337
3349
  ? SignallingPlaywrightService
3338
3350
  : SignallingService,
3339
3351
  },
3352
+ {
3353
+ provide: ConsoleExtensionsService,
3354
+ useClass: config?.playwright
3355
+ ? ConsoleExtensionsPlaywrightService
3356
+ : ConsoleExtensionsService,
3357
+ },
3358
+ {
3359
+ provide: FileReceiverService,
3360
+ useClass: config?.playwright
3361
+ ? FileReceiverPlaywrightService
3362
+ : FileReceiverService,
3363
+ },
3340
3364
  ];
3341
3365
  }
3342
3366
 
3367
+ function provideAngularUnrealModule(config) {
3368
+ return makeEnvironmentProviders([
3369
+ provideState(unrealFeature),
3370
+ provideEffects([UnrealEffects]),
3371
+ ConsoleExtensionsService,
3372
+ InputService,
3373
+ VideoService,
3374
+ WebRtcPlayerService,
3375
+ RegionsPingService,
3376
+ FileReceiverService,
3377
+ FileHandlerService,
3378
+ providePlaywrightProviders(config),
3379
+ provideEnvironmentInitializer(() => {
3380
+ inject(AggregatorService);
3381
+ inject(StreamStatusTelemetryService);
3382
+ inject(ConsoleExtensionsService);
3383
+ inject(AFKService);
3384
+ inject(FreezeFrameService);
3385
+ }),
3386
+ ]);
3387
+ }
3388
+
3343
3389
  const initialState = {
3344
3390
  streamRequestContext: null,
3345
3391
  environmentId: null,
@@ -3441,15 +3487,16 @@ const unrealReducer = createReducer(initialState, on(changeLowBandwidth, (state,
3441
3487
  progress: freezeFrameFromVideo.progress || null,
3442
3488
  },
3443
3489
  };
3444
- }), on(setStatusMessage, setDataChannelConnected, (state, { message }) => {
3445
- return { ...state, statusMessage: message };
3490
+ }), on(setStatusMessage, (state, { statusMessage }) => {
3491
+ return { ...state, statusMessage };
3446
3492
  }), on(setEstablishingConnection, (state, { value }) => {
3447
3493
  return { ...state, establishingConnection: value };
3448
3494
  }), on(setStatusPercentSignallingServer, (state, { percent }) => {
3449
3495
  return { ...state, statusPercentSignallingServer: percent };
3450
- }), on(setDataChannelConnected, (state) => {
3496
+ }), on(setDataChannelConnected, (state, { statusMessage }) => {
3451
3497
  return {
3452
3498
  ...state,
3499
+ statusMessage,
3453
3500
  dataChannelConnected: true,
3454
3501
  establishingConnection: false,
3455
3502
  wasInitialized: true,
@@ -4804,19 +4851,15 @@ class UnrealSceneComponent {
4804
4851
  this.lightMode = this.store.selectSignal(unrealFeature.selectLowBandwidth);
4805
4852
  this.isFreezeFrameLoading = this.store.selectSignal(selectIsFreezeFrameLoading);
4806
4853
  this.isExistMatchUrls = this.store.selectSignal(selectIsExistMatchUrls);
4807
- this.aggregatorService = inject(AggregatorService);
4808
4854
  this.commandsSender = inject(UnrealCommunicatorService);
4809
4855
  this.inputService = inject(InputService);
4810
4856
  this.videoService = inject(VideoService);
4811
- this.streamTelemetryService = inject(StreamStatusTelemetryService);
4812
4857
  this.element = inject(ElementRef);
4813
4858
  this.destroyRef = inject(DestroyRef);
4814
4859
  this.destroyRef.onDestroy(() => {
4815
4860
  this.commandsSender.destroy();
4816
4861
  this.store.dispatch(destroyUnrealScene());
4817
4862
  });
4818
- this.streamTelemetryService.init();
4819
- this.aggregatorService.init();
4820
4863
  this.inputService.useKeyboardKeys(this.inputService.defaultKeys);
4821
4864
  if (this.isExistMatchUrls()) {
4822
4865
  this.store.dispatch(initSignalling());
@@ -5168,5 +5211,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImpo
5168
5211
  * Generated bundle index. Do not edit.
5169
5212
  */
5170
5213
 
5171
- export { AFKService, AfkPlaywrightService, AggregatorPlaywrightService, AggregatorService, AnswerHandler, CONSOLE_COMMAND_DISABLE_MESSAGES, CONSOLE_COMMAND_ENABLE_MESSAGES, CONSOLE_COMMAND_PIXEL_QUALITY, ClickableOverlayComponent, CommandTelemetryPlaywrightService, CommandTelemetryService, ConfigHandler, 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, 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, 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 };
5214
+ 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, 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 };
5172
5215
  //# sourceMappingURL=3dsource-angular-unreal-module.mjs.map