@vkontakte/calls-sdk 2.8.13-dev.b0dfcfc5.0 → 2.8.13-dev.c0b363e1.0
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/CallsSDK.d.ts +4 -2
- package/calls-sdk.cjs.js +7 -7
- package/calls-sdk.esm.js +1396 -1287
- package/classes/conversation/Conversation.d.ts +2 -0
- package/classes/stat/ConversationStats.d.ts +1 -0
- package/classes/stat/NetworkAdaptationStats.d.ts +35 -0
- package/classes/stat/PeerConnectionStats.d.ts +3 -0
- package/classes/stat/SdpStats.d.ts +1 -0
- package/classes/stat/Stat.testUtils.d.ts +10 -0
- package/classes/stat/StatPings.d.ts +2 -0
- package/classes/transport/DirectTransport.d.ts +5 -0
- package/default/SignalingTransport.d.ts +5 -1
- package/enums/Stat.d.ts +6 -1
- package/package.json +1 -1
- package/static/External.d.ts +7 -0
- package/static/Params.d.ts +10 -0
- package/types/ClientStatsEvent.d.ts +11 -0
- package/types/Params.d.ts +1 -1
- package/types/SignalingMessage.d.ts +1 -0
|
@@ -66,6 +66,7 @@ export default class Conversation extends EventEmitter {
|
|
|
66
66
|
private _reservedId;
|
|
67
67
|
private readonly _onUnload;
|
|
68
68
|
private readonly _onRestore;
|
|
69
|
+
private readonly _onVisibilityChange;
|
|
69
70
|
private readonly _audioOutput;
|
|
70
71
|
private readonly _stats;
|
|
71
72
|
private _lastStalled;
|
|
@@ -356,6 +357,7 @@ export default class Conversation extends EventEmitter {
|
|
|
356
357
|
private _onSignalingFailed;
|
|
357
358
|
private _onAcceptedCall;
|
|
358
359
|
private _onHungup;
|
|
360
|
+
private _updateParticipantExternalIdOnHungup;
|
|
359
361
|
private _onSessionState;
|
|
360
362
|
private _reconcileParticipantSessionStates;
|
|
361
363
|
private _updateParticipantExternalId;
|
|
@@ -28,6 +28,7 @@ export declare class ConversationStats {
|
|
|
28
28
|
prepareForUnload(): void;
|
|
29
29
|
/** Вкладка пережила pagehide: возвращаем запись в очередь. */
|
|
30
30
|
restoreAfterUnload(): void;
|
|
31
|
+
resetPingBaseline(): void;
|
|
31
32
|
logHangup(reason: HangupReason): void;
|
|
32
33
|
flushCallMetrics(): void;
|
|
33
34
|
destroy(): void;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { StatAggregator } from './StatAggregator';
|
|
2
|
+
/** Причина события client_requested_server_topology */
|
|
3
|
+
export declare const enum ServerTopologyReason {
|
|
4
|
+
NO_CONNECTION_TIMEOUT = "no_connection_timeout",
|
|
5
|
+
CONNECTION_FAILED = "connection_failed",
|
|
6
|
+
SUCCESS_CONNECTION = "success_connection",
|
|
7
|
+
/** Возможна на бэке, в вебе пока не поддержана */
|
|
8
|
+
NO_DATA_TIMEOUT = "no_data_timeout",
|
|
9
|
+
/** Возможна на бэке, в вебе пока не поддержана */
|
|
10
|
+
SUCCESS_AUDIO = "success_audio",
|
|
11
|
+
/** Возможна на бэке, в вебе пока не поддержана */
|
|
12
|
+
CONNECTION_ACCEPTED_FAILED = "connection_accepted_failed"
|
|
13
|
+
}
|
|
14
|
+
export declare const enum NetworkQuality {
|
|
15
|
+
GOOD = "good",
|
|
16
|
+
BAD_1 = "bad_1",
|
|
17
|
+
BAD_2 = "bad_2"
|
|
18
|
+
}
|
|
19
|
+
export type VideoEncoderChange = {
|
|
20
|
+
/** Круговая задержка, мс */
|
|
21
|
+
rtt: number;
|
|
22
|
+
/** Потери, проценты */
|
|
23
|
+
loss: number;
|
|
24
|
+
networkQuality: NetworkQuality;
|
|
25
|
+
/** mimeType исходящего видео, например video/VP8 */
|
|
26
|
+
mimeType: string | undefined;
|
|
27
|
+
source: 'camera' | 'screencast' | 'all';
|
|
28
|
+
};
|
|
29
|
+
/** Отправляет в стату решения клиента по смене топологии и настроек видеоэнкодера */
|
|
30
|
+
export declare class NetworkAdaptationStats {
|
|
31
|
+
private readonly _statAggregator;
|
|
32
|
+
constructor(statAggregator: StatAggregator | null);
|
|
33
|
+
logServerTopologyRequested(reason: ServerTopologyReason, elapsed: number): void;
|
|
34
|
+
logVideoEncoderChanged(change: VideoEncoderChange): void;
|
|
35
|
+
}
|
|
@@ -5,15 +5,18 @@ export declare class PeerConnectionStats {
|
|
|
5
5
|
private _pc;
|
|
6
6
|
private _lastSignalingStateChange;
|
|
7
7
|
private _lastGatheringStateChange;
|
|
8
|
+
private _lastConnectionState;
|
|
8
9
|
private readonly _handleConnectionStateChange;
|
|
9
10
|
private readonly _handleSignalingStateChange;
|
|
10
11
|
private readonly _handleGatheringStateChange;
|
|
11
12
|
private readonly _handleIceCandidateError;
|
|
12
13
|
constructor(statAggregator: StatAggregator | null);
|
|
13
14
|
observe(pc: RTCPeerConnection): void;
|
|
15
|
+
/** Вызывать перед закрытием соединения: отсюда уходят последнее состояние и closed */
|
|
14
16
|
stop(): void;
|
|
15
17
|
logIceRestart(): void;
|
|
16
18
|
logIceCandidateAddFailed(candidate: RTCIceCandidateInit, error: unknown): void;
|
|
17
19
|
private _sinceLastChange;
|
|
20
|
+
private _logConnectionState;
|
|
18
21
|
private _log;
|
|
19
22
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MockInstance } from 'vitest';
|
|
2
|
+
/**
|
|
3
|
+
* Дожидается работы, которую код запускает в фоне и не отдаёт промис: ждёт всё,
|
|
4
|
+
* что вернули вызовы шпионов, пока не перестанут появляться новые вызовы.
|
|
5
|
+
*
|
|
6
|
+
* Замена опросу vi.waitFor: тот сдаётся через секунду, а IndexedDB на
|
|
7
|
+
* загруженной машине отвечает дольше. Шпионы должны пропускать вызов к
|
|
8
|
+
* настоящему методу (vi.spyOn без подмены).
|
|
9
|
+
*/
|
|
10
|
+
export declare function settleCalls(...spies: MockInstance[]): Promise<void>;
|
|
@@ -12,5 +12,7 @@ export declare class StatPings {
|
|
|
12
12
|
mark(transport: SignalingTransportType): void;
|
|
13
13
|
/** Отправляем данные в стату */
|
|
14
14
|
logMetrics(): void;
|
|
15
|
+
/** Сбрасываем baseline после скрытия страницы, чтобы фоновой простой не стал интервалом ping. */
|
|
16
|
+
resetBaseline(): void;
|
|
15
17
|
destroy(): void;
|
|
16
18
|
}
|
|
@@ -31,6 +31,10 @@ export default class DirectTransport extends BaseTransport {
|
|
|
31
31
|
private _lastStat;
|
|
32
32
|
private _fingerprint;
|
|
33
33
|
private _neverConnected;
|
|
34
|
+
private _connectionStartedAt;
|
|
35
|
+
private _connectionLostAt;
|
|
36
|
+
/** Запросили переход на серверную топологию, не дождавшись первого подключения p2p */
|
|
37
|
+
private _serverRequestedOnNoConnection;
|
|
34
38
|
private _serverSettings;
|
|
35
39
|
private _prevConsumerSettings;
|
|
36
40
|
private _networkLimitsForVideo;
|
|
@@ -41,6 +45,7 @@ export default class DirectTransport extends BaseTransport {
|
|
|
41
45
|
private _directStatReporter;
|
|
42
46
|
private readonly _sdpStats;
|
|
43
47
|
private readonly _peerConnectionStats;
|
|
48
|
+
private readonly _networkAdaptationStats;
|
|
44
49
|
private readonly _debug;
|
|
45
50
|
private readonly _logger;
|
|
46
51
|
private readonly _statAggregator;
|
|
@@ -4,6 +4,7 @@ import { DebugLogger } from '../static/Debug';
|
|
|
4
4
|
export declare enum SignalingTransportFailure {
|
|
5
5
|
EMPTY_ENDPOINT = "EMPTY_ENDPOINT",
|
|
6
6
|
NETWORK_ERROR = "NETWORK_ERROR",
|
|
7
|
+
RECONNECT_TIMEOUT = "RECONNECT_TIMEOUT",
|
|
7
8
|
ABORTED = "ABORTED"
|
|
8
9
|
}
|
|
9
10
|
export type SignalingTransportFailedEvent = {
|
|
@@ -40,6 +41,7 @@ export default class SignalingTransport {
|
|
|
40
41
|
private connectionType;
|
|
41
42
|
private reconnectCount;
|
|
42
43
|
private reconnectTimer;
|
|
44
|
+
private reconnectDeadlineTimer;
|
|
43
45
|
private doctorTimer;
|
|
44
46
|
private forceWebSocket;
|
|
45
47
|
private abortSignal;
|
|
@@ -54,7 +56,7 @@ export default class SignalingTransport {
|
|
|
54
56
|
setPeerId(peerId: number | null): void;
|
|
55
57
|
setLastStamp(lastStamp: number): void;
|
|
56
58
|
setAbortSignal(signal?: AbortSignal): void;
|
|
57
|
-
|
|
59
|
+
onConnectionRestored(): void;
|
|
58
60
|
connect(connectionType: SignalingConnectionType): void;
|
|
59
61
|
close(code?: number): void;
|
|
60
62
|
send(data: string | ArrayBuffer): Promise<void>;
|
|
@@ -70,6 +72,8 @@ export default class SignalingTransport {
|
|
|
70
72
|
private _onClose;
|
|
71
73
|
private _disconnect;
|
|
72
74
|
private _scheduleReconnect;
|
|
75
|
+
private _startReconnectDeadline;
|
|
76
|
+
private _stopReconnectDeadline;
|
|
73
77
|
private _getReconnectDelay;
|
|
74
78
|
private _startDoctor;
|
|
75
79
|
private _stopDoctor;
|
package/enums/Stat.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Имена событий статистики — поле `name` в данных `onClientStats`
|
|
3
|
+
*/
|
|
4
|
+
declare enum Stat {
|
|
2
5
|
CALL_INIT = "call_init",
|
|
3
6
|
CALL_START = "call_start",
|
|
4
7
|
CALL_ACCEPTED_OUTGOING = "call_accepted_outgoing",
|
|
@@ -34,6 +37,8 @@ declare const enum Stat {
|
|
|
34
37
|
SDP_SET_REMOTE_ROLLBACK = "sdp_set_remote_rollback",
|
|
35
38
|
SDP_GENERATED = "sdp_generated",
|
|
36
39
|
SDP_RECEIVED = "sdp_received",
|
|
40
|
+
CLIENT_REQUESTED_SERVER_TOPOLOGY = "client_requested_server_topology",
|
|
41
|
+
VIDEO_ENCODER_CHANGED_BY_NETWORK_ADAPTER = "video_encoder_changed_by_network_adapter",
|
|
37
42
|
WEBSOCKET_CONNECTED = "websocket_connected",
|
|
38
43
|
WEBSOCKET_RECONNECTED = "websocket_reconnected",
|
|
39
44
|
WEBSOCKET_FAILED_PINGS = "websocket_failed_pings",
|
package/package.json
CHANGED
package/static/External.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { IAsrData } from '../types/Asr';
|
|
2
|
+
import { ClientStatsEvent } from '../types/ClientStatsEvent';
|
|
2
3
|
import { ConversationData } from '../types/Conversation';
|
|
3
4
|
import HangupReason from '../classes/HangupReason';
|
|
4
5
|
import { MediaTrackKind } from '../classes/MediaSource';
|
|
@@ -513,6 +514,12 @@ declare namespace External {
|
|
|
513
514
|
* @param memory Статистика памяти
|
|
514
515
|
*/
|
|
515
516
|
function onStatistics(connection: StatResult, memory: Record<string, number>): void;
|
|
517
|
+
/**
|
|
518
|
+
* Событие статистики SDK
|
|
519
|
+
*
|
|
520
|
+
* @param data Данные события с `vcid` и `ts`
|
|
521
|
+
*/
|
|
522
|
+
function onClientStats(data: ClientStatsEvent): void;
|
|
516
523
|
/**
|
|
517
524
|
* Ошибка воспроизведения звука
|
|
518
525
|
*/
|
package/static/Params.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { VideoEffects } from '@vkontakte/calls-video-effects';
|
|
|
2
2
|
import type { EffectVoiceChange, VadControllerOptions, VadLib } from '@vkontakte/calls-audio-effects';
|
|
3
3
|
import type * as Vmoji from '@vkontakte/calls-vmoji';
|
|
4
4
|
import { IAsrData } from '../types/Asr';
|
|
5
|
+
import { ClientStatsEvent } from '../types/ClientStatsEvent';
|
|
5
6
|
import { ConversationData } from '../types/Conversation';
|
|
6
7
|
import HangupReason from '../classes/HangupReason';
|
|
7
8
|
import { MediaTrackKind } from '../classes/MediaSource';
|
|
@@ -114,6 +115,8 @@ export type ParamsObject = {
|
|
|
114
115
|
/** @hidden */
|
|
115
116
|
signalingReconnectMaxCount: number;
|
|
116
117
|
/** @hidden */
|
|
118
|
+
signalingReconnectMaxDuration: number;
|
|
119
|
+
/** @hidden */
|
|
117
120
|
waitConnectionDelay: number;
|
|
118
121
|
/** @hidden */
|
|
119
122
|
waitResponseDelay: number;
|
|
@@ -811,6 +814,12 @@ export type ParamsObject = {
|
|
|
811
814
|
* Статистика звонка
|
|
812
815
|
*/
|
|
813
816
|
onStatistics?: (stats: {}) => void;
|
|
817
|
+
/**
|
|
818
|
+
* Событие статистики SDK: те же данные, что уходят в статистику звонков, плюс `vcid` и `ts`
|
|
819
|
+
*
|
|
820
|
+
* @param data Данные события
|
|
821
|
+
*/
|
|
822
|
+
onClientStats?: (data: ClientStatsEvent) => void;
|
|
814
823
|
/**
|
|
815
824
|
* Ошибка воспроизведения звука
|
|
816
825
|
*/
|
|
@@ -1007,6 +1016,7 @@ export default abstract class Params {
|
|
|
1007
1016
|
static get signalingReconnectDelay(): number;
|
|
1008
1017
|
static get signalingReconnectMaxDelay(): number;
|
|
1009
1018
|
static get signalingReconnectMaxCount(): number;
|
|
1019
|
+
static get signalingReconnectMaxDuration(): number;
|
|
1010
1020
|
static get waitConnectionDelay(): number;
|
|
1011
1021
|
static get waitResponseDelay(): number;
|
|
1012
1022
|
static get waitMessageDelay(): number;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Событие статистики SDK, которое получает `onClientStats`
|
|
3
|
+
*/
|
|
4
|
+
export type ClientStatsEvent = Record<string, string | number | boolean | null> & {
|
|
5
|
+
/** Имя события из `Stat`. У периодической статистики звонка его нет */
|
|
6
|
+
name?: string;
|
|
7
|
+
/** ID звонка, `null` — пока он неизвестен */
|
|
8
|
+
vcid: string | null;
|
|
9
|
+
/** Время события, мс */
|
|
10
|
+
ts: number;
|
|
11
|
+
};
|
package/types/Params.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type IApiEnv = 'AUTO' | 'PROD' | 'CALLS' | 'PROD_OK' | 'TEST' | 'VIDEOTEST' | 'CALLSTEST' | 'CALLS_BETA' | 'CALLS_BENDER' | 'CALLS_MAMES' | 'CALLS_MARS' | string;
|
|
1
|
+
export type IApiEnv = 'AUTO' | 'PROD' | 'CALLS' | 'PROD_OK' | 'TEST' | 'VIDEOTEST' | 'CALLSTEST' | 'CALLS_BETA' | 'CALLS_BENDER' | 'CALLS_MAMES' | 'CALLS_MARS' | 'CALLS_CHELSEA' | 'CALLS_KERZH' | string;
|
|
2
2
|
export type IAPIBaseUrl = string | null;
|