@3dsource/angular-unreal-module 0.0.156 → 0.0.158

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,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { ElementRef, Signal, InjectionToken, DestroyRef, OnInit, PipeTransform } from '@angular/core';
2
+ import { ElementRef, Signal, InjectionToken, DestroyRef, PipeTransform } from '@angular/core';
3
+ import * as _ngrx_store from '@ngrx/store';
4
+ import { Store } from '@ngrx/store';
3
5
  import * as _3dsource_angular_unreal_module from '@3dsource/angular-unreal-module';
4
6
  import * as rxjs from 'rxjs';
5
7
  import { Subject, Observable, Subscription, OperatorFunction } from 'rxjs';
6
- import * as _ngrx_store from '@ngrx/store';
7
- import { Store } from '@ngrx/store';
8
8
  import * as _ngrx_effects from '@ngrx/effects';
9
9
  import { Actions } from '@ngrx/effects';
10
10
  import { IKeyCode, ImageOutputValues, Area } from '@3dsource/utils';
@@ -30,13 +30,6 @@ declare class FreezeFrameComponent {
30
30
  static ɵcmp: i0.ɵɵComponentDeclaration<FreezeFrameComponent, "app-freeze-frame", never, {}, {}, never, never, true, never>;
31
31
  }
32
32
 
