@vkontakte/calls-sdk 2.8.11-dev.cb5b05f6.0 → 2.8.11-dev.d88537e0.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 (67) hide show
  1. package/CallsSDK.d.ts +58 -15
  2. package/abstract/BaseApi.d.ts +3 -5
  3. package/abstract/BaseSignaling.d.ts +2 -3
  4. package/calls-sdk.cjs.js +16 -13
  5. package/calls-sdk.esm.js +11609 -13
  6. package/classes/AudioFix.d.ts +5 -1
  7. package/classes/AudioOutput.d.ts +5 -1
  8. package/classes/Conversation.d.ts +9 -2
  9. package/classes/DebugInfo.d.ts +3 -0
  10. package/classes/DisplayLayoutRequester.d.ts +39 -0
  11. package/classes/ExternalIdCache.d.ts +19 -0
  12. package/classes/MediaSource.d.ts +5 -1
  13. package/classes/ParticipantIdRegistry.d.ts +3 -0
  14. package/classes/ProducerCommandSerializationService.d.ts +3 -0
  15. package/classes/SignalingActor.d.ts +3 -1
  16. package/classes/SpeakerDetector.d.ts +2 -1
  17. package/classes/SpecListener.d.ts +5 -1
  18. package/classes/StatsLogger.d.ts +29 -0
  19. package/classes/VideoEffectsFpsLimiter.d.ts +3 -0
  20. package/classes/asr/AsrReceiver.d.ts +3 -1
  21. package/classes/codec/LibVPxDecoder.d.ts +3 -0
  22. package/classes/codec/LibVPxEncoder.d.ts +3 -1
  23. package/classes/codec/WebCodecsDecoder.d.ts +3 -0
  24. package/classes/codec/WebCodecsEncoder.d.ts +3 -1
  25. package/classes/codec/WorkerBase.d.ts +5 -0
  26. package/classes/screenshare/BaseStreamBuilder.d.ts +4 -1
  27. package/classes/screenshare/CanvasRenderer.d.ts +3 -1
  28. package/classes/screenshare/ScreenCaptureReceiver.d.ts +7 -1
  29. package/classes/screenshare/ScreenCaptureSender.d.ts +5 -1
  30. package/classes/screenshare/ScreenCongestionControl.d.ts +3 -1
  31. package/classes/screenshare/StreamBuilder.d.ts +5 -1
  32. package/classes/screenshare/TrackGeneratorRenderer.d.ts +3 -1
  33. package/classes/screenshare/WebmBuilder.d.ts +3 -1
  34. package/classes/stat/CodecStatsAggregator.d.ts +7 -7
  35. package/classes/stat/ConversationStats.d.ts +21 -0
  36. package/classes/stat/StatAggregator.d.ts +6 -6
  37. package/classes/stat/StatFirstMediaReceived.d.ts +4 -1
  38. package/classes/stat/StatPings.d.ts +9 -9
  39. package/classes/stat/StatScreenShareFirstFrame.d.ts +3 -1
  40. package/classes/stat/StatSignalingCommands.d.ts +8 -8
  41. package/classes/transport/BaseTransport.d.ts +1 -1
  42. package/classes/transport/DirectStatReporter.d.ts +3 -1
  43. package/classes/transport/DirectTransport.d.ts +9 -1
  44. package/classes/transport/PerfStatReporter.d.ts +5 -1
  45. package/classes/transport/ServerTransport.d.ts +10 -2
  46. package/classes/transport/Transport.d.ts +14 -14
  47. package/default/Api.d.ts +4 -14
  48. package/default/Signaling.d.ts +15 -4
  49. package/enums/TransportState.d.ts +10 -0
  50. package/enums/TransportTopology.d.ts +5 -0
  51. package/package.json +2 -2
  52. package/static/Debug.d.ts +27 -8
  53. package/static/External.d.ts +3 -0
  54. package/static/Params.d.ts +27 -1
  55. package/static/Utils.d.ts +3 -2
  56. package/static/WebRTCUtils.d.ts +7 -4
  57. package/types/Conversation.d.ts +1 -1
  58. package/types/FastStart.d.ts +1 -0
  59. package/types/ParticipantLayout.d.ts +33 -0
  60. package/types/PerfStatReporter.d.ts +2 -1
  61. package/types/SignalingMessage.d.ts +4 -1
  62. package/types/Statistics.d.ts +1 -1
  63. package/types/WebTransport.d.ts +1 -0
  64. package/utils/DebugStorage.d.ts +100 -1
  65. package/classes/Logger.d.ts +0 -41
  66. package/classes/stat/EventMetricsService.d.ts +0 -9
  67. package/static/ConversationDebugLogger.d.ts +0 -13
@@ -1,17 +1,17 @@
1
1
  import { SignalingTransportType } from '../../enums/SignalingTransportStat';
