@3dsource/angular-unreal-module 0.0.174 → 0.0.177

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -377,12 +377,26 @@ The package publishes two dependency-free scripts for use in the document
377
377
  ></script>
378
378
  ```
379
379
 
380
- `stream-prefetch.js` runs by default only on
381
- `metabox-configurator/{modular|basic}/...` routes. It reads the same-origin
382
- `assets/config.json`; override that path with `data-config-url` when needed.
383
- It also forwards the orchestration-issued `streamRequestId` from the polling
384
- response to Cirrus on the WebSocket URL (the session `connectionId`) and parks it
385
- for the Angular side to adopt.
380
+ `stream-prefetch.js` runs only on `metabox-configurator/modular/{configuratorId}`
381
+ routes — the configurator id comes from the route and there is no attribute to
382
+ supply one, so the script cannot be enabled for an arbitrary page.
383
+
384
+ It reads the same-origin `assets/config.json` and `assets/features.json`, then
385
+ the configurator's cached record from `{cdn}/cache/configurator/{id}.json` — the
386
+ same document the host app reads — so it polls under the identity the app will
387
+ use rather than inventing one. The `newOrchestration` feature flag picks the
388
+ transport: `signalling` (HTTP polling) or `newSignalling` (control socket +
389
+ `requestStream`). The orchestration-issued `streamRequestId` is forwarded to
390
+ Cirrus on the WebSocket URL (the session `connectionId`) and parked for adoption.
391
+
392
+ `window.__stream` is both the parked stream and the lock: whichever of the script
393
+ and the Angular module writes it first owns the connection, so a page never
394
+ builds two. Load the script and the package from the same version — an older
395
+ script does not know about the lock.
396
+
397
+ Optional `data-*`: `data-config-url`, `data-features-url`, `data-ws-timeout`,
398
+ `data-poll-timeout`.
399
+
386
400
  Pin an exact package version in production when deterministic CDN assets are
387
401
  required.
388
402
 
@@ -0,0 +1,10 @@
1
+ import { InjectionToken } from '@angular/core';
2
+
3
+ const UNREAL_CONFIG = new InjectionToken('Unreal Initial Configuration');
4
+
5
+ /**
6
+ * Generated bundle index. Do not edit.
7
+ */
8
+
9
+ export { UNREAL_CONFIG };
10
+ //# sourceMappingURL=3dsource-angular-unreal-module-config.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"3dsource-angular-unreal-module-config.mjs","sources":["../../../../projects/3dsource/angular-unreal-module/config/lib/unreal-config.token.ts","../../../../projects/3dsource/angular-unreal-module/config/3dsource-angular-unreal-module-config.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { UnrealInitialConfig } from './initial-config';\n\nexport const UNREAL_CONFIG = new InjectionToken<UnrealInitialConfig>(\n 'Unreal Initial Configuration',\n);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAGa,aAAa,GAAG,IAAI,cAAc,CAC7C,8BAA8B;;ACJhC;;AAEG;;;;"}
@@ -1,10 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, output, ChangeDetectionStrategy, Component, InjectionToken, inject, DestroyRef, Injectable, signal, effect, untracked, computed, ElementRef, viewChild, afterNextRender, HostListener, TemplateRef, Directive, SecurityContext, Pipe, contentChild, makeEnvironmentProviders, provideEnvironmentInitializer } from '@angular/core';
2
+ import { input, output, ChangeDetectionStrategy, Component, inject, DestroyRef, Injectable, signal, effect, untracked, computed, ElementRef, viewChild, afterNextRender, HostListener, TemplateRef, Directive, SecurityContext, Pipe, contentChild, makeEnvironmentProviders, provideEnvironmentInitializer } from '@angular/core';
3
3
  import { NgTemplateOutlet, NgOptimizedImage, JsonPipe } from '@angular/common';
4
4
  import { createAction, props, createReducer, on, createFeature, createSelector, Store, provideState } from '@ngrx/store';
5
5
  import { Actions, ofType, createEffect, provideEffects } from '@ngrx/effects';
6
6
  import { Subject, skip, share, timer, of, take, defer, switchMap, from, throwError, Observable, EMPTY, retry, merge, timeout as timeout$1, repeat, BehaviorSubject, interval, map as map$1, takeUntil as takeUntil$1, fromEvent, tap as tap$1, throttleTime, delay, concat, debounceTime, mergeMap, NEVER, ignoreElements, startWith, scan, timestamp, pairwise, concatMap, animationFrameScheduler, shareReplay, firstValueFrom, asyncScheduler, filter as filter$1, withLatestFrom as withLatestFrom$1, Subscription, bufferTime, combineLatestWith } from 'rxjs';
7
7
  import { whereNot, lerp, clampf, Falsy, generateUuid, Truthy, Logger, tapLog, Semaphore, COLOR_CODES, getCanvasCached, getSnapshot, fitIntoRectangle, where, KeyboardNumericCode, InvertedKeyMap, HEXtoRGB, RGBtoHSV, inverseLerp, HSVtoRGB, RGBtoHEX, fpIsASameAsB } from '@3dsource/utils';
8
+ import { UNREAL_CONFIG } from '@3dsource/angular-unreal-module/config';
9
+ export { UNREAL_CONFIG } from '@3dsource/angular-unreal-module/config';
8
10
  import { filter, takeUntil, catchError, tap, map, timeout, finalize, first, switchMap as switchMap$1, distinctUntilChanged, withLatestFrom, exhaustMap, takeWhile, debounceTime as debounceTime$1, take as take$1, startWith as startWith$1 } from 'rxjs/operators';
9
11
  import { DialogRef, DIALOG_DATA, Dialog } from '@angular/cdk/dialog';
10
12
  import { HttpClient } from '@angular/common/http';
@@ -252,6 +254,11 @@ const DisconnectReason = {
252
254
  AbortEstablishingConnection: 'AbortEstablishingConnection',
253
255
  };
254
256
 
257
+ /** True when the slot is the app's own marker rather than a prefetched stream. */
258
+ function isAppOwned(slot) {
259
+ return slot.owner === 'app';
260
+ }
261
+
255
262
  /*
256
263
  export interface RequestReservation extends InstanceMessageBase {
257
264
  type: 'requestReservation';
@@ -365,7 +372,19 @@ const ToClientMessage = {
365
372
  Protocol: 255,
366
373
  };
367
374
 
368
- const UNREAL_CONFIG = new InjectionToken('Unreal Initial Configuration');
375
+ /**
376
+ * Re-export only. `UNREAL_CONFIG` lives in the `config` secondary entry point so
377
+ * that an app can provide it without pulling the engine in.
378
+ *
379
+ * The package is one FESM: esbuild puts a module in the common-ancestor chunk of
380
+ * its importers, so importing the token from the primary entry point in an eager
381
+ * `app.config.ts` hoists the whole engine into `main` — measured at ~180 kB raw
382
+ * (~49 kB gzip) in a metabox production build. Importing
383
+ * `@3dsource/angular-unreal-module/config` instead costs nothing but the token.
384
+ *
385
+ * Kept here so every existing consumer of the primary entry point, and the 26
386
+ * files inside this library, keep working unchanged.
387
+ */
369
388
 
370
389
  const InputOptions = {
371
390
  controlScheme: ControlScheme.Default,
@@ -701,7 +720,7 @@ const unrealReducer = createReducer(initialState, on(changeStatusMainVideoOnScen
701
720
  return { ...state, analyticsEvent: event };
702
721
  }), on(setCirrusConnected, (state) => {
703
722
  return { ...state, cirrusConnected: true };
704
- }), on(streamAdopted, (state, { machineId, pollingUrl, ssData, streamRequestId }) => {
723
+ }), on(streamAdopted, (state, { machineId, pollingUrl, ssData, streamRequestId, kind, instanceName, eta, }) => {
705
724
  return {
706
725
  ...state,
707
726
  cirrusConnected: true,
@@ -714,7 +733,11 @@ const unrealReducer = createReducer(initialState, on(changeStatusMainVideoOnScen
714
733
  // adopted stream came from — `connectToSignaling` never ran, so no
715
734
  // `setAwsInstance` will fill this in later.
716
735
  pollingUrl: pollingUrl ?? state.awsInstance.pollingUrl,
717
- instanceName: 'Adopted Connection',
736
+ // The machine's real id when the prefetch reported one; the
737
+ // placeholder only for scripts that predate the field.
738
+ instanceName: instanceName ?? 'Adopted Connection',
739
+ kind: kind ?? state.awsInstance.kind,
740
+ eta: eta ?? state.awsInstance.eta,
718
741
  streamRequestId: streamRequestId ?? state.awsInstance.streamRequestId,
719
742
  progressComplete: 0,
720
743
  },
@@ -2148,12 +2171,18 @@ class SignallingService extends SubService {
2148
2171
  * {@link OnOpenHandler} (which would re-`setCirrusConnected`). Reuses the
2149
2172
  * head-script's `correlationId` so correlated messages line up.
2150
2173
  */
2151
- adoptSocket(ws, correlationId) {
2174
+ adoptSocket(ws, correlationId, controlWs) {
2152
2175
  this.correlationId = correlationId;
2153
2176
  ws.onmessage = OnMessageHandler.bind(this);
2154
2177
  ws.onclose = OnCloseHandler.bind(this);
2155
2178
  ws.onerror = OnErrorHandler.bind(this);
2156
2179
  this.ws = ws;
2180
+ // On the new-orchestration flow the prefetch also holds the control socket,
2181
+ // already handed over (open, handlers stripped). Take the reference so
2182
+ // `teardownControlWs` can close it — nothing else on this side can reach it.
2183
+ if (controlWs) {
2184
+ this.handedOverControlWs = controlWs;
2185
+ }
2157
2186
  Logger.log('WS ADOPTED (handshake already done, requestStream already sent)');
2158
2187
  }
2159
2188
  showStatusMessage(statusMessage) {
@@ -3446,54 +3475,44 @@ class StreamAdoptionService {
3446
3475
  this.webRtc = inject(WebRtcPlayerService);
3447
3476
  }
3448
3477
  /**
3449
- * Decide adoption, WAITING for an in-flight prefetch instead of racing it.
3450
- *
3451
- * - nothing parked → emit `false` at once (caller connects normally).
3452
- * - already settled (`ready`/`failed`/`adopted`) → adopt-if-ready at once.
3453
- * - still `connecting` → wait for the script's `onSettled` callback and
3454
- * adopt-if-ready the instant it fires (event-driven, zero polling latency).
3478
+ * Decide adoption, WAITING for an in-flight prefetch instead of racing it:
3479
+ * nothing parked → `false`; settled → adopt-if-ready; still `connecting` →
3480
+ * wait for `onSettled`. Emits exactly once.
3455
3481
  *
3456
- * Deliberately NO time budget: for DIRECT orchestration the prefetch holds
3457
- * the socket open while the orchestrator provisions a machine, which can take
3458
- * minutes (150–200s+). A fixed deadline would make Angular give up and open a
3459
- * second connection mid-provisioning — exactly the race/orphan this avoids.
3460
- * The wait is bounded by liveness instead: the script flips the parked state
3461
- * to `failed` on a dead socket (`ws.onclose`/`onerror`), and the caller wraps
3462
- * this in `takeUntil(abortEstablishingConnection)`, so a route change / teardown
3463
- * cancels it. Emits exactly once. Cancelling runs no adoption — which is what
3464
- * stops a fast route-switch from starting overlapping connections.
3482
+ * NO time budget: provisioning can take minutes, and a deadline would open a
3483
+ * second connection mid-flight. Bounded by liveness instead — the script
3484
+ * flips to `failed` on a dead socket — and by the caller's
3485
+ * `takeUntil(abortEstablishingConnection)`.
3465
3486
  *
3466
- * Wrapped in `defer` so the `tryAdopt()` side effect (which dispatches
3467
- * `streamAdopted`) runs at SUBSCRIPTION time, not when the observable is
3468
- * built. The effect prepends `startWith(setEstablishingConnection(true))` —
3469
- * the single dispatch site for that boundary — which starts the telemetry
3470
- * session and subscribes its phase catalog; that must happen BEFORE
3471
- * `streamAdopted`, or `emitAdoptedConnection` fires into a session that does
3472
- * not exist yet and the whole connection waterfall is lost. `defer`
3473
- * guarantees that ordering.
3487
+ * `defer` so the `streamAdopted` dispatch happens at SUBSCRIPTION time: the
3488
+ * effect's `startWith(setEstablishingConnection(true))` must land first, or
3489
+ * the telemetry session does not exist yet and the waterfall is lost.
3474
3490
  */
3475
3491
  awaitAndAdopt$() {
3476
3492
  return defer(() => {
3477
- const parked = window.__stream;
3478
- if (!parked) {
3493
+ const slot = window.__stream;
3494
+ if (!slot) {
3495
+ // The slot is free, so we connect — and take it in the same synchronous
3496
+ // breath, before any `await`. A head-script that evaluates later finds it
3497
+ // occupied and stands down instead of building a second connection.
3498
+ this.takeSlot();
3479
3499
  return of(false);
3480
3500
  }
3481
- if (parked.state !== 'connecting') {
3482
- return of(this.tryAdopt());
3501
+ if (isAppOwned(slot)) {
3502
+ // Our own marker from an earlier pass — nothing to adopt.
3503
+ return of(false);
3504
+ }
3505
+ if (slot.state !== 'connecting') {
3506
+ return of(this.tryAdoptOrTakeSlot());
3483
3507
  }
3484
3508
  Logger.info('[Adoption] Prefetch in progress — waiting before connecting');
3485
- return this.awaitSettled$(parked);
3509
+ return this.awaitSettled$(slot);
3486
3510
  });
3487
3511
  }
3488
3512
  /**
3489
- * Event-driven wait: the script fires `onSettled` the instant it parks
3490
- * `ready`/`failed`, so we adopt with zero polling lag. Emits exactly once.
3491
- *
3492
- * No timer/budget by design: an indefinitely `connecting` stream is valid
3493
- * (DIRECT orchestration holds the socket open for minutes while it
3494
- * provisions), and every terminal state — including a dead socket — flips to
3495
- * `ready`/`failed` and fires the hook. Teardown (route change → unsubscribe)
3496
- * sets `done`, so a late callback after cancel can't trigger a stray adoption.
3513
+ * Event-driven wait on the script's `onSettled`; emits exactly once. No timer
3514
+ * — see `awaitAndAdopt$`. Teardown sets `done`, so a late callback after
3515
+ * cancel can't trigger a stray adoption.
3497
3516
  */
3498
3517
  awaitSettled$(parked) {
3499
3518
  return new Observable((subscriber) => {
@@ -3502,7 +3521,18 @@ class StreamAdoptionService {
3502
3521
  if (done)
3503
3522
  return;
3504
3523
  done = true;
3505
- subscriber.next(this.tryAdopt());
3524
+ let adopted = false;
3525
+ try {
3526
+ adopted = this.tryAdoptOrTakeSlot();
3527
+ }
3528
+ catch (e) {
3529
+ // The script swallows a throwing callback, so an error escaping here
3530
+ // would emit nothing at all — leaving `exhaustMap` stuck forever with
3531
+ // `streamAdopted` already dispatched. Fall back to connecting.
3532
+ Logger.error('[Adoption] Adoption threw — falling back', e);
3533
+ this.takeSlot();
3534
+ }
3535
+ subscriber.next(adopted);
3506
3536
  subscriber.complete();
3507
3537
  });
3508
3538
  return () => {
@@ -3510,13 +3540,57 @@ class StreamAdoptionService {
3510
3540
  };
3511
3541
  });
3512
3542
  }
3543
+ /** Every `false` here means we are about to connect ourselves — take the slot. */
3544
+ tryAdoptOrTakeSlot() {
3545
+ const adopted = this.tryAdopt();
3546
+ if (!adopted) {
3547
+ this.takeSlot();
3548
+ }
3549
+ return adopted;
3550
+ }
3551
+ /** Mark the slot as the app's, replacing a spent prefetch object. */
3552
+ takeSlot() {
3553
+ // A `ready` stream whose socket died is never torn down by the script
3554
+ // (`onclose` skips `fail` once ready), so dropping the reference here would
3555
+ // orphan a live PeerConnection — a second connection for one page.
3556
+ const evicted = window.__stream;
3557
+ window.__stream = { owner: 'app' };
3558
+ if (evicted && !isAppOwned(evicted)) {
3559
+ this.closeParked(evicted);
3560
+ }
3561
+ }
3562
+ /** Best-effort teardown of a parked stream we are about to abandon. */
3563
+ closeParked(parked) {
3564
+ if (parked.state === 'adopted') {
3565
+ // Already handed to the module — that connection is live and its teardown
3566
+ // belongs to the session, not to whoever is taking the slot.
3567
+ return;
3568
+ }
3569
+ for (const closeable of [
3570
+ parked.dc,
3571
+ parked.pc,
3572
+ parked.ws,
3573
+ parked.controlWs,
3574
+ ]) {
3575
+ try {
3576
+ closeable?.close();
3577
+ }
3578
+ catch {
3579
+ /* already closed / not closeable — nothing to salvage */
3580
+ }
3581
+ }
3582
+ }
3513
3583
  /**
3514
3584
  * @returns `true` if a ready parked stream was adopted (caller must NOT
3515
3585
  * start a fresh connection), `false` otherwise.
3516
3586
  */
3517
3587
  tryAdopt() {
3518
- const parked = window.__stream;
3519
- if (!parked || parked.state !== 'ready') {
3588
+ const slot = window.__stream;
3589
+ if (!slot || isAppOwned(slot)) {
3590
+ return false;
3591
+ }
3592
+ const parked = slot;
3593
+ if (parked.state !== 'ready') {
3520
3594
  return false;
3521
3595
  }
3522
3596
  // A ready stream whose transport died before adoption is useless — fall back.
@@ -3531,22 +3605,21 @@ class StreamAdoptionService {
3531
3605
  Logger.info('[Adoption] Adopting prefetched stream', parked.timings);
3532
3606
  // Clear the script's timers and mark the handoff complete.
3533
3607
  parked.adopt();
3534
- // Flag cirrus connected (so a later `initSignalling` won't open a 2nd
3535
- // connection), record the adopted machine, and hydrate the streamer info
3536
- // (`ssData`) the prefetch captured from the `ssInfo` message. NOTE:
3537
- // clientId/viewId are left untouched — the host app (metabox) already set
3538
- // them authoritatively from its own data before `initSignalling`; the
3539
- // script's ids are only used internally to establish the connection.
3608
+ // Flags cirrus connected, records the machine and hydrates `ssData`.
3609
+ // clientId/viewId are left alone — the host app already set them.
3540
3610
  this.store.dispatch(streamAdopted({
3541
3611
  machineId: parked.machineId ?? null,
3542
3612
  pollingUrl: parked.pollingUrl ?? null,
3543
3613
  ssData: parked.ssData ?? null,
3544
3614
  streamRequestId: parked.ids?.streamRequestId || null,
3615
+ kind: parked.kind ?? null,
3616
+ instanceName: parked.instanceName ?? null,
3617
+ eta: parked.eta ?? null,
3545
3618
  timings: parked.timings ?? null,
3546
3619
  }));
3547
3620
  // Hand the live socket over without re-sending `requestStream`, reusing the
3548
3621
  // script's correlationId (the one `requestStream` was already sent with).
3549
- this.signalling.adoptSocket(parked.ws, parked.ids.correlationId);
3622
+ this.signalling.adoptSocket(parked.ws, parked.ids.correlationId, parked.controlWs);
3550
3623
  // Take ownership of pc/dc/media + replay buffered DC traffic. This drives
3551
3624
  // `dataChannelConnected`, which the `unrealReceiverReady$` effect turns into
3552
3625
  // `dataChannelReady` → app init (console commands, loopback, viewport).
@@ -8427,5 +8500,5 @@ function provideUnrealModule() {
8427
8500
  * Generated bundle index. Do not edit.
8428
8501
  */
8429
8502
 
8430
- export { AFKService, AUTO_HIGH_RESOLUTION_IDLE_MS, AfkTimeoutModalComponent, AggregatorService, AnalyticsService, AnswerHandler, CommandTelemetryService, ConfigHandler, ConsoleExtensionsService, ControlScheme, DATA_CHANNEL_CONNECTION_TIMEOUT, DEBOUNCE_TO_MANY_RESIZE_CALLS, DEFAULT_AFK_TIMEOUT, DEFAULT_AFK_TIMEOUT_PERIOD, DESTROY_DISCONNECT_REASONS, DevModeService, DisconnectReason, FULL_HD_HEIGHT, FULL_HD_WIDTH, FileHandlerService, FileReceiverService, FpsMonitorService, FreezeFrameComponent, FreezeFrameService, INNER_RETRY_LIMIT, INSTANCE_READY_TIMEOUT, IceCandidateHandler, ImageLoadingSrcComponent, InputOptions, InputService, InstanceReadyHandler, InstanceReservedHandler, IntroSrcComponent, LatencyTimings, LoadingProgressService, MINIMAL_FPS, MIN_CONTAINER_SIZE, MessageType, MouseButton, MouseButtonsMask, OUTER_RETRY_DELAY, OnCloseHandler, OnErrorHandler, OnMessageHandler, OnOpenHandler, OrchestrationMessageTypes, POLLING_TIME, PlayerCountHandler, RECONNECT_CONFIG, REGION_PING_ACCURATE_SAMPLES, REGION_PING_BACKGROUND_REFRESH_DELAY_MS, REGION_PING_CACHE_KEY, REGION_PING_CACHE_TTL_MS, REGION_PING_WARMUP_DEADLINE_MS, RegionsPingService, SAME_SIZE_THRESHOLD, SCREEN_LOCKER_CONTAINER_ID, SIGNALLING_PERCENT_VALUE, SSInfoHandler, STREAMING_AUDIO_ID, STREAMING_VIDEO_ID, SafePipe, SignallingService, SpecialKeyCodes, StatGraphComponent, StreamAdoptionService, StreamStatusTelemetryService, StreamStatusTelemetryService2, SubService, ToClientMessage, UNREAL_CONFIG, UnrealAfkSlotDirective, UnrealCallbackService, UnrealCommunicatorService, UnrealEffects, UnrealResumeSlotDirective, UnrealSceneComponent, UnrealStatusMessage, UnrealStatusSlotDirective, 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_RETRY_PER_INSTANCE, WS_TIMEOUT, WebRtcPlayerService, WebrtcErrorModalComponent, abortEstablishingConnection, answerSent, changeStatusMainVideoOnScene, changeStreamResolutionAction, commandCompleted, commandStarted, dataChannelConnected, dataChannelReady, decodeData, destroyRemoteConnections, destroyUnrealScene, disconnectStream, dispatchResize, dropConnection, dropDC, dropPC, floatToPercents, floatToSmoothPercents, forceResizeViewport, fromResizeObserver, getActiveUrl, getImageFromVideoStream, getResizeStudioValues, getResizeValuesUniversal, getRtcErrorMessage, iceConnectionFailed, initSignalling, instanceReady, isMetaboxMode, keepMaxUntilReset, makeEven, pollingEnded, pollingStarted, provideUnrealModule, provideUnrealState, qpToQuality, reconnectPeer, reconnectPeerFailed, reconnectPeerSuccess, regionPingFetchEnd, regionPingFetchStart, regionResolved, resetAfk, resetConfig, resetDataChannelForReconnect, resetIntroSrc, resetUserInactivityTimeout, resetWarnTimeout, resolveSkin, saveAnalyticsEvent, selectCirrusConnectionId, selectClientAndViewIds, selectCommandProgress, selectFreezeFrameCombinedDataUrl, selectFreezeFrameDataUrl, selectFreezeFrameDataUrlFromVideo, selectFreezeFrameProgressMessageFromVideo, selectIsAutostart, selectIsExistMatchUrls, selectIsFreezeFrameLoading, selectIsFullyConnected, selectIsLoaderScreenVisible, selectIsVideoPlayingAndDataChannelConnected, selectShowLoader, selectShowReconnectPopup, selectSignalingParameters, selectStreamConfig, selectTotalProgress, selectUserInactivityDetected, selectWarnTimeout, setAfkTimerCountdown, setAfkTimerHide, setAfkTimerVisible, setAwsInstance, setCirrusConnected, setCirrusDisconnected, setConfig, setEstablishingConnection, setFreezeFrame, setFreezeFrameFromVideo, setIntroImageSrc, setIntroVideoSrc, setLoadingImageSrc, setLoopBackCommandIsCompleted, setMaxFps, setOrchestrationContext, setOrchestrationMessage, setOrchestrationParameters, setOrchestrationProgress, setSignalingName, setStatusMessage, setStatusPercentSignallingServer, setStreamClientCompanyId, setStreamViewId, setUnrealPlaywrightConfig, setUserInactivityTimeout, setViewportNotReady, setViewportReady, showLoadingProgress, showResumeStreamPopup, showUnrealErrorMessage, showUserInactivityTimeoutPopup, signalingRetryAttempted, startStream, streamAdopted, trackMixpanelEvent, trackTelemetryData, uint8ToBase64, unrealCommandCallback, unrealFeature, unrealReducer, updateCirrusInfo, videoAdaptedToContainer, videoStreamInitialized };
8503
+ export { AFKService, AUTO_HIGH_RESOLUTION_IDLE_MS, AfkTimeoutModalComponent, AggregatorService, AnalyticsService, AnswerHandler, CommandTelemetryService, ConfigHandler, ConsoleExtensionsService, ControlScheme, DATA_CHANNEL_CONNECTION_TIMEOUT, DEBOUNCE_TO_MANY_RESIZE_CALLS, DEFAULT_AFK_TIMEOUT, DEFAULT_AFK_TIMEOUT_PERIOD, DESTROY_DISCONNECT_REASONS, DevModeService, DisconnectReason, FULL_HD_HEIGHT, FULL_HD_WIDTH, FileHandlerService, FileReceiverService, FpsMonitorService, FreezeFrameComponent, FreezeFrameService, INNER_RETRY_LIMIT, INSTANCE_READY_TIMEOUT, IceCandidateHandler, ImageLoadingSrcComponent, InputOptions, InputService, InstanceReadyHandler, InstanceReservedHandler, IntroSrcComponent, LatencyTimings, LoadingProgressService, MINIMAL_FPS, MIN_CONTAINER_SIZE, MessageType, MouseButton, MouseButtonsMask, OUTER_RETRY_DELAY, OnCloseHandler, OnErrorHandler, OnMessageHandler, OnOpenHandler, OrchestrationMessageTypes, POLLING_TIME, PlayerCountHandler, RECONNECT_CONFIG, REGION_PING_ACCURATE_SAMPLES, REGION_PING_BACKGROUND_REFRESH_DELAY_MS, REGION_PING_CACHE_KEY, REGION_PING_CACHE_TTL_MS, REGION_PING_WARMUP_DEADLINE_MS, RegionsPingService, SAME_SIZE_THRESHOLD, SCREEN_LOCKER_CONTAINER_ID, SIGNALLING_PERCENT_VALUE, SSInfoHandler, STREAMING_AUDIO_ID, STREAMING_VIDEO_ID, SafePipe, SignallingService, SpecialKeyCodes, StatGraphComponent, StreamAdoptionService, StreamStatusTelemetryService, StreamStatusTelemetryService2, SubService, ToClientMessage, UnrealAfkSlotDirective, UnrealCallbackService, UnrealCommunicatorService, UnrealEffects, UnrealResumeSlotDirective, UnrealSceneComponent, UnrealStatusMessage, UnrealStatusSlotDirective, 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_RETRY_PER_INSTANCE, WS_TIMEOUT, WebRtcPlayerService, WebrtcErrorModalComponent, abortEstablishingConnection, answerSent, changeStatusMainVideoOnScene, changeStreamResolutionAction, commandCompleted, commandStarted, dataChannelConnected, dataChannelReady, decodeData, destroyRemoteConnections, destroyUnrealScene, disconnectStream, dispatchResize, dropConnection, dropDC, dropPC, floatToPercents, floatToSmoothPercents, forceResizeViewport, fromResizeObserver, getActiveUrl, getImageFromVideoStream, getResizeStudioValues, getResizeValuesUniversal, getRtcErrorMessage, iceConnectionFailed, initSignalling, instanceReady, isAppOwned, isMetaboxMode, keepMaxUntilReset, makeEven, pollingEnded, pollingStarted, provideUnrealModule, provideUnrealState, qpToQuality, reconnectPeer, reconnectPeerFailed, reconnectPeerSuccess, regionPingFetchEnd, regionPingFetchStart, regionResolved, resetAfk, resetConfig, resetDataChannelForReconnect, resetIntroSrc, resetUserInactivityTimeout, resetWarnTimeout, resolveSkin, saveAnalyticsEvent, selectCirrusConnectionId, selectClientAndViewIds, selectCommandProgress, selectFreezeFrameCombinedDataUrl, selectFreezeFrameDataUrl, selectFreezeFrameDataUrlFromVideo, selectFreezeFrameProgressMessageFromVideo, selectIsAutostart, selectIsExistMatchUrls, selectIsFreezeFrameLoading, selectIsFullyConnected, selectIsLoaderScreenVisible, selectIsVideoPlayingAndDataChannelConnected, selectShowLoader, selectShowReconnectPopup, selectSignalingParameters, selectStreamConfig, selectTotalProgress, selectUserInactivityDetected, selectWarnTimeout, setAfkTimerCountdown, setAfkTimerHide, setAfkTimerVisible, setAwsInstance, setCirrusConnected, setCirrusDisconnected, setConfig, setEstablishingConnection, setFreezeFrame, setFreezeFrameFromVideo, setIntroImageSrc, setIntroVideoSrc, setLoadingImageSrc, setLoopBackCommandIsCompleted, setMaxFps, setOrchestrationContext, setOrchestrationMessage, setOrchestrationParameters, setOrchestrationProgress, setSignalingName, setStatusMessage, setStatusPercentSignallingServer, setStreamClientCompanyId, setStreamViewId, setUnrealPlaywrightConfig, setUserInactivityTimeout, setViewportNotReady, setViewportReady, showLoadingProgress, showResumeStreamPopup, showUnrealErrorMessage, showUserInactivityTimeoutPopup, signalingRetryAttempted, startStream, streamAdopted, trackMixpanelEvent, trackTelemetryData, uint8ToBase64, unrealCommandCallback, unrealFeature, unrealReducer, updateCirrusInfo, videoAdaptedToContainer, videoStreamInitialized };
8431
8504
  //# sourceMappingURL=3dsource-angular-unreal-module.mjs.map