@vkontakte/calls-sdk 2.8.12-dev.73c9f7fe.0 → 2.8.12-dev.7afbc576.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 (39) hide show
  1. package/CallsSDK.d.ts +25 -13
  2. package/abstract/BaseApi.d.ts +4 -8
  3. package/calls-sdk.cjs.js +6 -6
  4. package/calls-sdk.esm.js +726 -417
  5. package/classes/AudioFix.d.ts +2 -2
  6. package/classes/AudioOutput.d.ts +2 -2
  7. package/classes/MediaSource.d.ts +2 -2
  8. package/classes/SpecListener.d.ts +2 -2
  9. package/classes/codec/LibVPxDecoder.d.ts +2 -2
  10. package/classes/codec/LibVPxEncoder.d.ts +2 -2
  11. package/classes/codec/WebCodecsDecoder.d.ts +2 -2
  12. package/classes/codec/WebCodecsEncoder.d.ts +2 -2
  13. package/classes/codec/WorkerBase.d.ts +3 -3
  14. package/classes/conversation/Conversation.d.ts +7 -4
  15. package/classes/screenshare/ScreenCaptureReceiver.d.ts +2 -2
  16. package/classes/screenshare/ScreenCaptureSender.d.ts +2 -2
  17. package/classes/screenshare/StreamBuilder.d.ts +2 -2
  18. package/classes/stat/CallLifecycleStats.d.ts +2 -2
  19. package/classes/stat/CodecStatsAggregator.d.ts +2 -2
  20. package/classes/stat/ConversationStats.d.ts +11 -4
  21. package/classes/stat/StatAggregator.d.ts +2 -2
  22. package/classes/stat/StatDrainScheduler.d.ts +78 -0
  23. package/classes/stat/StatEventCollector.d.ts +37 -0
  24. package/classes/stat/StatPings.d.ts +2 -2
  25. package/classes/stat/StatQueue.d.ts +61 -0
  26. package/classes/stat/StatSignalingCommands.d.ts +2 -2
  27. package/classes/stat/StatUnloadJournal.d.ts +30 -0
  28. package/classes/transport/DirectTransport.d.ts +2 -2
  29. package/classes/transport/ServerTransport.d.ts +2 -2
  30. package/classes/transport/SimulcastSender.d.ts +2 -2
  31. package/classes/transport/Transport.d.ts +2 -2
  32. package/default/Api.d.ts +9 -1
  33. package/default/Signaling.d.ts +2 -2
  34. package/enums/SessionError.d.ts +10 -0
  35. package/package.json +1 -1
  36. package/static/Params.d.ts +14 -0
  37. package/static/WebRTCUtils.d.ts +5 -5
  38. package/types/FastHangup.d.ts +66 -0
  39. package/classes/StatsLogger.d.ts +0 -41
@@ -2,7 +2,7 @@ import BaseSignaling from '../../abstract/BaseSignaling';
2
2
  import { type DebugLogger } from '../../static/Debug';
3
3
  import type VideoSettings from '../../types/VideoSettings';
4
4
  import { MediaSource } from '../MediaSource';
