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