@vkontakte/calls-sdk 2.8.13-dev.8897f036.0 → 2.8.13-dev.8b43110d.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.
Files changed (57) hide show
  1. package/CallsSDK.d.ts +33 -11
  2. package/abstract/BaseApi.d.ts +12 -8
  3. package/calls-sdk.cjs.js +7 -7
  4. package/calls-sdk.esm.js +3705 -2663
  5. package/classes/AudioFix.d.ts +2 -2
  6. package/classes/AudioOutput.d.ts +3 -3
  7. package/classes/MediaSource.d.ts +6 -2
  8. package/classes/SpecListener.d.ts +2 -2
  9. package/classes/VolumesDetector.d.ts +0 -1
  10. package/classes/codec/LibVPxDecoder.d.ts +2 -2
  11. package/classes/codec/LibVPxEncoder.d.ts +2 -2
  12. package/classes/codec/WebCodecsDecoder.d.ts +2 -2
  13. package/classes/codec/WebCodecsEncoder.d.ts +2 -2
  14. package/classes/codec/WorkerBase.d.ts +3 -3
  15. package/classes/conversation/Conversation.d.ts +2 -0
  16. package/classes/screenshare/ScreenCaptureReceiver.d.ts +2 -2
  17. package/classes/screenshare/ScreenCaptureSender.d.ts +2 -2
  18. package/classes/screenshare/StreamBuilder.d.ts +2 -2
  19. package/classes/stat/ApiCallStats.d.ts +12 -0
  20. package/classes/stat/CallLifecycleStats.d.ts +2 -2
  21. package/classes/stat/CodecStatsAggregator.d.ts +2 -2
  22. package/classes/stat/ConversationStats.d.ts +15 -2
  23. package/classes/stat/NetworkAdaptationStats.d.ts +35 -0
  24. package/classes/stat/PeerConnectionStats.d.ts +22 -0
  25. package/classes/stat/SdpStats.d.ts +39 -0
  26. package/classes/stat/Stat.testUtils.d.ts +10 -0
  27. package/classes/stat/StatAggregator.d.ts +10 -3
  28. package/classes/stat/StatClock.d.ts +28 -0
  29. package/classes/stat/StatDrainScheduler.d.ts +92 -0
  30. package/classes/stat/StatEventCollector.d.ts +50 -0
  31. package/classes/stat/StatPings.d.ts +4 -2
  32. package/classes/stat/StatQueue.d.ts +79 -0
  33. package/classes/stat/StatSignalingCommands.d.ts +2 -2
  34. package/classes/stat/StatUnloadJournal.d.ts +27 -0
  35. package/classes/transport/DirectTransport.d.ts +13 -8
  36. package/classes/transport/PerfStatReporter.d.ts +2 -0
  37. package/classes/transport/ServerTransport.d.ts +4 -2
  38. package/classes/transport/SimulcastSender.d.ts +2 -2
  39. package/classes/transport/Transport.d.ts +2 -2
  40. package/default/Api.d.ts +10 -1
  41. package/default/Signaling.d.ts +11 -3
  42. package/default/SignalingTransport.d.ts +5 -1
  43. package/enums/SessionError.d.ts +10 -0
  44. package/enums/Stat.d.ts +26 -1
  45. package/package.json +3 -3
  46. package/static/ApiTransport.d.ts +4 -0
  47. package/static/BrowserEnvironment.d.ts +90 -0
  48. package/static/External.d.ts +7 -0
  49. package/static/Params.d.ts +60 -1
  50. package/static/SessionStore.d.ts +29 -0
  51. package/static/SimulcastInfo.d.ts +1 -0
  52. package/static/WebRTCUtils.d.ts +5 -76
  53. package/types/ClientStatsEvent.d.ts +11 -0
  54. package/types/IEventualStatLog.d.ts +1 -1
  55. package/types/Params.d.ts +1 -1
  56. package/types/PerfStatReporter.d.ts +1 -0
  57. package/types/SignalingMessage.d.ts +1 -0
