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

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
 
@@ -252,6 +252,11 @@ const DisconnectReason = {
252
252
  AbortEstablishingConnection: 'AbortEstablishingConnection',
253
253
  };
254
254
 
255
+ /** True when the slot is the app's own marker rather than a prefetched stream. */
256
+ function isAppOwned(slot) {
257
+ return slot.owner === 'app';
258
+ }
259
+
255
260
  /*
256
261
  export interface RequestReservation extends InstanceMessageBase {
257
262
  type: 'requestReservation';
@@ -701,7 +706,7 @@ const unrealReducer = createReducer(initialState, on(changeStatusMainVideoOnScen
701
706
  return { ...state, analyticsEvent: event };
702
707
  }), on(setCirrusConnected, (state) => {
703
708
  return { ...state, cirrusConnected: true };
704
- }), on(streamAdopted, (state, { machineId, pollingUrl, ssData, streamRequestId }) => {
709
+ }), on(streamAdopted, (state, { machineId, pollingUrl, ssData, streamRequestId, kind, instanceName, eta, }) => {
705
710
  return {
706
711
  ...state,
707
712
  cirrusConnected: true,
@@ -714,7 +719,11 @@ const unrealReducer = createReducer(initialState, on(changeStatusMainVideoOnScen
714
719
  // adopted stream came from — `connectToSignaling` never ran, so no
715
720
  // `setAwsInstance` will fill this in later.
716
721
  pollingUrl: pollingUrl ?? state.awsInstance.pollingUrl,
717
- instanceName: 'Adopted Connection',
722
+ // The machine's real id when the prefetch reported one; the
723
+ // placeholder only for scripts that predate the field.
724
+ instanceName: instanceName ?? 'Adopted Connection',
725
+ kind: kind ?? state.awsInstance.kind,
726
+ eta: eta ?? state.awsInstance.eta,
718
727
  streamRequestId: streamRequestId ?? state.awsInstance.streamRequestId,
719
728
  progressComplete: 0,
720
729
  },
@@ -2148,12 +2157,18 @@ class SignallingService extends SubService {
2148
2157
  * {@link OnOpenHandler} (which would re-`setCirrusConnected`). Reuses the
2149
2158
  * head-script's `correlationId` so correlated messages line up.
2150
2159
  */