2
- import { TransportTopology } from '../transport/Transport';
2
+ import StatsLogger from '../StatsLogger';
3
+ import TransportTopology from '../../enums/TransportTopology';
3
4
  export declare class StatPings {
4
- private static _instance?;
5
- static create(): void;
5
+ private readonly _logger;
6
+ private trackerByTransport;
7
+ private lastSeen;
8
+ constructor(logger: StatsLogger);
6
9
  /**
7
10
  * Вызывать при входящем ping в сигналингу.
8
11
  * Будет произведен расчет времени между пингами.
9
12
  */
10
- static mark(transport: SignalingTransportType): void;
13
+ mark(transport: SignalingTransportType): void;
11
14
  /** Отправляем данные в стату */
12
- static logMetrics(topology?: TransportTopology): void;
13
- static destroy(): void;
14
- private trackerByTransport;
15
- private lastSeen;
16
- private _destroy;
15
+ logMetrics(topology?: TransportTopology): void;
16
+ destroy(): void;
17
17
  }
@@ -1,7 +1,9 @@
1
1
  import { ParticipantId } from '../../types/Participant';
2
+ import { StatAggregator } from './StatAggregator';
2
3
  export declare class StatScreenShareFirstFrame {
3
4
  protected readonly _participantId: ParticipantId;
5
+ private readonly _statAggregator;
4
6
  protected _firstFrameReceived: boolean;
5
- constructor(participantId: ParticipantId);
7
+ constructor(participantId: ParticipantId, statAggregator: StatAggregator | null);
6
8
  measure(width: number, height: number): void;
7
9
  }
@@ -1,12 +1,12 @@
1
1
  import { SignalingTransportType } from '../../enums/SignalingTransportStat';
2
- import { TransportTopology } from '../transport/Transport';
2
+ import StatsLogger from '../StatsLogger';
3
+ import TransportTopology from '../../enums/TransportTopology';
3
4
  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;
5
+ private readonly _logger;
10
6
  private trackerByCommand;
11
- private _destroy;
7
+ constructor(logger: StatsLogger);
8
+ mark(command: string, time: number, transport: SignalingTransportType): void;
9
+ /** Отправляем данные в стату */
10
+ logMetrics(topology?: TransportTopology): void;
11
+ destroy(): void;
12
12
  }
@@ -1,7 +1,7 @@
1
1
  import BaseSignaling from '../../abstract/BaseSignaling';
2
+ import TransportState from '../../enums/TransportState';
2
3
  import EventEmitter from '../EventEmitter';
3
4
  import { MediaSource } from '../MediaSource';
