@3dsource/angular-unreal-module 0.0.167 → 0.0.169

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
@@ -75,7 +75,8 @@ Available configuration fields:
75
75
  | `commandTelemetryReceiver` | Command telemetry endpoint |
76
76
  | `streamTelemetryV2Url` | Stream lifecycle telemetry endpoint |
77
77
  | `screenLockerContainerId` | Container used by the screen-locker overlay |
78
- | `fpsMonitor` | Enables FPS monitoring |
78
+ | `mode` | `'metabox'` (default) — full Metabox command protocol; `'default'` — stock Pixel Streaming app, the module sends no Metabox commands of its own |
79
+ | `fpsMonitor` | Enables FPS monitoring (currently off — the service is not instantiated) |
79
80
  | `autoHighResolution` | Raises resolution after the scene becomes idle |
80
81
  | `playwright` | Enables the test-specific service behaviour |
81
82
 
@@ -1204,6 +1204,16 @@ function getResizeValuesUniversal(params) {
1204
1204
  return { w: makeEven(w), h: makeEven(h), x: 0, y: 0, scale: w / maxSpace.w };
1205
1205
  }
1206
1206
 
1207
+ /**
1208
+ * `'metabox'` — the default when `UNREAL_CONFIG` omits `mode` — speaks the full
1209
+ * Metabox command protocol. `'default'` targets a stock Pixel Streaming
1210
+ * application, which understands no `MetaBoxCommand` packet, so the module
1211
+ * sends none of its own.
1212
+ */
1213
+ function isMetaboxMode(config) {
1214
+ return (config?.mode ?? 'metabox') === 'metabox';
1215
+ }
1216
+
1207
1217
  /**
1208
1218
  * Fraction of commands completed (0–1). Drives the second half of the
1209
1219
  * loading bar, after signaling reaches `SIGNALLING_PERCENT_VALUE`.
@@ -1222,7 +1232,21 @@ const selectIsExistMatchUrls = createSelector(unrealFeature.selectMatchUrls, (ur
1222
1232
  const selectIsAutostart = createSelector(selectStreamConfig, (config) => config?.autoStart);
1223
1233
  const selectShowReconnectPopup = createSelector(unrealFeature.selectCirrusConnected, unrealFeature.selectEstablishingConnection, (cirrusConnected, establishingConnection) => !cirrusConnected && !establishingConnection);
1224
1234
  const selectShowLoader = createSelector(selectShowReconnectPopup, unrealFeature.selectViewportReady, (showPopup, viewportReady) => !showPopup && !viewportReady);
1225
- const selectSignalingParameters = createSelector(unrealFeature.selectSsData, unrealFeature.selectAwsInstance, (data, instance) => {
1235
+ /**
1236
+ * The connection id of the current stream session.
1237
+ *
1238
+ * The id is issued on the Cirrus side and reaches us either as the
1239
+ * orchestration's `streamRequestId` (polling response / `instanceReserved` /
1240
+ * `instanceReady`) or, when the backend issues none, in the `ssInfo` message
1241
+ * once Cirrus generated it itself. Inside the player it is ONE value —
1242
+ * `connectionId` — and this selector is where the two arrival paths collapse
1243
+ * into it. It names the session everywhere: the debug overlay ("Connection Id")
1244
+ * and the stream telemetry's `sessionId`.
1245
+ *
1246
+ * Also used by external consumers (e.g., metabox). Do not remove.
1247
+ */
1248
+ const selectCirrusConnectionId = createSelector(unrealFeature.selectAwsInstance, unrealFeature.selectSsData, (awsInstance, ssData) => awsInstance?.streamRequestId ?? ssData?.connectionId);
1249
+ const selectSignalingParameters = createSelector(unrealFeature.selectSsData, unrealFeature.selectAwsInstance, selectCirrusConnectionId, (data, instance, connectionId) => {
1226
1250
  const info = [];
1227
1251
  if (data) {
1228
1252
  info.push(`${data.cirrusVersion}, ${data.branchInfo}, ${data.instanceType}`);
@@ -1233,6 +1257,10 @@ const selectSignalingParameters = createSelector(unrealFeature.selectSsData, unr
1233
1257
  // flow, a `wss://` orchestration URL in the other.
1234
1258
  info.push(`Orchestration: ${instance.pollingUrl}`);
1235
1259
  info.push(`WS: ${instance.wsUrl}`);
1260
+ // The stream's `connectionId` — the telemetry ships it as its `sessionId`
1261
+ // (a file name on the collector), and the viewer labels it `Connection Id`
1262
+ // too, so the same value is named the same thing everywhere.
1263
+ info.push(`Connection Id: ${connectionId ?? '—'}`);
1236
1264
  return info.join('<br>');
1237
1265
  });
1238
1266
  const selectClientAndViewIds = createSelector(unrealFeature.selectStreamClientCompanyId, unrealFeature.selectStreamViewId, (clientId, viewId) => ({ clientId, viewId }));
@@ -1276,19 +1304,6 @@ const selectTotalProgress = createSelector(unrealFeature.selectStatusPercentSign
1276
1304
  const progressRest = lerp(0, 1 - splitPoint, commandProgress);
1277
1305
  return clampf(0, 1, progressSignaling + progressRest);
1278
1306
  });
1279
- /**
1280
- * The connection id of the current stream session.
1281
- *
1282
- * Primary source is the orchestration, which issues it as `streamRequestId` —
1283
- * in the polling response (legacy flow) or in `instanceReserved`/`instanceReady`
1284
- * (new orchestration) — and the browser hands it to Cirrus on the WS upgrade
1285
- * URL. `ssData.connectionId` (the `ssInfo` message) is the fallback for
1286
- * backends that don't issue one yet: Cirrus then generates it itself and
1287
- * reports it back here.
1288
- *
1289
- * Used by external consumers (e.g., metabox). Do not remove.
1290
- */
1291
- const selectCirrusConnectionId = createSelector(unrealFeature.selectAwsInstance, unrealFeature.selectSsData, (awsInstance, ssData) => awsInstance?.streamRequestId ?? ssData?.connectionId);
1292
1307
  /** Used by external consumers (e.g., metabox). Do not remove. */
1293
1308
  const selectUserInactivityDetected = createSelector(unrealFeature.selectAfkCountdown, unrealFeature.selectIsAfkTimerVisible, (remainingSecondsToDisconnect, countdownVisible) => ({
1294
1309
  remainingSecondsToDisconnect,
@@ -4343,7 +4358,14 @@ class UnrealEffects {
4343
4358
  return this.actions$.pipe(ofType(dataChannelConnected), withLatestFrom(this.store.select(unrealFeature.selectIsReconnecting)), filter(([, isReconnecting]) => !isReconnecting), exhaustMap(() => concat(of(dataChannelReady()), NEVER).pipe(takeUntil(sessionEnded$))));
4344
4359
  });
4345
4360
  this.initAppByDataChannelReady$ = createEffect(() => {
4346
- return this.actions$.pipe(ofType(dataChannelReady), tap(() => {
4361
+ return this.actions$.pipe(ofType(dataChannelReady), switchMap(() => {
4362
+ // 'default' mode drives a stock Pixel Streaming application: it
4363
+ // understands no MetaBoxCommand, so the boot commands and the loopback
4364
+ // handshake are skipped and the viewport is ready as soon as the data
4365
+ // channel is.
4366
+ if (!isMetaboxMode(this.unrealInitialConfig)) {
4367
+ return of(setLoopBackCommandIsCompleted());
4368
+ }
4347
4369
  this.commandsSender.sendCommandToUnreal({
4348
4370
  command: MetaBoxCommand.FSetFreezeFrameQualityCommand,
4349
4371
  payload: { value: '95' },
@@ -4353,13 +4375,13 @@ class UnrealEffects {
4353
4375
  payload: { value: this.isDevMode },
4354
4376
  });
4355
4377
  this.commandTelemetryService.trackStartCommand('EXT-SetViewportReady');
4356
- }), switchMap(() =>
4357
- // Wait for initial commands to be sent before sending the loopback.
4358
- // commandStarted fires for each sent command; debounce ensures
4359
- // we proceed only after no more commands are started for 50 ms.
4360
- this.actions$.pipe(ofType(commandStarted), debounceTime(50), take(1), switchMap(() => this.unrealCallbackService.observeCommandResponse({ command: MetaBoxCommand.FLoopBackCommand }, (data) => this.commandsSender.sendCommandToUnreal(data))), switchMap(() => this.videoService.videoStats$), filter(({ aggregatedStats: s }) => !!s.framesPerSecond &&
4361
- s.framesPerSecond > MINIMAL_FPS &&
4362
- (s.framesDecoded ?? 0) > 15), take(1), map(() => setLoopBackCommandIsCompleted()))));
4378
+ // Wait for initial commands to be sent before sending the loopback.
4379
+ // commandStarted fires for each sent command; debounce ensures
4380
+ // we proceed only after no more commands are started for 50 ms.
4381
+ return this.actions$.pipe(ofType(commandStarted), debounceTime(50), take(1), switchMap(() => this.unrealCallbackService.observeCommandResponse({ command: MetaBoxCommand.FLoopBackCommand }, (data) => this.commandsSender.sendCommandToUnreal(data))), switchMap(() => this.videoService.videoStats$), filter(({ aggregatedStats: s }) => !!s.framesPerSecond &&
4382
+ s.framesPerSecond > MINIMAL_FPS &&
4383
+ (s.framesDecoded ?? 0) > 15), take(1), map(() => setLoopBackCommandIsCompleted()));
4384
+ }));
4363
4385
  });
4364
4386
  this.setViewportReadyBySetLoopBackCommandIsCompleted$ = createEffect(() => {
4365
4387
  return this.actions$.pipe(ofType(setLoopBackCommandIsCompleted, reconnectPeerSuccess), tap(() => this.commandTelemetryService.trackStopCommand('EXT-SetViewportReady', false, { ready: true })), map(() => setViewportReady()));
@@ -4469,7 +4491,9 @@ class UnrealEffects {
4469
4491
  })));
4470
4492
  });
4471
4493
  this.setMaxFps$ = createEffect(() => {
4472
- return this.actions$.pipe(ofType(setMaxFps), tap(({ maxFps }) => {
4494
+ return this.actions$.pipe(ofType(setMaxFps),
4495
+ // No Metabox commands in 'default' mode.
4496
+ filter(() => isMetaboxMode(this.unrealInitialConfig)), tap(({ maxFps }) => {
4473
4497
  this.commandsSender.sendCommandToUnreal({
4474
4498
  command: MetaBoxCommand.FSetMaxFPSCommand,
4475
4499
  payload: { value: maxFps },
@@ -5790,9 +5814,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
5790
5814
  * - `stream.fps_low` — when the window FPS p50 < 70% of the target
5791
5815
  * - `stream.session_ended` — once per session, on disconnect/pagehide/restart
5792
5816
  *
5793
- * Every event carries `sessionId` + `userId`. Samples carry a monotonic
5794
- * `seq` for server-side ordering & dedup. Durations use `performance.now()`
5795
- * — immune to wall-clock jumps.
5817
+ * Every event carries `sessionId` + `userId`. The `sessionId` IS the stream's
5818
+ * connection id (`selectCirrusConnectionId`) — the same value the debug overlay
5819
+ * shows as "Connection Id" — so a telemetry session can be matched to a Cirrus
5820
+ * player session by id. Since that id only exists once the orchestration
5821
+ * answered, the first events are queued and flushed with it (see
5822
+ * {@link SessionState.wireId}); a session that never got one falls back to a
5823
+ * locally generated uuid. Samples carry a monotonic `seq` for server-side
5824
+ * ordering & dedup. Durations use `performance.now()` — immune to wall-clock
5825
+ * jumps.
5796
5826
  *
5797
5827
  * NOTE: For `stream.session_ended` on the tab close to survive teardown,
5798
5828
  * the Mixpanel client must be configured with `api_transport: 'sendBeacon'`.
@@ -5869,6 +5899,8 @@ class StreamStatusTelemetryService2 {
5869
5899
  /** Streamer identity for the adopted signaling phase params. */
5870
5900
  this.ssData$ = this.store.selectSignal(unrealFeature.selectSsData);
5871
5901
  this.awsInstance$ = this.store.selectSignal(unrealFeature.selectAwsInstance);
5902
+ /** The session's connection id — shipped as `sessionId` on every event. */
5903
+ this.connectionId$ = this.store.selectSignal(selectCirrusConnectionId);
5872
5904
  this.session = null;
5873
5905
  /**
5874
5906
  * Whether a session has already started during the current page lifetime.
@@ -5995,12 +6027,18 @@ class StreamStatusTelemetryService2 {
5995
6027
  event: this.actions$.pipe(ofType(instanceReady)),
5996
6028
  },
5997
6029
  this.configReceivedEntry,
6030
+ // CLOSER — streamer identity from the `ssInfo` message (`cirrusVersion`
6031
+ // / `branchInfo` / `instanceType` / `streamerVersion` / `streamPath` /
6032
+ // `streamApp` / `connectionId`) plus the endpoint that served it. The
6033
+ // `connectionId` param is the session id every event of this session
6034
+ // is shipped under — see {@link SessionState.wireId}.
5998
6035
  {
5999
6036
  id: 'ssinfo-received',
6000
- event: this.store.select(unrealFeature.selectSsData).pipe(filter$1(Boolean), take(1), withLatestFrom$1(this.store.select(unrealFeature.selectAwsInstance)), map(([ssData, aws]) => ({
6037
+ event: this.store.select(unrealFeature.selectSsData).pipe(filter$1(Boolean), take(1), withLatestFrom$1(this.store.select(unrealFeature.selectAwsInstance), this.store.select(selectCirrusConnectionId)), map(([ssData, aws, connectionId]) => ({
6001
6038
  client: aws.wsUrl,
6002
6039
  instanceName: aws.instanceName,
6003
6040
  ...ssData,
6041
+ connectionId,
6004
6042
  }))),
6005
6043
  },
6006
6044
  ],
@@ -6030,15 +6068,13 @@ class StreamStatusTelemetryService2 {
6030
6068
  event: this.signallingService.onWebRtcIce$.pipe(filter$1(Boolean)),
6031
6069
  mode: 'last',
6032
6070
  },
6033
- // CLOSER — snaps negotiation diagnostics and the Cirrus
6034
- // streamer identity (`ssData`, reliably populated by DC-open
6035
- // time) into phase-3 params:
6071
+ // CLOSER — snaps negotiation diagnostics into phase-3 params:
6036
6072
  // - `iceCandidateCount` (total ICE candidates from server — too
6037
6073
  // few hints at a restrictive network)
6038
6074
  // - `handshakeFlow` (server-offer vs. client-offer; we only use
6039
6075
  // server-offer today, but the detector stays in place)
6040
- // - `instanceType` / `branchInfo` / version / path / app /
6041
- // `connectionId` (streamer identity, from `ssInfo` message)
6076
+ // The streamer identity (`connectionId` & co) rides the phase-2
6077
+ // `ssinfo-received` closer, not this one.
6042
6078
  {
6043
6079
  id: 'datachannel-connected',
6044
6080
  event: this.store
@@ -6191,6 +6227,8 @@ class StreamStatusTelemetryService2 {
6191
6227
  const times = new Map();
6192
6228
  this.session = {
6193
6229
  id,
6230
+ wireId: null,
6231
+ outbox: [],
6194
6232
  startedAt,
6195
6233
  startedAtPerf,
6196
6234
  anchorPerf,
@@ -6209,6 +6247,14 @@ class StreamStatusTelemetryService2 {
6209
6247
  commandCount: 0,
6210
6248
  times,
6211
6249
  };
6250
+ // Resolve the wire session id from the stream's connection id, then flush
6251
+ // everything queued so far. Subscribed FIRST so the id is in place before
6252
+ // any closer can fire (a `select` replays the current state synchronously —
6253
+ // an adopted stream already has its id in the store at this point).
6254
+ sub.add(this.store
6255
+ .select(selectCirrusConnectionId)
6256
+ .pipe(filter$1(Boolean), take(1))
6257
+ .subscribe((connectionId) => this.resolveWireId(connectionId)));
6212
6258
  // Side-channel counters for WebRTC negotiation diagnostics — shown
6213
6259
  // as phase-3 params on the `datachannel_connected` closer. Kept
6214
6260
  // imperative (session-scoped) so no RxJS hot-stream plumbing is
@@ -6334,7 +6380,8 @@ class StreamStatusTelemetryService2 {
6334
6380
  endSession(reason) {
6335
6381
  if (!this.session)
6336
6382
  return;
6337
- const { id, sub } = this.session;
6383
+ const session = this.session;
6384
+ const { id, sub } = session;
6338
6385
  // Granular cause + message read from current store state. The
6339
6386
  // unreal reducer updates these synchronously when the originating
6340
6387
  // action (`disconnectStream` / `destroyRemoteConnections`) fires,
@@ -6363,9 +6410,35 @@ class StreamStatusTelemetryService2 {
6363
6410
  : {}),
6364
6411
  timestamp: new Date().toISOString(),
6365
6412
  });
6413
+ // The stream never reached Cirrus (failed connect / abandoned attempt), so
6414
+ // no connection id ever arrived — ship the queue under the local fallback
6415
+ // id rather than dropping it. A no-op once `wireId` resolved.
6416
+ this.flushOutbox(session, id);
6366
6417
  sub.unsubscribe();
6367
6418
  this.session = null;
6368
6419
  }
6420
+ /**
6421
+ * Adopt the stream's connection id as this session's wire id and release the
6422
+ * queue. The id becomes a file name on the collector, so anything that isn't
6423
+ * a plain `[A-Za-z0-9_-]{1,64}` token is rejected (the collector answers 400
6424
+ * to those — that would drop the whole session) and the local uuid is kept.
6425
+ */
6426
+ resolveWireId(connectionId) {
6427
+ const session = this.session;
6428
+ if (!session || session.wireId)
6429
+ return;
6430
+ if (!/^[A-Za-z0-9_-]{1,64}$/.test(connectionId))
6431
+ return;
6432
+ session.wireId = connectionId;
6433
+ this.flushOutbox(session, connectionId);
6434
+ }
6435
+ /** Emit every queued event under `sessionId`, in emission order. */
6436
+ flushOutbox(session, sessionId) {
6437
+ const queued = session.outbox.splice(0);
6438
+ for (const { event, data } of queued) {
6439
+ this.emit(event, { ...data, sessionId });
6440
+ }
6441
+ }
6369
6442
  /**
6370
6443
  * Emit a lifecycle event with a `duration` field — ms between the
6371
6444
  * previous lifecycle event and now (phase-local, NOT anchor-relative).
@@ -6504,7 +6577,9 @@ class StreamStatusTelemetryService2 {
6504
6577
  });
6505
6578
  }
6506
6579
  /** Streamer identity params for the adopted signaling phase — mirrors the
6507
- * `ssinfo-received` closer's shape (client / instanceName / …ssData). */
6580
+ * `ssinfo-received` closer's shape (client / instanceName / …ssData /
6581
+ * connectionId). For an adopted stream `ssData` is the one the prefetch
6582
+ * captured and `streamAdopted` hydrated into the store. */
6508
6583
  adoptedSignalingParams() {
6509
6584
  const aws = this.awsInstance$();
6510
6585
  const ssData = this.ssData$();
@@ -6512,6 +6587,7 @@ class StreamStatusTelemetryService2 {
6512
6587
  client: aws?.wsUrl ?? null,
6513
6588
  instanceName: aws?.instanceName ?? null,
6514
6589
  ...(ssData ?? {}),
6590
+ connectionId: this.connectionId$(),
6515
6591
  };
6516
6592
  }
6517
6593
  /** Read the region-ping cache the prefetch reused (localStorage), so the
@@ -6794,14 +6870,30 @@ class StreamStatusTelemetryService2 {
6794
6870
  max: sorted[sorted.length - 1],
6795
6871
  };
6796
6872
  }
6873
+ /**
6874
+ * Ship one event — or queue it when the session id isn't resolved yet.
6875
+ *
6876
+ * `sessionId` written by the callers is the local fallback; the value that
6877
+ * goes on the wire is always the resolved one ({@link SessionState.wireId}),
6878
+ * stamped here so every event of a session shares a single id.
6879
+ */
6797
6880
  track(event, data) {
6798
6881
  // `userId` is attached to every event, so the server can bucket files
6799
6882
  // under `data/<userId>/<sessionId>.jsonl` without maintaining a
6800
6883
  // session→user index.
6801
- this.store.dispatch(trackTelemetryData({
6802
- event,
6803
- data: { userId: this.userId, ...data },
6804
- }));
6884
+ const enriched = { userId: this.userId, ...data };
6885
+ const session = this.session;
6886
+ if (session && !session.wireId) {
6887
+ session.outbox.push({ event, data: enriched });
6888
+ return;
6889
+ }
6890
+ this.emit(event, {
6891
+ ...enriched,
6892
+ ...(session?.wireId ? { sessionId: session.wireId } : {}),
6893
+ });
6894
+ }
6895
+ emit(event, data) {
6896
+ this.store.dispatch(trackTelemetryData({ event, data }));
6805
6897
  }
6806
6898
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: StreamStatusTelemetryService2, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6807
6899
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: StreamStatusTelemetryService2, providedIn: 'root' }); }
@@ -7984,7 +8076,8 @@ class UnrealSceneComponent {
7984
8076
  }
7985
8077
  sendResize(size) {
7986
8078
  const video = this.videoService.video;
7987
- if (!video) {
8079
+ // No Metabox commands in 'default' mode.
8080
+ if (!video || !isMetaboxMode(this.unrealConfig)) {
7988
8081
  return;
7989
8082
  }
7990
8083
  this.commandsSender.sendCommandToUnreal({
@@ -8059,7 +8152,9 @@ function provideUnrealModule() {
8059
8152
  inject(AFKService);
8060
8153
  inject(FreezeFrameService);
8061
8154
  inject(AnalyticsService);
8062
- inject(FpsMonitorService);
8155
+ // FpsMonitorService is intentionally not instantiated — adaptive FPS
8156
+ // control is disabled for now. Re-add `inject(FpsMonitorService)` here
8157
+ // (and set `fpsMonitor: true` in UNREAL_CONFIG) to turn it back on.
8063
8158
  }),
8064
8159
  ]);
8065
8160
  }
@@ -8068,5 +8163,5 @@ function provideUnrealModule() {
8068
8163
  * Generated bundle index. Do not edit.
8069
8164
  */
8070
8165
 
8071
- 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, 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, 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, startStream, streamAdopted, trackMixpanelEvent, trackTelemetryData, uint8ToBase64, unrealCommandCallback, unrealFeature, unrealReducer, updateCirrusInfo, videoAdaptedToContainer, videoStreamInitialized };
8166
+ 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, 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, 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, isMetaboxMode, 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, startStream, streamAdopted, trackMixpanelEvent, trackTelemetryData, uint8ToBase64, unrealCommandCallback, unrealFeature, unrealReducer, updateCirrusInfo, videoAdaptedToContainer, videoStreamInitialized };
8072
8167
  //# sourceMappingURL=3dsource-angular-unreal-module.mjs.map