@vkontakte/calls-sdk 2.8.12-dev.35600965.0 → 2.8.12-dev.473faec7.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 (45) hide show
  1. package/CallsSDK.d.ts +27 -4
  2. package/abstract/BaseApi.d.ts +2 -1
  3. package/abstract/BaseSignaling.d.ts +9 -4
  4. package/calls-sdk.cjs.js +7 -13
  5. package/calls-sdk.esm.js +1756 -1471
  6. package/classes/AudioOutput.d.ts +4 -1
  7. package/classes/CallRegistry.d.ts +1 -1
  8. package/classes/MediaSource.d.ts +4 -0
  9. package/classes/{Conversation.d.ts → conversation/Conversation.d.ts} +47 -35
  10. package/classes/conversation/Conversation.testUtils.d.ts +148 -0
  11. package/classes/{ConversationResponseValidator.d.ts → conversation/ConversationResponseValidator.d.ts} +1 -1
  12. package/classes/{DisplayLayoutRequester.d.ts → conversation/DisplayLayoutRequester.d.ts} +4 -4
  13. package/classes/conversation/index.d.ts +1 -0
  14. package/classes/stat/CallLifecycleStats.d.ts +0 -4
  15. package/classes/stat/StatAggregator.d.ts +4 -0
  16. package/classes/transport/DirectTransport.d.ts +1 -0
  17. package/classes/transport/PerfStatReporter.d.ts +2 -0
  18. package/classes/transport/ServerTransport.d.ts +1 -4
  19. package/classes/transport/SimulcastSender.d.ts +31 -0
  20. package/classes/transport/Transport.d.ts +3 -0
  21. package/default/Api.d.ts +4 -1
  22. package/default/ApiExternal.d.ts +2 -1
  23. package/default/Signaling.d.ts +8 -12
  24. package/default/SignalingTransport.d.ts +11 -2
  25. package/enums/ClientHangupReason.d.ts +7 -0
  26. package/enums/Stat.d.ts +0 -1
  27. package/package.json +3 -3
  28. package/static/ApiTransport.d.ts +3 -0
  29. package/static/Params.d.ts +16 -1
  30. package/static/ParticipantConnectionStatusUtils.d.ts +1 -0
  31. package/static/Sdp.d.ts +3 -0
  32. package/static/SignalingCapabilities.d.ts +1 -1
  33. package/static/SimulcastInfo.d.ts +5 -3
  34. package/static/Utils.d.ts +1 -2
  35. package/static/WebRTCUtils.d.ts +1 -6
  36. package/types/Api.d.ts +9 -0
  37. package/types/Capabilities.d.ts +1 -0
  38. package/types/FastHangup.d.ts +66 -0
  39. package/types/Participant.d.ts +1 -0
  40. package/types/PerfStatReporter.d.ts +0 -4
  41. package/types/SignalingCommand.d.ts +2 -0
  42. package/types/SignalingMessage.d.ts +1 -0
  43. package/utils/IceServers.d.ts +2 -0
  44. package/utils/NavigatorPermissions.d.ts +2 -2
  45. package/utils/SerializeLatest.d.ts +5 -0