4
- import { TransportState } from './Transport';
5
5
  export default abstract class BaseTransport extends EventEmitter {
6
6
  protected readonly _signaling: BaseSignaling;
7
7
  protected readonly _mediaSource: MediaSource;
@@ -1,4 +1,5 @@
1
1
  import BaseSignaling from '../../abstract/BaseSignaling';
2
+ import { type DebugLogger } from '../../static/Debug';
2
3
  import { StatResult } from '../../types/Statistics';
3
4
  import EventEmitter from '../EventEmitter';
4
5
  import { WeightedAverage } from '../stat/WeightedAverage';
@@ -30,7 +31,8 @@ export default class DirectStatReporter extends EventEmitter {
30
31
  private readonly _networkLimits;
31
32
  private _lastStatSentTimestamp;
32
33
  private _currentState;
33
- constructor(signaling: BaseSignaling);
34
+ private readonly _debug;
35
+ constructor(signaling: BaseSignaling, debug?: DebugLogger);
34
36
  private _calcRttRating;
35
37
  private _calcLossRating;
36
38
  private _calcBitrateRating;
@@ -1,8 +1,12 @@
1
1
  import type { AnimojiReceiver, AnimojiSender } from '@vkontakte/calls-vmoji';
2
2
  import BaseSignaling from '../../abstract/BaseSignaling';
3
+ import { type DebugLogger } from '../../static/Debug';
3
4
  import { ParticipantId } from '../../types/Participant';
4
5
  import ServerSettings from '../../types/ServerSettings';
6
+ import StatsLogger from '../StatsLogger';
5
7
  import { MediaSource } from '../MediaSource';
8
+ import { CodecStatsAggregator } from '../stat/CodecStatsAggregator';
9
+ import { StatAggregator } from '../stat/StatAggregator';
6
10
  import BaseTransport from './BaseTransport';
7
11
  export default class DirectTransport extends BaseTransport {
8
12
  private readonly _participantId;
@@ -34,7 +38,11 @@ export default class DirectTransport extends BaseTransport {
34
38
  private _lastBadConnection;
35
39
  private _perfStatReporter;
36
40
  private _directStatReporter;
37
- constructor(participantId: ParticipantId, isMaster: boolean, signaling: BaseSignaling, mediaSource: MediaSource, serverSettings: ServerSettings);
41
+ private readonly _debug;
42
+ private readonly _logger;
43
+ private readonly _statAggregator;
44
+ private readonly _codecStatsAggregator;
45
+ constructor(participantId: ParticipantId, isMaster: boolean, signaling: BaseSignaling, mediaSource: MediaSource, serverSettings: ServerSettings, debug?: DebugLogger, logger?: StatsLogger | null, statAggregator?: StatAggregator | null, codecStatsAggregator?: CodecStatsAggregator | null);
38
46
  get participantId(): ParticipantId;
39
47
  updateStatisticsInterval(): void;
40
48
  private _isDeadConnection;
@@ -1,5 +1,7 @@
1
1
  import BaseSignaling from '../../abstract/BaseSignaling';
2
+ import { type DebugLogger } from '../../static/Debug';
2
3
  import EventEmitter from '../EventEmitter';
4
+ import { StatAggregator } from '../stat/StatAggregator';
3
5
  import DirectTransport from './DirectTransport';
4
6
  import ServerTransport from './ServerTransport';
5
7
  export default class PerfStatReporter extends EventEmitter {
@@ -10,7 +12,9 @@ export default class PerfStatReporter extends EventEmitter {
10
12
  private _screenShareStats;
11
13
  private _signaling;
12
14
  private readonly _directTopology;
13
- constructor(transport: ServerTransport | DirectTransport, signaling: BaseSignaling, directTopology?: boolean);
15
+ private readonly _debug;
16
+ private readonly _statAggregator;
17
+ constructor(transport: ServerTransport | DirectTransport, signaling: BaseSignaling, statAggregator?: StatAggregator | null, directTopology?: boolean, debug?: DebugLogger);
14
18
  destroy(): void;
15
19
  static getEstimatedPerformanceIndex(): number;
16
20
  private _handleStats;
@@ -1,8 +1,12 @@
1
1
  import type { AnimojiReceiver, AnimojiSender } from '@vkontakte/calls-vmoji';
2
2
  import BaseSignaling from '../../abstract/BaseSignaling';
3
+ import { type DebugLogger } from '../../static/Debug';
3
4
  import { ParticipantId } from '../../types/Participant';
4
5
  import ServerSettings from '../../types/ServerSettings';
6
+ import StatsLogger from '../StatsLogger';
5
7
  import { MediaSource } from '../MediaSource';
8
+ import { CodecStatsAggregator } from '../stat/CodecStatsAggregator';
9
+ import { StatAggregator } from '../stat/StatAggregator';
6
10
  import BaseTransport from './BaseTransport';
7
11
  export default class ServerTransport extends BaseTransport {
8
12
  private _producerNotification;
@@ -39,7 +43,11 @@ export default class ServerTransport extends BaseTransport {
39
43
  private _producerSessionId;
40
44
  private _newAudioShareTrack;
41
45
  private _simulcastInfo;
42
- constructor(signaling: BaseSignaling, mediaSource: MediaSource, serverSettings: ServerSettings);
46
+ private readonly _debug;
47
+ private readonly _logger;
48
+ private readonly _statAggregator;
49
+ private readonly _codecStatsAggregator;
50
+ constructor(signaling: BaseSignaling, mediaSource: MediaSource, serverSettings: ServerSettings, debug?: DebugLogger, logger?: StatsLogger | null, statAggregator?: StatAggregator | null, codecStatsAggregator?: CodecStatsAggregator | null);
43
51
  updateStatisticsInterval(): void;
44
52
  open(observer?: boolean): void;
45
53
  close(error?: Error): void;
@@ -88,7 +96,7 @@ export default class ServerTransport extends BaseTransport {
88
96
  private _onAsrTranscription;
89
97
  private _onProducerUpdated;
90
98
  private _onAddTrack;
91
- static _onSignalingStateChange(pc: RTCPeerConnection, event: any): void;
99
+ private _onSignalingStateChange;
92
100
  private _onConnectionStateChange;
93
101
  private _onReplacedTrack;
94
102
  private _onSourcesChanged;
@@ -1,9 +1,15 @@
1
1
  import type { AnimojiSvgData, RGBTuple } from '@vkontakte/calls-vmoji';
2
2
  import BaseSignaling from '../../abstract/BaseSignaling';
3
+ import TransportState from '../../enums/TransportState';
4
+ import TransportTopology from '../../enums/TransportTopology';
5
+ import { type DebugLogger } from '../../static/Debug';
3
6
  import { ParticipantId } from '../../types/Participant';
4
7
  import ServerSettings from '../../types/ServerSettings';
5
8
  import EventEmitter from '../EventEmitter';
9
+ import StatsLogger from '../StatsLogger';
6
10
  import { MediaSource } from '../MediaSource';
11
+ import { CodecStatsAggregator } from '../stat/CodecStatsAggregator';
12
+ import { StatAggregator } from '../stat/StatAggregator';
7
13
  export declare const enum TransportEvent {
8
14
  REMOTE_TRACK_ADDED = "REMOTE_TRACK_ADDED",
9
15
  REMOTE_TRACK_REMOVED = "REMOTE_TRACK_REMOVED",
@@ -23,19 +29,6 @@ export declare const enum TransportEvent {
23
29
  ANIMOJI_ERROR = "ANIMOJI_ERROR",
24
30
  SCREEN_SHARING_STAT = "SCREEN_SHARING_STAT"
25
31
  }
26
- export declare const enum TransportState {
27
- IDLE = "IDLE",
28
- OPENED = "OPENED",
29
- CONNECTING = "CONNECTING",
30
- RECONNECTING = "RECONNECTING",
31
- CONNECTED = "CONNECTED",
32
- CLOSED = "CLOSED",
33
- FAILED = "FAILED"
34
- }
35
- export declare const enum TransportTopology {
36
- DIRECT = "DIRECT",
37
- SERVER = "SERVER"
38
- }
39
32
  export declare class Transport extends EventEmitter {
40
33
  private readonly _signaling;
41
34
  private readonly _mediaSource;
@@ -51,7 +44,12 @@ export declare class Transport extends EventEmitter {
51
44
  private _localState;
52
45
  private _animojiReceiver;
53
46
  private _animojiSender;
54
- constructor(topology: TransportTopology, signaling: BaseSignaling, mediaSource: MediaSource, serverSettings: ServerSettings);
47
+ private readonly _debug;
48
+ private readonly _logger;
49
+ private readonly _statAggregator;
50
+ private readonly _codecStatsAggregator;
51
+ private _vadController;
52
+ constructor(topology: TransportTopology, signaling: BaseSignaling, mediaSource: MediaSource, serverSettings: ServerSettings, debug?: DebugLogger, logger?: StatsLogger | null, statAggregator?: StatAggregator | null, codecStatsAggregator?: CodecStatsAggregator | null);
55
53
  updateSettings(settings: ServerSettings): void;
56
54
  updateStatisticsInterval(): void;
57
55
  allocate(participantId: ParticipantId, isMaster?: boolean): void;
@@ -92,6 +90,8 @@ export declare class Transport extends EventEmitter {
92
90
  private _onAnimojiStream;
93
91
  /** Обработчик, досылающий MediaSourceEvent.SOURCE_CHANGED событие до аллокации транспортов */
94
92
  private _onAnimojiStatus;
93
+ private _createVad;
94
+ private _updateVadTrack;
95
95
  private _createAnimojiTransport;
96
96
  private _removeAnimojiTransport;
97
97
  getStreamWaitingTimeMs(streamId: string, targetRtpTimestamp: number): number;
package/default/Api.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import BaseApi, { ClientEvent, ClientStats, LogItem } from '../abstract/BaseApi';
1
+ import BaseApi, { ClientEvent, ClientStats } from '../abstract/BaseApi';
2
2
  import CallType from '../enums/CallType';
3
3
  import HangupType from '../enums/HangupType';
4
4
  import ConversationParams from '../types/ConversationParams';
@@ -8,14 +8,11 @@ import { CompositeUserId, OkUserId, ParticipantId } from '../types/Participant';
8
8
  export default class Api extends BaseApi {
9
9
  private _userId;
10
10
  private _uuid;
11
- private _externalUidsCache;
12
- private _decorativeIdToInitialId;
13
- private _initialIdToDecorativeId;
11
+ private _idCache;
14
12
  private _callUnsafe;
15
13
  protected _call(method: string, data?: any, noSession?: boolean): Promise<any>;
16
14
  userId(participantId: ParticipantId): Promise<ExternalParticipantId>;
17
15
  authorize(): Promise<void>;
18
- log(items: LogItem[]): void;
19
16
  logClientStats(items: ClientStats[]): void;
20
17
  logClientEvents(items: ClientEvent[]): void;
21
18
  uploadDebugLogs(conversationId: string, startTime: number, endTime: number, log: string): Promise<void>;
@@ -26,7 +23,7 @@ export default class Api extends BaseApi {
26
23
  audioOnly?: boolean;
27
24
  waitForAdmin?: boolean;
28
25
  closedConversation?: boolean;
29
- }, speakerIds?: OkUserId[]): Promise<ConversationResponse>;
26
+ }, externalIds?: ExternalId[]): Promise<ConversationResponse>;
30
27
  startConversation(conversationId: string, ids?: OkUserId[], type?: CallType, isVideo?: boolean, payload?: string, joiningAllowed?: boolean, requireAuthToJoin?: boolean, { onlyAdminCanShareMovie, waitForAdmin }?: {
31
28
  onlyAdminCanShareMovie?: boolean;
32
29
  waitForAdmin?: boolean;
@@ -43,19 +40,13 @@ export default class Api extends BaseApi {
43
40
  }>;
44
41
  getAnonymTokenByLink(joinLink: string, username?: string): Promise<string>;
45
42
  joinConversationByLink(joinLink: string, isVideo?: boolean, observedIds?: ExternalUserId[], payload?: string): Promise<ConversationResponse>;
46
- /**
47
- * NB: Не сохраняет порядок возвращаемых ID
48
- * Этот метод принимает именно ExternalId, т.к. для OkUserId не принципиально наличие deviceIdx
49
- * @hidden
50
- */
51
- getOkIdsByExternalIds(externalIds: ExternalId[]): Promise<OkUserId[]>;
52
- getParticipantIdsByExternalIds(externalIds: ExternalId[]): Promise<Map<ExternalId, ParticipantId>>;
53
43
  /**
54
44
  * NB: Не сохраняет порядок возвращаемых ID
55
45
  * @hidden
56
46
  */
57
47
  getExternalIdsByOkIds(uids: OkUserId[]): Promise<ExternalParticipantId[]>;
58
48
  getCachedOkIdByExternalId(externalId: ExternalId): ParticipantId | null;
49
+ getCachedRawOkIdByExternalId(externalId: ExternalId): OkUserId | null;
59
50
  cacheExternalId(participantId: OkUserId | CompositeUserId | ParticipantId, externalId: ExternalParticipantId): void;
60
51
  mapDecorativeId(decorativeId: OkUserId | CompositeUserId | ParticipantId, initialId: OkUserId | CompositeUserId | ParticipantId): void;
61
52
  unmapDecorativeId(initialId: OkUserId | CompositeUserId | ParticipantId): void;
@@ -65,7 +56,6 @@ export default class Api extends BaseApi {
65
56
  getUserId(): OkUserId | null;
66
57
  setUserId(userId: OkUserId): void;
67
58
  hangupConversation(conversationId: string, reason?: HangupType): void;
68
- sendUserFeedbackStats(conversationId: string, userResponse: number, reason?: string, groupCallUsersCount?: number): void;
69
59
  removeHistoryRecords(recordIds: number[]): Promise<void>;
70
60
  cleanup(): void;
71
61
  private _getExternalIdsByOkIds;
@@ -1,13 +1,18 @@
1
1
  import BaseSignaling, { AddParticipantParams } from '../abstract/BaseSignaling';
2
+ import StatsLogger from '../classes/StatsLogger';
2
3
  import { ParticipantIdRegistry } from '../classes/ParticipantIdRegistry';
3
4
  import { SharingStatReport } from '../classes/screenshare/SharingStatReport';
4
- import { TransportTopology } from '../classes/transport/Transport';
5
+ import { StatAggregator } from '../classes/stat/StatAggregator';
6
+ import { StatPings } from '../classes/stat/StatPings';
7
+ import { StatSignalingCommands } from '../classes/stat/StatSignalingCommands';
8
+ import TransportTopology from '../enums/TransportTopology';
5
9
  import ConversationFeature from '../enums/ConversationFeature';
6
10
  import ConversationOption from '../enums/ConversationOption';
7
11
  import MediaOption from '../enums/MediaOption';
8
12
  import SignalingCommandType from '../enums/SignalingCommandType';
9
13
  import SignalingConnectionType from '../enums/SignalingConnectionType';
10
14
  import UserRole from '../enums/UserRole';
15
+ import { type DebugLogger } from '../static/Debug';
11
16
  import { JSONObject } from '../static/Json';
12
17
  import { IAsrStartParams, IAsrStopParams } from '../types/Asr';
13
18
  import { ChangeSimulcast } from '../types/ChangeSimulcast';
@@ -22,7 +27,7 @@ import { ParticipantListChunkParameters } from '../types/ParticipantListChunk';
22
27
  import { StreamDescriptionString } from '../types/ParticipantStreamDescription';
23
28
  import { PerfStatReport } from '../types/PerfStatReporter';
24
29
  import SignalingMessage, { GetParticipantsSignalingResponse, GetRoomsSignalingResponse, SignalingSuccessResponse } from '../types/SignalingMessage';
25
- import { IPublishStreamData, IRecordConfData, IStartStreamData, IStopStreamData } from '../types/Streams';
30
+ import { IPublishStreamData, IStartStreamData, IStopStreamData } from '../types/Streams';
26
31
  export default class Signaling extends BaseSignaling {
27
32
  private socket;
28
33
  protected sequence: number;
@@ -39,7 +44,6 @@ export default class Signaling extends BaseSignaling {
39
44
  protected conversationReject: Function | null;
40
45
  private connected;
41
46
  private listenersReady;
42
- private postfix;
43
47
  protected peerId: number | null;
44
48
  protected conversationId: string | null;
45
49
  private reconnectTimer;
@@ -50,12 +54,18 @@ export default class Signaling extends BaseSignaling {
50
54
  private producerCommandDataChannel;
51
55
  private producerCommandDataChannelEnabled;
52
56
  private producerCommandSerializationService;
57
+ private readonly _debug;
58
+ private readonly _logger;
59
+ private readonly _statAggregator;
60
+ private readonly _pings;
61
+ private readonly _signalingCommands;
53
62
  private static get RECONNECT_DELAY();
54
63
  private static get RECONNECT_MAX_DELAY();
55
64
  private static get RECONNECT_MAX_COUNT();
56
65
  private static get WAIT_CONNECTION_DELAY();
57
66
  private static get WAIT_RESPONSE_DELAY();
58
67
  private static get WAIT_MESSAGE_DELAY();
68
+ constructor(debug?: DebugLogger, logger?: StatsLogger | null, statAggregator?: StatAggregator | null, pings?: StatPings | null, signalingCommands?: StatSignalingCommands | null);
59
69
  get ready(): boolean;
60
70
  setEndpoint(endpoint: string): void;
61
71
  setWebTransportEndpoint(endpoint: string | null): void;
@@ -120,7 +130,6 @@ export default class Signaling extends BaseSignaling {
120
130
  startStream(data: IStartStreamData): Promise<SignalingMessage>;
121
131
  stopStream(data?: IStopStreamData): Promise<SignalingMessage>;
122
132
  publishStream(data?: IPublishStreamData): Promise<SignalingMessage>;
123
- recordSetConf(conf?: IRecordConfData): Promise<SignalingMessage>;
124
133
  getRecordStatus(): Promise<SignalingMessage>;
125
134
  switchTopology(topology: TransportTopology, force?: boolean): Promise<SignalingMessage>;
126
135
  requestRealloc(): Promise<SignalingMessage>;
@@ -164,6 +173,7 @@ export default class Signaling extends BaseSignaling {
164
173
  startAsr(params: IAsrStartParams): Promise<SignalingMessage>;
165
174
  stopAsr(params?: IAsrStopParams): Promise<SignalingMessage>;
166
175
  requestAsr(request: boolean): Promise<SignalingMessage>;
176
+ private _buildUrl;
167
177
  protected _connect(connectionType: SignalingConnectionType, useWebTransport: boolean): void;
168
178
  protected _disconnect(code?: number): void;
169
179
  private _onOpen;
@@ -173,6 +183,7 @@ export default class Signaling extends BaseSignaling {
173
183
  protected _handleCachedMessages(): void;
174
184
  private _throwError;
175
185
  private _onError;
186
+ private _serializeErrorEvent;
176
187
  protected _onClose(event: CloseEvent): void;
177
188
  protected _closeSocket(error?: Error | null): void;
178
189
  protected _reconnect(): void;
@@ -0,0 +1,10 @@
1
+ declare const enum TransportState {
2
+ IDLE = "IDLE",
3
+ OPENED = "OPENED",
4
+ CONNECTING = "CONNECTING",
5
+ RECONNECTING = "RECONNECTING",
6
+ CONNECTED = "CONNECTED",
7
+ CLOSED = "CLOSED",
8
+ FAILED = "FAILED"
9
+ }
10
+ export default TransportState;
@@ -0,0 +1,5 @@
1
+ declare const enum TransportTopology {
2
+ DIRECT = "DIRECT",
3
+ SERVER = "SERVER"
4
+ }
5
+ export default TransportTopology;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/calls-sdk",
3
- "version": "2.8.11-dev.cb5b05f6.0",
3
+ "version": "2.8.11-dev.d88537e0.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.2.10-dev.12fb226c.0",
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",
package/static/Debug.d.ts CHANGED
@@ -7,14 +7,33 @@ export declare enum DebugMessageType {
7
7
  WARN = "WARN",
8
8
  ERROR = "ERROR"
9
9
  }
10
+ export type DebugMessageContext = {
11
+ readonly sessionId: string | null;
12
+ readonly conversationId: string | null;
13
+ };
14
+ export type DebugLogger = {
15
+ debug(...args: any[]): void;
16
+ log(...args: any[]): void;
17
+ warn(...args: any[]): void;
18
+ error(...args: any[]): void;
19
+ };
20
+ export type DebugSessionLogger = DebugLogger & {
21
+ readonly sessionId: string | null;
22
+ readonly conversationId: string | null;
23
+ setConversationId(conversationId: string | null): void;
24
+ };
10
25
  declare namespace Debug {
11
- let debug: Function;
12
- let log: Function;
13
- let warn: Function;
14
- let error: Function;
15
- function enabled(): boolean;
16
- function toggle(enable: boolean): void;
17
- function send(type: DebugMessageType, ...args: any[]): void;
18
- function test(tag: string, ...args: any[]): void;
26
+ type ContextProvider = () => DebugMessageContext;
27
+ export function debug(...args: any[]): void;
28
+ export function log(...args: any[]): void;
29
+ export function warn(...args: any[]): void;
30
+ export function error(...args: any[]): void;
31
+ export function enabled(): boolean;
32
+ export function toggle(enable: boolean): void;
33
+ export function send(type: DebugMessageType, ...args: any[]): void;
34
+ export function createLogger(getContext: ContextProvider): DebugLogger;
35
+ export function createSessionLogger(initialConversationId?: string | null): DebugSessionLogger;
36
+ export function test(tag: string, ...args: any[]): void;
37
+ export {};
19
38
  }
20
39
  export default Debug;
@@ -446,6 +446,9 @@ declare namespace External {
446
446
  * @param args
447
447
  */
448
448
  function onDebugMessage(type: DebugMessageType, ...args: any[]): void;
449
+ function onDebugMessageWithContext(type: DebugMessageType, context: {
450
+ conversationId: string | null;
451
+ }, ...args: any[]): void;
449
452
  /**
450
453
  * Статистика звонка
451
454
  *
@@ -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';
@@ -188,6 +188,14 @@ export type ParamsObject = {
188
188
  * Можно установить позднее методом `setAudioEffects`
189
189
  */
190
190
  audioEffects: EffectVoiceChange | null;
191
+ /**
192
+ * Namespace библиотеки VAD из `@vkontakte/calls-audio-effects`.
193
+ *
194
+ * Можно установить методом `setVad`
195
+ */
196
+ vad: VadLib | null;
197
+ /** Настройки VAD (threshold, hangoverMs, enabled) */
198
+ vadOptions: VadControllerOptions;
191
199
  /**
192
200
  * Максимальная ширина видео в пикселях для видео эффекта
193
201
  *
@@ -306,6 +314,12 @@ export type ParamsObject = {
306
314
  * _По умолчанию: `30`_
307
315
  */
308
316
  videoTracksCount: number;
317
+ /**
318
+ * Минимальный интервал отправки diff для requestDisplayLayout в миллисекундах.
319
+ *
320
+ * _По умолчанию: `250`_
321
+ */
322
+ requestDisplayLayoutThrottleMs: number;
309
323
  /** @hidden */
310
324
  movieShare: boolean;
311
325
  /** @hidden */
@@ -730,6 +744,12 @@ export type ParamsObject = {
730
744
  * Получено отладочное сообщение. Работает только при выключенном режиме отладки
731
745
  */
732
746
  onDebugMessage?: (type: DebugMessageType, ...args: any[]) => void;
747
+ /**
748
+ * Получено отладочное сообщение с контекстом звонка. Работает только при выключенном режиме отладки
749
+ */
750
+ onDebugMessageWithContext?: (type: DebugMessageType, context: {
751
+ conversationId: string | null;
752
+ }, ...args: any[]) => void;
733
753
  /**
734
754
  * Статистика звонка
735
755
  */
@@ -929,6 +949,10 @@ export default abstract class Params {
929
949
  static get displaySurface(): DisplayCaptureSurfaceType;
930
950
  static get audioEffects(): EffectVoiceChange | null;
931
951
  static set audioEffects(value: EffectVoiceChange | null);
952
+ static get vad(): VadLib | null;
953
+ static set vad(value: VadLib | null);
954
+ static get vadOptions(): VadControllerOptions;
955
+ static set vadOptions(value: VadControllerOptions);
932
956
  static get videoEffects(): VideoEffects | null;
933
957
  static set videoEffects(value: VideoEffects | null);
934
958
  static get videoEffectMaxWidth(): number;
@@ -963,6 +987,7 @@ export default abstract class Params {
963
987
  static get audioNack(): boolean;
964
988
  static get movieShare(): boolean;
965
989
  static get videoTracksCount(): number;
990
+ static get requestDisplayLayoutThrottleMs(): number;
966
991
  static get breakVideoPayloadTypes(): boolean;
967
992
  static get useCallsToContacts(): boolean;
968
993
  static get useParticipantListChunk(): boolean;
@@ -1010,6 +1035,7 @@ export default abstract class Params {
1010
1035
  screenShareCongestionControl: boolean;
1011
1036
  screenShareCongestionControlThreshold: number;
1012
1037
  videoTracksCount: number;
1038
+ requestDisplayLayoutThrottleMs: number;
1013
1039
  asrDataChannel: boolean;
1014
1040
  videoMaxHeight: number;
1015
1041
  videoMaxWidth: number;
package/static/Utils.d.ts CHANGED
@@ -3,6 +3,7 @@ import { ExternalParticipant, ExternalParticipantListMarker } from '../types/Ext
3
3
  import { CompositeUserId, OkUserId, Participant, ParticipantId, ParticipantStateMapped } from '../types/Participant';
4
4
  import SignalingMessage from '../types/SignalingMessage';
5
5
  import VideoSettings from '../types/VideoSettings';
6
+ import { type DebugLogger } from './Debug';
6
7
  export declare const PARAMETERS_SEPARATOR = ":";
7
8
  export declare const DEVICE_IDX_PARAMETER = "d";
8
9
  /** @hidden */
@@ -36,8 +37,8 @@ declare namespace Utils {
36
37
  function delay(time: number, { signal }?: {
37
38
  signal?: AbortSignal;
38
39
  }): Promise<void>;
39
- function applySettings(pc: RTCPeerConnection, videoSettings: VideoSettings, prevSettings: any): any;
40
- function applyVideoTrackSettings(videoSettings: VideoSettings, s: RTCRtpSender, track: MediaStreamTrack | null, prevSettings: any, retSettings: any): void;
40
+ function applySettings(pc: RTCPeerConnection, videoSettings: VideoSettings, prevSettings: any, debug?: DebugLogger): any;
41
+ function applyVideoTrackSettings(videoSettings: VideoSettings, s: RTCRtpSender, track: MediaStreamTrack | null, prevSettings: any, retSettings: any, debug?: DebugLogger): void;
41
42
  /**
42
43
  * Проверяет, есть ли в первом массиве хотя бы один элемент из второго массива
43
44
  * @param arr Где ищем
@@ -2,6 +2,8 @@
2
2
  * Вспомогательный плагин для работы с WebRTC
3
3
  */
4
4
  import { IVideoDimentions } from '../types/MediaSettings';
5
+ import type StatsLogger from '../classes/StatsLogger';
6
+ import { type DebugLogger } from './Debug';
5
7
  /**
6
8
  * Тип камеры мобильного устройства
7
9
  */
@@ -75,6 +77,7 @@ declare namespace WebRTCUtils {
75
77
  * Проверяет получены ли разрешения, необходимые для текущего звонка
76
78
  */
77
79
  function hasPermissions(needVideo?: boolean): boolean;
80
+ function releaseFirefoxMicrophonePermissionWarmup(): void;
78
81
  /**
79
82
  * Запрашивает камеру и микрофон пользователя
80
83
  *
@@ -82,24 +85,24 @@ declare namespace WebRTCUtils {
82
85
  * @param needAudio Нужно ли аудио
83
86
  * @param needEmptyTracks Добавлять ли в стрим пустые треки для отключенного видео/аудио
84
87
  */
85
- function getUserMedia(needVideo?: boolean, needAudio?: boolean, needEmptyTracks?: boolean): Promise<MediaStream>;
88
+ function getUserMedia(needVideo?: boolean, needAudio?: boolean, needEmptyTracks?: boolean, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
86
89
  /**
87
90
  * Запрашивает трансляцию экрана пользователя с опциональным захватом звука
88
91
  */
89
- function getScreenMedia(fastScreenShare: boolean, withAudioShare: boolean): Promise<MediaStream>;
92
+ function getScreenMedia(fastScreenShare: boolean, withAudioShare: boolean, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
90
93
  /**
91
94
  * Запрашивает камеру пользователя
92
95
  *
93
96
  * @param deviceId ID устройства
94
97
  * @param resolution Размеры видео
95
98
  */
96
- function getUserVideo(deviceId?: string, resolution?: IVideoDimentions): Promise<MediaStream>;
99
+ function getUserVideo(deviceId?: string, resolution?: IVideoDimentions, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
97
100
  /**
98
101
  * Запрашивает микрофон пользователя
99
102
  *
100
103
  * @param deviceId ID устройства
101
104
  */
102
- function getUserAudio(deviceId?: string): Promise<MediaStream>;
105
+ function getUserAudio(deviceId?: string, debug?: DebugLogger, logger?: StatsLogger | null): Promise<MediaStream>;
103
106
  /**
104
107
  * Устанавливает размер видео в стриме
105
108
  *
@@ -1,4 +1,4 @@
1
- import { TransportTopology } from '../classes/transport/Transport';
1
+ import TransportTopology from '../enums/TransportTopology';
2
2
  import CallDirection from '../enums/CallDirection';
3
3
  import CallType from '../enums/CallType';
4
4
  import ConversationFeature from '../enums/ConversationFeature';
@@ -31,6 +31,7 @@ export interface FastStartParams {
31
31
  conversationId: string;
32
32
  internalParams: string;
33
33
  externalIds?: ExternalId[];
34
+ payload: string;
34
35
  opponentType: CallType;
35
36
  mediaOptions: MediaOption[];
36
37
  joiningAllowed?: boolean;
@@ -54,4 +54,37 @@ export type ParticipantLayout = (Layout | StopStream | RequestKeyFrame) & {
54
54
  */
55
55
  streamName?: string;
56
56
  };
57
+ /**
58
+ * Запрос стрима, который клиент хочет получать для отображения.
59
+ */
60
+ export type DisplayLayoutRequest = {
61
+ /**
62
+ * Внешний ID пользователя
63
+ */
64
+ uid: ExternalParticipantId | string;
65
+ /**
66
+ * Тип медиа (видео с камеры, картинка с экрана, лайв или мувик)
67
+ */
68
+ mediaType: MediaType;
69
+ /**
70
+ * Ширина окошка в котором отображается видео, в пикселях
71
+ */
72
+ width: number;
73
+ /**
74
+ * Высота окошка в котором отображается видео, в пикселях
75
+ */
76
+ height: number;
77
+ /**
78
+ * Отображать видео как CSS object-fit: cover. По умолчанию используется contain.
79
+ */
80
+ cover?: boolean;
81
+ /**
82
+ * Приоритет
83
+ */
84
+ priority?: number;
85
+ /**
86
+ * ID лайва или мувика. null для камеры или скрин-шары.
87
+ */
88
+ streamName?: string;
89
+ };
57
90
  export default ParticipantLayout;