@3dsource/angular-unreal-module 0.0.146-dev.6 → 0.0.146-dev.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@3dsource/angular-unreal-module",
3
- "version": "0.0.146-dev.6",
3
+ "version": "0.0.146-dev.8",
4
4
  "description": "Unreal module for connect with unreal engine stream",
5
5
  "keywords": [
6
6
  "3dsource",
@@ -1214,6 +1214,17 @@ declare class StreamStatusTelemetryService2 {
1214
1214
  private readonly disconnectReason$;
1215
1215
  private readonly errorMessage$;
1216
1216
  private readonly viewPortReady$;
1217
+ /**
1218
+ * Synchronous adoption flag. The `streamAdopted` reducer sets it BEFORE any
1219
+ * action subscriber runs, so the connection-phase closers (which fire inside
1220
+ * the same dispatch, e.g. `ssinfo-received` off the `ssData` state change)
1221
+ * can read it and defer to the prefetch-timed attribution emitted by
1222
+ * {@link emitAdoptedConnection} instead of recording the live wall-clock.
1223
+ */
1224
+ private readonly adopted$;
1225
+ /** Streamer identity for the adopted signaling phase params. */
1226
+ private readonly ssData$;
1227
+ private readonly awsInstance$;
1217
1228
  private session;
1218
1229
  /**
1219
1230
  * Whether a session has already started during the current page lifetime.
@@ -1277,6 +1288,36 @@ declare class StreamStatusTelemetryService2 {
1277
1288
  * are derived from neighbor phases.
1278
1289
  */
1279
1290
  private emitPhaseEnded;
1291
+ /**
1292
+ * Emit the region / signaling / webrtc phases for an ADOPTED connection.
1293
+ *
1294
+ * The prefetch script established the connection in PARALLEL with page load,
1295
+ * so the phases are positioned at their real (anchor-relative) spans — shifted
1296
+ * LEFT to overlap the HTML-loading / route-idle rows — rather than sequentially
1297
+ * after them. That's the whole point of the prefetch: the handshake already
1298
+ * happened while the page was loading. Each phase ships:
1299
+ * - `duration` — the real sub-step time the prefetch spent.
1300
+ * - `spanStartMs` — anchor-relative start, so the viewer left-shifts the bar.
1301
+ * - `adoptionAtMs` — where Angular took over (the next phase, Unreal
1302
+ * communication, resumes here on the sequential timeline).
1303
+ * - savings params: `prefetchConnectMs` (full handshake), `prefetchSavedMs`
1304
+ * (done before Angular was ready), `adoptionWaitMs` (real connect→adopted
1305
+ * wait), `adoptionOverheadMs` (prefetch-ready → adopted gap).
1306
+ */
1307
+ private emitAdoptedConnection;
1308
+ /**
1309
+ * Emit one adopted phase positioned at its real `spanStartMs` (left-shifted
1310
+ * to overlap page load) with its real prefetch `duration`. `prefetched`,
1311
+ * `spanStartMs` and `adoptionAtMs` ride as top-level wire fields the viewer
1312
+ * uses to lay the bar out; the rest become display params.
1313
+ */
1314
+ private emitAdoptedPhase;
1315
+ /** Streamer identity params for the adopted signaling phase — mirrors the
1316
+ * `ssinfo-received` closer's shape (client / instanceName / …ssData). */
1317
+ private adoptedSignalingParams;
1318
+ /** Read the region-ping cache the prefetch reused (localStorage), so the
1319
+ * adopted region phase can still report the winning region + samples. */
1320
+ private readRegionCache;
1280
1321
  private handleWindow;
1281
1322
  private evaluateAnomalies;
1282
1323
  private updateMaxFpsTarget;
@@ -2589,9 +2630,29 @@ declare const initSignalling: node_modules__ngrx_store_types_ngrx_store.ActionCr
2589
2630
  declare const streamAdopted: node_modules__ngrx_store_types_ngrx_store.ActionCreator<string, (props: {
2590
2631
  machineId: string | null;
2591
2632
  ssData: SignalingData | null;
2633
+ /**
2634
+ * `performance.now()` marks the prefetch script recorded while it
2635
+ * established the connection (`prefetch_start` / `ws_open` / `dc_open` /
2636
+ * `ready`), on the page navigation timeline. The telemetry service uses
2637
+ * them to attribute the signaling / webrtc phase durations to the time the
2638
+ * prefetch actually spent — instead of dumping the whole pre-adoption wait
2639
+ * onto whichever phase closer happens to fire first. `null` when adopting a
2640
+ * stream that carried no timings.
2641
+ */
2642
+ timings: Record<string, number> | null;
2592
2643
  }) => {
2593
2644
  machineId: string | null;
2594
2645
  ssData: SignalingData | null;
2646
+ /**
2647
+ * `performance.now()` marks the prefetch script recorded while it
2648
+ * established the connection (`prefetch_start` / `ws_open` / `dc_open` /
2649
+ * `ready`), on the page navigation timeline. The telemetry service uses
2650
+ * them to attribute the signaling / webrtc phase durations to the time the
2651
+ * prefetch actually spent — instead of dumping the whole pre-adoption wait
2652
+ * onto whichever phase closer happens to fire first. `null` when adopting a
2653
+ * stream that carried no timings.
2654
+ */
2655
+ timings: Record<string, number> | null;
2595
2656
  } & node_modules__ngrx_store_types_ngrx_store.Action<string>>;
2596
2657
  declare const startStream: node_modules__ngrx_store_types_ngrx_store.ActionCreator<string, (props: {
2597
2658
  config: Partial<StreamConfig>;
@@ -2810,7 +2871,6 @@ declare class UnrealEffects {
2810
2871
  connectToSignaling$: node_modules_rxjs_dist_types.Observable<{
2811
2872
  value: boolean;
2812
2873
  } & node_modules__ngrx_store_types_ngrx_store.Action<string>> & node_modules__ngrx_effects_types_ngrx_effects.CreateEffectMetadata;
2813
- regionTelemetryOnAdopt$: node_modules_rxjs_dist_types.Observable<node_modules__ngrx_store_types_ngrx_store.Action<string>> & node_modules__ngrx_effects_types_ngrx_effects.CreateEffectMetadata;
2814
2874
  private canPeerReconnect;
2815
2875
  /**
2816
2876
  * Either schedules the next peer-reconnect attempt or gives up with the
@@ -2827,6 +2887,7 @@ declare const unrealFeature: {
2827
2887
  name: "unrealFeature";
2828
2888
  reducer: node_modules__ngrx_store_types_ngrx_store.ActionReducer<_3dsource_angular_unreal_module.UnrealState, node_modules__ngrx_store_types_ngrx_store.Action<string>>;
2829
2889
  selectUnrealFeatureState: node_modules__ngrx_store_types_ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.UnrealState, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.UnrealState>;
2890
+ selectAdopted: node_modules__ngrx_store_types_ngrx_store.MemoizedSelector<Record<string, any>, boolean, (featureState: _3dsource_angular_unreal_module.UnrealState) => boolean>;
2830
2891
  selectFreezeFrame: node_modules__ngrx_store_types_ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.FreezeFrameMessage, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.FreezeFrameMessage>;
2831
2892
  selectIsVideoPlaying: node_modules__ngrx_store_types_ngrx_store.MemoizedSelector<Record<string, any>, boolean, (featureState: _3dsource_angular_unreal_module.UnrealState) => boolean>;
2832
2893
  selectStatusMessage: node_modules__ngrx_store_types_ngrx_store.MemoizedSelector<Record<string, any>, string | null, (featureState: _3dsource_angular_unreal_module.UnrealState) => string | null>;
@@ -2883,6 +2944,13 @@ interface UnrealState {
2883
2944
  isAfkTimerVisible: boolean;
2884
2945
  afkCountdown: number;
2885
2946
  cirrusConnected: boolean;
2947
+ /**
2948
+ * True once a prefetched connection has been adopted (`streamAdopted`).
2949
+ * Read synchronously by the telemetry service so the connection-phase
2950
+ * closers know to defer to the prefetch-timed attribution instead of the
2951
+ * live-event one. Reset on every fresh attempt / disconnect.
2952
+ */
2953
+ adopted: boolean;
2886
2954
  viewportReady: boolean;
2887
2955
  freezeFrameFromVideo: FreezeFrameMessage;
2888
2956
  freezeFrame: FreezeFrameMessage;