33
- declare class LowBandwidthModalComponent {
34
- #private;
35
- close(value?: boolean): void;
36
- static ɵfac: i0.ɵɵFactoryDeclaration<LowBandwidthModalComponent, never>;
37
- static ɵcmp: i0.ɵɵComponentDeclaration<LowBandwidthModalComponent, "app-low-bandwidth-modal", never, {}, {}, never, never, true, never>;
38
- }
39
-
40
33
  declare class ImageLoadingSrcComponent {
41
34
  #private;
42
35
  readonly isLoaderScreenVisible: i0.Signal<boolean>;
@@ -149,7 +142,7 @@ declare class VideoStatsComponent {
149
142
  }>;
150
143
  readonly videoStatus: Signal<{
151
144
  key: string;
152
- value: string | number | Record<string, string> | _3dsource_angular_unreal_module.DataFlowCheckResult | {
145
+ value: string | number | Record<string, string> | {
153
146
  local: {
154
147
  type: string;
155
148
  url: string;
@@ -183,6 +176,81 @@ declare class WebrtcErrorModalComponent {
183
176
  static ɵcmp: i0.ɵɵComponentDeclaration<WebrtcErrorModalComponent, "app-webrtc-error-modal", never, {}, {}, never, never, true, never>;
184
177
  }
185
178
 
179
+ declare const SpecialKeyCodes: {
180
+ BackSpace: number;
181
+ Shift: number;
182
+ Control: number;
183
+ Alt: number;
184
+ RightShift: number;
185
+ RightControl: number;
186
+ RightAlt: number;
187
+ };
188
+ declare const MouseButton: {
189
+ MainButton: number;
190
+ AuxiliaryButton: number;
191
+ SecondaryButton: number;
192
+ FourthButton: number;
193
+ FifthButton: number;
194
+ };
195
+ declare const MouseButtonsMask: {
196
+ PrimaryButton: number;
197
+ SecondaryButton: number;
198
+ AuxiliaryButton: number;
199
+ FourthButton: number;
200
+ FifthButton: number;
201
+ };
202
+
203
+ declare const ControlScheme: {
204
+ readonly LockedMouse: 0;
205
+ readonly HoveringMouse: 1;
206
+ readonly Default: 2;
207
+ };
208
+ type ControlSchemeValues = (typeof ControlScheme)[keyof typeof ControlScheme];
209
+
210
+ declare const MessageType: {
211
+ readonly IFrameRequest: 0;
212
+ readonly RequestQualityControl: 1;
213
+ readonly MaxFpsRequest: 2;
214
+ readonly AverageBitrateRequest: 3;
215
+ readonly StartStreaming: 4;
216
+ readonly StopStreaming: 5;
217
+ readonly LatencyTest: 6;
218
+ readonly RequestInitialSettings: 7;
219
+ readonly UIInteraction: 50;
220
+ readonly Command: 51;
221
+ readonly KeyDown: 60;
222
+ readonly KeyUp: 61;
223
+ readonly KeyPress: 62;
224
+ readonly MouseEnter: 70;
225
+ readonly MouseLeave: 71;
226
+ readonly MouseDown: 72;
227
+ readonly MouseUp: 73;
228
+ readonly MouseMove: 74;
229
+ readonly MouseWheel: 75;
230
+ readonly TouchStart: 80;
231
+ readonly TouchEnd: 81;
232
+ readonly TouchMove: 82;
233
+ };
234
+ type MessageTypeValues = (typeof MessageType)[keyof typeof MessageType];
235
+
236
+ declare const ToClientMessage: {
237
+ readonly QualityControlOwnership: 0;
238
+ readonly Response: 1;
239
+ readonly Command: 2;
240
+ readonly FreezeFrame: 3;
241
+ readonly UnfreezeFrame: 4;
242
+ readonly VideoEncoderAvgQP: 5;
243
+ readonly LatencyTest: 6;
244
+ readonly InitialSettings: 7;
245
+ readonly FileExtension: 8;
246
+ readonly FileMimeType: 9;
247
+ readonly FileContents: 10;
248
+ readonly TestEcho: 11;
249
+ readonly InputControlOwnership: 12;
250
+ readonly GamepadResponse: 13;
251
+ readonly Protocol: 255;
252
+ };
253
+
186
254
  declare const WSCloseCode_NORMAL_CLOSURE = 3000;
187
255
  declare const WSCloseCode_NORMAL_AFK_TIMEOUT = 3001;
188
256
  declare const WSCloseCode_NORMAL_MANUAL_DISCONNECT = 3002;
@@ -298,123 +366,6 @@ declare global {
298
366
  }
299
367
  }
300
368
 
301
- declare const SpecialKeyCodes: {
302
- BackSpace: number;
303
- Shift: number;
304
- Control: number;
305
- Alt: number;
306
- RightShift: number;
307
- RightControl: number;
308
- RightAlt: number;
309
- };
310
- declare const MouseButton: {
311
- MainButton: number;
312
- AuxiliaryButton: number;
313
- SecondaryButton: number;
314
- FourthButton: number;
315
- FifthButton: number;
316
- };
317
- declare const MouseButtonsMask: {
318
- PrimaryButton: number;
319
- SecondaryButton: number;
320
- AuxiliaryButton: number;
321
- FourthButton: number;
322
- FifthButton: number;
323
- };
324
-
325
- declare const ControlScheme: {
326
- readonly LockedMouse: 0;
327
- readonly HoveringMouse: 1;
328
- readonly Default: 2;
329
- };
330
- type ControlSchemeValues = (typeof ControlScheme)[keyof typeof ControlScheme];
331
-
332
- declare const MessageType: {
333
- readonly IFrameRequest: 0;
334
- readonly RequestQualityControl: 1;
335
- readonly MaxFpsRequest: 2;
336
- readonly AverageBitrateRequest: 3;
337
- readonly StartStreaming: 4;
338
- readonly StopStreaming: 5;
339
- readonly LatencyTest: 6;
340
- readonly RequestInitialSettings: 7;
341
- readonly UIInteraction: 50;
342
- readonly Command: 51;
343
- readonly KeyDown: 60;
344
- readonly KeyUp: 61;
345
- readonly KeyPress: 62;
346
- readonly MouseEnter: 70;
347
- readonly MouseLeave: 71;
348
- readonly MouseDown: 72;
349
- readonly MouseUp: 73;
350
- readonly MouseMove: 74;
351
- readonly MouseWheel: 75;
352
- readonly TouchStart: 80;
353
- readonly TouchEnd: 81;
354
- readonly TouchMove: 82;
355
- };
356
- type MessageTypeValues = (typeof MessageType)[keyof typeof MessageType];
357
-
358
- declare const ToClientMessage: {
359
- readonly QualityControlOwnership: 0;
360
- readonly Response: 1;
361
- readonly Command: 2;
362
- readonly FreezeFrame: 3;
363
- readonly UnfreezeFrame: 4;
364
- readonly VideoEncoderAvgQP: 5;
365
- readonly LatencyTest: 6;
366
- readonly InitialSettings: 7;
367
- readonly FileExtension: 8;
368
- readonly FileMimeType: 9;
369
- readonly FileContents: 10;
370
- readonly TestEcho: 11;
371
- readonly InputControlOwnership: 12;
372
- readonly GamepadResponse: 13;
373
- readonly Protocol: 255;
374
- };
375
-
376
- declare const UNREAL_CONFIG: InjectionToken<UnrealInitialConfig>;
377
-
378
- declare const InputOptions: InputProps;
379
-
380
- /** Disconnect reasons that should trigger remote connection cleanup. */
381
- declare const DESTROY_DISCONNECT_REASONS: DisconnectReasonType[];
382
-
383
- declare const DEBOUNCE_TO_MANY_RESIZE_CALLS = 100;
384
- declare const AUTO_HIGH_RESOLUTION_IDLE_MS = 5000;
385
- declare const SAME_SIZE_THRESHOLD = 1.01;
386
- declare const MIN_CONTAINER_SIZE = 2;
387
- declare const MINIMAL_FPS = 6;
388
- declare const STREAMING_VIDEO_ID = "streamingVideo";
389
- declare const STREAMING_AUDIO_ID = "streamingAudio";
390
- declare const FULL_HD_WIDTH = 1920;
391
- declare const FULL_HD_HEIGHT = 1080;
392
- declare const WS_TIMEOUT = 6000;
393
- declare const POLLING_TIME = 4000;
394
- declare const INNER_RETRY_LIMIT = 3;
395
- declare const OUTER_RETRY_DELAY: number;
396
- declare const WS_RETRY_PER_INSTANCE = 1;
397
- declare const WS_OPEN_STATE = 1;
398
- declare const DEFAULT_AFK_TIMEOUT_PERIOD = 15;
399
- declare const DEFAULT_AFK_TIMEOUT = 300;
400
- declare const DATA_CHANNEL_CONNECTION_TIMEOUT = 8000;
401
- declare const SIGNALLING_PERCENT_VALUE = 56;
402
- declare const SCREEN_LOCKER_CONTAINER_ID = "3dsource_start_screen";
403
- declare const REGION_PING_CACHE_KEY = "3dsource:region-ping";
404
- declare const REGION_PING_CACHE_TTL_MS: number;
405
- declare const REGION_PING_ACCURATE_SAMPLES = 3;
406
- declare const REGION_PING_WARMUP_DEADLINE_MS = 1500;
407
- declare const REGION_PING_BACKGROUND_REFRESH_DELAY_MS = 5000;
408
- declare const RECONNECT_CONFIG: {
409
- readonly enabled: true;
410
- readonly maxAttempts: 3;
411
- readonly delayMs: 1000;
412
- };
413
- declare const UnrealStatusMessage: {
414
- readonly CONNECTING_TO_SESSION: "Connecting to session.";
415
- readonly STARTING_YOUR_SESSION: "Starting your session";
416
- };
417
-
418
369
  interface InputProps {
419
370
  controlScheme: ControlSchemeValues;
420
371
  suppressBrowserKeys: boolean;
@@ -620,8 +571,378 @@ interface StreamResolutionProps {
620
571
  height: number | null;
621
572
  }
622
573
 
574
+ /**
575
+ * Wire contract for every event `StreamStatusTelemetryService2` dispatches
576
+ * through `trackTelemetryData`.
577
+ *
578
+ * This file is the **single source of truth** for the producer side. The
579
+ * consumer side lives in the telemetry viewer
580
+ * (`253.StreamTelemetry/src/app/telemetry/models/telemetry.types.ts`) — any
581
+ * change here needs a paired edit there.
582
+ *
583
+ * Event taxonomy (8 names, 6 payload shapes):
584
+ * | event | payload |
585
+ * |----------------------------|------------------------------------|
586
+ * | `stream.session_started` | {@link SessionStartedData} |
587
+ * | `stream.phase_ended` | {@link PhaseEndedData} |
588
+ * | `stream.session_ended` | {@link SessionEndedData} |
589
+ * | `stream.sample` | {@link SampleData} |
590
+ * | `stream.quality_degraded` | {@link QualityAnomalyData} |
591
+ * | `stream.quality_recovered` | {@link QualityAnomalyData} |
592
+ * | `stream.fps_low` | {@link FpsLowData} |
593
+ * | `stream.signaling_retry` | {@link SignalingRetryData} |
594
+ */
595
+ /**
596
+ * Every stable id the service can put on the wire — phases, milestones,
597
+ * overlays. The viewer's vocabulary maps each member to a human label, so
598
+ * every id added here needs a paired vocabulary row in the viewer
599
+ * (`telemetry-vocabulary.ts`).
600
+ */
601
+ type EventId = 'region-resolving' | 'signaling-connection' | 'webrtc-negotiation' | 'unreal-communication' | 'region-ping-fetch-start' | 'region-ping-fetch-end' | 'region-resolved' | 'polling-started' | 'polling-ended' | 'aws-instance-resolved' | 'signaling-ws-connected' | 'instance-reserved' | 'instance-ready' | 'config-received' | 'ssinfo-received' | 'offer-received' | 'answer-sent' | 'answer-received' | 'first-ice-candidate' | 'last-ice-candidate' | 'datachannel-connected' | 'first-command-started' | 'loopback-sent' | 'loopback-received' | 'viewport-ready' | 'polling-to-instance' | 'signaling-handshake' | 'stabilization-warmup';
602
+ /**
603
+ * High-level cause of `stream.session_ended`.
604
+ * - `disconnected` — Cirrus/WebRTC dropped us mid-stream (granular cause
605
+ * rides in {@link SessionEndedData.disconnectReason}).
606
+ * - `pagehide` — tab closed / evicted to bfcache.
607
+ * - `restart` — a new connection attempt superseded this session.
608
+ * - `destroy` — the scene component was torn down (route change).
609
+ */
610
+ type SessionEndReason = 'disconnected' | 'pagehide' | 'restart' | 'destroy';
611
+ /** Which retry loop in `SignallingService` fired. Mirrors the
612
+ * `signalingRetryAttempted` action's `kind`. */
613
+ type SignalingRetryKind = 'ws-retry' | 'connect' | 'orchestration' | 'region-cycle';
614
+ /**
615
+ * Statistical summary of a time-series metric (bitrate, fps, qp, jitter,
616
+ * rtt) over one aggregation window (5 s, ~20 samples at 250 ms).
617
+ *
618
+ * - `p50` — the typical tick; robust to outliers, primary dashboard signal.
619
+ * - `p95` — the bad tail users actually perceive; preferred for SLOs.
620
+ * - `min` — worst single tick (freeze detection).
621
+ * - `max` — best single tick (did we ever reach the target?).
622
+ */
623
+ interface WindowAggregate {
624
+ readonly p50: number;
625
+ readonly p95: number;
626
+ readonly min: number;
627
+ readonly max: number;
628
+ }
629
+ /** Milestone pin inside a phase. `id` is stable and kebab-case; the human
630
+ * label lives in the viewer's vocabulary. `time` is anchor-relative ms. */
631
+ interface EmittedMilestone {
632
+ readonly id: EventId;
633
+ readonly time: number;
634
+ }
635
+ /** Display key/value row, rendered verbatim in the viewer's phase tooltip.
636
+ * Always primitives — structured values are pre-formatted by the phase
637
+ * closer before flattening. */
638
+ interface PhaseParam {
639
+ readonly key: string;
640
+ readonly value: string;
641
+ }
642
+ /** Diagonal-striped region inside a phase bar. Endpoints are
643
+ * anchor-relative ms, already resolved by the producer. */
644
+ interface PhaseOverlay {
645
+ readonly fromMs: number;
646
+ readonly toMs: number;
647
+ readonly id: EventId;
648
+ }
649
+ /** Selected WebRTC ICE candidate pair, read off `AggregatedStat`. Flattened
650
+ * to `localCandidate` / `remoteCandidate` params by the viewport closer. */
651
+ interface SelectedIceCandidatePair {
652
+ readonly local: {
653
+ type: string;
654
+ url: string;
655
+ };
656
+ readonly remote: {
657
+ type: string;
658
+ url: string;
659
+ };
660
+ }
661
+ /** Resource Timing totals for one `initiatorType` (or the grand total).
662
+ * `durationMs` is the SUM across the bucket — with `count` it yields the
663
+ * average per request, and `maxDurationMs` the slowest single one. */
664
+ interface ResourceBucket {
665
+ readonly count: number;
666
+ /** `transferSize === 0 && decodedBodySize > 0` — served from HTTP cache. */
667
+ readonly cachedCount: number;
668
+ readonly transferSize: number;
669
+ readonly encodedBodySize: number;
670
+ readonly decodedBodySize: number;
671
+ readonly durationMs: number;
672
+ readonly maxDurationMs: number;
673
+ }
674
+ interface ResourceTotals extends ResourceBucket {
675
+ readonly byType: Record<string, ResourceBucket>;
676
+ }
677
+ /** One entry of {@link BootstrapInfo.slowestResources}. */
678
+ interface SlowResource {
679
+ /** Path only — origin and query stripped (short, stable, no PII). */
680
+ readonly name: string;
681
+ /** Resource Timing `initiatorType`: 'script' | 'css' | 'img' | 'fetch' | … */
682
+ readonly type: string;
683
+ /** `responseEnd − startTime`, ms. */
684
+ readonly durationMs: number;
685
+ /** Bytes over the wire (0 = served from cache). */
686
+ readonly transferKb: number;
687
+ /** Fetched after `window.load` (lazy route chunk) vs. during page load. */
688
+ readonly lazy: boolean;
689
+ }
690
+ /** Navigation / page-load context explaining the "app bootstrap →
691
+ * session_started" waterfall row. `null` when the Navigation Timing entry
692
+ * is unavailable. */
693
+ interface BootstrapInfo {
694
+ /** `'navigate' | 'reload' | 'back_forward' | 'prerender'`. */
695
+ readonly type: NavigationTimingType;
696
+ /** `nextHopProtocol` — 'h2' / 'h3' / 'http/1.1'. */
697
+ readonly protocol: string | null;
698
+ readonly firstByteMs: number;
699
+ readonly domInteractiveMs: number;
700
+ readonly domContentLoadedMs: number;
701
+ readonly loadEventMs: number;
702
+ readonly navigationTransferSize: number | null;
703
+ readonly navigationEncodedBodySize: number | null;
704
+ readonly navigationDecodedBodySize: number | null;
705
+ /** Resources fetched **before** `loadEventEnd` — page weight. */
706
+ readonly resources: ResourceTotals | null;
707
+ /** Resources fetched **after** `loadEventEnd` — typically lazy chunks for
708
+ * the route the streamer lives on. */
709
+ readonly lazyResources: ResourceTotals | null;
710
+ /** Top-8 slowest individual resources, so the viewer can name the
711
+ * offending file / endpoint. */
712
+ readonly slowestResources: readonly SlowResource[];
713
+ }
714
+ /** Fields present on EVERY event. `userId` is attached centrally by
715
+ * `track()`; the server buckets files under `data/<userId>/<sessionId>`. */
716
+ interface TelemetryEventEnvelope {
717
+ readonly userId: string;
718
+ readonly sessionId: string;
719
+ }
720
+ /** Lifecycle events additionally carry a phase-local `duration` — ms since
721
+ * the previous lifecycle event, NOT anchor-relative. */
722
+ interface TelemetryLifecycleEnvelope extends TelemetryEventEnvelope {
723
+ readonly duration: number;
724
+ }
725
+ /** `stream.session_started` — once per real connection attempt.
726
+ * `duration` = full page-load elapsed on the first session, 0 on resume. */
727
+ interface SessionStartedData extends TelemetryLifecycleEnvelope {
728
+ readonly startTimeUtc: string;
729
+ readonly pixelRatio: number;
730
+ /** `window.innerWidth/innerHeight` at session start — the container that
731
+ * gates rendered video resolution, not the physical screen. */
732
+ readonly browserInnerSize: {
733
+ readonly width: number;
734
+ readonly height: number;
735
+ };
736
+ readonly userAgent: string;
737
+ readonly sampleWindowMs: number;
738
+ /** `location.href` — the server-observed `Referer` is origin-truncated. */
739
+ readonly pageUrl: string;
740
+ readonly bootstrapInfo?: BootstrapInfo;
741
+ }
742
+ /** `stream.phase_ended` — once per phase closer in the service's catalog.
743
+ * No display text on the wire; the viewer's vocabulary resolves every id. */
744
+ interface PhaseEndedData extends TelemetryLifecycleEnvelope {
745
+ /** Stable 1-based catalog index — the viewer orders phases by this. */
746
+ readonly phaseNo: number;
747
+ readonly id: EventId;
748
+ /** CSS hex color for the bar fill. */
749
+ readonly color: string;
750
+ readonly milestones: readonly EmittedMilestone[];
751
+ readonly params: readonly PhaseParam[];
752
+ readonly overlays: readonly PhaseOverlay[];
753
+ /** Set on the connection phases of an ADOPTED prefetched stream: the
754
+ * handshake ran in parallel with page load, so the bar is positioned at
755
+ * {@link spanStartMs} (left-shifted) instead of sequentially. */
756
+ readonly prefetched?: boolean;
757
+ /** Anchor-relative start (ms) of a {@link prefetched} phase's bar. */
758
+ readonly spanStartMs?: number;
759
+ /** Anchor-relative moment Angular adopted the prefetched connection — the
760
+ * sequential timeline resumes here. */
761
+ readonly adoptionAtMs?: number;
762
+ }
763
+ /** `stream.session_ended` — once per session, on disconnect / pagehide /
764
+ * restart / destroy. Requires `api_transport: 'sendBeacon'` to survive a
765
+ * tab close. */
766
+ interface SessionEndedData extends TelemetryLifecycleEnvelope {
767
+ readonly reason: SessionEndReason;
768
+ /** Granular cause read from store state. Omitted when state is clean. */
769
+ readonly disconnectReason?: DisconnectReasonType;
770
+ /** Free-text message paired with {@link disconnectReason}, only when the
771
+ * originating action carried one (e.g. `"Manual Console Drop"`). */
772
+ readonly disconnectMessage?: string;
773
+ readonly timestamp: string;
774
+ }
775
+ /** `stream.sample` — every 5 s, window-aggregated. `seq` is monotonic per
776
+ * session for server-side ordering & dedup. */
777
+ interface SampleData extends TelemetryEventEnvelope {
778
+ readonly seq: number;
779
+ readonly timestamp: string;
780
+ readonly sampleCount: number;
781
+ readonly visibilityState: DocumentVisibilityState;
782
+ readonly bitrate: WindowAggregate;
783
+ readonly fps: WindowAggregate;
784
+ readonly qp: WindowAggregate;
785
+ readonly jitter: WindowAggregate;
786
+ readonly rtt: WindowAggregate;
787
+ readonly packetsLost?: number;
788
+ readonly viewPort: {
789
+ readonly width?: number;
790
+ readonly height?: number;
791
+ };
792
+ }
793
+ /** `stream.quality_degraded` / `stream.quality_recovered` — QP p50 crossing
794
+ * the red threshold (35) in either direction. */
795
+ interface QualityAnomalyData extends TelemetryEventEnvelope {
796
+ readonly seq: number;
797
+ readonly timestamp: string;
798
+ readonly qpP50: number;
799
+ readonly qpP95: number;
800
+ }
801
+ /** `stream.fps_low` — window FPS p50 dropped below 70% of the target. */
802
+ interface FpsLowData extends TelemetryEventEnvelope {
803
+ readonly seq: number;
804
+ readonly timestamp: string;
805
+ /** Requested `maxFps`; `0` means unlimited. */
806
+ readonly target: number;
807
+ /** Target actually compared against (60 when `target === 0`). */
808
+ readonly referenceTarget: number;
809
+ readonly fpsP50: number;
810
+ readonly fpsP95: number;
811
+ }
812
+ /** `stream.signaling_retry` — one per `retry({ delay })` fire in
813
+ * `SignallingService`. Surfaced in the viewer's Anomalies table. */
814
+ interface SignalingRetryData extends TelemetryEventEnvelope {
815
+ readonly seq: number;
816
+ readonly timestamp: string;
817
+ readonly attempt: number;
818
+ readonly reason: string;
819
+ readonly kind: SignalingRetryKind;
820
+ }
821
+ /** Event name → payload. The authoritative index of the wire taxonomy. */
822
+ interface StreamTelemetryEventMap {
823
+ 'stream.session_started': SessionStartedData;
824
+ 'stream.phase_ended': PhaseEndedData;
825
+ 'stream.session_ended': SessionEndedData;
826
+ 'stream.sample': SampleData;
827
+ 'stream.quality_degraded': QualityAnomalyData;
828
+ 'stream.quality_recovered': QualityAnomalyData;
829
+ 'stream.fps_low': FpsLowData;
830
+ 'stream.signaling_retry': SignalingRetryData;
831
+ }
832
+ type StreamTelemetryEventName = keyof StreamTelemetryEventMap;
833
+ /** Names emitted via `emitLifecycle` — the three `duration`-carrying events. */
834
+ type StreamTelemetryLifecycleEventName = 'stream.session_started' | 'stream.phase_ended' | 'stream.session_ended';
835
+ /** Discriminated union of every `trackTelemetryData` envelope. */
836
+ type StreamTelemetryEvent = {
837
+ [K in StreamTelemetryEventName]: {
838
+ readonly event: K;
839
+ readonly data: StreamTelemetryEventMap[K];
840
+ };
841
+ }[StreamTelemetryEventName];
842
+ /** Payload a caller supplies to `track()` — `userId` is added centrally. */
843
+ type StreamTelemetryTrackData<K extends StreamTelemetryEventName> = Omit<StreamTelemetryEventMap[K], 'userId'>;
844
+ /** Payload a caller supplies to `emitLifecycle()` — `duration` is computed. */
845
+ type StreamTelemetryLifecycleData<K extends StreamTelemetryLifecycleEventName> = Omit<StreamTelemetryEventMap[K], 'userId' | 'duration'>;
846
+
623
847
  type TelemetryType = 'commandSent' | 'commandStop';
624
848
 
849
+ interface AggregatedStat {
850
+ quality: Quality;
851
+ aggregatedStats: InboundVideoStats;
852
+ }
853
+ interface InboundVideoStats extends RTCInboundRtpStreamStats {
854
+ VideoEncoderQP: number;
855
+ runTime: number;
856
+ pixelRatio: number;
857
+ bytesReceivedStart: number;
858
+ framesDecodedStart: number;
859
+ timestampStart: number;
860
+ videoCodec: string;
861
+ avgBitrate: number;
862
+ avgFrameRate: number;
863
+ selectedPair: {
864
+ local: {
865
+ type: string;
866
+ url: string;
867
+ };
868
+ remote: {
869
+ type: string;
870
+ url: string;
871
+ };
872
+ } | null;
873
+ currentRoundTripTime: number;
874
+ codecs: Record<string, string>;
875
+ receiveToCompositeMs: number;
876
+ bitrate: number;
877
+ }
878
+ interface AwsInstance {
879
+ /**
880
+ * WebSocket URL for connecting to the Cirrus (polling mode) or Orchestration (direct mode).
881
+ */
882
+ wsUrl: string | null;
883
+ pollingUrl: string | null;
884
+ instanceName: string | null;
885
+ /**
886
+ * Unique identifier for the streaming request.
887
+ * Coming with a new orchestration message "instanceReserved".
888
+ */
889
+ streamRequestId?: string;
890
+ /**
891
+ * Estimated time of arrival (in seconds) for the instance to be ready.
892
+ * Coming with a new orchestration message "instanceReserved".
893
+ */
894
+ eta?: number;
895
+ /**
896
+ * Progress of completion for the instance launch (0-1).
897
+ * Based on ETA time comes from the backend with new orchestration.
898
+ * If eta is not provided, this value will be undefined.
899
+ */
900
+ progressComplete?: number;
901
+ message?: string;
902
+ }
903
+
904
+ declare const UNREAL_CONFIG: InjectionToken<UnrealInitialConfig>;
905
+
906
+ declare const InputOptions: InputProps;
907
+
908
+ /** Disconnect reasons that should trigger remote connection cleanup. */
909
+ declare const DESTROY_DISCONNECT_REASONS: DisconnectReasonType[];
910
+
911
+ declare const DEBOUNCE_TO_MANY_RESIZE_CALLS = 100;
912
+ declare const AUTO_HIGH_RESOLUTION_IDLE_MS = 5000;
913
+ declare const SAME_SIZE_THRESHOLD = 1.01;
914
+ declare const MIN_CONTAINER_SIZE = 2;
915
+ declare const MINIMAL_FPS = 6;
916
+ declare const STREAMING_VIDEO_ID = "streamingVideo";
917
+ declare const STREAMING_AUDIO_ID = "streamingAudio";
918
+ declare const FULL_HD_WIDTH = 1920;
919
+ declare const FULL_HD_HEIGHT = 1080;
920
+ declare const WS_TIMEOUT = 6000;
921
+ declare const POLLING_TIME = 4000;
922
+ declare const INNER_RETRY_LIMIT = 3;
923
+ declare const OUTER_RETRY_DELAY: number;
924
+ declare const WS_RETRY_PER_INSTANCE = 1;
925
+ declare const WS_OPEN_STATE = 1;
926
+ declare const DEFAULT_AFK_TIMEOUT_PERIOD = 15;
927
+ declare const DEFAULT_AFK_TIMEOUT = 300;
928
+ declare const DATA_CHANNEL_CONNECTION_TIMEOUT = 8000;
929
+ declare const SIGNALLING_PERCENT_VALUE = 56;
930
+ declare const SCREEN_LOCKER_CONTAINER_ID = "3dsource_start_screen";
931
+ declare const REGION_PING_CACHE_KEY = "3dsource:region-ping";
932
+ declare const REGION_PING_CACHE_TTL_MS: number;
933
+ declare const REGION_PING_ACCURATE_SAMPLES = 3;
934
+ declare const REGION_PING_WARMUP_DEADLINE_MS = 1500;
935
+ declare const REGION_PING_BACKGROUND_REFRESH_DELAY_MS = 5000;
936
+ declare const RECONNECT_CONFIG: {
937
+ readonly enabled: true;
938
+ readonly maxAttempts: 3;
939
+ readonly delayMs: 1000;
940
+ };
941
+ declare const UnrealStatusMessage: {
942
+ readonly CONNECTING_TO_SESSION: "Connecting to session.";
943
+ readonly STARTING_YOUR_SESSION: "Starting your session";
944
+ };
945
+
625
946
  declare class SubService {
626
947
  protected readonly destroyRef: DestroyRef;
627
948
  protected readonly destroy$: Subject<void>;
@@ -1142,51 +1463,6 @@ declare class StreamStatusTelemetryService extends SubService {
1142
1463
  static ɵprov: i0.ɵɵInjectableDeclaration<StreamStatusTelemetryService>;
1143
1464
  }
1144
1465
 
1145
- /**
1146
- * Every stable id this service can emit on the wire — phases,
1147
- * milestones, overlays. The viewer's vocabulary maps each member to a
1148
- * human label, so every id added here needs a paired vocabulary row
1149
- * in the viewer (`telemetry-vocabulary.ts`).
1150
- */
1151
- type EventId = 'region-resolving' | 'signaling-connection' | 'webrtc-negotiation' | 'unreal-communication' | 'region-ping-fetch-start' | 'region-ping-fetch-end' | 'region-resolved' | 'polling-started' | 'polling-ended' | 'aws-instance-resolved' | 'signaling-ws-connected' | 'instance-reserved' | 'instance-ready' | 'config-received' | 'ssinfo-received' | 'offer-received' | 'answer-sent' | 'answer-received' | 'first-ice-candidate' | 'last-ice-candidate' | 'datachannel-connected' | 'first-command-started' | 'loopback-sent' | 'loopback-received' | 'viewport-ready' | 'polling-to-instance' | 'signaling-handshake' | 'stabilization-warmup';
1152
- /** Wire-format milestone — minimal by design. `id` is a stable
1153
- * kebab-case identifier; the viewer maps it to a human label via its
1154
- * vocabulary. */
1155
- interface EmittedMilestone {
1156
- readonly id: EventId;
1157
- readonly time: number;
1158
- }
1159
- /**
1160
- * Selected WebRTC ICE candidate pair, pulled off {@link AggregatedStat}.
1161
- * The closer for the viewport phase flattens this to two `PhaseParam`
1162
- * rows (`localCandidate`, `remoteCandidate`) before emission.
1163
- */
1164
- interface SelectedIceCandidatePair {
1165
- local: {
1166
- type: string;
1167
- url: string;
1168
- };
1169
- remote: {
1170
- type: string;
1171
- url: string;
1172
- };
1173
- }
1174
- /**
1175
- * Wire-format display key/value pair — rendered verbatim in the viewer's
1176
- * phase tooltip. Nested or structured values should be pre-formatted by
1177
- * the catalog closer's `map(...)` (string/number/boolean only).
1178
- */
1179
- interface PhaseParam {
1180
- readonly key: string;
1181
- readonly value: string;
1182
- }
1183
- /** Resolved overlay region sent on the wire. `id` is a stable
1184
- * kebab-case identifier mapped to a title by the viewer's vocabulary. */
1185
- interface PhaseOverlay {
1186
- readonly fromMs: number;
1187
- readonly toMs: number;
1188
- readonly id: EventId;
1189
- }
1190
1466
  declare class StreamStatusTelemetryService2 {
1191
1467
  private readonly store;
1192
1468
  private readonly actions$;
@@ -1405,7 +1681,6 @@ declare class VideoService extends SubService {
1405
1681
  private videoTrack$;
1406
1682
  private VideoEncoderQP;
1407
1683
  private aggregatedStats;
1408
- kalmanFilter1D: KalmanFilter1D;
1409
1684
  /**
1410
1685
  * Aggregate video stats and emit it as videoStats$
1411
1686
  */
@@ -1979,26 +2254,6 @@ declare const getImageFromVideoStream: (takeSizeFrom?: "video" | "constant", ima
1979
2254
  */
1980
2255
  declare function getActiveUrl(urls: string[]): Generator<string, void, unknown>;
1981
2256
 
1982
- declare class KalmanFilter1D {
1983
- private estimate;
1984
- private uncertainty;
1985
- private processNoise;
1986
- private measurementNoise;
1987
- /**
1988
- * @param initialEstimate Initial guess of the state.
1989
- * @param initialUncertainty Initial uncertainty in the guess.
1990
- * @param processNoise Process variance (Q) representing model uncertainty.
1991
- * @param measurementNoise Measurement variance (R) representing noise in measurements.
1992
- */
1993
- constructor(initialEstimate: number, initialUncertainty: number, processNoise: number, measurementNoise: number);
1994
- /**
1995
- * Incorporates a new measurement and returns the updated estimate.
1996
- * @param measurement The new measurement value.
1997
- */
1998
- update(measurement: number): number;
1999
- config(data: FilterSettings): void;
2000
- }
2001
-
2002
2257
  declare class LatencyTimings {
2003
2258
  TestStartTimeMs: number | null;
2004
2259
  UEReceiptTimeMs: number | null;
@@ -2106,214 +2361,6 @@ declare function getResizeValuesUniversal(params: {
2106
2361
  */
2107
2362
  declare function makeEven(value: number): number;
2108
2363
 
2109
- interface AggregatedStat {
2110
- quality: Quality;
2111
- aggregatedStats: InboundVideoStats;
2112
- }
2113
- interface InboundVideoStats extends RTCInboundRtpStreamStats {
2114
- VideoEncoderQP: number;
2115
- runTime: number;
2116
- pixelRatio: number;
2117
- bytesReceivedStart: number;
2118
- framesDecodedStart: number;
2119
- timestampStart: number;
2120
- videoCodec: string;
2121
- avgBitrate: number;
2122
- avgFrameRate: number;
2123
- selectedPair: {
2124
- local: {
2125
- type: string;
2126
- url: string;
2127
- };
2128
- remote: {
2129
- type: string;
2130
- url: string;
2131
- };
2132
- } | null;
2133
- currentRoundTripTime: number;
2134
- codecs: Record<string, string>;
2135
- receiveToCompositeMs: number;
2136
- bitrate: number;
2137
- kalmanBitrate: number;
2138
- bitrateDrop: number;
2139
- dataFlowCheckResult: DataFlowCheckResult;
2140
- dataFlowBitrate: DataFlowCheckResult;
2141
- }
2142
- interface AwsInstance {
2143
- /**
2144
- * WebSocket URL for connecting to the Cirrus (polling mode) or Orchestration (direct mode).
2145
- */
2146
- wsUrl: string | null;
2147
- pollingUrl: string | null;
2148
- instanceName: string | null;
2149
- /**
2150
- * Unique identifier for the streaming request.
2151
- * Coming with a new orchestration message "instanceReserved".
2152
- */
2153
- streamRequestId?: string;
2154
- /**
2155
- * Estimated time of arrival (in seconds) for the instance to be ready.
2156
- * Coming with a new orchestration message "instanceReserved".
2157
- */
2158
- eta?: number;
2159
- /**
2160
- * Progress of completion for the instance launch (0-1).
2161
- * Based on ETA time comes from the backend with new orchestration.
2162
- * If eta is not provided, this value will be undefined.
2163
- */
2164
- progressComplete?: number;
2165
- message?: string;
2166
- }
2167
-
2168
- interface DataFlowCheckResult {
2169
- isDropDetected: boolean;
2170
- dropPercentage: number;
2171
- activeMedian: number;
2172
- quality: Quality;
2173
- message: string;
2174
- /** Optional diagnostic snapshot — only populated on demand to avoid a
2175
- * per-tick array copy on this 4 Hz hot path. */
2176
- dataHistory?: number[];
2177
- config: {
2178
- yellowFlagThresholdPercentage: number;
2179
- redFlagThresholdPercentage: number;
2180
- historyBufferLength: number;
2181
- splitPoint: number;
2182
- };
2183
- }
2184
- declare class DataFlowMonitor {
2185
- protected yellowFlagThresholdPercentage: number;
2186
- protected redFlagThresholdPercentage: number;
2187
- protected historyBufferLength: number;
2188
- protected splitPoint: number;
2189
- protected dataHistory: number[];
2190
- /**
2191
- * Initializes the DataFlowMonitor monitor.
2192
- * @param yellowFlagThresholdPercentage - The percentage drop to trigger a YELLOW warning (default: 15%).
2193
- * @param redFlagThresholdPercentage - The percentage drop to trigger a RED warning (default: 30%).
2194
- * @param historyBufferLength - buffer length (default: 100).
2195
- * @param splitPoint - The point at which to split the history buffer into two halves (default: 0.5).
2196
- */
2197
- constructor(yellowFlagThresholdPercentage?: number, redFlagThresholdPercentage?: number, historyBufferLength?: number, splitPoint?: number);
2198
- reset(): void;
2199
- config(data: FilterSettings): void;
2200
- /**
2201
- * Adds a new bitrate measurement and checks for significant drops.
2202
- * @param currentValue - The current bitrate in kbps.
2203
- * @returns BitrateCheckResult indicating if a drop was detected.
2204
- */
2205
- addValue(currentValue: number): DataFlowCheckResult;
2206
- }
2207
-
2208
- interface FilterSettings {
2209
- /**
2210
- * Minimum number of kilobits per second to trigger low bandwidth
2211
- */
2212
- minimumBitrate: number;
2213
- /**
2214
- * Amount of a percentage drop to trigger a yellow warning
2215
- */
2216
- yellowFlag: number;
2217
- /**
2218
- * Amount of a percentage drop to trigger a red warning
2219
- */
2220
- redFlag: number;
2221
- /**
2222
- * Minimum number of frames per second to trigger low bandwidth
2223
- */
2224
- minimumFps: number;
2225
- /**
2226
- * Time to wait before checking if we can switch to low bandwidth
2227
- */
2228
- monitoringDelayTime: number;
2229
- initialBitrateEstimate: number;
2230
- initialErrorCovariance: number;
2231
- processNoise: number;
2232
- measurementNoise: number;
2233
- panelOpen: boolean;
2234
- }
2235
-
2236
- declare class FilterSettingsComponent implements OnInit {
2237
- private readonly storageKey;
2238
- readonly defaultFilterModel: {
2239
- minimumBitrate: number;
2240
- yellowFlag: number;
2241
- redFlag: number;
2242
- minimumFps: number;
2243
- monitoringDelayTime: number;
2244
- initialBitrateEstimate: number;
2245
- initialErrorCovariance: number;
2246
- processNoise: number;
2247
- measurementNoise: number;
2248
- panelOpen: boolean;
2249
- };
2250
- settings: {
2251
- minimumBitrate: number;
2252
- yellowFlag: number;
2253
- redFlag: number;
2254
- minimumFps: number;
2255
- monitoringDelayTime: number;
2256
- initialBitrateEstimate: number;
2257
- initialErrorCovariance: number;
2258
- processNoise: number;
2259
- measurementNoise: number;
2260
- panelOpen: boolean;
2261
- };
2262
- ngOnInit(): void;
2263
- togglePanel(): void;
2264
- saveSettings(): void;
2265
- dispatch(settings: FilterSettings): void;
2266
- reset(): void;
2267
- static ɵfac: i0.ɵɵFactoryDeclaration<FilterSettingsComponent, never>;
2268
- static ɵcmp: i0.ɵɵComponentDeclaration<FilterSettingsComponent, "app-filter-settings", never, {}, {}, never, never, true, never>;
2269
- }
2270
-
2271
- declare class LowBandwidthDetectorComponent implements OnInit {
2272
- #private;
2273
- private readonly dialog;
2274
- private readonly destroyRef;
2275
- private readonly videoService;
2276
- private readonly lowBandwidthState;
2277
- readonly isDevMode: boolean;
2278
- private readonly viewportReady$;
2279
- private readonly isLowBandwidth$;
2280
- private readonly lowBandwidthTrigger$;
2281
- private readonly highBandwidthTrigger$;
2282
- private readonly viewPortDestroyedTrigger$;
2283
- private readonly aggregatedStats$;
2284
- private readonly nativeQuality$;
2285
- private readonly monitoringTrigger$;
2286
- private readonly reTrigger$;
2287
- private readonly canSwitchToLowBand$;
2288
- private readonly videoQuality$;
2289
- private readonly fps$;
2290
- private readonly bitrateDrop$;
2291
- readonly fps: i0.Signal<number>;
2292
- readonly nativeQuality: i0.Signal<Quality | undefined>;
2293
- readonly isLowBandwidth: i0.Signal<boolean>;
2294
- readonly aggregatedStats: i0.Signal<_3dsource_angular_unreal_module.InboundVideoStats | undefined>;
2295
- readonly isReducedQuality: i0.WritableSignal<boolean>;
2296
- readonly isIndicatorExpanded: i0.WritableSignal<boolean>;
2297
- readonly isIndicatorExpandedTrigger$: rxjs.Observable<false>;
2298
- ngOnInit(): void;
2299
- private trySetLowBandwidth;
2300
- toggleIndicator(value: boolean): void;
2301
- hideIndicatorAfterDelay(): void;
2302
- openLBMDialog(): void;
2303
- static ɵfac: i0.ɵɵFactoryDeclaration<LowBandwidthDetectorComponent, never>;
2304
- static ɵcmp: i0.ɵɵComponentDeclaration<LowBandwidthDetectorComponent, "app-low-bandwidth-detector", never, {}, {}, never, never, true, never>;
2305
- }
2306
-
2307
- declare class LowBandwidthStateService {
2308
- #private;
2309
- readonly isLowBandwidth: i0.Signal<boolean>;
2310
- readonly isLowBandwidth$: rxjs.Observable<boolean>;
2311
- enterLowBandwidthMode(): void;
2312
- exitLowBandwidthMode(): void;
2313
- static ɵfac: i0.ɵɵFactoryDeclaration<LowBandwidthStateService, never>;
2314
- static ɵprov: i0.ɵɵInjectableDeclaration<LowBandwidthStateService>;
2315
- }
2316
-
2317
2364
  declare class SafePipe implements PipeTransform {
2318
2365
  private sanitizer;
2319
2366
  transform(value: string, type: string): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl;
@@ -2810,6 +2857,22 @@ declare class UnrealEffects {
2810
2857
  code: number | null;
2811
2858
  error?: string;
2812
2859
  } & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
2860
+ /**
2861
+ * `dataChannelReady` is a ONCE-PER-SESSION signal: it starts app init
2862
+ * (console commands → loopback → viewport) and makes `SignallingService`
2863
+ * send `p2pEstablished`. Neither is idempotent, so a second
2864
+ * `dataChannelConnected` inside the same session must not re-emit it.
2865
+ *
2866
+ * That second announcement is real in the prefetch flow: `adopt()` declares
2867
+ * the already-open channel manually, while the transport it adopted can
2868
+ * still produce its own `dataChannelConnected` afterwards — the effect used
2869
+ * to turn both into `dataChannelReady`.
2870
+ *
2871
+ * `exhaustMap` over an inner stream that emits once and then idles keeps the
2872
+ * gate shut until the session actually ends; `takeUntil` re-opens it on a
2873
+ * cirrus drop, a scene destroy, or the start of a peer reconnect (which is
2874
+ * where the pre-existing `isReconnecting` filter hands over).
2875
+ */
2813
2876
  unrealReceiverReady$: rxjs.Observable<_ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
2814
2877
  initAppByDataChannelReady$: rxjs.Observable<_ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
2815
2878
  setViewportReadyBySetLoopBackCommandIsCompleted$: rxjs.Observable<_ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
@@ -3048,5 +3111,5 @@ declare const selectUserInactivityDetected: _ngrx_store.MemoizedSelector<Record<
3048
3111
  /** Used by external consumers (e.g., metabox). Do not remove. */
3049
3112
  declare const selectIsVideoPlayingAndDataChannelConnected: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (s1: boolean, s2: boolean) => boolean>;
3050
3113
 
3051
- 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, DataFlowMonitor, DevModeService, DisconnectReason, FULL_HD_HEIGHT, FULL_HD_WIDTH, FileHandlerService, FileReceiverService, FilterSettingsComponent, FpsMonitorService, FreezeFrameComponent, FreezeFrameService, INNER_RETRY_LIMIT, IceCandidateHandler, ImageLoadingSrcComponent, InputOptions, InputService, InstanceReadyHandler, InstanceReservedHandler, IntroSrcComponent, KalmanFilter1D, LatencyTimings, LoadingProgressService, LowBandwidthDetectorComponent, LowBandwidthModalComponent, LowBandwidthStateService, MINIMAL_FPS, MIN_CONTAINER_SIZE, MessageType, MouseButton, MouseButtonsMask, OUTER_RETRY_DELAY, OnCloseHandler, OnErrorHandler, OnMessageHandler, OnOpenHandler, OrchestrationMessageTypes, POLLING_TIME, PingHandler, 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, UnrealCallbackService, UnrealCommunicatorService, UnrealEffects, UnrealSceneComponent, UnrealStatusMessage, 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, keepMaxUntilReset, makeEven, pollingEnded, pollingStarted, provideUnrealModule, provideUnrealState, qpToQuality, reconnectPeer, reconnectPeerFailed, reconnectPeerSuccess, regionPingFetchEnd, regionPingFetchStart, regionResolved, resetAfk, resetConfig, resetDataChannelForReconnect, resetIntroSrc, resetUserInactivityTimeout, resetWarnTimeout, 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, smoothTransition, startStream, streamAdopted, trackMixpanelEvent, trackTelemetryData, uint8ToBase64, unrealCommandCallback, unrealFeature, unrealReducer, updateCirrusInfo, videoAdaptedToContainer, videoStreamInitialized };
3052
- export type { AggregatedStat, AnySignalingMessage, AwsInstance, CandidateMessage, CloseReason, CommandInProgress, ConfigMessage, ConnectionError, ControlSchemeValues, DataFlowCheckResult, DisconnectReasonType, EmittedMilestone, EventId, ForceClientDisconnect, FreezeFrameMessage, InboundVideoStats, InputProps, InstanceReady, InstanceReserved, InterruptClientStream, ListStreamersMessage, MessageBase, MessageTypeValues, OrchestrationErrorMessage, OrchestrationMessageType, P2PEstablishedMessage, ParkedStream, PhaseOverlay, PhaseParam, PingMessage, PlayerCountMessage, PollingOrchestrationMessage, Quality, ReceivedFile, RequestStream, SSInfo, SelectedIceCandidatePair, SignalingData, SignalingMessageHandler, SignalingMessageMap, StreamConfig, StreamRequestContext, StreamResolutionProps, StreamerListMessage, TelemetryType, UnknownFields, UnrealCallbackDescriptor, UnrealCallbackEventMap, UnrealCallbackJson, UnrealCallbackJsonWrapped, UnrealInitialConfig, UnrealState, WSCloseCodesValues, streamPreparedForUserInteractionMessage };
3114
+ 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, 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, PingHandler, 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, UnrealCallbackService, UnrealCommunicatorService, UnrealEffects, UnrealSceneComponent, UnrealStatusMessage, 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, keepMaxUntilReset, makeEven, pollingEnded, pollingStarted, provideUnrealModule, provideUnrealState, qpToQuality, reconnectPeer, reconnectPeerFailed, reconnectPeerSuccess, regionPingFetchEnd, regionPingFetchStart, regionResolved, resetAfk, resetConfig, resetDataChannelForReconnect, resetIntroSrc, resetUserInactivityTimeout, resetWarnTimeout, 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, smoothTransition, startStream, streamAdopted, trackMixpanelEvent, trackTelemetryData, uint8ToBase64, unrealCommandCallback, unrealFeature, unrealReducer, updateCirrusInfo, videoAdaptedToContainer, videoStreamInitialized };
3115
+ export type { AggregatedStat, AnySignalingMessage, AwsInstance, BootstrapInfo, CandidateMessage, CloseReason, CommandInProgress, ConfigMessage, ConnectionError, ControlSchemeValues, DisconnectReasonType, EmittedMilestone, EventId, ForceClientDisconnect, FpsLowData, FreezeFrameMessage, InboundVideoStats, InputProps, InstanceReady, InstanceReserved, InterruptClientStream, ListStreamersMessage, MessageBase, MessageTypeValues, OrchestrationErrorMessage, OrchestrationMessageType, P2PEstablishedMessage, ParkedStream, PhaseEndedData, PhaseOverlay, PhaseParam, PingMessage, PlayerCountMessage, PollingOrchestrationMessage, Quality, QualityAnomalyData, ReceivedFile, RequestStream, ResourceBucket, ResourceTotals, SSInfo, SampleData, SelectedIceCandidatePair, SessionEndReason, SessionEndedData, SessionStartedData, SignalingData, SignalingMessageHandler, SignalingMessageMap, SignalingRetryData, SignalingRetryKind, SlowResource, StreamConfig, StreamRequestContext, StreamResolutionProps, StreamTelemetryEvent, StreamTelemetryEventMap, StreamTelemetryEventName, StreamTelemetryLifecycleData, StreamTelemetryLifecycleEventName, StreamTelemetryTrackData, StreamerListMessage, TelemetryEventEnvelope, TelemetryLifecycleEnvelope, TelemetryType, UnknownFields, UnrealCallbackDescriptor, UnrealCallbackEventMap, UnrealCallbackJson, UnrealCallbackJsonWrapped, UnrealInitialConfig, UnrealState, WSCloseCodesValues, WindowAggregate, streamPreparedForUserInteractionMessage };