@vkontakte/calls-sdk 2.8.11-beta.2 → 2.8.11-beta.4

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 +43 -13
  2. package/abstract/BaseApi.d.ts +2 -3
  3. package/abstract/BaseSignaling.d.ts +2 -3
  4. package/calls-sdk.cjs.js +11 -11
  5. package/calls-sdk.esm.js +7883 -7361
  6. package/classes/AudioFix.d.ts +5 -1
  7. package/classes/AudioOutput.d.ts +5 -1
  8. package/classes/Conversation.d.ts +7 -2
  9. package/classes/ConversationResponseValidator.d.ts +3 -0
  10. package/classes/DebugInfo.d.ts +3 -0
  11. package/classes/DisplayLayoutRequester.d.ts +39 -0
  12. package/classes/ExternalIdCache.d.ts +19 -0
  13. package/classes/MediaSource.d.ts +5 -1
  14. package/classes/ParticipantIdRegistry.d.ts +3 -0
  15. package/classes/ProducerCommandSerializationService.d.ts +3 -0
  16. package/classes/SignalingActor.d.ts +3 -1
  17. package/classes/SpeakerDetector.d.ts +2 -1
  18. package/classes/SpecListener.d.ts +5 -1
  19. package/classes/{Logger.d.ts → StatsLogger.d.ts} +3 -10
  20. package/classes/VideoEffectsFpsLimiter.d.ts +3 -0
  21. package/classes/asr/AsrReceiver.d.ts +3 -1
  22. package/classes/codec/LibVPxDecoder.d.ts +3 -0
  23. package/classes/codec/LibVPxEncoder.d.ts +3 -1
  24. package/classes/codec/WebCodecsDecoder.d.ts +3 -0
  25. package/classes/codec/WebCodecsEncoder.d.ts +3 -1
  26. package/classes/codec/WorkerBase.d.ts +5 -0
  27. package/classes/screenshare/BaseStreamBuilder.d.ts +4 -1
  28. package/classes/screenshare/CanvasRenderer.d.ts +3 -1
  29. package/classes/screenshare/ScreenCaptureReceiver.d.ts +7 -1
  30. package/classes/screenshare/ScreenCaptureSender.d.ts +5 -1
  31. package/classes/screenshare/ScreenCongestionControl.d.ts +3 -1
  32. package/classes/screenshare/StreamBuilder.d.ts +5 -1
  33. package/classes/screenshare/TrackGeneratorRenderer.d.ts +3 -1
  34. package/classes/screenshare/WebmBuilder.d.ts +3 -1
  35. package/classes/stat/CodecStatsAggregator.d.ts +7 -7
  36. package/classes/stat/ConversationStats.d.ts +21 -0
  37. package/classes/stat/StatAggregator.d.ts +6 -6
  38. package/classes/stat/StatFirstMediaReceived.d.ts +6 -2
  39. package/classes/stat/StatPings.d.ts +9 -9
  40. package/classes/stat/StatScreenShareFirstFrame.d.ts +3 -1
  41. package/classes/stat/StatSignalingCommands.d.ts +8 -8
  42. package/classes/transport/BaseTransport.d.ts +1 -1
  43. package/classes/transport/DirectStatReporter.d.ts +3 -1
  44. package/classes/transport/DirectTransport.d.ts +9 -1
  45. package/classes/transport/PerfStatReporter.d.ts +5 -1
  46. package/classes/transport/ServerTransport.d.ts +10 -2
  47. package/classes/transport/Transport.d.ts +11 -14
  48. package/default/Api.d.ts +3 -11
  49. package/default/Signaling.d.ts +39 -45
  50. package/default/SignalingTransport.d.ts +68 -0
  51. package/enums/TransportState.d.ts +10 -0
  52. package/enums/TransportTopology.d.ts +5 -0
  53. package/package.json +1 -1
  54. package/static/Debug.d.ts +27 -8
  55. package/static/External.d.ts +3 -0
  56. package/static/Params.d.ts +14 -0
  57. package/static/Utils.d.ts +3 -2
  58. package/static/WebRTCUtils.d.ts +6 -4
  59. package/types/Conversation.d.ts +1 -1
  60. package/types/FastStart.d.ts +1 -0
  61. package/types/ParticipantLayout.d.ts +33 -0
  62. package/types/SignalingMessage.d.ts +1 -1
  63. package/types/Statistics.d.ts +1 -1
  64. package/types/WebTransport.d.ts +4 -0
  65. package/utils/DebugStorage.d.ts +100 -1
  66. package/classes/stat/EventMetricsService.d.ts +0 -9
  67. package/static/ConversationDebugLogger.d.ts +0 -13
