@livedigital/client 3.58.0 → 3.59.0-release-june-fixes.2
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/dist/Client.d.ts +9 -2
- package/dist/constants/common.d.ts +1 -0
- package/dist/constants/common.ts +1 -0
- package/dist/constants/events.d.ts +1 -0
- package/dist/constants/events.ts +1 -0
- package/dist/engine/Logger.d.ts +1 -0
- package/dist/engine/handlers/NetworkScoresUpdatedEventHandler.d.ts +12 -0
- package/dist/engine/index.d.ts +2 -0
- package/dist/engine/media/streamEffects/video/esdk/EffectsMetricsReporter.d.ts +15 -0
- package/dist/engine/network/IceRecoveryService.d.ts +16 -0
- package/dist/engine/network/NetworkTransportPolicyManager.d.ts +3 -0
- package/dist/engine/network/TransportStateMonitor.d.ts +20 -0
- package/dist/engine/network/constants.d.ts +1 -0
- package/dist/engine/network/index.d.ts +12 -8
- package/dist/engine/system/index.d.ts +11 -2
- package/dist/errors/ConstraintError.d.ts +15 -0
- package/dist/errors/MediaDeviceAccessError.d.ts +6 -0
- package/dist/helpers/asyncInterval.d.ts +10 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.es.js +2 -2
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/inversify.tokens.d.ts +4 -1
- package/dist/types/client.d.ts +5 -1
- package/dist/types/common.d.ts +25 -0
- package/dist/types/engine.d.ts +2 -0
- package/dist/types/peerConsumer.d.ts +2 -2
- package/dist/types/peerTrack.d.ts +2 -2
- package/package.json +1 -1
package/dist/Client.d.ts
CHANGED
|
@@ -91,13 +91,14 @@ declare class Client {
|
|
|
91
91
|
get scoresCalculator(): ScoresCalculator;
|
|
92
92
|
/**
|
|
93
93
|
* Обнаруживает доступные устройства ввода и обновляет внутренний список камер и микрофонов.
|
|
94
|
-
*
|
|
94
|
+
* Возвращает раздельные ошибки по определению устройств.
|
|
95
95
|
* @param force Принудительно запрашивает повторное определение устройств, даже если список уже известен.
|
|
96
96
|
* @group Устройства
|
|
97
97
|
* @example
|
|
98
98
|
* ```ts
|
|
99
|
-
* const { video, audio } = await client.detectDevices();
|
|
99
|
+
* const { video, audio, availability } = await client.detectDevices();
|
|
100
100
|
* // video и audio — массивы MediaDeviceInfo
|
|
101
|
+
* // availability — статус доступности video и audio
|
|
101
102
|
* const camera = video[0];
|
|
102
103
|
* const mic = audio.find(d => d.label.includes('встроенный'));
|
|
103
104
|
* ```
|
|
@@ -238,6 +239,12 @@ declare class Client {
|
|
|
238
239
|
* @group Диагностика
|
|
239
240
|
*/
|
|
240
241
|
getPreferRelay(): boolean;
|
|
242
|
+
/**
|
|
243
|
+
* Показывает, действует ли сейчас принудительный relay-режим,
|
|
244
|
+
* включённый SDK после неуспешного подключения receive-транспорта.
|
|
245
|
+
* @group Диагностика
|
|
246
|
+
*/
|
|
247
|
+
isRelayEnforced(): boolean;
|
|
241
248
|
/**
|
|
242
249
|
* Меняет ICE transport policy для активных транспортов клиента.
|
|
243
250
|
*
|
package/dist/constants/common.ts
CHANGED
|
@@ -47,6 +47,7 @@ export declare const CLIENT_EVENTS: {
|
|
|
47
47
|
readonly effectsEnabled: "effects-enabled";
|
|
48
48
|
readonly effectsDisabled: "effects-disabled";
|
|
49
49
|
readonly effectsFailed: "effects-failed";
|
|
50
|
+
readonly networkScoresUpdated: "network-scores-updated";
|
|
50
51
|
};
|
|
51
52
|
export declare const TRACK_EVENTS: {
|
|
52
53
|
readonly volumeChanged: "volume-changed";
|
package/dist/constants/events.ts
CHANGED
package/dist/engine/Logger.d.ts
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { NetworkScores } from 'webrtc-issue-detector';
|
|
2
|
+
import type EnhancedEventEmitter from '../../EnhancedEventEmitter';
|
|
3
|
+
import type ConfigService from '../../config/ConfigService';
|
|
4
|
+
import type WIDHandler from '../WIDHandler';
|
|
5
|
+
declare class NetworkScoresUpdatedEventHandler {
|
|
6
|
+
private readonly widHandler;
|
|
7
|
+
private readonly clientEventEmitter;
|
|
8
|
+
private readonly config;
|
|
9
|
+
constructor(widHandler: WIDHandler, clientEventEmitter: EnhancedEventEmitter, config: ConfigService);
|
|
10
|
+
handle(networkScores: NetworkScores): void;
|
|
11
|
+
}
|
|
12
|
+
export default NetworkScoresUpdatedEventHandler;
|
package/dist/engine/index.d.ts
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type Logger from '../../../../Logger';
|
|
2
|
+
import type { Metrics } from './tsvb';
|
|
3
|
+
export interface EffectsMetricsReporterParams {
|
|
4
|
+
logger: Logger;
|
|
5
|
+
getMetrics: () => Metrics | undefined;
|
|
6
|
+
pollIntervalMs?: number;
|
|
7
|
+
minLogIntervalMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export default class EffectsMetricsReporter {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(params: EffectsMetricsReporterParams);
|
|
12
|
+
start(): void;
|
|
13
|
+
stop(): void;
|
|
14
|
+
tick(): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { LoggerFactory } from '../../types/container';
|
|
2
|
+
import type SignalingApiClient from '../signalingApiClient/SignalingApiClient';
|
|
3
|
+
import type { IceParameters } from 'mediasoup-client/lib/Transport';
|
|
4
|
+
import type { LDTransport } from '../../types/mediasoup';
|
|
5
|
+
import type TransportStateMonitor from './TransportStateMonitor';
|
|
6
|
+
declare class IceRecoveryService {
|
|
7
|
+
private readonly signalingApiClient;
|
|
8
|
+
private readonly transportStateMonitor;
|
|
9
|
+
private readonly logger;
|
|
10
|
+
constructor(signalingApiClient: SignalingApiClient, loggerFactory: LoggerFactory, transportStateMonitor: TransportStateMonitor);
|
|
11
|
+
getIceParameters(transport: LDTransport): Promise<IceParameters>;
|
|
12
|
+
restartIce(transport: LDTransport): Promise<void>;
|
|
13
|
+
handleConnectionStateChange(transport: LDTransport, state: RTCPeerConnectionState): void;
|
|
14
|
+
cancelAll(): void;
|
|
15
|
+
}
|
|
16
|
+
export default IceRecoveryService;
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import type { TransportDirection } from '../../types/network';
|
|
2
2
|
import Network from './index';
|
|
3
3
|
import { Logger } from '../../types/common';
|
|
4
|
+
export type RelayEscalationHandler = () => Promise<void> | void;
|
|
4
5
|
declare class NetworkTransportPolicyManager {
|
|
5
6
|
#private;
|
|
6
7
|
private readonly network;
|
|
7
8
|
private readonly loggerFactory;
|
|
8
9
|
constructor(network: Network, loggerFactory: (namespace: string) => Logger);
|
|
10
|
+
setRelayEscalationHandler(handler: RelayEscalationHandler): void;
|
|
9
11
|
startMonitoring(): void;
|
|
10
12
|
stopMonitoring(): void;
|
|
11
13
|
changeIceTransportPolicy(policy: RTCIceTransportPolicy): Promise<void>;
|
|
12
14
|
private readonly handleTransportState;
|
|
15
|
+
private triggerRelayEscalation;
|
|
13
16
|
private recordDisconnectAndGetCount;
|
|
14
17
|
private applyRelayPolicy;
|
|
15
18
|
escalateDirectionToRelay(direction: TransportDirection): Promise<void>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { LoggerFactory } from '../../types/container';
|
|
2
|
+
import type { LDTransport } from '../../types/mediasoup';
|
|
3
|
+
interface TransportStateMonitorScheduleOptions {
|
|
4
|
+
immediate?: boolean;
|
|
5
|
+
intervalMs?: number;
|
|
6
|
+
}
|
|
7
|
+
interface SchedulePayload {
|
|
8
|
+
transport: LDTransport;
|
|
9
|
+
options: TransportStateMonitorScheduleOptions;
|
|
10
|
+
restartIce: (transport: LDTransport) => Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
declare class TransportStateMonitor {
|
|
13
|
+
private readonly logger;
|
|
14
|
+
private readonly handles;
|
|
15
|
+
constructor(loggerFactory: LoggerFactory);
|
|
16
|
+
schedule(payload: SchedulePayload): void;
|
|
17
|
+
cancel(transportId: string): void;
|
|
18
|
+
cancelAll(): void;
|
|
19
|
+
}
|
|
20
|
+
export default TransportStateMonitor;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const RESTART_ICE_INTERVAL_MS = 1500;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Device, type types } from 'mediasoup-client';
|
|
2
|
-
import {
|
|
2
|
+
import { ConnectionState } from 'mediasoup-client/lib/Transport';
|
|
3
3
|
import EnhancedEventEmitter from '../../EnhancedEventEmitter';
|
|
4
4
|
import { CreateConsumerPayload, CreateConsumerResponse, PeerResponse, Role, TransportsStateInfo, UpdatePeerAppDataPayload } from '../../types/common';
|
|
5
5
|
import { ClientObserverEvents } from '../../types/engine';
|
|
@@ -8,10 +8,11 @@ import { NetworkObserverEvents } from '../../types/network';
|
|
|
8
8
|
import { CallState } from '../CallState';
|
|
9
9
|
import Logger from '../Logger';
|
|
10
10
|
import { MyPeer } from '../MyPeer';
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
11
|
+
import type IceRecoveryService from './IceRecoveryService';
|
|
12
|
+
import type SignalingApiClient from '../signalingApiClient/SignalingApiClient';
|
|
13
|
+
import type DatachannelHeartbeater from './DatachannelHeartbeater';
|
|
14
|
+
import type DataChannelsManager from './DataChannelsManager';
|
|
15
|
+
import type SignalingHeartbeater from './SignalingHeartbeater';
|
|
15
16
|
declare class Network {
|
|
16
17
|
#private;
|
|
17
18
|
private readonly state;
|
|
@@ -21,13 +22,14 @@ declare class Network {
|
|
|
21
22
|
private readonly signalingApiClient;
|
|
22
23
|
private readonly datachannelHeartbeater;
|
|
23
24
|
private readonly signalingHeartbeater;
|
|
25
|
+
private readonly iceRecoveryService;
|
|
24
26
|
sendTransport?: LDTransport;
|
|
25
27
|
receiveTransport?: LDTransport;
|
|
26
28
|
heartbeatDataProducer?: types.DataProducer;
|
|
27
29
|
signalingTransport?: LDTransport;
|
|
28
30
|
private preferRelay?;
|
|
29
31
|
peersLoaded: boolean;
|
|
30
|
-
constructor(state: CallState, myPeer: MyPeer, loggerFactory: (namespace: string) => Logger, clientEventEmitter: EnhancedEventEmitter<ClientObserverEvents>, dataChannelsManager: DataChannelsManager, signalingApiClient: SignalingApiClient, datachannelHeartbeater: DatachannelHeartbeater, signalingHeartbeater: SignalingHeartbeater);
|
|
32
|
+
constructor(state: CallState, myPeer: MyPeer, loggerFactory: (namespace: string) => Logger, clientEventEmitter: EnhancedEventEmitter<ClientObserverEvents>, dataChannelsManager: DataChannelsManager, signalingApiClient: SignalingApiClient, datachannelHeartbeater: DatachannelHeartbeater, signalingHeartbeater: SignalingHeartbeater, iceRecoveryService: IceRecoveryService);
|
|
31
33
|
get isNetworkActive(): boolean;
|
|
32
34
|
get observer(): EnhancedEventEmitter<NetworkObserverEvents>;
|
|
33
35
|
private removeEventListeners;
|
|
@@ -40,7 +42,6 @@ declare class Network {
|
|
|
40
42
|
createSendTransport(mediasoupDevice: Device): Promise<LDTransport>;
|
|
41
43
|
createRecvTransport(mediasoupDevice: Device): Promise<LDTransport>;
|
|
42
44
|
createSignalingTransport(mediasoupDevice: Device): Promise<LDTransport>;
|
|
43
|
-
getIceParameters(transport: LDTransport): Promise<IceParameters>;
|
|
44
45
|
restartIce(transport: LDTransport): Promise<void>;
|
|
45
46
|
createConsumer({ producerId, rtpCapabilities, producerPeerId, }: CreateConsumerPayload): Promise<CreateConsumerResponse>;
|
|
46
47
|
initializeHeartbeats(): Promise<void>;
|
|
@@ -63,6 +64,8 @@ declare class Network {
|
|
|
63
64
|
getTransportsStateInfo(): Promise<TransportsStateInfo>;
|
|
64
65
|
setPreferRelay(value: boolean): void;
|
|
65
66
|
getPreferRelay(): boolean;
|
|
67
|
+
isRelayEnforced(): boolean;
|
|
68
|
+
enforceRelay(durationMs: number): void;
|
|
66
69
|
getChannelPeers(role?: Role): Promise<{
|
|
67
70
|
peers: PeerResponse[];
|
|
68
71
|
}>;
|
|
@@ -74,7 +77,7 @@ declare class Network {
|
|
|
74
77
|
triggerChannelStateEvent(peersRole?: Role): Promise<number>;
|
|
75
78
|
waitForChannelMessagesDataConsumerConnected(): Promise<void>;
|
|
76
79
|
private waitForIceRestartStateTransition;
|
|
77
|
-
|
|
80
|
+
waitForTransportTerminalState(transport: LDTransport, timeoutAfter?: number): Promise<ConnectionState>;
|
|
78
81
|
private waitForDataConsumerConnected;
|
|
79
82
|
private getParsedTransportStats;
|
|
80
83
|
private logTransportDetails;
|
|
@@ -85,5 +88,6 @@ declare class Network {
|
|
|
85
88
|
private connectTransport;
|
|
86
89
|
private subscribeCommonTransportEvents;
|
|
87
90
|
private checkTransportState;
|
|
91
|
+
private isStaleTransport;
|
|
88
92
|
}
|
|
89
93
|
export default Network;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import EnhancedEventEmitter from '../../EnhancedEventEmitter';
|
|
2
|
+
import { AvailableMediaDevices, MediaDeviceAvailability } from '../../types/common';
|
|
2
3
|
import Logger from '../Logger';
|
|
3
4
|
declare class System {
|
|
4
5
|
#private;
|
|
@@ -8,18 +9,26 @@ declare class System {
|
|
|
8
9
|
isDevicesDetected: boolean;
|
|
9
10
|
availableVideoDevices: MediaDeviceInfo[];
|
|
10
11
|
availableAudioDevices: MediaDeviceInfo[];
|
|
12
|
+
availableAudioOutputDevices: MediaDeviceInfo[];
|
|
13
|
+
audioDeviceAvailability?: MediaDeviceAvailability;
|
|
14
|
+
videoDeviceAvailability?: MediaDeviceAvailability;
|
|
15
|
+
audioOutputDeviceAvailability?: MediaDeviceAvailability;
|
|
11
16
|
constructor(clientEventEmitter: EnhancedEventEmitter, loggerFactory: (namespace: string) => Logger);
|
|
12
17
|
setIsEnableVideoDevicesLock(value: boolean): void;
|
|
13
18
|
setIsEnableAudioDevicesLock(value: boolean): void;
|
|
14
19
|
setAvailableVideoDevices(availableVideoDevices: MediaDeviceInfo[]): void;
|
|
15
20
|
setAvailableAudioDevices(availableAudioDevices: MediaDeviceInfo[]): void;
|
|
21
|
+
setAvailableAudioOutputDevices(availableAudioOutputDevices: MediaDeviceInfo[]): void;
|
|
16
22
|
requestMediaDevicesAccess(constraints?: MediaStreamConstraints): Promise<MediaStreamTrack[]>;
|
|
17
23
|
hasAvailableMediaDevicesList(): Promise<boolean>;
|
|
18
24
|
refreshAvailableMediaDevicesList(): Promise<MediaDeviceInfo[]>;
|
|
19
|
-
detectDevices(force?: boolean): Promise<
|
|
25
|
+
detectDevices(force?: boolean): Promise<AvailableMediaDevices>;
|
|
20
26
|
deviceChangeHandler(): Promise<void>;
|
|
27
|
+
private resetDeviceAvailability;
|
|
28
|
+
private getAvailableMediaDevices;
|
|
29
|
+
private getDeviceAvailability;
|
|
21
30
|
listenDevices(): void;
|
|
22
|
-
private
|
|
31
|
+
private requestMediaDeviceAccessAvailability;
|
|
23
32
|
private tryToAccessDevices;
|
|
24
33
|
}
|
|
25
34
|
export default System;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import OperationError from './OperationError';
|
|
2
|
+
interface ConstraintErrorOptions {
|
|
3
|
+
errorCode: string;
|
|
4
|
+
actual?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const isOverconstrainedError: (error: unknown) => error is OverconstrainedError;
|
|
7
|
+
export declare const getRequestedConstraintValue: (constraints: MediaStreamConstraints, kind: "audio" | "video", constraint: string) => string;
|
|
8
|
+
export declare const getActualConstraintValue: (track: MediaStreamTrack, constraint: string) => string;
|
|
9
|
+
declare class ConstraintError extends OperationError {
|
|
10
|
+
readonly constraint: string;
|
|
11
|
+
readonly requested: string;
|
|
12
|
+
readonly actual?: string;
|
|
13
|
+
constructor(error: OverconstrainedError, constraints: MediaStreamConstraints, { errorCode, actual }: ConstraintErrorOptions);
|
|
14
|
+
}
|
|
15
|
+
export default ConstraintError;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface AsyncIntervalHandle {
|
|
2
|
+
stop: () => void;
|
|
3
|
+
}
|
|
4
|
+
interface CreateAsyncIntervalPayload {
|
|
5
|
+
callback: () => Promise<void>;
|
|
6
|
+
intervalMs: number;
|
|
7
|
+
immediate?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const createAsyncInterval: (payload: CreateAsyncIntervalPayload) => AsyncIntervalHandle;
|
|
10
|
+
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -10,9 +10,10 @@ export type { Effects, LayoutTypes } from './engine/media/streamEffects/video/es
|
|
|
10
10
|
export type { AudioStreamStats, MOSScores, VideoStreamStats, } from './qoe/types';
|
|
11
11
|
export type { ClientParams } from './types/client';
|
|
12
12
|
export { DeviceErrors, TrackLabel, } from './types/common';
|
|
13
|
-
export type { ConsumerData, ActivityConfirmationRequiredPayload, AudioEncoderConfig, AvailableMediaDevices, BaseTrackInfo, ChannelEvent, CreateCameraVideoTrackOptions, CreateCustomAudioOptions, CreateCustomVideoOptions, CreateMicrophoneAudioTrackOptions, CreateScreenMediaOptions, EncoderConfig, JoinChannelParams, PayloadOfPublishedMedia, PayloadOfUnpublishedMedia, ProducerData, PeerGroup, PeerInfo, PeerTrackInfo, Role, SubscribeOptions, TransformParams, TrackTransformParams, TrackForceClosedPayload, TrackInboundStats, TrackLabelString, TrackOutboundStats, TransportsStateInfo, VideoEncoderConfig, VideoCodec, PreferredLayersParams, SpatialLayerParams, } from './types/common';
|
|
13
|
+
export type { ConsumerData, ActivityConfirmationRequiredPayload, AudioEncoderConfig, AvailableMediaDevices, BaseTrackInfo, MediaDeviceAvailability, MediaDeviceAvailabilityReason, ChannelEvent, CreateCameraVideoTrackOptions, CreateCustomAudioOptions, CreateCustomVideoOptions, CreateMicrophoneAudioTrackOptions, CreateScreenMediaOptions, EncoderConfig, InputKind, JoinChannelParams, PayloadOfPublishedMedia, PayloadOfUnpublishedMedia, ProducerData, PeerGroup, PeerInfo, PeerTrackInfo, Role, SubscribeOptions, TransformParams, TrackTransformParams, TrackForceClosedPayload, TrackInboundStats, TrackLabelString, TrackOutboundStats, TransportsStateInfo, VideoEncoderConfig, VideoCodec, PreferredLayersParams, SpatialLayerParams, } from './types/common';
|
|
14
14
|
export type { ChannelStateInconsistentPayload, ClientObserverEvents, IssuesHandler, NetworkScoresUpdatedHandler, ProducePermissionsChangedPayload, } from './types/engine';
|
|
15
15
|
export type { AudioTrack, BaseTrack, InitEffectsSDKParams, Track, VideoTrack, VideoTrackPublishParams, } from './types/media';
|
|
16
16
|
export type { IceTransportPolicy } from './types/network';
|
|
17
17
|
export type { PeerConsumer } from './types/peerConsumer';
|
|
18
18
|
export type { PeerTrack, PeerTrackObserverEvents } from './types/peerTrack';
|
|
19
|
+
export type { NetworkScores } from 'webrtc-issue-detector';
|