@vkontakte/calls-sdk 2.8.6-dev.a5d3a18a.0 → 2.8.6-dev.a76637b5.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 (56) hide show
  1. package/CallsSDK.d.ts +11 -8
  2. package/abstract/BaseApi.d.ts +1 -0
  3. package/abstract/BaseSignaling.d.ts +1 -0
  4. package/calls-sdk.cjs.js +8 -8
  5. package/calls-sdk.esm.js +8 -8
  6. package/classes/Conversation.d.ts +12 -5
  7. package/classes/Logger.d.ts +24 -18
  8. package/classes/MediaSource.d.ts +3 -0
  9. package/classes/SignalingActor.d.ts +9 -0
  10. package/classes/codec/IDecoder.d.ts +1 -1
  11. package/classes/codec/IEncoder.d.ts +0 -1
  12. package/classes/codec/LibVPxDecoder.d.ts +1 -1
  13. package/classes/codec/WebCodecsDecoder.d.ts +1 -1
  14. package/classes/screenshare/BaseStreamBuilder.d.ts +3 -2
  15. package/classes/screenshare/ScreenCaptureReceiver.d.ts +4 -0
  16. package/classes/screenshare/StreamBuilder.d.ts +16 -4
  17. package/classes/screenshare/Utils.d.ts +1 -0
  18. package/classes/stat/StatPings.d.ts +17 -0
  19. package/classes/stat/StatSignalingCommands.d.ts +12 -0
  20. package/classes/transport/Statistics.d.ts +23 -10
  21. package/default/Api.d.ts +1 -0
  22. package/default/Signaling.d.ts +16 -9
  23. package/enums/ChatRoomEventType.d.ts +1 -1
  24. package/enums/ConversationOption.d.ts +3 -3
  25. package/enums/HangupType.d.ts +2 -1
  26. package/enums/RecordRole.d.ts +1 -1
  27. package/enums/SignalingTransportStat.d.ts +17 -0
  28. package/enums/Stat.d.ts +19 -36
  29. package/enums/StatLog.d.ts +32 -0
  30. package/package.json +2 -1
  31. package/static/ApiTransport.d.ts +1 -1
  32. package/static/External.d.ts +2 -2
  33. package/static/Params.d.ts +66 -24
  34. package/static/SimulcastInfo.d.ts +1 -1
  35. package/static/Utils.d.ts +1 -1
  36. package/static/WebRTCUtils.d.ts +7 -1
  37. package/types/Conversation.d.ts +3 -0
  38. package/types/ConversationParams.d.ts +2 -0
  39. package/types/ConversationResponse.d.ts +4 -0
  40. package/types/ExternalId.d.ts +2 -0
  41. package/types/FastStart.d.ts +46 -0
  42. package/types/SignalingCommand.d.ts +1 -0
  43. package/types/SignalingMessage.d.ts +1 -1
  44. package/types/Streams.d.ts +1 -0
  45. package/types/WebTransport.d.ts +26 -0
  46. package/utils/LengthPrefixed.d.ts +48 -0
  47. package/utils/Lz4.d.ts +1 -1
  48. package/utils/MsgPackerBufferUtils.d.ts +1 -1
  49. package/utils/P2Quantile.d.ts +14 -0
  50. package/utils/StatTracker.d.ts +18 -0
  51. package/utils/VariableLengthInteger.d.ts +18 -0
  52. package/utils/Welford.d.ts +9 -0
  53. package/worker/LibVPxDecoderWorker.d.ts +0 -1
  54. package/worker/LibVPxEncoderWorker.d.ts +0 -1
  55. package/worker/WebCodecsDecoderWorker.d.ts +0 -1
  56. package/worker/WebCodecsEncoderWorker.d.ts +0 -1