@@ -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 = {
@@ -16,7 +17,12 @@ export type SignalingTransportReconnectEvent = {
16
17
  count: number;
17
18
  delay: number;
18
19
  };
20
+ export type SignalingTransportConnectingEvent = {
21
+ connectionType: SignalingConnectionType;
22
+ source: SignalingTransportType;
23
+ };
19
24
  export type SignalingTransportHandlers = {
25
+ onConnecting: (event: SignalingTransportConnectingEvent) => void;
20
26
  onOpen: () => void;
21
27
  onMessage: (event: MessageEvent) => void;
22
28
  onError: (event: Event) => void;
@@ -35,6 +41,7 @@ export default class SignalingTransport {
35
41
  private connectionType;
36
42
  private reconnectCount;
37
43
  private reconnectTimer;
44
+ private reconnectDeadlineTimer;
38
45
  private doctorTimer;
39
46
  private forceWebSocket;
40
47
  private abortSignal;
@@ -49,10 +56,10 @@ export default class SignalingTransport {
49
56
  setPeerId(peerId: number | null): void;
50
57
  setLastStamp(lastStamp: number): void;
51
58
  setAbortSignal(signal?: AbortSignal): void;
52
- resetReconnectCount(): void;
59
+ onConnectionRestored(): void;
53
60
  connect(connectionType: SignalingConnectionType): void;
54
61
  close(code?: number): void;
55
- send(data: string | ArrayBuffer): void;
62
+ send(data: string | ArrayBuffer): Promise<void>;
56
63
  private _connect;
57
64
  private _connectWebTransport;
58
65
  private _connectWebSocket;
@@ -65,6 +72,8 @@ export default class SignalingTransport {
65
72
  private _onClose;
66
73
  private _disconnect;
67
74
  private _scheduleReconnect;
75
+ private _startReconnectDeadline;
76
+ private _stopReconnectDeadline;
68
77
  private _getReconnectDelay;
69
78
  private _startDoctor;
70
79
  private _stopDoctor;
@@ -0,0 +1,7 @@
1
+ import HangupType from './HangupType';
2
+ /**
3
+ * Причины завершения звонка, которые клиент может передать в {@link hangup}/{@link declineCall}
4
+ * и пробросить в сигналинг без маппинга.
5
+ */
6
+ export type ClientHangupReason = HangupType.HUNGUP | HangupType.CANCELED | HangupType.REJECTED | HangupType.BUSY | HangupType.MISSED | HangupType.CALL_TIMEOUT;
7
+ export default ClientHangupReason;
package/enums/Stat.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  declare const enum Stat {
2
2
  CALL_INIT = "call_init",
3
- CALL_WARMUP = "call_warmup",
4
3
  CALL_START = "call_start",
5
4
  CALL_ACCEPTED_OUTGOING = "call_accepted_outgoing",
6
5
  CALL_ACCEPTED_INCOMING = "call_accepted_incoming",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/calls-sdk",
3
- "version": "2.8.12-dev.35600965.0",
3
+ "version": "2.8.12-dev.473faec7.0",
4
4
  "author": "vk.com",
5
5
  "description": "Library for video calls based on the vk.com platform",
6
6
  "homepage": "https://vk.com",
@@ -14,7 +14,7 @@
14
14
  "**/*.d.ts"
15
15
  ],
16
16
  "dependencies": {
17
- "@vkontakte/calls-audio-effects": "1.2.8",
17
+ "@vkontakte/calls-audio-effects": "1.4.1",
18
18
  "@vkontakte/calls-video-effects": "2.2.3-beta.7",
19
19
  "@vkontakte/calls-vmoji": "1.0.10-beta.17",
20
20
  "@vkontakte/libvpx": "2.0.9",
@@ -22,6 +22,6 @@
22
22
  "fflate": "^0.8.2",
23
23
  "messagepack": "1.1.12",
24
24
  "simple-ebml-builder": "0.2.2",
25
- "webrtc-adapter": "7.7.0"
25
+ "webrtc-adapter": "9.0.5"
26
26
  }
27
27
  }
@@ -7,4 +7,7 @@ export declare function sendBeakon(method: string, params?: {
7
7
  export declare function request(method: string, params?: {
8
8
  [key: string]: any;
9
9
  }, noSession?: boolean, customEndpoint?: string): Promise<any>;
10
+ export declare function requestKeepalive(method: string, params?: {
11
+ [key: string]: any;
12
+ }, noSession?: boolean): Promise<any>;
10
13
  export declare function sendFormData(url: string, data: FormData): Promise<void>;
@@ -1,5 +1,5 @@
1
1
  import type { VideoEffects } from '@vkontakte/calls-video-effects';
2
- import type { EffectVoiceChange } from '@vkontakte/calls-audio-effects';
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
5
  import { ConversationData } from '../types/Conversation';
@@ -93,6 +93,8 @@ export type ParamsObject = {
93
93
  /** @hidden */
94
94
  signalingReconnectMaxCount: number;
95
95
  /** @hidden */
96
+ signalingReconnectMaxDuration: number;
97
+ /** @hidden */
96
98
  waitConnectionDelay: number;
97
99
  /** @hidden */
98
100
  waitResponseDelay: number;
@@ -193,6 +195,14 @@ export type ParamsObject = {
193
195
  * Можно установить позднее методом `setAudioEffects`
194
196
  */
195
197
  audioEffects: EffectVoiceChange | null;
198
+ /**
199
+ * Namespace библиотеки VAD из `@vkontakte/calls-audio-effects`.
200
+ *
201
+ * Можно установить методом `setVad`
202
+ */
203
+ vad: VadLib | null;
204
+ /** Настройки VAD (threshold, hangoverMs, enabled) */
205
+ vadOptions: VadControllerOptions;
196
206
  /**
197
207
  * Максимальная ширина видео в пикселях для видео эффекта
198
208
  *
@@ -949,6 +959,7 @@ export default abstract class Params {
949
959
  static get signalingReconnectDelay(): number;
950
960
  static get signalingReconnectMaxDelay(): number;
951
961
  static get signalingReconnectMaxCount(): number;
962
+ static get signalingReconnectMaxDuration(): number;
952
963
  static get waitConnectionDelay(): number;
953
964
  static get waitResponseDelay(): number;
954
965
  static get waitMessageDelay(): number;
@@ -970,6 +981,10 @@ export default abstract class Params {
970
981
  static get displaySurface(): DisplayCaptureSurfaceType;
971
982
  static get audioEffects(): EffectVoiceChange | null;
972
983
  static set audioEffects(value: EffectVoiceChange | null);
984
+ static get vad(): VadLib | null;
985
+ static set vad(value: VadLib | null);
986
+ static get vadOptions(): VadControllerOptions;
987
+ static set vadOptions(value: VadControllerOptions);
973
988
  static get videoEffects(): VideoEffects | null;
974
989
  static set videoEffects(value: VideoEffects | null);
975
990
  static get videoEffectMaxWidth(): number;
@@ -11,6 +11,7 @@ declare namespace ParticipantConnectionStatusUtils {
11
11
  function computeEffective(status: ParticipantConnectionStatus): ParticipantStatus;
12
12
  function setSessionState(status: ParticipantConnectionStatus, sessionState?: ParticipantSessionState, sessionStateConnectedBySpeaker?: boolean): StatusTransition;
13
13
  function setTransport(status: ParticipantConnectionStatus, transport: ParticipantStatus): StatusTransition;
14
+ function setStalled(status: ParticipantConnectionStatus, stalled: boolean): StatusTransition;
14
15
  function setSessionStateApplicable(status: ParticipantConnectionStatus, applicable: boolean): StatusTransition;
15
16
  }
16
17
  export default ParticipantConnectionStatusUtils;
@@ -0,0 +1,3 @@
1
+ export declare const SDP_LINE_ENDING = "\r\n";
2
+ export declare function splitSdpLines(sdp: string): string[];
3
+ export declare function joinSdpLines(lines: string[]): string;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @see https://confluence.vk.team/display/VIDEOOK/Websocket+Capability+Flags
2
+ * @see https://confluence.vk.team/display/CALLS/Websocket+Capability+Flags
3
3
  */
4
4
  declare const PREDICATES: {
5
5
  readonly producerScreenTrack: () => boolean;
@@ -6,8 +6,10 @@ export declare const SIMULCAST_DEFAULT: {
6
6
  BITRATE: number;
7
7
  };
8
8
  export declare const SIMULCAST_SCALABILITY_MODE = "L1T2";
9
- export declare const MAP_RID_TO_SCALE_RESOLUTION_DOWN_BY: Record<string, number>;
10
9
  export declare function isEqualSimulcastInfo(si1: ISimulcastInfo | null, si2: ISimulcastInfo | null): boolean;
11
10
  export declare function findBitrateAsc(maxDimension: number, bitrates: VideoBitrateSettings[]): number;
12
- export declare function calculateSimulcastInfo(width?: number, height?: number, bitrates?: VideoBitrateSettings[]): ISimulcastInfo;
13
- export declare function findScaleResolutionDownBy(rid?: string): number;
11
+ export declare function calculateSimulcastInfo(width?: number, height?: number, bitrates?: VideoBitrateSettings[], fps?: number): {
12
+ streams: import("../types/SimulcastInfo").SimulcastStreamInfo[];
13
+ };
14
+ export declare function findScaleResolutionDownBy(rid: string | undefined, simulcastInfo: ISimulcastInfo): number;
15
+ export declare function applySimulcastInfoToEncodings(encodings: RTCRtpEncodingParameters[], simulcastInfo: ISimulcastInfo, maxDimension?: number, maxBitrate?: number): void;
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;
@@ -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
  * До вызова этого метода бесполезно опрашивать другие публичные методы.
@@ -143,11 +143,6 @@ declare namespace WebRTCUtils {
143
143
  * В некоторых браузерах VP9 decoder сломан
144
144
  */
145
145
  function isBrokenVP9Decoder(): boolean;
146
- /**
147
- * Изменился формат описания датаканала в SDP
148
- * @link https://blog.mozilla.org/webrtc/how-to-avoid-data-channel-breaking/
149
- */
150
- function isOldDataChannelDescription(): boolean;
151
146
  /**
152
147
  * Может ли браузер делать H264 приоритетным
153
148
  */
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;
@@ -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;
@@ -188,6 +188,7 @@ declare namespace SignalingMessage {
188
188
  peerId: PeerId;
189
189
  mediaSettings: Partial<MediaSettings>;
190
190
  capabilities?: string;
191
+ externalId?: ExternalId;
191
192
  }
192
193
  export interface Hungup extends Notification {
193
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>;