5
- import StatsLogger from '../StatsLogger';
5
+ import StatEventCollector from '../stat/StatEventCollector';
6
6
  export default class SimulcastSender {
7
7
  private _pc;
8
8
  private _transceiver;
@@ -12,7 +12,7 @@ export default class SimulcastSender {
12
12
  private readonly _getCameraSettings;
13
13
  private readonly _debug;
14
14
  private readonly _logger;
15
- constructor(signaling: BaseSignaling, mediaSource: MediaSource, getCameraSettings: () => VideoSettings | null, debug?: DebugLogger, logger?: StatsLogger | null);
15
+ constructor(signaling: BaseSignaling, mediaSource: MediaSource, getCameraSettings: () => VideoSettings | null, debug?: DebugLogger, logger?: StatEventCollector | null);
16
16
  configureFromRemoteOffer(pc: RTCPeerConnection): Promise<void>;
17
17
  finalizeAnswer(sdp: string): string;
18
18
  sync({ force }?: {
@@ -6,7 +6,7 @@ import { type DebugLogger } from '../../static/Debug';
6
6
  import { ParticipantId } from '../../types/Participant';
7
7
  import ServerSettings from '../../types/ServerSettings';
8
8
  import EventEmitter from '../EventEmitter';
9
- import StatsLogger from '../StatsLogger';
9
+ import StatEventCollector from '../stat/StatEventCollector';
10
10
  import { MediaSource } from '../MediaSource';
11
11
  import { CodecStatsAggregator } from '../stat/CodecStatsAggregator';
12
12
  import { StatAggregator } from '../stat/StatAggregator';
@@ -51,7 +51,7 @@ export declare class Transport extends EventEmitter {
51
51
  private readonly _onFirstMediaSent;
52
52
  private _firstMediaSentProbeStopped;
53
53
  private _vadController;
54
- constructor(topology: TransportTopology, signaling: BaseSignaling, mediaSource: MediaSource, serverSettings: ServerSettings, debug?: DebugLogger, logger?: StatsLogger | null, statAggregator?: StatAggregator | null, codecStatsAggregator?: CodecStatsAggregator | null, onFirstMediaSent?: (() => void) | null);
54
+ constructor(topology: TransportTopology, signaling: BaseSignaling, mediaSource: MediaSource, serverSettings: ServerSettings, debug?: DebugLogger, logger?: StatEventCollector | null, statAggregator?: StatAggregator | null, codecStatsAggregator?: CodecStatsAggregator | null, onFirstMediaSent?: (() => void) | null);
55
55
  updateSettings(settings: ServerSettings): void;
56
56
  updateStatisticsInterval(): void;
57
57
  allocate(participantId: ParticipantId, isMaster?: boolean): void;
package/default/Api.d.ts CHANGED
@@ -20,8 +20,16 @@ export default class Api extends BaseApi {
20
20
  private _removeCachedAnonymLogin;
21
21
  private _reauthorize;
22
22
  private _applyAnonymLogin;
23
+ /**
24
+ * Бекенд присылает 200 в любой ситуации, нужно читать тело.
25
+ * В теле есть ошибки если есть проблемы со статой.
26
+ *
27
+ * Ошибки по отдельным событиям логируются, но не влияют на результат:
28
+ * батч трактуется целиком, иначе одно всегда отвергаемое событие
29
+ * залипило бы очередь навсегда.
30
+ */
23
31
  private _sendClientStats;
24
- logClientStats(items: ClientStats[]): void;
32
+ logClientStats(items: ClientStats[]): Promise<void>;
25
33
  uploadDebugLogs(conversationId: string, startTime: number, endTime: number, log: string): Promise<void>;
26
34
  joinConversation(conversationId: string, isVideo?: boolean, chatId?: string): Promise<ConversationResponse>;
27
35
  createConversation(conversationId: string, payload?: string, requireAuthToJoin?: boolean, { onlyAdminCanShareMovie, audienceMode, audioOnly, waitForAdmin, closedConversation, }?: {
@@ -4,7 +4,7 @@ import { SharingStatReport } from '../classes/screenshare/SharingStatReport';
4
4
  import { StatAggregator } from '../classes/stat/StatAggregator';
5
5
  import { StatPings } from '../classes/stat/StatPings';
6
6
  import { StatSignalingCommands } from '../classes/stat/StatSignalingCommands';
7
- import StatsLogger from '../classes/StatsLogger';
7
+ import StatEventCollector from '../classes/stat/StatEventCollector';
8
8
  import ConversationFeature from '../enums/ConversationFeature';
9
9
  import ConversationOption from '../enums/ConversationOption';
10
10
  import MediaOption from '../enums/MediaOption';
@@ -56,7 +56,7 @@ export default class Signaling extends BaseSignaling {
56
56
  private static get WAIT_CONNECTION_DELAY();
57
57
  private static get WAIT_RESPONSE_DELAY();
58
58
  get ready(): boolean;
59
- constructor(debug?: DebugLogger, logger?: StatsLogger | null, statAggregator?: StatAggregator | null, statPings?: StatPings | null, statSignalingCommands?: StatSignalingCommands | null);
59
+ constructor(debug?: DebugLogger, logger?: StatEventCollector | null, statAggregator?: StatAggregator | null, statPings?: StatPings | null, statSignalingCommands?: StatSignalingCommands | null);
60
60
  setAbortSignal(signal: AbortSignal | undefined): void;
61
61
  setEndpoint(endpoint: string): void;
62
62
  setWebTransportEndpoint(endpoint: string | null): void;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Коды ошибок сессии API
3
+ */
4
+ declare enum SessionError {
5
+ PARAM_SESSION_EXPIRED = 102,
6
+ PARAM_SESSION_KEY = 103,
7
+ PARAM_SIGNATURE = 104,
8
+ AUTH_LOGIN = 401
9
+ }
10
+ export default SessionError;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/calls-sdk",
3
- "version": "2.8.12-dev.73c9f7fe.0",
3
+ "version": "2.8.12-dev.7afbc576.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",
@@ -37,6 +37,18 @@ export type ParamsObject = {
37
37
  platform: string;
38
38
  /** @hidden */
39
39
  clientStatsPlatform: string;
40
+ /**
41
+ * Автоматически запускать отправку клиентской статистики при `init()`.
42
+ *
43
+ * Если `false`, события звонков продолжают копиться в IndexedDB, но в сеть
44
+ * не уходят, пока хост не вызовет `startStats()`. Так хост может прогреть
45
+ * приложение, не нагружая сеть. До старта неактивен и fallback прямой
46
+ * отправки при недоступном хранилище. Если `startStats()` не вызвать
47
+ * никогда, очередь дорастёт до лимита и начнёт вытеснять старые звонки.
48
+ *
49
+ * _По умолчанию: `true`_
50
+ */
51
+ autoStartStats: boolean;
40
52
  /** @hidden */
41
53
  clientType: string;
42
54
  /** @hidden */
@@ -928,6 +940,7 @@ export default abstract class Params {
928
940
  static set platform(value: string);
929
941
  static get clientStatsPlatform(): string;
930
942
  static set clientStatsPlatform(value: string);
943
+ static get autoStartStats(): boolean;
931
944
  static get clientType(): string;
932
945
  static set clientType(value: string);
933
946
  static get externalUserType(): string;
@@ -1080,6 +1093,7 @@ export default abstract class Params {
1080
1093
  movieShare: boolean;
1081
1094
  clientType: string;
1082
1095
  clientStatsPlatform: string;
1096
+ autoStartStats: boolean;
1083
1097
  consumerScreenDataChannelPacketSize: number;
1084
1098
  switchVideoAtBadNetwork: boolean;
1085
1099
  simulcast: 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
  * Тип камеры мобильного устройства
@@ -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
  *
@@ -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>;
@@ -1,41 +0,0 @@
1
- import BaseApi from '../abstract/BaseApi';
2
- import BaseLogger from '../abstract/BaseLogger';
3
- import StatLog from '../enums/StatLog';
4
- import TransportTopology from '../enums/TransportTopology';
5
- type ClientStatsPayload = Record<string, string | number | boolean | undefined | null>;
6
- export type LogClientStatsOptions = {
7
- immediately?: boolean;
8
- occurredAt?: number;
9
- conversationId?: string | null;
10
- deferUntilServerTime?: boolean;
11
- };
12
- /**
13
- * Класс отвечает за отправку различной информации в сервис статистики (события, статистика и подобное)
14
- */
15
- export default class StatsLogger extends BaseLogger {
16
- private readonly _externalLogger;
17
- private readonly _api;
18
- private readonly _conversationIdProvider;
19
- private readonly _topologyProvider;
20
- private readonly _batchInterval;
21
- private _batchedClientStats;
22
- private _batchTimeout;
23
- private _serverTimeDelta;
24
- private _waitingForServerTime;
25
- private _deferredClientStats;
26
- constructor(api: BaseApi, externalLogger: BaseLogger | null, conversationIdProvider: () => string | null, topologyProvider?: () => TransportTopology | undefined);
27
- log(name: StatLog, value?: string, immediately?: boolean): void;
28
- logClientStats(data: ClientStatsPayload, immediatelyOrOptions?: boolean | LogClientStatsOptions): void;
29
- destroy(): void;
30
- private _logClientStats;
31
- private _getConversationId;
32
- private _getCallTopology;
33
- private _sendBatch;
34
- private _startTimeout;
35
- private _stopTimeout;
36
- private _sendClientStats;
37
- private _calculateServerTimeDelta;
38
- private _flushDeferredClientStats;
39
- private _now;
40
- }
41
- export {};