@@ -30,12 +30,14 @@ import EventEmitter from './EventEmitter';
30
30
  export default class Conversation extends EventEmitter {
31
31
  private readonly _api;
32
32
  private readonly _signaling;
33
+ private readonly _signalingActor;
33
34
  private _mediaSource;
34
35
  private _conversation;
35
36
  private _myLastRequestedLayouts;
36
37
  private _state;
37
38
  private _participantState;
38
39
  private _participants;
40
+ private _pendingParticipants;
39
41
  private _transport;
40
42
  private _debugInfo;
41
43
  private _volumesDetector;
@@ -65,7 +67,7 @@ export default class Conversation extends EventEmitter {
65
67
  static current(): Conversation | null;
66
68
  static hangupAfterInit(): void;
67
69
  static id(): string | null;
68
- onStart({ opponentIds, opponentType, mediaOptions, payload, joiningAllowed, requireAuthToJoin, onlyAdminCanShareMovie, externalIds }: ConversationOnStartParams): Promise<ConversationData>;
70
+ onStart({ opponentIds, opponentType, mediaOptions, payload, joiningAllowed, requireAuthToJoin, onlyAdminCanShareMovie, externalIds, onFastStart, }: ConversationOnStartParams): Promise<ConversationData>;
69
71
  onJoin(joinArgs: {
70
72
  conversationId?: string;
71
73
  mediaOptions: MediaOption[];
@@ -77,7 +79,7 @@ export default class Conversation extends EventEmitter {
77
79
  private _onJoinPart2;
78
80
  private _extractExternalRooms;
79
81
  private _extractExternalRoomsData;
80
- onPush(conversationId: string, type?: UserType, peerId?: number, conversationParams?: string): Promise<void>;
82
+ onPush(conversationId: string, type?: UserType, peerId?: number, conversationParams?: string, wsEndpoint?: string): Promise<void>;
81
83
  private _isInWaitingHall;
82
84
  private _isRestricted;
83
85
  private _isAudienceMode;
@@ -96,7 +98,7 @@ export default class Conversation extends EventEmitter {
96
98
  updateStatisticsInterval(): void;
97
99
  private _openTransport;
98
100
  private _close;
99
- destroy(): void;
101
+ destroy(): Promise<void>;
100
102
  private _getConversationParams;
101
103
  private _setConversationParams;
102
104
  private _addGeoParamsToEndpoint;
@@ -228,7 +230,7 @@ export default class Conversation extends EventEmitter {
228
230
  startAsr(params: IAsrStartParams): Promise<void>;
229
231
  stopAsr(params?: IAsrStopParams): Promise<void>;
230
232
  requestAsr(request: boolean): Promise<void>;
231
- muteParticipant(participantId: string | null | undefined, muteStates: MuteStates, requestedMedia?: MediaOption[], roomId?: number | null): Promise<void>;
233
+ muteParticipant(participantId: (ParticipantId | null) | undefined, muteStates: MuteStates, requestedMedia?: MediaOption[], roomId?: number | null): Promise<void>;
232
234
  enableFeatureForRoles(feature: ConversationFeature, roles: UserRole[]): Promise<void>;
233
235
  pinParticipant(participantId: ParticipantId, unpin: boolean, roomId?: number | null): Promise<void>;
234
236
  updateMediaModifiers(mediaModifiers: MediaModifiers): Promise<void>;
@@ -265,7 +267,7 @@ export default class Conversation extends EventEmitter {
265
267
  switchRoom(toRoomId: number | null, participantId?: ParticipantId): Promise<void>;
266
268
  removeRooms(roomIds: number[]): Promise<void>;
267
269
  startStream(isRecord?: boolean, name?: string | null, movieId?: string | null, privacy?: 'PUBLIC' | 'FRIENDS' | 'DIRECT_LINK', groupId?: string | null, roomId?: number | null): Promise<undefined>;
268
- stopStream(roomId?: number | null): Promise<undefined>;
270
+ stopStream(roomId?: number | null, remove?: boolean): Promise<undefined>;
269
271
  publishStream(roomId?: number | null): Promise<undefined>;
270
272
  recordSetConf(king?: ParticipantId, pawns?: ParticipantId[], hideParticipantCount?: boolean, roomId?: number | null): Promise<void>;
271
273
  getStreamInfo(): Promise<{
@@ -312,6 +314,7 @@ export default class Conversation extends EventEmitter {
312
314
  private _onChatMessage;
313
315
  private _onCustomData;
314
316
  private _onRecordInfo;
317
+ private _onStopRecordInfo;
315
318
  private _changePinnedParticipantForRoom;
316
319
  _changeRecordInfoForRoom(): Promise<void>;
317
320
  private _changeAsrInfoForRoom;
@@ -344,6 +347,7 @@ export default class Conversation extends EventEmitter {
344
347
  private _onAnimojiError;
345
348
  private _onPeerConnectionClosed;
346
349
  private _changeFeatureSet;
350
+ private _changeFeaturesPerRole;
347
351
  private _changeNeedRate;
348
352
  private _onVolumesDetected;
349
353
  private _onSpeakerChanged;
@@ -383,6 +387,9 @@ export default class Conversation extends EventEmitter {
383
387
  private _getMuteStatesForCurrentRoom;
384
388
  private _setMuteStatesForRoomId;
385
389
  private _forceOpenTransportForAloneInCall;
390
+ private _registerParticipant;
391
+ private _getParticipants;
392
+ private _getParticipant;
386
393
  }
387
394
  export declare class UpdateDisplayLayoutError extends Error {
388
395
  readonly participantErrors: {
@@ -1,35 +1,41 @@
1
1
  import BaseApi from '../abstract/BaseApi';
2
2
  import BaseLogger from '../abstract/BaseLogger';
3
- import Stat from '../enums/Stat';
3
+ import StatLog from '../enums/StatLog';
4
+ /**
5
+ * Класс отвечает за отправку различной информации в сервис статистики (события, статистика и подобное)
6
+ */
4
7
  export default class Logger extends BaseLogger {
8
+ private static _instance;
9
+ private static _conversationIdProvider;
10
+ static setConversationIdProvider(provider: () => string | null): void;
11
+ static create(api: BaseApi, externalLogger: BaseLogger | null): void;
12
+ static log(name: StatLog, value?: string, immediately?: boolean): void;
13
+ static logCustom(name: StatLog, params: Record<string, string | number>, immediately?: boolean): void;
14
+ static logClientStats(params: Record<string, string | number | undefined | null>, immediately?: boolean): void;
15
+ static logClientEvent(params: Record<string, string | number | undefined | null>, immediately?: boolean): void;
16
+ static destroy(): void;
5
17
  private readonly _externalLogger;
6
18
  private readonly _api;
7
- private _batchInterval;
19
+ private readonly _batchInterval;
8
20
  private _batchedLogItems;
9
21
  private _batchedClientStats;
10
22
  private _batchedClientEvents;
11
23
  private _batchTimeout;
12
24
  private _serverTimeDelta;
13
- private static _instance;
14
25
  constructor(api: BaseApi, externalLogger: BaseLogger | null);
15
- private _sendLogItems;
16
- private _sendClientStats;
17
- private _sendClientEvents;
26
+ log(name: StatLog, value?: string, immediately?: boolean): void;
27
+ logCustom(name: string, params: Record<string, string | number>, immediately?: boolean): void;
28
+ logClientStats(data: Record<string, string | number | undefined | null>, immediately?: boolean): void;
29
+ logClientEvent(data: Record<string, string | number | undefined | null>, immediately?: boolean): void;
30
+ destroy(): void;
31
+ private _logInternal;
32
+ private _getConversationId;
18
33
  private _sendBatch;
19
34
  private _startTimeout;
20
35
  private _stopTimeout;
36
+ private _sendLogItems;
37
+ private _sendClientStats;
38
+ private _sendClientEvents;
21
39
  private _calculateServerTimeDelta;
22
40
  private _now;
23
- log(name: Stat, value?: string, immediately?: boolean): void;
24
- logCustom(name: string, params: Record<string, string | number>, immediately?: boolean): void;
25
- logClientStats(data: Record<string, string | number | undefined | null>, immediately?: boolean): void;
26
- logClientEvent(data: Record<string, string | number | undefined | null>, immediately?: boolean): void;
27
- _logInternal(operation: string, custom: Record<string, string | number>, immediately: boolean): void;
28
- destroy(): void;
29
- static create(api: BaseApi, externalLogger: BaseLogger | null): void;
30
- static log(name: Stat, value?: string, immediately?: boolean): void;
31
- static logCustom(name: string, params: Record<string, string | number>, immediately?: boolean): void;
32
- static logClientStats(params: Record<string, string | number | undefined | null>, immediately?: boolean): void;
33
- static logClientEvent(params: Record<string, string | number | undefined | null>, immediately?: boolean): void;
34
- static destroy(): void;
35
41
  }
@@ -53,6 +53,8 @@ export declare class MediaSource extends EventEmitter {
53
53
  /** вычисляем низкую производительность видео эффектов */
54
54
  private readonly _videoEffectsFpsLimiter?;
55
55
  constructor();
56
+ get cameraVideoTrack(): MediaStreamTrack | null;
57
+ set cameraVideoTrack(track: MediaStreamTrack | null);
56
58
  request(mediaOptions?: MediaOption[], needEmptyTracks?: boolean): Promise<void>;
57
59
  getStream(): MediaStream | null;
58
60
  getScreenTrack(): MediaStreamTrack | null;
@@ -90,6 +92,7 @@ export declare class MediaSource extends EventEmitter {
90
92
  destroy(): void;
91
93
  toggleScreenCapturing(settings: ScreenCaptureSettings): Promise<void>;
92
94
  disableScreenCapturing(): Promise<void>;
95
+ private videoTrackMuteHandler;
93
96
  toggleVideo(enabled: boolean): Promise<void>;
94
97
  toggleAudio(enabled: boolean): Promise<void>;
95
98
  toggleAnimojiCapturing(enabled: boolean): void;
@@ -0,0 +1,9 @@
1
+ import SignalingMessage from '../types/SignalingMessage';
2
+ export declare class SignalingActor {
3
+ private processor;
4
+ private queue;
5
+ private isProcessing;
6
+ constructor(processor: (message: SignalingMessage) => Promise<unknown> | unknown);
7
+ add(message: SignalingMessage): void;
8
+ private processQueue;
9
+ }
@@ -1,5 +1,5 @@
1
1
  export default interface IDecoder {
2
- init(onFrameImage: (image: VideoFrame | ImageData) => void, onFrameError?: (error: unknown) => void): Promise<void>;
2
+ init(onFrameImage: (image: VideoFrame | ImageData) => void, onFrameError?: (error: unknown) => void, onKeyFrameRequested?: () => void): Promise<void>;
3
3
  decodeFrame(timestamp: number, data: Uint8Array, isVP9: boolean, keyFrame?: boolean): void;
4
4
  destroy(): void;
5
5
  }
@@ -1,4 +1,3 @@
1
- /// <reference types="web" />
2
1
  import type { MessageType } from './Types';
3
2
  export default interface IEncoder {
4
3
  init(): Promise<void>;
@@ -1,7 +1,7 @@
1
1
  import IDecoder from './IDecoder';
2
2
  import WorkerBase from './WorkerBase';
3
3
  export default class LibVPxDecoder extends WorkerBase implements IDecoder {
4
- init(onFrameImage: (image: ImageData) => void, onFrameError: (error: unknown) => void): Promise<void>;
4
+ init(onFrameImage: (image: ImageData) => void, onFrameError: (error: unknown) => void, onKeyFrameRequested: () => void): Promise<void>;
5
5
  decodeFrame(timestamp: number, data: Uint8Array, isVP9: boolean, keyFrame?: boolean): void;
6
6
  destroy(): void;
7
7
  static isBrowserSupported(): boolean;
@@ -1,7 +1,7 @@
1
1
  import IDecoder from './IDecoder';
2
2
  import WorkerBase from './WorkerBase';
3
3
  export default class WebCodecsDecoder extends WorkerBase implements IDecoder {
4
- init(onFrameImage: (frame: VideoFrame) => void, onFrameError: (error: unknown) => void): Promise<void>;
4
+ init(onFrameImage: (frame: VideoFrame) => void, onFrameError: (error: unknown) => void, onKeyFrameRequested: () => void): Promise<void>;
5
5
  decodeFrame(timestamp: number, data: Uint8Array, isVP9: boolean, keyFrame?: boolean): void;
6
6
  destroy(): void;
7
7
  static isBrowserSupported(): boolean;
@@ -8,14 +8,15 @@ export declare abstract class BaseStreamBuilder {
8
8
  protected readonly _participantId: ParticipantId;
9
9
  protected readonly _onStream: IOnStream;
10
10
  protected readonly _onStat: IOnStat;
11
+ protected readonly _onKeyFrameRequested?: VoidFunction;
11
12
  protected readonly _statScreenShareFirstFrame: StatScreenShareFirstFrame;
12
13
  protected _chunks: FrameChunk[];
13
- protected constructor(participantId: ParticipantId, onStream: IOnStream, onStat: IOnStat);
14
+ protected constructor(participantId: ParticipantId, onStream: IOnStream, onStat: IOnStat, onKeyFrameRequested?: VoidFunction);
14
15
  appendChunk(chunk: FrameChunk): void;
15
16
  destroy(): void;
16
17
  protected abstract _processFrame(frame: FrameData): void;
17
18
  private _processFrameData;
18
- static getFrameSize(frameData: Uint8Array): {
19
+ static getFrameSize(frameData: Uint8Array<ArrayBuffer>): {
19
20
  width: number;
20
21
  height: number;
21
22
  };
@@ -10,6 +10,10 @@ export default class ScreenCaptureReceiver {
10
10
  private _onStat;
11
11
  constructor(datachannel: RTCDataChannel, participantIdRegistry: ParticipantIdRegistry, onStream: (streamId: string, stream: MediaStream) => void, onEos: (streamId: string) => void, onStat: IOnStat);
12
12
  private _onDataChannelMessage;
13
+ /**
14
+ * Отправить запрос ключевого кадра в datachannel.
15
+ */
16
+ private _requestKeyFrame;
13
17
  close(participantId: ParticipantId): void;
14
18
  destroy(): void;
15
19
  static isBrowserSupported(): boolean;
@@ -1,14 +1,26 @@
1
1
  import { ParticipantId } from '../../types/Participant';
2
2
  import { BaseStreamBuilder, FrameData, IOnStat, IOnStream } from './BaseStreamBuilder';
3
3
  export default class StreamBuilder extends BaseStreamBuilder {
4
- private readonly _renderer;
5
- private readonly _decoder;
4
+ private _renderer;
5
+ private _decoder;
6
6
  private _decoderReady;
7
7
  private _decoderBusy;
8
8
  private _decoderQueue;
9
- private readonly _fpsMeter;
10
- constructor(participantId: ParticipantId, onStream: IOnStream, onStat: IOnStat);
9
+ private _fpsMeter;
10
+ constructor(participantId: ParticipantId, onStream: IOnStream, onStat: IOnStat, onKeyFrameRequested: VoidFunction);
11
11
  protected _processFrame(frame: FrameData): void;
12
+ private _initFpsMeter;
13
+ /**
14
+ * Инициализация рендерера
15
+ * @param forceCanvasRenderer используется для принудительного создания CanvasRenderer, который работает с LibVPX
16
+ */
17
+ private _initRenderer;
18
+ /**
19
+ * Инициализация декодера
20
+ * @param forceLibVPXDecoder используется для принудительного создания LibVPXDecoder
21
+ */
22
+ private _initDecoder;
23
+ private _switchToLibVPXDecoder;
12
24
  private _decodeQueue;
13
25
  destroy(): void;
14
26
  static isBrowserSupported(): boolean;
@@ -20,3 +20,4 @@ export interface CcFeedback {
20
20
  ts2: number;
21
21
  }
22
22
  export declare function parseCcFeedback(data?: ArrayBuffer): CcFeedback | null;
23
+ export declare function prepareKeyFrameRequest(ssrc: number): ArrayBuffer;
@@ -0,0 +1,17 @@
1
+ import { SignalingTransportType } from '../../enums/SignalingTransportStat';
2
+ import { TransportTopology } from '../transport/Transport';
3
+ export declare class StatPings {
4
+ private static _instance?;
5
+ static create(): void;
6
+ /**
7
+ * Вызывать при входящем ping в сигналингу.
8
+ * Будет произведен расчет времени между пингами.
9
+ */
10
+ static mark(transport: SignalingTransportType): void;
11
+ /** Отправляем данные в стату */
12
+ static logMetrics(topology?: TransportTopology): void;
13
+ static destroy(): void;
14
+ private trackerByTransport;
15
+ private lastSeen;
16
+ private _destroy;
17
+ }
@@ -0,0 +1,12 @@
1
+ import { SignalingTransportType } from '../../enums/SignalingTransportStat';
2
+ import { TransportTopology } from '../transport/Transport';
3
+ export declare class StatSignalingCommands {
4
+ private static _instance?;
5
+ static create(): void;
6
+ static mark(command: string, time: number, transport: SignalingTransportType): void;
7
+ /** Отправляем данные в стату */
8
+ static logMetrics(topology?: TransportTopology): void;
9
+ static destroy(): void;
10
+ private trackerByCommand;
11
+ private _destroy;
12
+ }
@@ -1,25 +1,38 @@
1
1
  import { ParticipantId } from '../../types/Participant';
2
2
  import { StatItem, StatRtp, StatTransport } from '../../types/Statistics';
3
3
  export declare const NO_STAT_REQUEST_DELAY = 1000;
4
- export declare function distinctById(items: RTCStats[]): RTCStats[];
5
- export declare function rtcStatsToArray(stats: RTCStatsReport[]): RTCStats[];
4
+ declare function distinctById(items: RTCStats[]): RTCStats[];
5
+ declare function rtcStatsToArray(stats: RTCStatsReport[]): RTCStats[];
6
6
  /**
7
7
  * Extracts transport statistics from the gives stats
8
8
  * @hidden
9
9
  */
10
- export declare function extractTransport(stats: RTCStats[]): StatTransport;
10
+ declare function extractTransport(stats: RTCStats[]): StatTransport;
11
11
  /**
12
12
  * Extracts media statistics from the given stats
13
13
  * @hidden
14
14
  */
15
- export declare function extractRtps(stats: RTCStats[], ssrcMap: Record<string, string>, needToExtractRemote?: boolean): StatRtp[];
15
+ declare function extractRtps(stats: RTCStats[], ssrcMap: Record<string, string>, needToExtractRemote?: boolean): StatRtp[];
16
16
  /**
17
17
  * Computes delta (the difference) between two stat reports.
18
18
  * @hidden
19
19
  */
20
- export declare function delta(current: StatItem, previous: StatItem, needToExtractRemote?: boolean): StatItem;
21
- export declare function collectStats(pc: RTCPeerConnection, previous: StatItem | null, ssrcMap?: Record<string, string>, needToExtractRemote?: boolean): Promise<StatItem>;
22
- export declare function setMark(name: string): void;
23
- export declare function clearMark(name: string): void;
24
- export declare function measureMark(name: string): null | number;
25
- export declare function getMarkNameScreenshareFirstFrame(uid: ParticipantId): string;
20
+ declare function delta(current: StatItem, previous: StatItem, needToExtractRemote?: boolean): StatItem;
21
+ declare function collectStats(pc: RTCPeerConnection, previous: StatItem | null, ssrcMap?: Record<string, string>, needToExtractRemote?: boolean): Promise<StatItem>;
22
+ declare function setMark(name: string): void;
23
+ declare function clearMark(name: string): void;
24
+ declare function measureMark(name: string): null | number;
25
+ declare function getMarkNameScreenshareFirstFrame(uid: ParticipantId): string;
26
+ declare const _default: {
27
+ distinctById: typeof distinctById;
28
+ rtcStatsToArray: typeof rtcStatsToArray;
29
+ extractTransport: typeof extractTransport;
30
+ extractRtps: typeof extractRtps;
31
+ delta: typeof delta;
32
+ collectStats: typeof collectStats;
33
+ setMark: typeof setMark;
34
+ clearMark: typeof clearMark;
35
+ measureMark: typeof measureMark;
36
+ getMarkNameScreenshareFirstFrame: typeof getMarkNameScreenshareFirstFrame;
37
+ };
38
+ export default _default;
package/default/Api.d.ts CHANGED
@@ -28,6 +28,7 @@ export default class Api extends BaseApi {
28
28
  onlyAdminCanShareMovie?: boolean;
29
29
  }, externalIds?: ExternalId[]): Promise<ConversationResponse>;
30
30
  protected _ensureUuid(): void;
31
+ deviceId(): string;
31
32
  private _preareStartConversationData;
32
33
  private _startConversation;
33
34
  createJoinLink(conversationId: string): Promise<{
@@ -1,7 +1,6 @@
1
1
  import BaseSignaling, { AddParticipantParams } from '../abstract/BaseSignaling';
2
2
  import { ParticipantIdRegistry } from '../classes/ParticipantIdRegistry';
3
3
  import { SharingStatReport } from '../classes/screenshare/SharingStatReport';
4
- import { NetworkStatReport } from '../types/NetworkStatReport';
5
4
  import { TransportTopology } from '../classes/transport/Transport';
6
5
  import ConversationFeature from '../enums/ConversationFeature';
7
6
  import ConversationOption from '../enums/ConversationOption';
@@ -11,16 +10,17 @@ import SignalingConnectionType from '../enums/SignalingConnectionType';
11
10
  import UserRole from '../enums/UserRole';
12
11
  import { JSONObject } from '../static/Json';
13
12
  import { IAsrStartParams, IAsrStopParams } from '../types/Asr';
13
+ import { ChangeSimulcast } from '../types/ChangeSimulcast';
14
14
  import MediaModifiers from '../types/MediaModifiers';
15
15
  import MediaSettings from '../types/MediaSettings';
16
16
  import { IAddMovieParams, IUpdateMovieData } from '../types/MovieShare';
17
17
  import MuteStates from '../types/MuteStates';
18
+ import { NetworkStatReport } from '../types/NetworkStatReport';
18
19
  import { CompositeUserId, ParticipantId, ParticipantStateData } from '../types/Participant';
19
20
  import ParticipantLayout, { RequestKeyFrame, StopStream } from '../types/ParticipantLayout';
20
21
  import { ParticipantListChunkParameters } from '../types/ParticipantListChunk';
21
22
  import { StreamDescriptionString } from '../types/ParticipantStreamDescription';
22
23
  import { PerfStatReport } from '../types/PerfStatReporter';
23
- import { ChangeSimulcast } from '../types/ChangeSimulcast';
24
24
  import SignalingMessage, { GetParticipantsSignalingResponse, GetRoomsSignalingResponse, SignalingSuccessResponse } from '../types/SignalingMessage';
25
25
  import { IPublishStreamData, IRecordConfData, IStartStreamData, IStopStreamData } from '../types/Streams';
26
26
  export default class Signaling extends BaseSignaling {
@@ -31,8 +31,10 @@ export default class Signaling extends BaseSignaling {
31
31
  private datachannelCommandsQueue;
32
32
  private incomingCache;
33
33
  private responseHandlers;
34
+ private connectionType;
34
35
  private reconnectCount;
35
36
  private endpoint;
37
+ private wtEndpoint;
36
38
  protected conversationResolve: Function | null;
37
39
  protected conversationReject: Function | null;
38
40
  private connected;
@@ -48,15 +50,16 @@ export default class Signaling extends BaseSignaling {
48
50
  private producerCommandDataChannel;
49
51
  private producerCommandDataChannelEnabled;
50
52
  private producerCommandSerializationService;
51
- private static readonly RECONNECT_DELAY;
52
- private static readonly RECONNECT_MAX_DELAY;
53
- private static readonly RECONNECT_MAX_COUNT;
54
- private static readonly WAIT_CONNECTION_DELAY;
55
- private static readonly WAIT_RESPONSE_DELAY;
56
- private static readonly WAIT_MESSAGE_DELAY;
53
+ private static get RECONNECT_DELAY();
54
+ private static get RECONNECT_MAX_DELAY();
55
+ private static get RECONNECT_MAX_COUNT();
56
+ private static get WAIT_CONNECTION_DELAY();
57
+ private static get WAIT_RESPONSE_DELAY();
58
+ private static get WAIT_MESSAGE_DELAY();
57
59
  private static _getCapabilityFlags;
58
60
  get ready(): boolean;
59
61
  setEndpoint(endpoint: string): void;
62
+ setWebTransportEndpoint(endpoint: string | null): void;
60
63
  setConversationId(conversationId: string): void;
61
64
  setParticipantIdRegistry(participantIdRegistry: ParticipantIdRegistry): void;
62
65
  setProducerNotificationDataChannel(dataChannel: RTCDataChannel): void;
@@ -161,7 +164,7 @@ export default class Signaling extends BaseSignaling {
161
164
  startAsr(params: IAsrStartParams): Promise<SignalingMessage>;
162
165
  stopAsr(params?: IAsrStopParams): Promise<SignalingMessage>;
163
166
  requestAsr(request: boolean): Promise<SignalingMessage>;
164
- protected _connect(connectionType: SignalingConnectionType): void;
167
+ protected _connect(connectionType: SignalingConnectionType, useWebTransport: boolean): void;
165
168
  protected _disconnect(code?: number): void;
166
169
  private _onOpen;
167
170
  private _onMessage;
@@ -183,4 +186,8 @@ export default class Signaling extends BaseSignaling {
183
186
  protected _stopWaitConnectionMessage(): void;
184
187
  private _startDoctor;
185
188
  private _stopDoctor;
189
+ private isWebTransportAvailable;
190
+ private _getSocketType;
191
+ private _markTransportStat;
192
+ private _logTransportStat;
186
193
  }
@@ -2,7 +2,7 @@
2
2
  * Тип команды зала ожидания
3
3
  */
4
4
  declare enum ChatRoomEventType {
5
- ATTENDEE = "ATTENDEE",
5
+ ATTENDEE = "ATTENDEE",// new Stereo attendee joined/left, new waiting hall participant joined/left
6
6
  HAND_UP = "HAND_UP"
7
7
  }
8
8
  export default ChatRoomEventType;
@@ -3,10 +3,10 @@
3
3
  */
4
4
  declare enum ConversationOption {
5
5
  REQUIRE_AUTH_TO_JOIN = "REQUIRE_AUTH_TO_JOIN",
6
- AUDIENCE_MODE = "AUDIENCE_MODE",
7
- WAITING_HALL = "WAITING_HALL",
6
+ AUDIENCE_MODE = "AUDIENCE_MODE",// Stereo chat room
7
+ WAITING_HALL = "WAITING_HALL",// Waiting Hall is ON
8
8
  ASR = "ASR",
9
- FEEDBACK = "FEEDBACK",
9
+ FEEDBACK = "FEEDBACK",// Reactions (default = off)
10
10
  RECURRING = "RECURRING"
11
11
  }
12
12
  export default ConversationOption;
@@ -27,6 +27,7 @@ declare enum HangupType {
27
27
  KILLED_WITHOUT_DELETE = "KILLED_WITHOUT_DELETE",
28
28
  ANOTHER_DEVICE = "ANOTHER_DEVICE",
29
29
  NOT_FOUND = "NOT_FOUND",
30
- VCHAT_DETAILED_ERROR = "VCHAT_DETAILED_ERROR"
30
+ VCHAT_DETAILED_ERROR = "VCHAT_DETAILED_ERROR",
31
+ TIMEOUT = "TIMEOUT"
31
32
  }
32
33
  export default HangupType;
@@ -4,7 +4,7 @@
4
4
  * у которых есть роль.
5
5
  */
6
6
  declare enum RecordRole {
7
- KING = "KING",
7
+ KING = "KING",// участник показывается крупно в записи звонка
8
8
  PAWN = "PAWN"
9
9
  }
10
10
  export default RecordRole;
@@ -0,0 +1,17 @@
1
+ import Stat from './Stat';
2
+ export declare const enum SignalingTransportType {
3
+ WEBSOCKET = "ws",
4
+ WEBTRANSPORT = "wt"
5
+ }
6
+ export declare const enum SignalingTransportStat {
7
+ CONNECTED = "connected",
8
+ RECONNECTED = "reconnected",
9
+ FAILED_PINGS = "failed_pings",
10
+ FAILED_EXCEPTIONS = "failed_exception",
11
+ TIMEOUT = "timeout",
12
+ RESTART = "restart"
13
+ }
14
+ export declare const SOCKET_STAT: Record<SignalingTransportStat, {
15
+ [SignalingTransportType.WEBSOCKET]: Stat;
16
+ [SignalingTransportType.WEBTRANSPORT]: Stat;
17
+ }>;
package/enums/Stat.d.ts CHANGED
@@ -1,43 +1,26 @@
1
1
  declare const enum Stat {
2
- ERROR = "callError",
3
- DEVICES = "callDevices",
4
- CALL_SPEC_ERROR = "callSpecError",
5
- ICE_CONNECTION_STATE = "callIceConnectionState",
6
- ICE_CONNECTION_TYPE = "callIceConnectionType",
7
- ICE_RESTART = "callIceRestart",
8
- PUSH = "callPush",
9
- OUTGOING_CALL = "callStart",
10
- CALL_FINISH = "call_finish",
11
- OUTGOING_MULTIPARTY_CALL = "callStartMultiparty",
12
- JOIN_CONVERSATION = "callJoinConversation",
13
- ACCEPTED_OUTGOING = "callAcceptedOutgoing",
14
- ACCEPT_INCOMING = "callAcceptIncoming",
15
- DECLINE_INCOMING = "callDeclineIncoming",
16
- ACCEPT_CONCURRENT = "callAcceptConcurrent",
17
- HANGUP = "callHangup",
18
- CODEC_USAGE = "codec_usage",
19
- MEDIA_STATUS = "callMediaStatus",
20
- DEVICE_CHANGED = "callDeviceChanged",
21
- SOCKET_ACTION = "callSocketAction",
22
- ADD_PARTICIPANT = "callAddParticipant",
23
- REMOVE_PARTICIPANT = "callRemoveParticipant",
24
- POOR_CONNECTION = "callPoorConnection",
25
- TOPOLOGY_CHANGE_REQUESTED = "callTopologyChangeRequested",
26
- RELAY_POLICY = "callForceRelay",
27
- PAT_ALLOCATED = "patAllocate",
28
- PAT_DEALLOCATED = "patDeallocate",
29
- PAT_ERROR = "patError",
30
- PAT_WAITING_TIME_ERROR = "patWaitingTimeError",
31
- PAT_OUTDATED_RESPONSE = "patOutdatedResponse",
32
- SIGNALING_CONNECTED = "signaling_connected",
33
- RECONNECT = "callReconnect",
34
- SCREENSHARE_FIRST_FRAME = "screen_share_first_frame",
35
- SCREENSHARE_FREEZE_DURATION = "callScreenshareFreezeDuration",
2
+ CALL_FINISH = "call_finish",// событие отправляемое в конце звонка
3
+ CODEC_USAGE = "codec_usage",// событие когда меняется кодек
4
+ SIGNALING_CONNECTED = "signaling_connected",// measure
5
+ SCREENSHARE_FIRST_FRAME = "screen_share_first_frame",// measure
36
6
  /** Объединение callFirstDataReceivedP2P и callFirstAudioMixDataReceived */
37
7
  FIRST_MEDIA_RECEIVED = "first_media_received",
38
- CALL_EVENTUAL_STAT = "callEventualStat",
39
8
  CALL_DECLINED_OR_HANGED_LOCALLY = "CallDeclinedOrHangedLocally",
40
9
  USER_FEEDBACK_RECEIVED = "UserFeedbackReceived",
41
- CALL_START = "call_start"
10
+ CALL_START = "call_start",
11
+ SIGNALING_PING_SUMMARY = "signaling_ping_summary",
12
+ SIGNALING_COMMAND_SUMMARY = "signaling_command_summary",
13
+ WEBSOCKET_CONNECTED = "websocket_connected",
14
+ WEBSOCKET_RECONNECTED = "websocket_reconnected",
15
+ WEBSOCKET_FAILED_PINGS = "websocket_failed_pings",
16
+ WEBSOCKET_FAILED_EXCEPTION = "websocket_failed_exception",
17
+ WEBSOCKET_TIMEOUT = "websocket_timeout",
18
+ WEBSOCKET_RESTART = "websocket_restart",
19
+ WEBTRANSPORT_CONNECTED = "webtransport_connected",
20
+ WEBTRANSPORT_RECONNECTED = "webtransport_reconnected",
21
+ WEBTRANSPORT_FAILED_PINGS = "webtransport_failed_pings",
22
+ WEBTRANSPORT_FAILED_EXCEPTION = "webtransport_failed_exception",
23
+ WEBTRANSPORT_TIMEOUT = "webtransport_timeout",
24
+ WEBTRANSPORT_RESTART = "webtransport_restart"
42
25
  }
43
26
  export default Stat;
@@ -0,0 +1,32 @@
1
+ declare const enum StatLog {
2
+ ACCEPT_CONCURRENT = "callAcceptConcurrent",// video/audio
3
+ ACCEPT_INCOMING = "callAcceptIncoming",// video/audio
4
+ ACCEPTED_OUTGOING = "callAcceptedOutgoing",// video/audio
5
+ ADD_PARTICIPANT = "callAddParticipant",
6
+ CALL_SPEC_ERROR = "callSpecError",// ошибки WebRTC
7
+ DECLINE_INCOMING = "callDeclineIncoming",
8
+ DEVICE_CHANGED = "callDeviceChanged",// смена камеры video/audio/screen
9
+ DEVICES = "callDevices",// залогировать количество %d_%d
10
+ ERROR = "callError",
11
+ HANGUP = "callHangup",
12
+ ICE_CONNECTION_STATE = "callIceConnectionState",// state
13
+ ICE_CONNECTION_TYPE = "callIceConnectionType",// type
14
+ ICE_RESTART = "callIceRestart",// без параметров
15
+ JOIN_CONVERSATION = "callJoinConversation",// video/audio
16
+ MEDIA_STATUS = "callMediaStatus",// изменение video_1, audio_0
17
+ OUTGOING_CALL = "callStart",// video/audio
18
+ OUTGOING_MULTIPARTY_CALL = "callStartMultiparty",// video/audio
19
+ PAT_ALLOCATED = "patAllocate",
20
+ PAT_DEALLOCATED = "patDeallocate",
21
+ PAT_ERROR = "patError",
22
+ PAT_OUTDATED_RESPONSE = "patOutdatedResponse",
23
+ PAT_WAITING_TIME_ERROR = "patWaitingTimeError",
24
+ POOR_CONNECTION = "callPoorConnection",// video / audio
25
+ PUSH = "callPush",// busy / rejected / accepted
26
+ RECONNECT = "callReconnect",// measure
27
+ RELAY_POLICY = "callForceRelay",// 1 / 0
28
+ REMOVE_PARTICIPANT = "callRemoveParticipant",
29
+ SOCKET_ACTION = "callSocketAction",
30
+ TOPOLOGY_CHANGE_REQUESTED = "callTopologyChangeRequested"
31
+ }
32
+ export default StatLog;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/calls-sdk",
3
- "version": "2.8.6-dev.a5d3a18a.0",
3
+ "version": "2.8.6-dev.a76637b5.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",
@@ -19,6 +19,7 @@
19
19
  "@vkontakte/calls-vmoji": "1.0.10-beta.17",
20
20
  "@vkontakte/libvpx": "2.0.9",
21
21
  "bit-buffer": "0.2.5",
22
+ "fflate": "^0.8.2",
22
23
  "messagepack": "1.1.12",
23
24
  "simple-ebml-builder": "0.2.2",
24
25
  "webrtc-adapter": "7.7.0"
@@ -6,5 +6,5 @@ export declare function sendBeakon(method: string, params?: {
6
6
  }, noSession?: boolean): Promise<void>;
7
7
  export declare function request(method: string, params?: {
8
8
  [key: string]: any;
9
- }, noSession?: boolean, customEndpoint?: string): Promise<unknown>;
9
+ }, noSession?: boolean, customEndpoint?: string): Promise<any>;
10
10
  export declare function sendFormData(url: string, data: FormData): Promise<void>;