2151
- adoptSocket(ws, correlationId) {
2160
+ adoptSocket(ws, correlationId, controlWs) {
2152
2161
  this.correlationId = correlationId;
2153
2162
  ws.onmessage = OnMessageHandler.bind(this);
2154
2163
  ws.onclose = OnCloseHandler.bind(this);
2155
2164
  ws.onerror = OnErrorHandler.bind(this);
2156
2165
  this.ws = ws;
2166
+ // On the new-orchestration flow the prefetch also holds the control socket,
2167
+ // already handed over (open, handlers stripped). Take the reference so
2168
+ // `teardownControlWs` can close it — nothing else on this side can reach it.
2169
+ if (controlWs) {
2170
+ this.handedOverControlWs = controlWs;
2171
+ }
2157
2172
  Logger.log('WS ADOPTED (handshake already done, requestStream already sent)');
2158
2173
  }
2159
2174
  showStatusMessage(statusMessage) {
@@ -3446,54 +3461,44 @@ class StreamAdoptionService {
3446
3461
  this.webRtc = inject(WebRtcPlayerService);
3447
3462
  }
3448
3463
  /**
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).
3464
+ * Decide adoption, WAITING for an in-flight prefetch instead of racing it:
3465
+ * nothing parked → `false`; settled → adopt-if-ready; still `connecting` →
3466
+ * wait for `onSettled`. Emits exactly once.
3455
3467
  *
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.
3468
+ * NO time budget: provisioning can take minutes, and a deadline would open a
3469
+ * second connection mid-flight. Bounded by liveness instead — the script
3470
+ * flips to `failed` on a dead socket — and by the caller's
3471
+ * `takeUntil(abortEstablishingConnection)`.
3465
3472
  *
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.
3473
+ * `defer` so the `streamAdopted` dispatch happens at SUBSCRIPTION time: the
3474
+ * effect's `startWith(setEstablishingConnection(true))` must land first, or
3475
+ * the telemetry session does not exist yet and the waterfall is lost.
3474
3476
  */
3475
3477
  awaitAndAdopt$() {
3476
3478
  return defer(() => {
3477
- const parked = window.__stream;
3478
- if (!parked) {
3479
+ const slot = window.__stream;
3480
+ if (!slot) {
3481
+ // The slot is free, so we connect — and take it in the same synchronous
3482
+ // breath, before any `await`. A head-script that evaluates later finds it
3483
+ // occupied and stands down instead of building a second connection.
3484
+ this.takeSlot();
3479
3485
  return of(false);
3480
3486
  }
3481
- if (parked.state !== 'connecting') {
3482
- return of(this.tryAdopt());
3487
+ if (isAppOwned(slot)) {
3488
+ // Our own marker from an earlier pass — nothing to adopt.
3489
+ return of(false);
3490
+ }
3491
+ if (slot.state !== 'connecting') {
3492
+ return of(this.tryAdoptOrTakeSlot());
3483
3493
  }
3484
3494
  Logger.info('[Adoption] Prefetch in progress — waiting before connecting');
3485
- return this.awaitSettled$(parked);
3495
+ return this.awaitSettled$(slot);
3486
3496
  });
3487
3497
  }
3488
3498
  /**
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.
3499
+ * Event-driven wait on the script's `onSettled`; emits exactly once. No timer
3500
+ * — see `awaitAndAdopt$`. Teardown sets `done`, so a late callback after
3501
+ * cancel can't trigger a stray adoption.
3497
3502
  */
3498
3503
  awaitSettled$(parked) {
3499
3504
  return new Observable((subscriber) => {
@@ -3502,7 +3507,18 @@ class StreamAdoptionService {
3502
3507
  if (done)
3503
3508
  return;
3504
3509
  done = true;
3505
- subscriber.next(this.tryAdopt());
3510
+ let adopted = false;
3511
+ try {
3512
+ adopted = this.tryAdoptOrTakeSlot();
3513
+ }
3514
+ catch (e) {
3515
+ // The script swallows a throwing callback, so an error escaping here
3516
+ // would emit nothing at all — leaving `exhaustMap` stuck forever with
3517
+ // `streamAdopted` already dispatched. Fall back to connecting.
3518
+ Logger.error('[Adoption] Adoption threw — falling back', e);
3519
+ this.takeSlot();
3520
+ }
3521
+ subscriber.next(adopted);
3506
3522
  subscriber.complete();
3507
3523
  });
3508
3524
  return () => {
@@ -3510,13 +3526,57 @@ class StreamAdoptionService {
3510
3526
  };
3511
3527
  });
3512
3528
  }
3529
+ /** Every `false` here means we are about to connect ourselves — take the slot. */
3530
+ tryAdoptOrTakeSlot() {
3531
+ const adopted = this.tryAdopt();
3532
+ if (!adopted) {
3533
+ this.takeSlot();
3534
+ }
3535
+ return adopted;
3536
+ }
3537
+ /** Mark the slot as the app's, replacing a spent prefetch object. */
3538
+ takeSlot() {
3539
+ // A `ready` stream whose socket died is never torn down by the script
3540
+ // (`onclose` skips `fail` once ready), so dropping the reference here would
3541
+ // orphan a live PeerConnection — a second connection for one page.
3542
+ const evicted = window.__stream;
3543
+ window.__stream = { owner: 'app' };
3544
+ if (evicted && !isAppOwned(evicted)) {
3545
+ this.closeParked(evicted);
3546
+ }
3547
+ }
3548
+ /** Best-effort teardown of a parked stream we are about to abandon. */
3549
+ closeParked(parked) {
3550
+ if (parked.state === 'adopted') {
3551
+ // Already handed to the module — that connection is live and its teardown
3552
+ // belongs to the session, not to whoever is taking the slot.
3553
+ return;
3554
+ }
3555
+ for (const closeable of [
3556
+ parked.dc,
3557
+ parked.pc,
3558
+ parked.ws,
3559
+ parked.controlWs,
3560
+ ]) {
3561
+ try {
3562
+ closeable?.close();
3563
+ }
3564
+ catch {
3565
+ /* already closed / not closeable — nothing to salvage */
3566
+ }
3567
+ }
3568
+ }
3513
3569
  /**
3514
3570
  * @returns `true` if a ready parked stream was adopted (caller must NOT
3515
3571
  * start a fresh connection), `false` otherwise.
3516
3572
  */
3517
3573
  tryAdopt() {
3518
- const parked = window.__stream;
3519
- if (!parked || parked.state !== 'ready') {
3574
+ const slot = window.__stream;
3575
+ if (!slot || isAppOwned(slot)) {
3576
+ return false;
3577
+ }
3578
+ const parked = slot;
3579
+ if (parked.state !== 'ready') {
3520
3580
  return false;
3521
3581
  }
3522
3582
  // A ready stream whose transport died before adoption is useless — fall back.
@@ -3531,22 +3591,21 @@ class StreamAdoptionService {
3531
3591
  Logger.info('[Adoption] Adopting prefetched stream', parked.timings);
3532
3592
  // Clear the script's timers and mark the handoff complete.
3533
3593
  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.
3594
+ // Flags cirrus connected, records the machine and hydrates `ssData`.
3595
+ // clientId/viewId are left alone — the host app already set them.
3540
3596
  this.store.dispatch(streamAdopted({
3541
3597
  machineId: parked.machineId ?? null,
3542
3598
  pollingUrl: parked.pollingUrl ?? null,
3543
3599
  ssData: parked.ssData ?? null,
3544
3600
  streamRequestId: parked.ids?.streamRequestId || null,
3601
+ kind: parked.kind ?? null,
3602
+ instanceName: parked.instanceName ?? null,
3603
+ eta: parked.eta ?? null,
3545
3604
  timings: parked.timings ?? null,
3546
3605
  }));
3547
3606
  // Hand the live socket over without re-sending `requestStream`, reusing the
3548
3607
  // script's correlationId (the one `requestStream` was already sent with).
3549
- this.signalling.adoptSocket(parked.ws, parked.ids.correlationId);
3608
+ this.signalling.adoptSocket(parked.ws, parked.ids.correlationId, parked.controlWs);
3550
3609
  // Take ownership of pc/dc/media + replay buffered DC traffic. This drives
3551
3610
  // `dataChannelConnected`, which the `unrealReceiverReady$` effect turns into
3552
3611
  // `dataChannelReady` → app init (console commands, loopback, viewport).
@@ -8427,5 +8486,5 @@ function provideUnrealModule() {
8427
8486
  * Generated bundle index. Do not edit.
8428
8487
  */
8429
8488
 
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 };
8489
+ 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, 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
8490
  //# sourceMappingURL=3dsource-angular-unreal-module.mjs.map