@vkontakte/calls-sdk 2.8.12-dev.c0dd153e.0 → 2.8.12-dev.c58bce06.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 (76) hide show
  1. package/CallsSDK.d.ts +40 -7
  2. package/abstract/BaseApi.d.ts +15 -9
  3. package/abstract/BaseSignaling.d.ts +10 -5
  4. package/calls-sdk.cjs.js +7 -13
  5. package/calls-sdk.esm.js +4521 -2972
  6. package/classes/AudioFix.d.ts +2 -2
  7. package/classes/AudioOutput.d.ts +6 -3
  8. package/classes/CallRegistry.d.ts +5 -1
  9. package/classes/ExternalIdCache.d.ts +1 -0
  10. package/classes/MediaSource.d.ts +6 -2
  11. package/classes/SpecListener.d.ts +2 -2
  12. package/classes/codec/LibVPxDecoder.d.ts +2 -2
  13. package/classes/codec/LibVPxEncoder.d.ts +2 -2
  14. package/classes/codec/WebCodecsDecoder.d.ts +2 -2
  15. package/classes/codec/WebCodecsEncoder.d.ts +2 -2
  16. package/classes/codec/WorkerBase.d.ts +3 -3
  17. package/classes/{Conversation.d.ts → conversation/Conversation.d.ts} +61 -48
  18. package/classes/conversation/Conversation.testUtils.d.ts +148 -0
  19. package/classes/{ConversationResponseValidator.d.ts → conversation/ConversationResponseValidator.d.ts} +1 -1
  20. package/classes/{DisplayLayoutRequester.d.ts → conversation/DisplayLayoutRequester.d.ts} +5 -5
  21. package/classes/conversation/index.d.ts +1 -0
  22. package/classes/screenshare/ScreenCaptureReceiver.d.ts +2 -2
  23. package/classes/screenshare/ScreenCaptureSender.d.ts +2 -2
  24. package/classes/screenshare/StreamBuilder.d.ts +2 -2
  25. package/classes/stat/CallFinishClassifier.d.ts +11 -0
  26. package/classes/stat/CallLifecycleStats.d.ts +42 -0
  27. package/classes/stat/CodecStatsAggregator.d.ts +2 -2
  28. package/classes/stat/ConversationStats.d.ts +24 -8
  29. package/classes/stat/FirstMediaSentProbe.d.ts +13 -0
  30. package/classes/stat/StatAggregator.d.ts +6 -2
  31. package/classes/stat/StatClock.d.ts +35 -0
  32. package/classes/stat/StatDrainScheduler.d.ts +121 -0
  33. package/classes/stat/StatEventCollector.d.ts +54 -0
  34. package/classes/stat/StatPings.d.ts +3 -4
  35. package/classes/stat/StatQueue.d.ts +92 -0
  36. package/classes/stat/StatSignalingCommands.d.ts +3 -4
  37. package/classes/stat/StatUnloadJournal.d.ts +39 -0
  38. package/classes/transport/BaseTransport.d.ts +7 -1
  39. package/classes/transport/DirectTransport.d.ts +3 -2
  40. package/classes/transport/PerfStatReporter.d.ts +2 -0
  41. package/classes/transport/ServerTransport.d.ts +3 -6
  42. package/classes/transport/SimulcastSender.d.ts +31 -0
  43. package/classes/transport/Transport.d.ts +10 -2
  44. package/default/Api.d.ts +29 -5
  45. package/default/ApiExternal.d.ts +2 -1
  46. package/default/Signaling.d.ts +13 -15
  47. package/default/SignalingTransport.d.ts +7 -1
  48. package/enums/ClientHangupReason.d.ts +7 -0
  49. package/enums/HangupType.d.ts +0 -1
  50. package/enums/SessionError.d.ts +15 -0
  51. package/enums/Stat.d.ts +5 -1
  52. package/package.json +3 -3
  53. package/static/ApiTransport.d.ts +7 -0
  54. package/static/AuthData.d.ts +10 -0
  55. package/static/Debug.d.ts +1 -0
  56. package/static/External.d.ts +1 -1
  57. package/static/Params.d.ts +42 -2
  58. package/static/ParticipantConnectionStatusUtils.d.ts +1 -0
  59. package/static/Sdp.d.ts +3 -0
  60. package/static/SessionStore.d.ts +38 -0
  61. package/static/SignalingCapabilities.d.ts +1 -1
  62. package/static/SimulcastInfo.d.ts +5 -3
  63. package/static/Utils.d.ts +1 -2
  64. package/static/WebRTCUtils.d.ts +13 -12
  65. package/types/Api.d.ts +9 -0
  66. package/types/Capabilities.d.ts +1 -0
  67. package/types/Conversation.d.ts +12 -2
  68. package/types/FastHangup.d.ts +66 -0
  69. package/types/Participant.d.ts +1 -0
  70. package/types/PerfStatReporter.d.ts +0 -4
  71. package/types/SignalingCommand.d.ts +2 -0
  72. package/types/SignalingMessage.d.ts +5 -1
  73. package/utils/IceServers.d.ts +2 -0
  74. package/utils/NavigatorPermissions.d.ts +2 -2
  75. package/utils/SerializeLatest.d.ts +5 -0
  76. package/classes/StatsLogger.d.ts +0 -26