@@ -1,21 +1,25 @@
1
- import { TransportTopology } from '../transport/Transport';
1
+ import TransportTopology from '../../enums/TransportTopology';
2
+ import { StatAggregator } from './StatAggregator';
2
3
  /** связанный с операцией `first_media_received` тип логируемого звонка */
3
4
  declare enum ECallType {
4
5
  DirectOutgoing = "direct_outgoing",
5
6
  DirectIncoming = "direct_incoming",
7
+ DirectJoin = "direct_join",
6
8
  ServerIncoming = "server_incoming",
7
9
  ServerJoinServer = "server_join_server",
8
10
  ServerChangeTopology = "server_change_topology"
9
11
  }
10
12
  export declare class StatFirstMediaReceived {
13
+ private readonly _statAggregator;
11
14
  /** уже поставили засечку на приём звонка */
12
15
  protected _isCallMarked: boolean;
13
16
  protected _isFinished: boolean;
14
17
  protected _callType: ECallType | null;
18
+ constructor(statAggregator: StatAggregator);
15
19
  markAcceptCall(topology: TransportTopology): void;
16
20
  markAcceptedCall(topology?: TransportTopology): void;
17
- markParticipantJoined(topology: TransportTopology): void;
18
21
  markOnJoin(topology: TransportTopology): void;
22
+ markTopologyChanged(topology: TransportTopology): void;
19
23
  private mark;
20
24
  measure(): void;
21
25
  }
@@ -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,11 @@ 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
+ constructor(topology: TransportTopology, signaling: BaseSignaling, mediaSource: MediaSource, serverSettings: ServerSettings, debug?: DebugLogger, logger?: StatsLogger | null, statAggregator?: StatAggregator | null, codecStatsAggregator?: CodecStatsAggregator | null);
55
52
  updateSettings(settings: ServerSettings): void;
56
53
  updateStatisticsInterval(): void;
57
54
  allocate(participantId: ParticipantId, isMaster?: boolean): void;
