@3dsource/angular-unreal-module 0.0.44 → 0.0.49
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/LICENSE +0 -0
- package/README.md +105 -50
- package/fesm2022/3dsource-angular-unreal-module.mjs +557 -366
- package/fesm2022/3dsource-angular-unreal-module.mjs.map +1 -1
- package/index.d.ts +210 -96
- package/package.json +7 -7
- package/index.d.ts.map +0 -1
package/index.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ declare class SubService {
|
|
|
44
44
|
|
|
45
45
|
declare class AFKService extends SubService {
|
|
46
46
|
private enabled;
|
|
47
|
-
private closeTimeout;
|
|
47
|
+
private readonly closeTimeout;
|
|
48
48
|
private active;
|
|
49
49
|
private warnTimer;
|
|
50
50
|
private countdown;
|
|
@@ -295,30 +295,35 @@ interface PingResult {
|
|
|
295
295
|
declare const WSCloseCode_NORMAL_CLOSURE = 3000;
|
|
296
296
|
declare const WSCloseCode_NORMAL_AFK_TIMEOUT = 3001;
|
|
297
297
|
declare const WSCloseCode_NORMAL_MANUAL_DISCONNECT = 3002;
|
|
298
|
-
declare const
|
|
299
|
-
declare const
|
|
298
|
+
declare const WSCloseCode_FORCE_CIRRUS_CLOSE = 3003;
|
|
299
|
+
declare const WSCloseCode_CIRRUS_PLAYER_DISCONNECTED = 1001;
|
|
300
|
+
declare const WSCloseCode_CIRRUS_ABNORMAL_CLOSURE = 1006;
|
|
301
|
+
declare const WSCloseCode_CIRRUS_MAX_PLAYERS_ERROR = 1013;
|
|
302
|
+
declare const WSCloseCode_CIRRUS_STREAMER_KIKED_PLAYER = 1011;
|
|
303
|
+
declare const WSCloseCodes: readonly [3000, 3001, 3002, 3003, 1013, 1006];
|
|
300
304
|
type WSCloseCodesValues = (typeof WSCloseCodes)[number];
|
|
301
305
|
|
|
302
|
-
interface CloseReason {
|
|
303
|
-
code: WSCloseCodesValues;
|
|
304
|
-
reason: string;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
306
|
declare const DisconnectReason: {
|
|
308
|
-
readonly
|
|
309
|
-
readonly
|
|
310
|
-
readonly
|
|
311
|
-
readonly
|
|
312
|
-
readonly
|
|
313
|
-
readonly
|
|
307
|
+
readonly Afk: "Afk";
|
|
308
|
+
readonly None: "None";
|
|
309
|
+
readonly Destroy: "Destroy";
|
|
310
|
+
readonly DataChannelClosed: "DataChannelClosed";
|
|
311
|
+
readonly DataChannelTimeout: "DataChannelTimeout";
|
|
312
|
+
readonly WebRTCError: "WebRTCError";
|
|
313
|
+
readonly WebSocketError: "WebSocketError";
|
|
314
|
+
readonly WebSocketClose: "WebSocketClose";
|
|
315
|
+
readonly DropConnection: "DropConnection";
|
|
314
316
|
};
|
|
315
|
-
type
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
errorType: UnrealErrorType;
|
|
317
|
+
type DisconnectReasonType = (typeof DisconnectReason)[keyof typeof DisconnectReason];
|
|
318
|
+
interface ConnectionError {
|
|
319
|
+
reason: DisconnectReasonType;
|
|
319
320
|
message: string;
|
|
320
321
|
}
|
|
321
|
-
|
|
322
|
+
|
|
323
|
+
interface CloseReason {
|
|
324
|
+
code: WSCloseCodesValues;
|
|
325
|
+
reason: DisconnectReasonType;
|
|
326
|
+
}
|
|
322
327
|
|
|
323
328
|
interface FreezeFrameMessage {
|
|
324
329
|
dataUrl: string | null;
|
|
@@ -422,6 +427,7 @@ declare const CONSOLE_COMMAND_PIXEL_QUALITY = "PixelStreaming.FreezeFrameQuality
|
|
|
422
427
|
declare const FULL_HD_WIDTH = 1920;
|
|
423
428
|
declare const FULL_HD_HEIGHT = 1080;
|
|
424
429
|
declare const WS_TIMEOUT = 2000;
|
|
430
|
+
declare const POLLING_TIME = 4000;
|
|
425
431
|
declare const WS_OPEN_STATE = 1;
|
|
426
432
|
declare const DEFAULT_AFK_TIMEOUT_PERIOD = 15;
|
|
427
433
|
declare const DEFAULT_AFK_TIMEOUT = 120;
|
|
@@ -476,7 +482,11 @@ declare function OnMessageHandler(this: SignallingService, e: MessageEvent<strin
|
|
|
476
482
|
|
|
477
483
|
declare function OnOpenHandler(this: SignallingService): void;
|
|
478
484
|
|
|
479
|
-
|
|
485
|
+
/**
|
|
486
|
+
* Keeps the max of numbers seen so far; resets to 0 whenever `reset$` emits.
|
|
487
|
+
* Emits `0` immediately on reset.
|
|
488
|
+
*/
|
|
489
|
+
declare const clampAndKeepMaxPercents: (reset$: Observable<unknown>) => ((source: Observable<number>) => Observable<number>);
|
|
480
490
|
|
|
481
491
|
declare function observeCommandResponse<K extends keyof MetaBoxCommandList, T extends MetaBoxCommandList[K] = MetaBoxCommandList[K]>(data: T, sender: (data: T) => void, timeOut?: number, dispatchOnTimeout?: boolean): Observable<ObservedCallbackResponse<T> | never>;
|
|
482
492
|
interface ObservedCallbackResponse<T extends MetaBoxCommandPacket> {
|
|
@@ -704,11 +714,11 @@ declare const setMaxFps: _ngrx_store.ActionCreator<string, (props: {
|
|
|
704
714
|
maxFps: number;
|
|
705
715
|
} & _ngrx_store.Action<string>>;
|
|
706
716
|
declare const destroyRemoteConnections: _ngrx_store.ActionCreator<string, (props: {
|
|
707
|
-
|
|
717
|
+
reason: DisconnectReasonType;
|
|
708
718
|
}) => {
|
|
709
|
-
|
|
719
|
+
reason: DisconnectReasonType;
|
|
710
720
|
} & _ngrx_store.Action<string>>;
|
|
711
|
-
declare const
|
|
721
|
+
declare const destroyUnrealScene: _ngrx_store.ActionCreator<string, () => _ngrx_store.Action<string>>;
|
|
712
722
|
declare const setCirrusConnected: _ngrx_store.ActionCreator<string, () => _ngrx_store.Action<string>>;
|
|
713
723
|
declare const setCirrusDisconnected: _ngrx_store.ActionCreator<string, () => _ngrx_store.Action<string>>;
|
|
714
724
|
declare const changeStatusMainVideoOnScene: _ngrx_store.ActionCreator<string, (props: {
|
|
@@ -786,32 +796,25 @@ declare const setEstablishingConnection: _ngrx_store.ActionCreator<string, (prop
|
|
|
786
796
|
value: boolean;
|
|
787
797
|
} & _ngrx_store.Action<string>>;
|
|
788
798
|
declare const setDataChannelConnected: _ngrx_store.ActionCreator<string, (props: {
|
|
789
|
-
|
|
799
|
+
message: string;
|
|
790
800
|
}) => {
|
|
791
|
-
|
|
801
|
+
message: string;
|
|
792
802
|
} & _ngrx_store.Action<string>>;
|
|
793
803
|
declare const setConfig: _ngrx_store.ActionCreator<string, (props: {
|
|
794
804
|
config: Partial<StreamConfig>;
|
|
795
805
|
}) => {
|
|
796
806
|
config: Partial<StreamConfig>;
|
|
797
807
|
} & _ngrx_store.Action<string>>;
|
|
798
|
-
declare const
|
|
799
|
-
|
|
800
|
-
}) => {
|
|
801
|
-
matchMakerUrls: string[];
|
|
802
|
-
} & _ngrx_store.Action<string>>;
|
|
803
|
-
declare const setErrorMessage: _ngrx_store.ActionCreator<string, (props: {
|
|
804
|
-
errorType: UnrealErrorType;
|
|
808
|
+
declare const disconnectStream: _ngrx_store.ActionCreator<string, (props: {
|
|
809
|
+
reason: DisconnectReasonType;
|
|
805
810
|
message: string;
|
|
806
811
|
}) => {
|
|
807
|
-
|
|
812
|
+
reason: DisconnectReasonType;
|
|
808
813
|
message: string;
|
|
809
814
|
} & _ngrx_store.Action<string>>;
|
|
810
|
-
declare const
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
value: boolean;
|
|
814
|
-
} & _ngrx_store.Action<string>>;
|
|
815
|
+
declare const dropConnection: _ngrx_store.ActionCreator<string, () => _ngrx_store.Action<string>>;
|
|
816
|
+
declare const setViewportReady: _ngrx_store.ActionCreator<string, () => _ngrx_store.Action<string>>;
|
|
817
|
+
declare const setViewportNotReady: _ngrx_store.ActionCreator<string, () => _ngrx_store.Action<string>>;
|
|
815
818
|
declare const changeStreamResolutionAction: _ngrx_store.ActionCreator<string, (props: {
|
|
816
819
|
width: number | null;
|
|
817
820
|
height: number | null;
|
|
@@ -858,13 +861,20 @@ declare const showUnrealErrorMessage: _ngrx_store.ActionCreator<string, (props:
|
|
|
858
861
|
code: number | null;
|
|
859
862
|
error?: string;
|
|
860
863
|
} & _ngrx_store.Action<string>>;
|
|
861
|
-
declare const initSignalling: _ngrx_store.
|
|
862
|
-
|
|
864
|
+
declare const initSignalling: _ngrx_store.FunctionWithParametersType<[data?: {
|
|
865
|
+
resetDisconnectionReason: boolean;
|
|
866
|
+
} | undefined], {
|
|
867
|
+
resetDisconnectionReason: boolean;
|
|
868
|
+
} & _ngrx_store.Action<string>> & _ngrx_store.Action<string>;
|
|
869
|
+
declare const startStream: _ngrx_store.ActionCreator<string, (props: {
|
|
870
|
+
config: Partial<StreamConfig>;
|
|
871
|
+
}) => {
|
|
872
|
+
config: Partial<StreamConfig>;
|
|
873
|
+
} & _ngrx_store.Action<string>>;
|
|
863
874
|
declare const resetConfig: _ngrx_store.ActionCreator<string, () => _ngrx_store.Action<string>>;
|
|
864
875
|
declare const resetAfkAction: _ngrx_store.ActionCreator<string, () => _ngrx_store.Action<string>>;
|
|
865
876
|
declare const resetWarnTimeout: _ngrx_store.ActionCreator<string, () => _ngrx_store.Action<string>>;
|
|
866
|
-
declare const
|
|
867
|
-
declare const resetUnrealState: _ngrx_store.ActionCreator<string, () => _ngrx_store.Action<string>>;
|
|
877
|
+
declare const abortEstablishingConnection: _ngrx_store.ActionCreator<string, () => _ngrx_store.Action<string>>;
|
|
868
878
|
|
|
869
879
|
declare class UnrealEffects {
|
|
870
880
|
private dialog;
|
|
@@ -879,14 +889,14 @@ declare class UnrealEffects {
|
|
|
879
889
|
private commandsSender;
|
|
880
890
|
private videoService;
|
|
881
891
|
private dataChannelConnectionTimeout;
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
disconnectReason: _3dsource_angular_unreal_module.DisconnectType;
|
|
892
|
+
disconnectReasonHandling$: rxjs.Observable<{
|
|
893
|
+
reason: _3dsource_angular_unreal_module.DisconnectReasonType;
|
|
885
894
|
} & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
disconnectReason: _3dsource_angular_unreal_module.DisconnectType;
|
|
895
|
+
destroyConnections$: rxjs.Observable<{
|
|
896
|
+
reason: _3dsource_angular_unreal_module.DisconnectReasonType;
|
|
889
897
|
} & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
898
|
+
destroyRemoteConnections$: rxjs.Observable<_ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
899
|
+
webrtcErrorModalComponent$: rxjs.Observable<false> & _ngrx_effects.CreateEffectMetadata;
|
|
890
900
|
changeStreamResolution$: rxjs.Observable<{
|
|
891
901
|
width: number | null;
|
|
892
902
|
height: number | null;
|
|
@@ -901,37 +911,51 @@ declare class UnrealEffects {
|
|
|
901
911
|
} & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
902
912
|
sendLbmStat$: rxjs.Subscription;
|
|
903
913
|
resetAfk$: rxjs.Observable<_ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
904
|
-
|
|
905
|
-
dataUrl: string | null;
|
|
906
|
-
progress: number | null;
|
|
907
|
-
} & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
914
|
+
abortEstablishingConnection$: rxjs.Observable<_ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
908
915
|
setMaxFps$: rxjs.Observable<{
|
|
909
916
|
maxFps: number;
|
|
910
917
|
} & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
911
|
-
webrtcErrorModalComponent$: rxjs.Observable<[arg: {
|
|
912
|
-
errorType: _3dsource_angular_unreal_module.UnrealErrorType;
|
|
913
|
-
message: string;
|
|
914
|
-
} & _ngrx_store.Action<string>, boolean]> & _ngrx_effects.CreateEffectMetadata;
|
|
915
918
|
resetAfkAction$: rxjs.Observable<_ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
919
|
+
setSignalingTo100$: rxjs.Observable<{
|
|
920
|
+
percent: number | null;
|
|
921
|
+
} & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
916
922
|
setDataChannelTimeoutCheck$: rxjs.Observable<{
|
|
917
|
-
|
|
923
|
+
reason: _3dsource_angular_unreal_module.DisconnectReasonType;
|
|
924
|
+
message: string;
|
|
925
|
+
} & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
926
|
+
destroyConnectionAndRestart$: rxjs.Observable<{
|
|
927
|
+
resetDisconnectionReason: boolean;
|
|
918
928
|
} & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
919
|
-
destroyConnectionAndRestart$: rxjs.Observable<_ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
920
929
|
showUnrealError$: rxjs.Observable<{
|
|
921
930
|
code: number | null;
|
|
922
931
|
error?: string;
|
|
923
932
|
} & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
924
933
|
sendStatisticsToUnreal$: rxjs.Observable<Object> & _ngrx_effects.CreateEffectMetadata;
|
|
925
934
|
initAppBySetDataChannelConnected$: rxjs.Observable<_ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
926
|
-
setViewportReadyBySetLoopBackCommandIsCompleted$: rxjs.Observable<
|
|
927
|
-
|
|
935
|
+
setViewportReadyBySetLoopBackCommandIsCompleted$: rxjs.Observable<_ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
936
|
+
startStream$: rxjs.Observable<{
|
|
937
|
+
resetDisconnectionReason: boolean;
|
|
928
938
|
} & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
929
939
|
listenUnrealCallbackByInitSignalling$: rxjs.Observable<{
|
|
930
940
|
id: string;
|
|
931
941
|
} & _ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
942
|
+
connectToSignaling$: rxjs.Observable<WebSocket> & _ngrx_effects.CreateEffectMetadata;
|
|
943
|
+
/**
|
|
944
|
+
* Effect: `forceViewportNotReady$`
|
|
945
|
+
*
|
|
946
|
+
* Ensures the viewport is explicitly marked as *not ready* to prevent
|
|
947
|
+
* a temporary black screen flash when disconnecting.
|
|
948
|
+
*
|
|
949
|
+
* ### Why
|
|
950
|
+
* - The video stream is disconnected immediately.
|
|
951
|
+
* - The DataChannel closes slightly later.
|
|
952
|
+
* - Closing the DataChannel resets the Unreal scene,
|
|
953
|
+
* which also sets `viewPortReady` to `false`.
|
|
954
|
+
*
|
|
955
|
+
* Without this effect, the order of these events may cause
|
|
956
|
+
* a visible flicker (video flashing to black).
|
|
957
|
+
*/
|
|
958
|
+
forceViewportNotReady$: rxjs.Observable<_ngrx_store.Action<string>> & _ngrx_effects.CreateEffectMetadata;
|
|
935
959
|
static ɵfac: i0.ɵɵFactoryDeclaration<UnrealEffects, never>;
|
|
936
960
|
static ɵprov: i0.ɵɵInjectableDeclaration<UnrealEffects>;
|
|
937
961
|
}
|
|
@@ -941,9 +965,7 @@ declare const unrealFeature: {
|
|
|
941
965
|
reducer: _ngrx_store.ActionReducer<_3dsource_angular_unreal_module.UnrealState, _ngrx_store.Action<string>>;
|
|
942
966
|
selectUnrealFeatureState: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.UnrealState, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.UnrealState>;
|
|
943
967
|
selectLowBandwidth: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (featureState: _3dsource_angular_unreal_module.UnrealState) => boolean>;
|
|
944
|
-
selectDisconnectReason: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.DisconnectType, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.DisconnectType>;
|
|
945
968
|
selectIsVideoPlaying: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (featureState: _3dsource_angular_unreal_module.UnrealState) => boolean>;
|
|
946
|
-
selectMatchMakerUrls: _ngrx_store.MemoizedSelector<Record<string, any>, string[], (featureState: _3dsource_angular_unreal_module.UnrealState) => string[]>;
|
|
947
969
|
selectSsInfo: _ngrx_store.MemoizedSelector<Record<string, any>, string | null, (featureState: _3dsource_angular_unreal_module.UnrealState) => string | null>;
|
|
948
970
|
selectSsData: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.SignalingData | null, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.SignalingData | null>;
|
|
949
971
|
selectLowBandwidthStats: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.LBMStats | undefined, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.LBMStats | undefined>;
|
|
@@ -951,17 +973,17 @@ declare const unrealFeature: {
|
|
|
951
973
|
selectAwsInstance: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.AwsInstance, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.AwsInstance>;
|
|
952
974
|
selectWasInitialized: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (featureState: _3dsource_angular_unreal_module.UnrealState) => boolean>;
|
|
953
975
|
selectIsFirstSuccessLoad: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (featureState: _3dsource_angular_unreal_module.UnrealState) => boolean>;
|
|
954
|
-
selectIsFreezeLoaderPercents: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (featureState: _3dsource_angular_unreal_module.UnrealState) => boolean>;
|
|
955
976
|
selectCirrusConnected: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (featureState: _3dsource_angular_unreal_module.UnrealState) => boolean>;
|
|
956
977
|
selectViewportReady: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (featureState: _3dsource_angular_unreal_module.UnrealState) => boolean>;
|
|
957
978
|
selectFreezeFrameFromVideo: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.FreezeFrameMessage, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.FreezeFrameMessage>;
|
|
958
979
|
selectFreezeFrame: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.FreezeFrameMessage, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.FreezeFrameMessage>;
|
|
959
980
|
selectStatusMessage: _ngrx_store.MemoizedSelector<Record<string, any>, string | null, (featureState: _3dsource_angular_unreal_module.UnrealState) => string | null>;
|
|
960
981
|
selectStatusPercentSignallingServer: _ngrx_store.MemoizedSelector<Record<string, any>, number | null, (featureState: _3dsource_angular_unreal_module.UnrealState) => number | null>;
|
|
961
|
-
selectErrorMessage: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.
|
|
982
|
+
selectErrorMessage: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.ConnectionError | null, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.ConnectionError | null>;
|
|
962
983
|
selectDataChannelConnected: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (featureState: _3dsource_angular_unreal_module.UnrealState) => boolean>;
|
|
963
984
|
selectStreamResolution: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.StreamResolutionProps, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.StreamResolutionProps>;
|
|
964
985
|
selectEstablishingConnection: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (featureState: _3dsource_angular_unreal_module.UnrealState) => boolean>;
|
|
986
|
+
selectDisconnectReason: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.DisconnectReasonType, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.DisconnectReasonType>;
|
|
965
987
|
selectLoaderCommands: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.CommandsLoaderState, (featureState: _3dsource_angular_unreal_module.UnrealState) => _3dsource_angular_unreal_module.CommandsLoaderState>;
|
|
966
988
|
selectMatchUrls: _ngrx_store.MemoizedSelector<Record<string, any>, string[], (featureState: _3dsource_angular_unreal_module.UnrealState) => string[]>;
|
|
967
989
|
selectStreamClientCompanyId: _ngrx_store.MemoizedSelector<Record<string, any>, string | null, (featureState: _3dsource_angular_unreal_module.UnrealState) => string | null>;
|
|
@@ -983,12 +1005,10 @@ interface CommandsLoaderState {
|
|
|
983
1005
|
interface UnrealState {
|
|
984
1006
|
lowBandwidthStats: LBMStats | undefined;
|
|
985
1007
|
streamConfig: StreamConfig;
|
|
986
|
-
matchMakerUrls: string[];
|
|
987
1008
|
awsInstance: AwsInstance;
|
|
988
1009
|
lowBandwidth: boolean;
|
|
989
1010
|
wasInitialized: boolean;
|
|
990
1011
|
isFirstSuccessLoad: boolean;
|
|
991
|
-
isFreezeLoaderPercents: boolean;
|
|
992
1012
|
cirrusConnected: boolean;
|
|
993
1013
|
viewportReady: boolean;
|
|
994
1014
|
freezeFrameFromVideo: FreezeFrameMessage;
|
|
@@ -1000,12 +1020,12 @@ interface UnrealState {
|
|
|
1000
1020
|
ssInfo: string | null;
|
|
1001
1021
|
ssData: SignalingData | null;
|
|
1002
1022
|
statusPercentSignallingServer: number | null;
|
|
1003
|
-
errorMessage:
|
|
1023
|
+
errorMessage: ConnectionError | null;
|
|
1004
1024
|
dataChannelConnected: boolean;
|
|
1005
1025
|
streamResolution: StreamResolutionProps;
|
|
1006
1026
|
isVideoPlaying: boolean;
|
|
1007
1027
|
establishingConnection: boolean;
|
|
1008
|
-
disconnectReason:
|
|
1028
|
+
disconnectReason: DisconnectReasonType;
|
|
1009
1029
|
loaderCommands: CommandsLoaderState;
|
|
1010
1030
|
matchUrls: string[];
|
|
1011
1031
|
streamClientCompanyId: string | null;
|
|
@@ -1024,11 +1044,10 @@ declare const selectIsFreezeFrameLoading: _ngrx_store.MemoizedSelector<Record<st
|
|
|
1024
1044
|
declare const selectFreezeFrameCombinedDataUrl: _ngrx_store.MemoizedSelector<Record<string, any>, string | null, (s1: string | null, s2: string | null) => string | null>;
|
|
1025
1045
|
declare const selectStreamConfig: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.StreamConfig, (s1: _3dsource_angular_unreal_module.StreamConfig) => _3dsource_angular_unreal_module.StreamConfig>;
|
|
1026
1046
|
declare const selectWarnTimeout: _ngrx_store.MemoizedSelector<Record<string, any>, number, (s1: _3dsource_angular_unreal_module.StreamConfig) => number>;
|
|
1027
|
-
declare const selectMatchMakerUrls: _ngrx_store.MemoizedSelector<Record<string, any>, string[], (s1: string[]) => string[]>;
|
|
1028
1047
|
declare const selectIsAutostart: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (s1: _3dsource_angular_unreal_module.StreamConfig) => boolean>;
|
|
1029
|
-
declare const
|
|
1030
|
-
declare const selectShowReconnectPopup: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (s1: boolean, s2: boolean
|
|
1031
|
-
declare const selectShowLoader: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (s1: boolean, s2: boolean
|
|
1048
|
+
declare const showPopupWithoutAutoStart: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (s1: _3dsource_angular_unreal_module.StreamConfig, s2: boolean) => boolean>;
|
|
1049
|
+
declare const selectShowReconnectPopup: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (s1: boolean, s2: boolean) => boolean>;
|
|
1050
|
+
declare const selectShowLoader: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (s1: boolean, s2: boolean) => boolean>;
|
|
1032
1051
|
declare const selectIsVideoPlayingAndDataChannelConnected: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (s1: boolean, s2: boolean) => boolean>;
|
|
1033
1052
|
declare const selectSignalingParameters: _ngrx_store.MemoizedSelector<Record<string, any>, string, (s1: _3dsource_angular_unreal_module.SignalingData | null, s2: _3dsource_angular_unreal_module.AwsInstance, s3: string | null) => string>;
|
|
1034
1053
|
declare const selectLoaderCommands: _ngrx_store.MemoizedSelector<Record<string, any>, _3dsource_angular_unreal_module.CommandsLoaderState, (s1: _3dsource_angular_unreal_module.CommandsLoaderState) => _3dsource_angular_unreal_module.CommandsLoaderState>;
|
|
@@ -1047,6 +1066,14 @@ declare const selectLastCommandInProgress: _ngrx_store.MemoizedSelector<Record<s
|
|
|
1047
1066
|
* Returns Scene load progress as a float value in between 0-1
|
|
1048
1067
|
*/
|
|
1049
1068
|
declare const selectTotalProgress: _ngrx_store.MemoizedSelector<Record<string, any>, number, (s1: number | null, s2: number, s3: _3dsource_angular_unreal_module.AwsInstance) => number>;
|
|
1069
|
+
declare const selectClientAndViewIds: _ngrx_store.MemoizedSelector<Record<string, any>, {
|
|
1070
|
+
clientId: string | null;
|
|
1071
|
+
viewId: string | null;
|
|
1072
|
+
}, (s1: string | null, s2: string | null) => {
|
|
1073
|
+
clientId: string | null;
|
|
1074
|
+
viewId: string | null;
|
|
1075
|
+
}>;
|
|
1076
|
+
declare const isLoaderScreenVisible: _ngrx_store.MemoizedSelector<Record<string, any>, boolean, (s1: boolean, s2: boolean, s3: boolean) => boolean>;
|
|
1050
1077
|
|
|
1051
1078
|
declare const removeExileCommands: (state: CommandsLoaderState, idToRemove: string) => {
|
|
1052
1079
|
commandsInProgress: {
|
|
@@ -1080,6 +1107,7 @@ interface LBMStats {
|
|
|
1080
1107
|
type Quality = 'lime' | 'red' | 'orange';
|
|
1081
1108
|
|
|
1082
1109
|
interface SignalingData {
|
|
1110
|
+
instanceType: string;
|
|
1083
1111
|
branchInfo: string;
|
|
1084
1112
|
cirrusVersion: string;
|
|
1085
1113
|
streamerVersion: string;
|
|
@@ -1264,39 +1292,127 @@ interface AwsInstance {
|
|
|
1264
1292
|
}
|
|
1265
1293
|
|
|
1266
1294
|
declare class SignallingService extends SubService {
|
|
1295
|
+
private readonly action$;
|
|
1267
1296
|
private readonly httpClient;
|
|
1268
1297
|
private readonly regionsPingService;
|
|
1269
1298
|
onOffer$: Subject<RTCSessionDescriptionInit>;
|
|
1270
1299
|
onConfig$: Subject<ConfigMessage>;
|
|
1271
1300
|
onWebRtcIce$: Subject<RTCIceCandidate>;
|
|
1272
1301
|
onWebRtcAnswer$: Subject<RTCSessionDescriptionInit | null>;
|
|
1302
|
+
abort$: Observable<_ngrx_store.Action<string>>;
|
|
1273
1303
|
private ws;
|
|
1274
|
-
protected wsTimeoutHandler: ReturnType<typeof setTimeout>;
|
|
1275
1304
|
private wsMsgHandlers;
|
|
1276
1305
|
protected correlationId: string;
|
|
1277
1306
|
protected environmentId: string;
|
|
1278
|
-
private establishingConnection;
|
|
1279
|
-
private isCirrusConnected;
|
|
1280
|
-
private establishingConnectionDrop$;
|
|
1281
1307
|
constructor();
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
private
|
|
1285
|
-
|
|
1308
|
+
connectToSignaling(urlList: string[]): Observable<WebSocket>;
|
|
1309
|
+
protected startEstablishingConnection(): void;
|
|
1310
|
+
private adaptUrlsToRegion;
|
|
1311
|
+
/**
|
|
1312
|
+
* Resolves an active AWS *signaling* instance and returns a WebSocket endpoint.
|
|
1313
|
+
*
|
|
1314
|
+
* The observable produced by this method is **cold** and executes inside a `defer`,
|
|
1315
|
+
* so each subscription (including those triggered by `retry`) pulls the **next**
|
|
1316
|
+
* URL candidate from a generator created by `getActiveUrl(urlsPool)`.
|
|
1317
|
+
*
|
|
1318
|
+
* ### Execution flow
|
|
1319
|
+
*
|
|
1320
|
+
* 1. **Telemetry** — Starts a `getSignaling` span for end-to-end timing.
|
|
1321
|
+
* 2. **Candidate URL selection** — A stateful generator (`urlGen`) is created
|
|
1322
|
+
* from `urlsPool`. Each resubscription (e.g. via `retry`) advances to the next URL.
|
|
1323
|
+
* 3. **Short-circuit for WS URLs** — If the picked candidate already matches
|
|
1324
|
+
* `ws://` or `wss://`, emit `{ wsUrl, pollingUrl: null, instanceName: null }`
|
|
1325
|
+
* immediately and complete (no HTTP request).
|
|
1326
|
+
* 4. **Await client/view identifiers** — `this.store.select(selectClientAndViewIds)`
|
|
1327
|
+
* is tapped for logging (missing IDs) and then filtered to require both `clientId`
|
|
1328
|
+
* and `viewId` to be truthy.
|
|
1329
|
+
* 5. **Single in-flight HTTP orchestration call** — Uses `exhaustMap` to issue
|
|
1330
|
+
* `GET {signalingUrl}{clientId}/{viewId}`. New `{clientId, viewId}` emissions
|
|
1331
|
+
* while the request is in flight are **ignored** until completion, preventing overlap.
|
|
1332
|
+
* 6. **Per-attempt timeout** — `timeout(WS_TIMEOUT)` caps how long we wait for a response.
|
|
1333
|
+
* On timeout, the attempt errors and the outer `retry` schedules the next URL.
|
|
1334
|
+
* 7. **Response validation & progress reporting** — A `filter`:
|
|
1335
|
+
* - Calls `TelemetryStop('getSignaling', { ...data, multi: true })` on receipt.
|
|
1336
|
+
* - If `data.signallingServer === ''` or `data.error`:
|
|
1337
|
+
* shows a status message, optionally dispatches `setStatusPercentSignallingServer`
|
|
1338
|
+
* with `data.info.percent`, and **throws** to fail the attempt (triggers `retry`).
|
|
1339
|
+
* 8. **Mapping to `AwsInstance`** — Converts the validated orchestration payload into:
|
|
1340
|
+
* - `wsUrl`: via `httpUrlToWs(\`\${location.protocol}//\${data.signallingServer}\`)`
|
|
1341
|
+
* - `pollingUrl`: the base `signalingUrl` that succeeded
|
|
1342
|
+
* - `instanceName`: the (validated) `data.signallingServer`
|
|
1343
|
+
* 9. **Retry policy** — On *any* upstream error (timeout, HTTP error, invalid payload),
|
|
1344
|
+
* `retry({ delay })`:
|
|
1345
|
+
* - Shows a “connecting” status,
|
|
1346
|
+
* - Logs the attempt number,
|
|
1347
|
+
* - Waits `WS_TIMEOUT` ms (via `timer`) and **resubscribes**, advancing `urlGen`.
|
|
1348
|
+
*
|
|
1349
|
+
* ### Concurrency semantics
|
|
1350
|
+
*
|
|
1351
|
+
* - `exhaustMap` guarantees a **single** HTTP request per attempt; subsequent
|
|
1352
|
+
* `{clientId, viewId}` emissions are ignored until the current request completes.
|
|
1353
|
+
*
|
|
1354
|
+
* ### Telemetry semantics
|
|
1355
|
+
*
|
|
1356
|
+
* - `TelemetryStart('getSignaling')` begins before work.
|
|
1357
|
+
* - `TelemetryStop('getSignaling', {...})` runs on receipt of an orchestration response.
|
|
1358
|
+
* If an attempt fails (e.g., timeout), stopping the span is the responsibility of
|
|
1359
|
+
* your telemetry layer or a `finalize` elsewhere if desired.
|
|
1360
|
+
*
|
|
1361
|
+
* ### Error & retry semantics
|
|
1362
|
+
*
|
|
1363
|
+
* - Missing/never-emitted IDs → timeout → retry with next URL.
|
|
1364
|
+
* - HTTP/network error → retry with next URL.
|
|
1365
|
+
* - Invalid orchestration payload (`error` set or empty `signallingServer`) → throw in
|
|
1366
|
+
* validation filter → retry with next URL.
|
|
1367
|
+
* - Short-circuit WS path **does not** retry (emits once, completes).
|
|
1368
|
+
*
|
|
1369
|
+
* @param urlsPool - Ordered list of base URLs to probe. Retries advance through this list
|
|
1370
|
+
* until a working signaling server is found. A candidate may also be a direct `ws://`/`wss://`
|
|
1371
|
+
* URL to short-circuit HTTP orchestration.
|
|
1372
|
+
*
|
|
1373
|
+
* @returns Observable that emits exactly one {@link AwsInstance} on success and then completes.
|
|
1374
|
+
* On failure, the stream errors; the built-in `retry` operator re-subscribes after `WS_TIMEOUT`
|
|
1375
|
+
* and advances to the next URL candidate.
|
|
1376
|
+
*
|
|
1377
|
+
* @throws Emits an error within the observable chain (not a thrown synchronous exception) when:
|
|
1378
|
+
* - The HTTP request fails or times out.
|
|
1379
|
+
* - The orchestration response indicates an error or an empty `signallingServer`.
|
|
1380
|
+
* - Any other operator in the chain surfaces an error.
|
|
1381
|
+
*
|
|
1382
|
+
* @remarks
|
|
1383
|
+
* - The URL generator (`urlGen`) is created **outside** `defer`, so resubscriptions
|
|
1384
|
+
* advance the pool. Creating it inside `defer` would restart from the first URL each retry.
|
|
1385
|
+
* - `location.protocol` is used to derive `ws` vs `wss`. If this may run in non-browser
|
|
1386
|
+
* contexts (e.g., SSR), guard or abstract this logic.
|
|
1387
|
+
* - Consider capping retries with `count` in `retry({ count, delay })` when appropriate.
|
|
1388
|
+
*
|
|
1389
|
+
* @example
|
|
1390
|
+
* ```ts
|
|
1391
|
+
* getAwsInstance(['https://signaling.example.com/', 'wss://direct.example.com'])
|
|
1392
|
+
* .subscribe({
|
|
1393
|
+
* next: ({ wsUrl }) => connect(wsUrl),
|
|
1394
|
+
* error: (e) => console.error('Unable to establish signaling:', e),
|
|
1395
|
+
* });
|
|
1396
|
+
* ```
|
|
1397
|
+
*
|
|
1398
|
+
* @see httpUrlToWs
|
|
1399
|
+
* @see selectClientAndViewIds
|
|
1400
|
+
* @see setStatusPercentSignallingServer
|
|
1401
|
+
*/
|
|
1402
|
+
private getAwsInstance;
|
|
1403
|
+
private connectToCirrus;
|
|
1404
|
+
addWsHandlers(ws: WebSocket): void;
|
|
1286
1405
|
showStatusMessage(message: string | null): void;
|
|
1287
1406
|
/**
|
|
1288
1407
|
* Close the connection with the signaling server
|
|
1289
1408
|
* @param data
|
|
1290
1409
|
*/
|
|
1291
|
-
close(data: CloseReason
|
|
1410
|
+
close(data: CloseReason): void;
|
|
1292
1411
|
send(data: string | object): void;
|
|
1293
|
-
protected watchTimeoutOrErrorAndReconnectLater(): void;
|
|
1294
|
-
protected stopRetryTimer(): void;
|
|
1295
|
-
private initWebSocket;
|
|
1296
|
-
private httpUrlToWs;
|
|
1297
1412
|
private clearWs;
|
|
1298
1413
|
protected handleMessage(msg: MessageBase): void;
|
|
1299
1414
|
private setHandlersFromStream;
|
|
1415
|
+
private getRegion;
|
|
1300
1416
|
static ɵfac: i0.ɵɵFactoryDeclaration<SignallingService, never>;
|
|
1301
1417
|
static ɵprov: i0.ɵɵInjectableDeclaration<SignallingService>;
|
|
1302
1418
|
}
|
|
@@ -1392,7 +1508,6 @@ declare class WebRtcPlayerService extends SubService {
|
|
|
1392
1508
|
private forceTURN;
|
|
1393
1509
|
private forceMonoAudio;
|
|
1394
1510
|
private dcClient;
|
|
1395
|
-
private webRtcErrorTimeout;
|
|
1396
1511
|
constructor();
|
|
1397
1512
|
private listenSignaling;
|
|
1398
1513
|
private createWebRtcOffer;
|
|
@@ -1407,7 +1522,6 @@ declare class WebRtcPlayerService extends SubService {
|
|
|
1407
1522
|
canSend(): boolean | null;
|
|
1408
1523
|
send(data: ArrayBuffer): void;
|
|
1409
1524
|
private setConfig;
|
|
1410
|
-
private dispatchWebRtcError;
|
|
1411
1525
|
private createPeerConnection;
|
|
1412
1526
|
private handlePeerConnectionEvents;
|
|
1413
1527
|
private setupTransceiversAsync;
|
|
@@ -1422,10 +1536,10 @@ declare class AfkRestartScreenLockerComponent implements AfterViewInit, OnInit {
|
|
|
1422
1536
|
store: Store<any>;
|
|
1423
1537
|
videoService: VideoService;
|
|
1424
1538
|
destroyRef: DestroyRef;
|
|
1425
|
-
showReconnectPopup: i0.Signal<boolean
|
|
1426
|
-
|
|
1427
|
-
imageLoadingSrc: i0.Signal<string
|
|
1428
|
-
streamConfig: i0.Signal<_3dsource_angular_unreal_module.StreamConfig
|
|
1539
|
+
showReconnectPopup: i0.Signal<boolean>;
|
|
1540
|
+
isLoaderScreenVisible: i0.Signal<boolean>;
|
|
1541
|
+
imageLoadingSrc: i0.Signal<string>;
|
|
1542
|
+
streamConfig: i0.Signal<_3dsource_angular_unreal_module.StreamConfig>;
|
|
1429
1543
|
isSecondStart: i0.WritableSignal<boolean>;
|
|
1430
1544
|
playCallBack: null | (() => void);
|
|
1431
1545
|
ngOnInit(): void;
|
|
@@ -1644,5 +1758,5 @@ declare class SafePipe implements PipeTransform {
|
|
|
1644
1758
|
static ɵpipe: i0.ɵɵPipeDeclaration<SafePipe, "safe", true>;
|
|
1645
1759
|
}
|
|
1646
1760
|
|
|
1647
|
-
export { AFKService, AfkRestartScreenLockerComponent, AggregatorService, AnswerHandler, CONSOLE_COMMAND_DISABLE_MESSAGES, CONSOLE_COMMAND_ENABLE_MESSAGES, CONSOLE_COMMAND_PIXEL_QUALITY, ClickableOverlayComponent, CommandTelemetryService, ConfigHandler, ConsoleExtensionsService, DATA_CHANNEL_CONNECTION_TIMEOUT, DEBOUNCE_TO_MANY_RESIZE_CALLS, DEFAULT_AFK_TIMEOUT, DEFAULT_AFK_TIMEOUT_PERIOD, DataFlowMonitor, DevModeService, DisconnectReason, EControlSchemeType, EMessageType, EToClientMessageType, FULL_HD_HEIGHT, FULL_HD_WIDTH, FilterSettingsComponent, FreezeFrameComponent, FreezeFrameService, IceCandidateHandler, InputOptions, InputService, InstanceReadyHandler, InstanceReservedHandler, KalmanFilter1D, LatencyTimings, LowBandwidthDetectorComponent, LowBandwidthModalComponent, MINIMAL_FPS, MouseButton, MouseButtonsMask, OnCloseHandler, OnErrorHandler, OnMessageHandler, OnOpenHandler, OrchestrationMessageTypes, PingHandler, PlayerCountHandler, RegionsPingService, ResetTelemetry, SAME_SIZE_THRESHOLD, SCREEN_LOCKER_CONTAINER_ID, SIGNALLING_PERCENT_VALUE, SSInfoHandler, STREAMING_VIDEO_ID, SafePipe, SignallingService, SpecialKeyCodes, StatGraphComponent, StreamStatusTelemetryService, SubService, TelemetryStart, TelemetryStop, UNREAL_CONFIG, UnrealCommunicatorService, UnrealEffects, UnrealInternalSignalEvents, UnrealSceneComponent, UnrealStatusMessage, VideoLockerComponent, VideoRecorder, VideoService, VideoStatsComponent,
|
|
1648
|
-
export type { AwsInstance, CandidateMessage, CloseReason, CommandsLoaderState, ConfigMessage, DataFlowCheckResult,
|
|
1761
|
+
export { AFKService, AfkRestartScreenLockerComponent, AggregatorService, AnswerHandler, CONSOLE_COMMAND_DISABLE_MESSAGES, CONSOLE_COMMAND_ENABLE_MESSAGES, CONSOLE_COMMAND_PIXEL_QUALITY, ClickableOverlayComponent, CommandTelemetryService, ConfigHandler, ConsoleExtensionsService, DATA_CHANNEL_CONNECTION_TIMEOUT, DEBOUNCE_TO_MANY_RESIZE_CALLS, DEFAULT_AFK_TIMEOUT, DEFAULT_AFK_TIMEOUT_PERIOD, DataFlowMonitor, DevModeService, DisconnectReason, EControlSchemeType, EMessageType, EToClientMessageType, FULL_HD_HEIGHT, FULL_HD_WIDTH, FilterSettingsComponent, FreezeFrameComponent, FreezeFrameService, IceCandidateHandler, InputOptions, InputService, InstanceReadyHandler, InstanceReservedHandler, KalmanFilter1D, LatencyTimings, LowBandwidthDetectorComponent, LowBandwidthModalComponent, MINIMAL_FPS, MouseButton, MouseButtonsMask, OnCloseHandler, OnErrorHandler, OnMessageHandler, OnOpenHandler, OrchestrationMessageTypes, POLLING_TIME, PingHandler, PlayerCountHandler, RegionsPingService, ResetTelemetry, SAME_SIZE_THRESHOLD, SCREEN_LOCKER_CONTAINER_ID, SIGNALLING_PERCENT_VALUE, SSInfoHandler, STREAMING_VIDEO_ID, SafePipe, SignallingService, SpecialKeyCodes, StatGraphComponent, StreamStatusTelemetryService, SubService, TelemetryStart, TelemetryStop, UNREAL_CONFIG, UnrealCommunicatorService, UnrealEffects, UnrealInternalSignalEvents, UnrealSceneComponent, UnrealStatusMessage, VideoLockerComponent, VideoRecorder, 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, WSCloseCodes, WS_OPEN_STATE, WS_TIMEOUT, WebRtcPlayerService, WebrtcErrorModalComponent, abortEstablishingConnection, alignProductsToPlaneCommand, changeLowBandwidth, changeStatusMainVideoOnScene, changeStreamResolutionAction, changeStreamResolutionSuccessAction, clampAndKeepMaxPercents, clampPanToProductsCommand, commandCompleted, commandStarted, decodeData, destroyRemoteConnections, destroyUnrealScene, disconnectStream, dispatchResize, dropConnection, floatToSmoothPercents, forceResizeUnrealVideo, fromResizeObserver, fromSignal, fromUnrealCallBackSignal, getActiveUrl, getApplyCameraPresetCommand, getApplyZoomCommand, getCameraBoxCommand, getCameraRecenterCommand, getCameraSettingsCommand, getChangeGizmoTypeCommand, getChangeResolutionCommand, getClickSnapCommand, getControlSensitivityCommand, getDebugModeCommand, getDragCommand, getDragSequenceCommand, getDropCommand, getEnableComposureCommand, getEnableControlsCommand, getEnableSceneStateCallbackCommand, getEnableSpinnerModeCommand, getEnableTeleportCommand, getExecuteConsoleCommand, getFitToObjectsCommand, getFreezeFrameCommand, getFreezeFrameNative, getImageFromVideoStream, getInitSequenceByObjectNameCommand, getJumpToSequenceCommand, getLoadLevelCommand, getLoadProductCommand, getLoadSceneStateCommand, getLoopBackCommand, getMoveSelectedCommand, getPauseSequenceCommand, getPlaySequenceCommand, getRequestCameraPresetCommand, getResetControlClampsCommand, getRotateSelectedCommand, getRtcErrorMessage, getSelectProductByObjectNameCommand, getSetCameraControlClampsCommand, getSetControlCameraModeCommand, getSetFpsCommand, getSetMaterialCommand, getSetPawnMovementModeCommand, getSetSettingsSequenceCommand, getStopSequenceCommand, getTakeRenderCommand, getTakeSpinnerRenderCommand, getTakeSpinnerRenderPreviewCommand, getUnLoadAllProductsCommand, getUnLoadProductByObjectNameCommand, getUnfreezeFrameNative, getUnselectAllProductsCommand, getWeatherCommand, initSignalling, initialState, isLoaderScreenVisible, mapQpToQuality, observeCommandResponse, provideAngularUnrealModule, removeExileCommands, resetAfk, resetAfkAction, resetConfig, resetIntroSrc, resetWarnTimeout, selectClientAndViewIds, selectCommandProgress, selectCommandsInProgress, selectFreezeFrameCombinedDataUrl, selectFreezeFrameDataUrl, selectFreezeFrameDataUrlFromVideo, selectFreezeFrameProgressMessageFromVideo, selectIsAutostart, selectIsFreezeFrameLoading, selectIsVideoPlayingAndDataChannelConnected, selectLastCommandInProgress, selectLoaderCommands, selectShowLoader, selectShowReconnectPopup, selectSignalingParameters, selectStreamConfig, selectTotalProgress, selectWarnTimeout, sendSignal, setAwsInstance, setCirrusConnected, setCirrusDisconnected, setConfig, setDataChannelConnected, setEstablishingConnection, setFreezeFrame, setFreezeFrameFromVideo, setIntroImageSrc, setIntroVideoSrc, setLoadingImageSrc, setLoopBackCommandIsCompleted, setMatchUrls, setMaxFps, setProductsLocationCommand, setSignalingName, setStatusMessage, setStatusPercentSignallingServer, setStreamClientCompanyId, setStreamViewId, setViewportNotReady, setViewportReady, showPopupWithoutAutoStart, showUnrealErrorMessage, smoothTransition, startStream, trackMixpanelEvent, unLoadAllLevelsCommand, unrealFeature, unrealReducer, updateCirrusInfo };
|
|
1762
|
+
export type { AwsInstance, CandidateMessage, CloseReason, CommandsLoaderState, ConfigMessage, ConnectionError, DataFlowCheckResult, DisconnectReasonType, EControlSchemeTypeValues, EMessageTypeValues, FreezeFrameMessage, IAggregatedStat, InboundVideoStats, InputProps, InstanceReady, InstanceReserved, LBMStats, MessageBase, NormalizeAndQuantizeSignedValue, NormalizeAndQuantizeUnsignedValue, ObservedCallbackResponse, OrchestrationMessageType, PingMessage, PlayerCountMessage, PollingOrchestrationMessage, Quality, SSInfo, SignalDescriptor, SignalingData, SignalingMessageHandler, SignalingMessageMap, StreamConfig, StreamResolutionProps, StreamerListMessage, TelemetryType, UnknownFields, UnquantizeAndDenormalizeUnsignedValue, UnrealCallBackJson, UnrealInitialConfig, UnrealState, WSCloseCodesValues, WrappedMetaBoxCommandPacket };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@3dsource/angular-unreal-module",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.49",
|
|
4
4
|
"description": "Angular Unreal module for connect with unreal engine stream",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"3dsource",
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
"@3dsource/source-ui-native": ">=1.0.9",
|
|
23
23
|
"@3dsource/types-unreal": ">=0.0.5",
|
|
24
24
|
"@3dsource/utils": ">=1.0.21",
|
|
25
|
-
"@angular/cdk": ">=
|
|
26
|
-
"@angular/common": ">=
|
|
27
|
-
"@angular/core": ">=
|
|
28
|
-
"@angular/forms": ">=
|
|
29
|
-
"@ngrx/effects": ">=
|
|
30
|
-
"@ngrx/store": ">=
|
|
25
|
+
"@angular/cdk": ">=18.0.0",
|
|
26
|
+
"@angular/common": ">=18.0.0",
|
|
27
|
+
"@angular/core": ">=18.0.0",
|
|
28
|
+
"@angular/forms": ">=18.0.0",
|
|
29
|
+
"@ngrx/effects": ">=18.0.0",
|
|
30
|
+
"@ngrx/store": ">=18.0.0"
|
|
31
31
|
},
|
|
32
32
|
"engines": {
|
|
33
33
|
"node": ">=20",
|
package/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../../../projects/3dsource/angular-unreal-module/src/lib/components/clickable-overlay/clickable-overlay.component.ts","../../../projects/3dsource/angular-unreal-module/src/lib/components/freeze-frame/freeze-frame.component.ts","../../../projects/3dsource/angular-unreal-module/src/lib/components/low-bandwidth-modal/low-bandwidth-modal.component.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/sub.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/afk.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/aggregator.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/command-telemetry.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/console-extensions.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/dev-mode.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/freeze-frame.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/input.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/regions-ping.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/CustomCloseCodes.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/CloseReason.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/disconnect-reasons.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/errors.interface.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/freeze-frame-message.interface.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/initial-config.ts","../../../projects/3dsource/angular-unreal-module/src/lib/constants/ButtonsAndCodes.ts","../../../projects/3dsource/angular-unreal-module/src/lib/constants/EControlSchemeType.ts","../../../projects/3dsource/angular-unreal-module/src/lib/constants/EMessageType.ts","../../../projects/3dsource/angular-unreal-module/src/lib/constants/EToClientMessageType.ts","../../../projects/3dsource/angular-unreal-module/src/lib/constants/initial-config.ts","../../../projects/3dsource/angular-unreal-module/src/lib/constants/InputOptions.ts","../../../projects/3dsource/angular-unreal-module/src/lib/constants/UnrealStatusMessage.ts","../../../projects/3dsource/angular-unreal-module/src/lib/constants/unreal.constant.ts","../../../projects/3dsource/angular-unreal-module/src/lib/constants/unreal.providers.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/input.interface.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/FromStreamerHandlers/AnswerHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/FromStreamerHandlers/ConfigHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/FromStreamerHandlers/IceCandidateHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/FromStreamerHandlers/InstanceReadyHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/FromStreamerHandlers/InstanceReservedHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/FromStreamerHandlers/PingHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/FromStreamerHandlers/PlayerCountHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/FromStreamerHandlers/SSInfoHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/WsHandlers/OnCloseHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/WsHandlers/OnErrorHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/WsHandlers/OnMessageHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/WsHandlers/OpenHandler.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/clamp-and-keep-max-percents.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/CommandObserver.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/DataDecoder.ts","../../../projects/3dsource/angular-unreal-module/src/lib/components/low-bandwidth-indicator/DataFlowConstants.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/DataFlowMonitor.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/dispatchResize.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/error-codes.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/EventWrapper.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/float-to-smooth-percents.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/get-image-from-video-stream.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/GetNextUrl.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/KalmanFilter1D.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/LatencyTimings.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/mapQpToQuality.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/prepare-commands.ts","../../../projects/3dsource/angular-unreal-module/src/lib/store/unreal.actions.ts","../../../projects/3dsource/angular-unreal-module/src/lib/store/unreal.effects.ts","../../../projects/3dsource/angular-unreal-module/src/lib/store/unreal.feature.ts","../../../projects/3dsource/angular-unreal-module/src/lib/store/unreal.reducer.ts","../../../projects/3dsource/angular-unreal-module/src/lib/store/unreal.selectors.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/remove-exile-commands.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/resetAfk.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/resize-observer.ts","../../../projects/3dsource/angular-unreal-module/src/lib/helpers/VideoRecorder.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/LBMStats.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/quality.interface.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/SignalingData.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/SignalingMessage.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/stream-config.interface.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/stream-resolution.interface.ts","../../../projects/3dsource/angular-unreal-module/src/lib/interfaces/unreal-internal-signal-events.interface.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/signalling.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/stream-status-telemetry.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/unreal-communicator.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/video.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/services/web-rtc-player.service.ts","../../../projects/3dsource/angular-unreal-module/src/lib/components/screen-locker/afk-restart-screen-locker.component.ts","../../../projects/3dsource/angular-unreal-module/src/lib/components/stat-graph/stat-graph.component.ts","../../../projects/3dsource/angular-unreal-module/src/lib/components/unreal-scene/unreal-scene.component.ts","../../../projects/3dsource/angular-unreal-module/src/lib/components/video-locker/video-locker.component.ts","../../../projects/3dsource/angular-unreal-module/src/lib/components/video-stats/video-stats.component.ts","../../../projects/3dsource/angular-unreal-module/src/lib/components/webrtc-error-modal/webrtc-error-modal.component.ts","../../../projects/3dsource/angular-unreal-module/src/lib/components/low-bandwidth-indicator/filter-settings/filter-settings.component.ts","../../../projects/3dsource/angular-unreal-module/src/lib/components/low-bandwidth-indicator/low-bandwidth-detector.component.ts","../../../projects/3dsource/angular-unreal-module/src/lib/pipes/safe-html.pipe.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
|