package/static/Utils.d.ts CHANGED
@@ -9,7 +9,7 @@ export declare const DEVICE_IDX_PARAMETER = "d";
9
9
  /** @hidden */
10
10
  declare namespace Utils {
11
11
  function patchLocalSDP(sdp: string, preferH264: boolean, brokenH264Decoder: boolean, preferVP9: boolean, isAudioNack?: boolean): string;
12
- function patchRemoteSDP(sdp: string, oldDataChannelDescription: boolean, preferH264: boolean, brokenH264: boolean, preferVP9: boolean, brokenVP9Encoder: boolean, brokenVP9Decoder: boolean): string;
12
+ function patchRemoteSDP(sdp: string, preferH264: boolean, brokenH264: boolean, preferVP9: boolean, brokenVP9Encoder: boolean, brokenVP9Decoder: boolean): string;
13
13
  function getPeerIdString(peerId: SignalingMessage.PeerId): string;
14
14
  function comparePeerId(peerId1: SignalingMessage.PeerId, peerId2: SignalingMessage.PeerId): boolean;
15
15
  function getPeerConnectionHostInfo(pc: RTCPeerConnection): Promise<{
@@ -77,6 +77,5 @@ declare namespace Utils {
77
77
  function objectReduce<R, T extends object>(obj: T, callback: (acc: R, value: T[keyof T], key: keyof T) => R, initialValue: R): R;
78
78
  const setImmediate: (fn: VoidFunction) => VoidFunction;
79
79
  function isObject(obj: unknown): obj is object;
80
- function patchSimulcastAnswerSdp(sdp: string, trans: RTCRtpTransceiver, width: number, height: number): string;
81
80
  }
82
81
  export default Utils;
@@ -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
  * Тип камеры мобильного устройства
@@ -20,7 +20,7 @@ export declare enum FacingMode {
20
20
  /**
21
21
  * Известные браузеры
22
22
  */
23
- export type BrowserName = 'IE' | 'Edge' | 'Chrome' | 'Firefox' | 'Yandex' | 'Opera' | 'Sferum';
23
+ export type BrowserName = 'Edge' | 'Chrome' | 'Firefox' | 'Yandex' | 'Opera' | 'Sferum';
24
24
  declare namespace WebRTCUtils {
25
25
  /**
26
26
  * До вызова этого метода бесполезно опрашивать другие публичные методы.
@@ -85,24 +85,24 @@ declare namespace WebRTCUtils {
85
85
  * @param needAudio Нужно ли аудио
86
86
  * @param needEmptyTracks Добавлять ли в стрим пустые треки для отключенного видео/аудио
87
87
  */
88
- function getUserMedia(needVideo?: boolean, needAudio?: boolean, needEmptyTracks?: boolean, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
88
+ function getUserMedia(needVideo?: boolean, needAudio?: boolean, needEmptyTracks?: boolean, debug?: DebugLogger, logger?: StatEventCollector | null): Promise<MediaStream>;
89
89
  /**
90
90
  * Запрашивает трансляцию экрана пользователя с опциональным захватом звука
91
91
  */
92
- function getScreenMedia(fastScreenShare: boolean, withAudioShare: boolean, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
92
+ function getScreenMedia(fastScreenShare: boolean, withAudioShare: boolean, debug?: DebugLogger, logger?: StatEventCollector | null): Promise<MediaStream>;
93
93
  /**
94
94
  * Запрашивает камеру пользователя
95
95
  *
96
96
  * @param deviceId ID устройства
97
97
  * @param resolution Размеры видео
98
98
  */
99
- function getUserVideo(deviceId?: string, resolution?: IVideoDimentions, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
99
+ function getUserVideo(deviceId?: string, resolution?: IVideoDimentions, debug?: DebugLogger, logger?: StatEventCollector | null): Promise<MediaStream>;
100
100
  /**
101
101
  * Запрашивает микрофон пользователя
102
102
  *
103
103
  * @param deviceId ID устройства
104
104
  */
105
- function getUserAudio(deviceId?: string, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
105
+ function getUserAudio(deviceId?: string, debug?: DebugLogger, logger?: StatEventCollector | null): Promise<MediaStream>;
106
106
  /**
107
107
  * Устанавливает размер видео в стриме
108
108
  *
@@ -122,6 +122,10 @@ declare namespace WebRTCUtils {
122
122
  * Проверяет поддержку WebRTC браузером
123
123
  */
124
124
  function isBrowserSupported(): boolean;
125
+ /**
126
+ * Возвращает первую отсутствующую capability в стабильном порядке.
127
+ */
128
+ function getBrowserSupportFailure(): BrowserSupportFailure | null;
125
129
  /**
126
130
  * Проверяет поддержку шаринга экрана браузером
127
131
  */
@@ -139,17 +143,14 @@ declare namespace WebRTCUtils {
139
143
  * В некоторых браузерах VP9 decoder сломан
140
144
  */
141
145
  function isBrokenVP9Decoder(): boolean;
142
- /**
143
- * Изменился формат описания датаканала в SDP
144
- * @link https://blog.mozilla.org/webrtc/how-to-avoid-data-channel-breaking/
145
- */
146
- function isOldDataChannelDescription(): boolean;
147
146
  /**
148
147
  * Может ли браузер делать H264 приоритетным
149
148
  */
150
149
  function canPreferH264(): boolean;
151
150
  /**
152
- * Некоторые браузеры (Firefox, Safari) некорректно поддерживают симулкаст
151
+ * Поддержка simulcast браузером.
152
+ * Safari корректно поддерживает simulcast начиная с версии 18.
153
+ * Firefox поддерживает simulcast с VP8 начиная с версии 134.
153
154
  */
154
155
  function isSimulcastSupportedByBrowser(): boolean;
155
156
  /**
package/types/Api.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import HangupType from '../enums/HangupType';
2
+ export interface IHangupParams {
3
+ conversationId: string;
4
+ reason: HangupType;
5
+ anonymToken?: string;
6
+ peerId?: string;
7
+ application_key?: string;
8
+ session_key?: string;
9
+ }
@@ -18,6 +18,7 @@ export type TCapabilities = {
18
18
  fastScreenShare: boolean;
19
19
  videoSuspend: boolean;
20
20
  simulcast: boolean;
21
+ simulcastNativeOrder: boolean;
21
22
  consumerFastScreenShare: boolean;
22
23
  consumerFastScreenShareQualityOnDemand: boolean;
23
24
  transparentAudio: boolean;
@@ -7,7 +7,8 @@ import MediaOption from '../enums/MediaOption';
7
7
  import UserRole from '../enums/UserRole';
8
8
  import { AsrInfo } from './Asr';
9
9
  import { IFeaturesPerRole } from './ConversationFeature';
10
- import { ExternalId, ExternalParticipantId } from './ExternalId';
10
+ import { ExternalId, ExternalParticipantId, ExternalUserId } from './ExternalId';
11
+ import { FastJoinHandler } from './FastJoin';
11
12
  import { FastStartHandler } from './FastStart';
12
13
  import MediaModifiers from './MediaModifiers';
13
14
  import MuteStates from './MuteStates';
@@ -84,6 +85,16 @@ export type ConversationOnStartParams = {
84
85
  onFastStart?: FastStartHandler;
85
86
  conversationId?: string;
86
87
  };
88
+ export type ConversationOnJoinParams = {
89
+ conversationId?: string;
90
+ mediaOptions: MediaOption[];
91
+ chatId?: string;
92
+ joinLink?: string;
93
+ observedIds?: ExternalUserId[];
94
+ payload?: string;
95
+ onFastJoin?: FastJoinHandler;
96
+ anonymous?: boolean;
97
+ };
87
98
  export type StartConversationParams = {
88
99
  opponentIds?: OkUserId[];
89
100
  opponentType: CallType;
@@ -94,7 +105,6 @@ export type StartConversationParams = {
94
105
  requireAuthToJoin?: boolean;
95
106
  onlyAdminCanShareMovie?: boolean;
96
107
  externalIds?: ExternalId[];
97
- startedTime: number;
98
108
  onFastStart?: FastStartHandler;
99
109
  conversationId?: string;
100
110
  };
@@ -0,0 +1,66 @@
1
+ import type ClientHangupReason from '../enums/ClientHangupReason';
2
+ import type HangupType from '../enums/HangupType';
3
+ /**
4
+ * Параметры запроса завершения звонка через внешнего партнёра (fast hangup).
5
+ *
6
+ * SDK генерирует объект и передаёт его в {@link FastHangupHandler}.
7
+ * Хост и backend партнёра пробрасывают `internalParams` как есть, без парсинга.
8
+ */
9
+ export interface FastHangupParams {
10
+ /**
11
+ * ID звонка
12
+ */
13
+ conversationId: string;
14
+ /**
15
+ * Причина завершения звонка
16
+ */
17
+ reason: HangupType;
18
+ /**
19
+ * Внутренние параметры звонка (JSON-строка). Генерируется SDK.
20
+ */
21
+ internalParams?: string | null;
22
+ }
23
+ /**
24
+ * Ответ внешнего партнёра на завершение звонка.
25
+ */
26
+ export interface FastHangupResponse {
27
+ /**
28
+ * true — участие в звонке завершено
29
+ */
30
+ success: boolean;
31
+ }
32
+ /**
33
+ * Параметры публичных методов {@link hangup} / {@link declineCall}.
34
+ *
35
+ * `reason` и `conversationId` идут в signaling hangup.
36
+ * `onFastHangup` заменяет Calls API `vchat.hangupConversation`, если обработчик передан
37
+ * (явный hangup/decline или delayed hangup во время init).
38
+ * Если обработчик не передан, API hangup не вызывается — кроме закрытия вкладки (`pagehide`),
39
+ * где SDK всегда шлёт beacon, и delayed hangup без handler.
40
+ */
41
+ export interface HangupParams {
42
+ /**
43
+ * ID звонка. Если опущен — завершается текущий активный звонок.
44
+ */
45
+ conversationId?: string;
46
+ /**
47
+ * Причина завершения для проброса в сигналинг. См. {@link ClientHangupReason}.
48
+ */
49
+ reason?: ClientHangupReason;
50
+ /**
51
+ * Обработчик fast hangup — завершение звонка через внешнего партнёра.
52
+ */
53
+ onFastHangup?: FastHangupHandler;
54
+ }
55
+ /**
56
+ * Функция-обработчик fast hangup.
57
+ *
58
+ * Если передана в {@link HangupParams.onFastHangup} при `hangup` / `declineCall`,
59
+ * SDK вызывает её вместо API `vchat.hangupConversation`.
60
+ *
61
+ * На `pagehide` не используется — SDK всегда отправляет `sendBeacon`.
62
+ *
63
+ * @param params Параметры запроса
64
+ * @param signal AbortSignal текущего звонка, если он ещё жив на момент вызова
65
+ */
66
+ export type FastHangupHandler = (params: FastHangupParams, signal?: AbortSignal) => Promise<FastHangupResponse>;
@@ -49,6 +49,7 @@ export interface ParticipantSessionState {
49
49
  }
50
50
  export interface ParticipantConnectionStatus {
51
51
  transport: ParticipantStatus;
52
+ stalled: boolean;
52
53
  sessionState?: ParticipantSessionState;
53
54
  sessionStateApplicable: boolean;
54
55
  sessionStateConnectedBySpeaker: boolean;
@@ -24,10 +24,6 @@ export interface CallStatReport {
24
24
  audio_concealment_events: number;
25
25
  inbound_video_count: number;
26
26
  inbound_audio_count: number;
27
- packets_lost_video: number;
28
- packets_sent_video: number;
29
- packets_lost_audio: number;
30
- packets_sent_audio: number;
31
27
  freeze_count: number;
32
28
  total_freezes_duration: number;
33
29
  rtt: number;
@@ -1,8 +1,10 @@
1
1
  import SignalingCommandType from '../enums/SignalingCommandType';
2
2
  import { SignalingResponse, SignalingSuccessResponse } from './SignalingMessage';
3
+ export type SignalingCommandRoute = 'websocket' | 'producer';
3
4
  interface SignalingCommand<T extends SignalingResponse = SignalingSuccessResponse> {
4
5
  sequence: number;
5
6
  name: SignalingCommandType;
7
+ route: SignalingCommandRoute;
6
8
  statMarkName: string;
7
9
  params: object;
8
10
  responseTimer: number;
@@ -34,8 +34,11 @@ export type RecordInfo = {
34
34
  recordExternalOwnerId?: string;
35
35
  };
36
36
  export interface SignalingResponse extends SignalingMessage {
37
- response?: SignalingCommandType;
38
37
  error?: string;
38
+ errorCode?: string;
39
+ errorMessage?: string;
40
+ message?: string;
41
+ response?: SignalingCommandType;
39
42
  reason?: HangupType | FatalError;
40
43
  sequence?: number;
41
44
  type: 'response' | 'error' | 'timeout';
@@ -185,6 +188,7 @@ declare namespace SignalingMessage {
185
188
  peerId: PeerId;
186
189
  mediaSettings: Partial<MediaSettings>;
187
190
  capabilities?: string;
191
+ externalId?: ExternalId;
188
192
  }
189
193
  export interface Hungup extends Notification {
190
194
  participantId: OkUserId;
@@ -0,0 +1,2 @@
1
+ import IceServer from '../types/IceServer';
2
+ export declare function createIceServers(stunServer?: IceServer, turnServer?: IceServer): IceServer[];
@@ -2,8 +2,8 @@ type Device = 'camera' | 'microphone';
2
2
  type PermissionStatusState = typeof PermissionStatus.prototype.state;
3
3
  type EventListener = (name: Device, state: PermissionStatusState) => void;
4
4
  export declare class NavigatorPermissions {
5
- private _cameraPermissionStatus;
6
- private _microphonePermissionStatus;
5
+ private _cameraPermissionStatus?;
6
+ private _microphonePermissionStatus?;
7
7
  private _listener;
8
8
  static isSupported(): boolean;
9
9
  init(listener: EventListener): Promise<void>;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Последовательно выполняет операции, оставляя в очереди только последнее запрошенное значение.
3
+ * Возвращает ошибку, только если не удалось применить итоговое состояние.
4
+ */
5
+ export declare function serializeLatest<T>(run: (value: T) => Promise<void> | undefined): (value: T) => Promise<void>;
@@ -1,26 +0,0 @@
1
- import BaseApi from '../abstract/BaseApi';
2
- import BaseLogger from '../abstract/BaseLogger';
3
- import StatLog from '../enums/StatLog';
4
- /**
5
- * Класс отвечает за отправку различной информации в сервис статистики (события, статистика и подобное)
6
- */
7
- export default class StatsLogger extends BaseLogger {
8
- private readonly _externalLogger;
9
- private readonly _api;
10
- private readonly _conversationIdProvider;
11
- private readonly _batchInterval;
12
- private _batchedClientStats;
13
- private _batchTimeout;
14
- private _serverTimeDelta;
15
- constructor(api: BaseApi, externalLogger: BaseLogger | null, conversationIdProvider: () => string | null);
16
- log(name: StatLog, value?: string, immediately?: boolean): void;
17
- logClientStats(data: Record<string, string | number | boolean | undefined | null>, immediately?: boolean): void;
18
- destroy(): void;
19
- private _getConversationId;
20
- private _sendBatch;
21
- private _startTimeout;
22
- private _stopTimeout;
23
- private _sendClientStats;
24
- private _calculateServerTimeDelta;
25
- private _now;
26
- }