package/default/Api.d.ts CHANGED
@@ -8,9 +8,7 @@ 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>;
@@ -25,7 +23,7 @@ export default class Api extends BaseApi {
25
23
  audioOnly?: boolean;
26
24
  waitForAdmin?: boolean;
27
25
  closedConversation?: boolean;
28
- }, speakerIds?: OkUserId[]): Promise<ConversationResponse>;
26
+ }, externalIds?: ExternalId[]): Promise<ConversationResponse>;
29
27
  startConversation(conversationId: string, ids?: OkUserId[], type?: CallType, isVideo?: boolean, payload?: string, joiningAllowed?: boolean, requireAuthToJoin?: boolean, { onlyAdminCanShareMovie, waitForAdmin }?: {
30
28
  onlyAdminCanShareMovie?: boolean;
31
29
  waitForAdmin?: boolean;
@@ -42,19 +40,13 @@ export default class Api extends BaseApi {
42
40
  }>;
43
41
  getAnonymTokenByLink(joinLink: string, username?: string): Promise<string>;
44
42
  joinConversationByLink(joinLink: string, isVideo?: boolean, observedIds?: ExternalUserId[], payload?: string): Promise<ConversationResponse>;
45
- /**
46
- * NB: Не сохраняет порядок возвращаемых ID
47
- * Этот метод принимает именно ExternalId, т.к. для OkUserId не принципиально наличие deviceIdx
48
- * @hidden
49
- */
50
- getOkIdsByExternalIds(externalIds: ExternalId[]): Promise<OkUserId[]>;
51
- getParticipantIdsByExternalIds(externalIds: ExternalId[]): Promise<Map<ExternalId, ParticipantId>>;
52
43
  /**
53
44
  * NB: Не сохраняет порядок возвращаемых ID
54
45
  * @hidden
55
46
  */
56
47
  getExternalIdsByOkIds(uids: OkUserId[]): Promise<ExternalParticipantId[]>;
57
48
  getCachedOkIdByExternalId(externalId: ExternalId): ParticipantId | null;
49
+ getCachedRawOkIdByExternalId(externalId: ExternalId): OkUserId | null;
58
50
  cacheExternalId(participantId: OkUserId | CompositeUserId | ParticipantId, externalId: ExternalParticipantId): void;
59
51
  mapDecorativeId(decorativeId: OkUserId | CompositeUserId | ParticipantId, initialId: OkUserId | CompositeUserId | ParticipantId): void;
60
52
  unmapDecorativeId(initialId: OkUserId | CompositeUserId | ParticipantId): void;
@@ -1,13 +1,17 @@
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
- import SignalingCommandType from '../enums/SignalingCommandType';
9
12
  import SignalingConnectionType from '../enums/SignalingConnectionType';
10
13
  import UserRole from '../enums/UserRole';
14
+ import { type DebugLogger } from '../static/Debug';
11
15
  import { JSONObject } from '../static/Json';
12
16
  import { IAsrStartParams, IAsrStopParams } from '../types/Asr';
13
17
  import { ChangeSimulcast } from '../types/ChangeSimulcast';
@@ -21,41 +25,39 @@ import ParticipantLayout, { RequestKeyFrame, StopStream } from '../types/Partici
21
25
  import { ParticipantListChunkParameters } from '../types/ParticipantListChunk';
22
26
  import { StreamDescriptionString } from '../types/ParticipantStreamDescription';
23
27
  import { PerfStatReport } from '../types/PerfStatReporter';
24
- import SignalingMessage, { GetParticipantsSignalingResponse, GetRoomsSignalingResponse, SignalingSuccessResponse } from '../types/SignalingMessage';
25
- import { IPublishStreamData, IRecordConfData, IStartStreamData, IStopStreamData } from '../types/Streams';
28
+ import SignalingMessage, { GetParticipantsSignalingResponse, GetRoomsSignalingResponse } from '../types/SignalingMessage';
29
+ import { IPublishStreamData, IStartStreamData, IStopStreamData } from '../types/Streams';
26
30
  export default class Signaling extends BaseSignaling {
27
- private socket;
28
- protected sequence: number;
31
+ private transport;
32
+ private sequence;
29
33
  private lastStamp;
30
34
  private websocketCommandsQueue;
31
35
  private datachannelCommandsQueue;
32
36
  private incomingCache;
33
37
  private responseHandlers;
34
38
  private connectionType;
35
- private reconnectCount;
36
- private endpoint;
37
- private wtEndpoint;
38
- protected conversationResolve: Function | null;
39
- protected conversationReject: Function | null;
39
+ private conversationResolve;
40
+ private conversationReject;
40
41
  private connected;
41
42
  private listenersReady;
42
- protected peerId: number | null;
43
- protected conversationId: string | null;
44
- private reconnectTimer;
43
+ private peerId;
44
+ private conversationId;
45
45
  private connectionMessageWaitTimer;
46
- private doctorTimer;
47
46
  private participantIdRegistry;
48
47
  private producerNotificationDataChannel;
49
48
  private producerCommandDataChannel;
50
49
  private producerCommandDataChannelEnabled;
51
50
  private producerCommandSerializationService;
52
- private static get RECONNECT_DELAY();
53
- private static get RECONNECT_MAX_DELAY();
54
- private static get RECONNECT_MAX_COUNT();
51
+ private readonly _debug;
52
+ private readonly _logger;
53
+ private readonly _statAggregator;
54
+ private readonly _statPings;
55
+ private readonly _statSignalingCommands;
55
56
  private static get WAIT_CONNECTION_DELAY();
56
57
  private static get WAIT_RESPONSE_DELAY();
57
- private static get WAIT_MESSAGE_DELAY();
58
58
  get ready(): boolean;
59
+ constructor(debug?: DebugLogger, logger?: StatsLogger | null, statAggregator?: StatAggregator | null, statPings?: StatPings | null, statSignalingCommands?: StatSignalingCommands | null);
60
+ setAbortSignal(signal: AbortSignal | undefined): void;
59
61
  setEndpoint(endpoint: string): void;
60
62
  setWebTransportEndpoint(endpoint: string | null): void;
61
63
  setConversationId(conversationId: string): void;
@@ -71,15 +73,6 @@ export default class Signaling extends BaseSignaling {
71
73
  * Open a connection with a signaling server
72
74
  */
73
75
  connect(connectionType: SignalingConnectionType): Promise<SignalingMessage.Connection>;
74
- /**
75
- * Send a command to a signaling server
76
- */
77
- protected _send<T extends SignalingSuccessResponse>(command: SignalingCommandType, params?: any, needResponse?: boolean, retryCount?: number): Promise<T>;
78
- /**
79
- * Send a raw command to a signaling server
80
- */
81
- protected _sendRaw<T extends SignalingSuccessResponse>(command: SignalingCommandType, params?: any, needResponse?: boolean, retryCount?: number): Promise<T>;
82
- private _isDataChannelCommand;
83
76
  getNextCommandSequenceNumber(): number;
84
77
  hangup(reason: string): Promise<SignalingMessage | void>;
85
78
  sendCandidate(participantId: ParticipantId, candidate: RTCIceCandidate): Promise<SignalingMessage>;
@@ -119,7 +112,6 @@ export default class Signaling extends BaseSignaling {
119
112
  startStream(data: IStartStreamData): Promise<SignalingMessage>;
120
113
  stopStream(data?: IStopStreamData): Promise<SignalingMessage>;
121
114
  publishStream(data?: IPublishStreamData): Promise<SignalingMessage>;
122
- recordSetConf(conf?: IRecordConfData): Promise<SignalingMessage>;
123
115
  getRecordStatus(): Promise<SignalingMessage>;
124
116
  switchTopology(topology: TransportTopology, force?: boolean): Promise<SignalingMessage>;
125
117
  requestRealloc(): Promise<SignalingMessage>;
@@ -163,34 +155,36 @@ export default class Signaling extends BaseSignaling {
163
155
  startAsr(params: IAsrStartParams): Promise<SignalingMessage>;
164
156
  stopAsr(params?: IAsrStopParams): Promise<SignalingMessage>;
165
157
  requestAsr(request: boolean): Promise<SignalingMessage>;
166
- private _buildUrl;
167
- protected _connect(connectionType: SignalingConnectionType, useWebTransport: boolean): void;
168
- protected _disconnect(code?: number): void;
158
+ /**
159
+ * Send a command to a signaling server
160
+ */
161
+ private _send;
162
+ /**
163
+ * Send a raw command to a signaling server
164
+ */
165
+ private _sendRaw;
166
+ private _isDataChannelCommand;
169
167
  private _onOpen;
170
168
  private _onMessage;
171
- protected _handleMessage(message: SignalingMessage): void;
169
+ private _handleMessage;
172
170
  private _handleErrorMessage;
173
- protected _handleCachedMessages(): void;
171
+ private _handleCachedMessages;
174
172
  private _throwError;
175
173
  private _onError;
176
174
  private _serializeErrorEvent;
177
- protected _onClose(event: CloseEvent): void;
178
- protected _closeSocket(error?: Error | null): void;
179
- protected _reconnect(): void;
175
+ private _onClose;
176
+ private _closeSocket;
180
177
  private _handleCommandResponse;
181
178
  private _handleCommandsQueue;
182
179
  private _startResponseTimer;
183
180
  private _serializeBinary;
184
181
  private _serializeJson;
185
182
  private _convertDisplayLayout;
186
- protected _waitConnectionMessage(): void;
187
- protected _stopWaitConnectionMessage(): void;
188
- /**
189
- * Отвечает за timeout логику в WebSocket, если неполучаем никаких сообщений в течении WAIT_MESSAGE_DELAY, то запускаем реконнект
190
- */
191
- private _startDoctor;
192
- private _stopDoctor;
193
- private isWebTransportAvailable;
183
+ private _waitConnectionMessage;
184
+ private _stopWaitConnectionMessage;
185
+ private _onTransportFailed;
186
+ private _onTransportReconnectScheduled;
187
+ private _onTransportConnectionDead;
194
188
  private _getSocketType;
195
189
  private _markTransportStat;
196
190
  private _logTransportStat;
@@ -0,0 +1,68 @@
1
+ import SignalingConnectionType from '../enums/SignalingConnectionType';
2
+ import { SignalingTransportType } from '../enums/SignalingTransportStat';
3
+ export declare enum SignalingTransportFailure {
4
+ EMPTY_ENDPOINT = "EMPTY_ENDPOINT",
5
+ NETWORK_ERROR = "NETWORK_ERROR",
6
+ ABORTED = "ABORTED"
7
+ }
8
+ export type SignalingTransportFailedEvent = {
9
+ failure: SignalingTransportFailure;
10
+ message: string;
11
+ remote?: boolean;
12
+ };
13
+ export type SignalingTransportReconnectEvent = {
14
+ count: number;
15
+ delay: number;
16
+ };
17
+ export type SignalingTransportHandlers = {
18
+ onOpen: () => void;
19
+ onMessage: (event: MessageEvent) => void;
20
+ onError: (event: Event) => void;
21
+ onClose: (event: CloseEvent) => void;
22
+ onFailed: (event: SignalingTransportFailedEvent) => void;
23
+ onReconnectScheduled: (event: SignalingTransportReconnectEvent) => void;
24
+ onConnectionDead: () => void;
25
+ };
26
+ export default class SignalingTransport {
27
+ private readonly handlers;
28
+ private socket;
29
+ private endpoint;
30
+ private wtEndpoint;
31
+ private peerId;
32
+ private lastStamp;
33
+ private connectionType;
34
+ private reconnectCount;
35
+ private reconnectTimer;
36
+ private doctorTimer;
37
+ private forceWebSocket;
38
+ private abortSignal;
39
+ private manualClose;
40
+ private currentType;
41
+ constructor(handlers: SignalingTransportHandlers);
42
+ get readyState(): number | null;
43
+ get type(): SignalingTransportType;
44
+ setEndpoint(endpoint: string): void;
45
+ setWebTransportEndpoint(endpoint: string | null): void;
46
+ setPeerId(peerId: number | null): void;
47
+ setLastStamp(lastStamp: number): void;
48
+ setAbortSignal(signal?: AbortSignal): void;
49
+ resetReconnectCount(): void;
50
+ connect(connectionType: SignalingConnectionType): void;
51
+ close(code?: number): void;
52
+ send(data: string | ArrayBuffer): void;
53
+ private _connect;
54
+ private _connectWebTransport;
55
+ private _connectWebSocket;
56
+ private _setSocketHandlers;
57
+ private _buildUrl;
58
+ private _canUseWebTransport;
59
+ private _onOpen;
60
+ private _onMessage;
61
+ private _onError;
62
+ private _onClose;
63
+ private _disconnect;
64
+ private _scheduleReconnect;
65
+ private _getReconnectDelay;
66
+ private _startDoctor;
67
+ private _stopDoctor;
68
+ }
@@ -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-beta.2",
3
+ "version": "2.8.11-beta.4",
4
4
  "author": "vk.com",
5
5
  "description": "Library for video calls based on the vk.com platform",
6
6
  "homepage": "https://vk.com",
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
- function debug(...args: any[]): void;
12
- function log(...args: any[]): void;
13
- function warn(...args: any[]): void;
14
- function error(...args: any[]): void;
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
  *
@@ -306,6 +306,12 @@ export type ParamsObject = {
306
306
  * _По умолчанию: `30`_
307
307
  */
308
308
  videoTracksCount: number;
309
+ /**
310
+ * Минимальный интервал отправки diff для requestDisplayLayout в миллисекундах.
311
+ *
312
+ * _По умолчанию: `250`_
313
+ */
314
+ requestDisplayLayoutThrottleMs: number;
309
315
  /** @hidden */
310
316
  movieShare: boolean;
311
317
  /** @hidden */
@@ -730,6 +736,12 @@ export type ParamsObject = {
730
736
  * Получено отладочное сообщение. Работает только при выключенном режиме отладки
731
737
  */
732
738
  onDebugMessage?: (type: DebugMessageType, ...args: any[]) => void;
739
+ /**
740
+ * Получено отладочное сообщение с контекстом звонка. Работает только при выключенном режиме отладки
741
+ */
742
+ onDebugMessageWithContext?: (type: DebugMessageType, context: {
743
+ conversationId: string | null;
744
+ }, ...args: any[]) => void;
733
745
  /**
734
746
  * Статистика звонка
735
747
  */
@@ -963,6 +975,7 @@ export default abstract class Params {
963
975
  static get audioNack(): boolean;
964
976
  static get movieShare(): boolean;
965
977
  static get videoTracksCount(): number;
978
+ static get requestDisplayLayoutThrottleMs(): number;
966
979
  static get breakVideoPayloadTypes(): boolean;
967
980
  static get useCallsToContacts(): boolean;
968
981
  static get useParticipantListChunk(): boolean;
@@ -1010,6 +1023,7 @@ export default abstract class Params {
1010
1023
  screenShareCongestionControl: boolean;
1011
1024
  screenShareCongestionControlThreshold: number;
1012
1025
  videoTracksCount: number;
1026
+ requestDisplayLayoutThrottleMs: number;
1013
1027
  asrDataChannel: boolean;
1014
1028
  videoMaxHeight: number;
1015
1029
  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 Где ищем