@@ -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';
@@ -37,6 +38,27 @@ export type ParamsObject = {
37
38
  platform: string;
38
39
  /** @hidden */
39
40
  clientStatsPlatform: string;
41
+ /**
42
+ * Версия приложения-хоста, уходит в статистику и сигналинг, например `'26.31.0:6822'`.
43
+ * По умолчанию `'0.0.0'`
44
+ */
45
+ appVersion: string;
46
+ /**
47
+ * Автоматически запускать отправку клиентской статистики при `init()`.
48
+ *
49
+ * При `false` события копятся в очереди, но не уходят в сеть, пока хост не
50
+ * вызовет `startStats()`.
51
+ *
52
+ * _По умолчанию: `true`_
53
+ */
54
+ autoStartStats: boolean;
55
+ /**
56
+ * Персистентная очередь клиентской статистики: события копятся в IndexedDB
57
+ * и уезжают пачками с подтверждением, переживая перезагрузку вкладки.
58
+ *
59
+ * _По умолчанию: `false`_
60
+ */
61
+ statQueueEnabled: boolean;
40
62
  /** @hidden */
41
63
  clientType: string;
42
64
  /** @hidden */
@@ -93,6 +115,8 @@ export type ParamsObject = {
93
115
  /** @hidden */
94
116
  signalingReconnectMaxCount: number;
95
117
  /** @hidden */
118
+ signalingReconnectMaxDuration: number;
119
+ /** @hidden */
96
120
  waitConnectionDelay: number;
97
121
  /** @hidden */
98
122
  waitResponseDelay: number;
@@ -230,6 +254,13 @@ export type ParamsObject = {
230
254
  iceRestartWaitTime: number;
231
255
  /** @hidden */
232
256
  transportConnectionWaitTime: number;
257
+ /**
258
+ * Разрешить запрашивать переход на серверную топологию не только звонящему,
259
+ * но и принимающей стороне, если не удалось восстановить оборвавшееся p2p-соединение
260
+ *
261
+ * _По умолчанию: `false`_
262
+ */
263
+ switchTopologyOnReconnectFromAnySide: boolean;
233
264
  /**
234
265
  * Частота получения статистики в миллисекундах
235
266
  *
@@ -269,6 +300,13 @@ export type ParamsObject = {
269
300
  perfStatReportEnabled: boolean;
270
301
  /** @hidden */
271
302
  callStatReportEnabled: boolean;
303
+ /**
304
+ * Отправлять событие статистики ice_candidate_gathering_failed
305
+ *
306
+ * _По умолчанию: `false`_
307
+ * @hidden
308
+ */
309
+ iceCandidateErrorStatEnabled: boolean;
272
310
  /**
273
311
  * Отдавать приоритет кодеку H264 для исходящего видео
274
312
  *
@@ -776,6 +814,12 @@ export type ParamsObject = {
776
814
  * Статистика звонка
777
815
  */
778
816
  onStatistics?: (stats: {}) => void;
817
+ /**
818
+ * Событие статистики SDK: те же данные, что уходят в статистику звонков, плюс `vcid` и `ts`
819
+ *
820
+ * @param data Данные события
821
+ */
822
+ onClientStats?: (data: ClientStatsEvent) => void;
779
823
  /**
780
824
  * Ошибка воспроизведения звука
781
825
  */
@@ -927,7 +971,13 @@ export default abstract class Params {
927
971
  static getScreenFrameRate(fastScreenShare: boolean): number;
928
972
  static get<N extends keyof ParamsObject>(name: N): ParamsObject[N];
929
973
  static get appName(): string;
930
- static get appVersion(): number;
974
+ static get appVersion(): string;
975
+ /**
976
+ * Версия клиента для `client_version` в `auth.anonymLogin`. Бэкенд валидирует формат,
977
+ * поэтому это фиксированное значение, а не версия приложения-хоста (см. {@link Params.appVersion}).
978
+ * @hidden
979
+ */
980
+ static get apiClientVersion(): number;
931
981
  static get sdkVersion(): string;
932
982
  static get debug(): boolean;
933
983
  static get protocolVersion(): 5 | 6;
@@ -935,6 +985,8 @@ export default abstract class Params {
935
985
  static set platform(value: string);
936
986
  static get clientStatsPlatform(): string;
937
987
  static set clientStatsPlatform(value: string);
988
+ static get autoStartStats(): boolean;
989
+ static get statQueueEnabled(): boolean;
938
990
  static get clientType(): string;
939
991
  static set clientType(value: string);
940
992
  static get externalUserType(): string;
@@ -964,6 +1016,7 @@ export default abstract class Params {
964
1016
  static get signalingReconnectDelay(): number;
965
1017
  static get signalingReconnectMaxDelay(): number;
966
1018
  static get signalingReconnectMaxCount(): number;
1019
+ static get signalingReconnectMaxDuration(): number;
967
1020
  static get waitConnectionDelay(): number;
968
1021
  static get waitResponseDelay(): number;
969
1022
  static get waitMessageDelay(): number;
@@ -1007,11 +1060,13 @@ export default abstract class Params {
1007
1060
  };
1008
1061
  static get iceRestartWaitTime(): number;
1009
1062
  static get transportConnectionWaitTime(): number;
1063
+ static get switchTopologyOnReconnectFromAnySide(): boolean;
1010
1064
  static get statisticsInterval(): number;
1011
1065
  static set statisticsInterval(value: number);
1012
1066
  static get networkStatisticsInterval(): number;
1013
1067
  static get perfStatReportEnabled(): boolean;
1014
1068
  static get callStatReportEnabled(): boolean;
1069
+ static get iceCandidateErrorStatEnabled(): boolean;
1015
1070
  static get enableLogPerfStatReport(): boolean;
1016
1071
  static get asrDataChannel(): boolean;
1017
1072
  static get consumerScreenDataChannelPacketSize(): number;
@@ -1083,10 +1138,14 @@ export default abstract class Params {
1083
1138
  videoSuspend: boolean;
1084
1139
  debugLog: boolean;
1085
1140
  callStatReportEnabled: boolean;
1141
+ iceCandidateErrorStatEnabled: boolean;
1086
1142
  joinFromMultipleDevices: boolean;
1087
1143
  movieShare: boolean;
1088
1144
  clientType: string;
1089
1145
  clientStatsPlatform: string;
1146
+ appVersion: string;
1147
+ autoStartStats: boolean;
1148
+ statQueueEnabled: boolean;
1090
1149
  consumerScreenDataChannelPacketSize: number;
1091
1150
  switchVideoAtBadNetwork: boolean;
1092
1151
  simulcast: boolean;
@@ -0,0 +1,29 @@
1
+ export type StoredSession = {
2
+ sessionKey: string;
3
+ /** Ключ окружения на момент сохранения, см. currentEndpoint(). */
4
+ endpoint: string;
5
+ savedAt: number;
6
+ };
7
+ /**
8
+ * Снимки сессий по uid на диске. Снимок может быть протухшим и переавторизации
9
+ * не подлежит, поэтому годится только для отложенных best-effort задач вроде
10
+ * досылки статистики.
11
+ */
12
+ export default abstract class SessionStore {
13
+ static remember(uid: number, session: {
14
+ sessionKey: string;
15
+ endpoint: string;
16
+ }): void;
17
+ static get(uid: number): StoredSession | null;
18
+ static forget(uid: number): void;
19
+ /** Снимок живёт столько же, сколько события, которые он мог бы дослать. */
20
+ static prune(now?: number): void;
21
+ /**
22
+ * Ключ окружения: сессия прода не должна улететь на тестовый кластер.
23
+ * Адрес нормализуется так же, как в транспорте.
24
+ */
25
+ static currentEndpoint(): string;
26
+ private static _read;
27
+ private static _write;
28
+ private static _isValid;
29
+ }
@@ -4,6 +4,7 @@ export declare const SIMULCAST_DEFAULT: {
4
4
  HEIGHT: number;
5
5
  WIDTH: number;
6
6
  BITRATE: number;
7
+ FPS: number;
7
8
  };
8
9
  export declare const SIMULCAST_SCALABILITY_MODE = "L1T2";
9
10
  export declare function isEqualSimulcastInfo(si1: ISimulcastInfo | null, si2: ISimulcastInfo | null): boolean;
@@ -2,7 +2,7 @@
2
2
  * Вспомогательный плагин для работы с WebRTC
3
3
  */
4
4
  import { IVideoDimentions } from '../types/MediaSettings';
5
- import type StatsLogger from '../classes/StatsLogger';
5
+ import type StatEventCollector from '../classes/stat/StatEventCollector';
6
6
  import { type DebugLogger } from './Debug';
7
7
  /**
8
8
  * Тип камеры мобильного устройства
@@ -17,10 +17,6 @@ export declare enum FacingMode {
17
17
  */
18
18
  ENVIRONMENT = "environment"
19
19
  }
20
- /**
21
- * Известные браузеры
22
- */
23
- export type BrowserName = 'Edge' | 'Chrome' | 'Firefox' | 'Yandex' | 'Opera' | 'Sferum';
24
20
  declare namespace WebRTCUtils {
25
21
  /**
26
22
  * До вызова этого метода бесполезно опрашивать другие публичные методы.
@@ -85,24 +81,24 @@ declare namespace WebRTCUtils {
85
81
  * @param needAudio Нужно ли аудио
86
82
  * @param needEmptyTracks Добавлять ли в стрим пустые треки для отключенного видео/аудио
87
83
  */
88
- function getUserMedia(needVideo?: boolean, needAudio?: boolean, needEmptyTracks?: boolean, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
84
+ function getUserMedia(needVideo?: boolean, needAudio?: boolean, needEmptyTracks?: boolean, debug?: DebugLogger, logger?: StatEventCollector | null): Promise<MediaStream>;
89
85
  /**
90
86
  * Запрашивает трансляцию экрана пользователя с опциональным захватом звука
91
87
  */
92
- function getScreenMedia(fastScreenShare: boolean, withAudioShare: boolean, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
88
+ function getScreenMedia(fastScreenShare: boolean, withAudioShare: boolean, debug?: DebugLogger, logger?: StatEventCollector | null): Promise<MediaStream>;
93
89
  /**
94
90
  * Запрашивает камеру пользователя
95
91
  *
96
92
  * @param deviceId ID устройства
97
93
  * @param resolution Размеры видео
98
94
  */
99
- function getUserVideo(deviceId?: string, resolution?: IVideoDimentions, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
95
+ function getUserVideo(deviceId?: string, resolution?: IVideoDimentions, debug?: DebugLogger, logger?: StatEventCollector | null): Promise<MediaStream>;
100
96
  /**
101
97
  * Запрашивает микрофон пользователя
102
98
  *
103
99
  * @param deviceId ID устройства
104
100
  */
105
- function getUserAudio(deviceId?: string, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
101
+ function getUserAudio(deviceId?: string, debug?: DebugLogger, logger?: StatEventCollector | null): Promise<MediaStream>;
106
102
  /**
107
103
  * Устанавливает размер видео в стриме
108
104
  *
@@ -118,76 +114,9 @@ declare namespace WebRTCUtils {
118
114
  * Возвращает фейковый видео mediaTrack
119
115
  */
120
116
  function getBlackMediaTrack(width?: number, height?: number): MediaStreamTrack;
121
- /**
122
- * Проверяет поддержку WebRTC браузером
123
- */
124
- function isBrowserSupported(): boolean;
125
- /**
126
- * Возвращает первую отсутствующую capability в стабильном порядке.
127
- */
128
- function getBrowserSupportFailure(): BrowserSupportFailure | null;
129
- /**
130
- * Проверяет поддержку шаринга экрана браузером
131
- */
132
- function isScreenCapturingSupported(): boolean;
133
- /**
134
- * В некоторых браузерах H264 decoder сломан
135
- */
136
- function isBrokenH264Decoder(): boolean;
137
- /**
138
- * В некоторых браузерах VP9 encoder сломан
139
- * В симулкасте вп9 енкодер ведет себя некорректно
140
- */
141
- function isBrokenVP9Encoder(): boolean;
142
- /**
143
- * В некоторых браузерах VP9 decoder сломан
144
- */
145
- function isBrokenVP9Decoder(): boolean;
146
- /**
147
- * Может ли браузер делать H264 приоритетным
148
- */
149
- function canPreferH264(): boolean;
150
- /**
151
- * Поддержка simulcast браузером.
152
- * Safari корректно поддерживает simulcast начиная с версии 18.
153
- * Firefox поддерживает simulcast с VP8 начиная с версии 134.
154
- */
155
- function isSimulcastSupportedByBrowser(): boolean;
156
- /**
157
- * Имя операционной системы
158
- */
159
- function os(): string;
160
- /**
161
- * Версия операционной системы
162
- */
163
- function osVersion(): number | null | undefined;
164
- /**
165
- * Мобильный браузер или нет
166
- */
167
- function isMobile(): boolean;
168
- /**
169
- * Имя браузера
170
- */
171
- function browserName(): BrowserName | string;
172
- /**
173
- * Версия браузера
174
- */
175
- function browserVersion(): string;
176
- /**
177
- * Если браузер основан на хроме - возвращает версию
178
- */
179
- function baseChromeVersion(): number;
180
117
  /**
181
118
  * Возвращает AudioContext
182
119
  */
183
120
  function getAudioContext(): AudioContext;
184
- /**
185
- * Возвращает подверсию браузера (если она есть)
186
- */
187
- function browserSubVersion(): string;
188
- /**
189
- * Браузер поддерживает захват звука при трансляции экрана
190
- */
191
- function isAudioShareSupported(): boolean;
192
121
  }
193
122
  export default WebRTCUtils;
@@ -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
+ };
@@ -1,6 +1,6 @@
1
1
  import Stat from '../enums/Stat';
2
2
  export interface IEventualStatLog {
3
3
  name: Stat;
4
- value?: number | null;
4
+ value?: number;
5
5
  [k: string]: number | string | undefined | null;
6
6
  }
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;
@@ -43,5 +43,6 @@ export interface ICallStatLog extends Pick<CallStatReport, 'call_topology' | 'na
43
43
  video_loss?: number;
44
44
  audio_loss?: number;
45
45
  cpu_hardware_concurrency?: number;
46
+ audio_tracks?: number;
46
47
  [k: string]: string | number | boolean | undefined;
47
48
  }
@@ -198,6 +198,7 @@ declare namespace SignalingMessage {
198
198
  reason: HangupType;
199
199
  errorCode?: string;
200
200
  markers?: ParticipantListMarkers;
201
+ externalId?: ExternalId;
201
202
  }
202
203
  export interface ClosedConversation extends Notification {
203
204
  reason: HangupType;