@vkontakte/calls-sdk 2.8.13-dev.957e6761.0 → 2.8.13-dev.a071796a.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.
@@ -15,8 +15,9 @@ export default class AudioOutput {
15
15
  private readonly _features;
16
16
  private readonly _statFirstMediaReceived;
17
17
  private readonly _logger;
18
+ private _autoplayRecoveryController;
18
19
  constructor(statFirstMediaReceived: StatFirstMediaReceived, allowMultipleTracks?: boolean, debug?: DebugLogger, logger?: StatEventCollector | null);
19
- add(participantId: ParticipantId, track: MediaStreamTrack): void;
20
+ add(participantId: ParticipantId, track: MediaStreamTrack, replaceAll?: boolean): void;
20
21
  remove(participantId: ParticipantId, track: MediaStreamTrack): void;
21
22
  get volume(): number;
22
23
  set volume(volume: number);
@@ -26,6 +27,7 @@ export default class AudioOutput {
26
27
  protected _getTracks(): MediaStreamTrack[];
27
28
  protected _initAudioElement(): void;
28
29
  protected _stopAudioElement(): void;
30
+ private _stopAutoplayRecovery;
29
31
  private _createAudioElement;
30
32
  private _prepareAudioElement;
31
33
  private _addTrackToAudioElement;
@@ -6,31 +6,18 @@ export interface HoldableConversation extends Conversation {
6
6
  }
7
7
  export declare class CallRegistry {
8
8
  private _conversations;
9
- private _pending;
10
- private _initialIds;
11
- private _hangups;
9
+ private _reserved;
12
10
  private _activeId;
13
- private _selected;
14
11
  private _mutex;
15
12
  private _pendingRemovals;
16
- addPending(conversation: HoldableConversation): void;
17
- selectPending(conversation: HoldableConversation): HoldableConversation | null;
18
- isSelected(conversation: HoldableConversation): boolean;
19
- releaseSelection(conversation: HoldableConversation, previous?: HoldableConversation | null): void;
20
- selectIfNone(conversation: HoldableConversation): void;
13
+ reserve(id: string): void;
21
14
  add(conversation: HoldableConversation): void;
22
- remove(conversation: HoldableConversation): void;
15
+ remove(id: string | null): void;
23
16
  get(id: string): HoldableConversation | undefined;
24
- getPending(id?: string): HoldableConversation | null;
25
- isPending(conversation: HoldableConversation): boolean;
26
- getLocal(id?: string): HoldableConversation | null;
27
- trackHangup(conversation: HoldableConversation, promise: Promise<void>): void;
28
- getHangup(id?: string): Promise<void> | undefined;
29
- removeHangup(promise: Promise<void>): void;
30
17
  getActive(): HoldableConversation | null;
31
18
  getFirst(): HoldableConversation | null;
32
19
  getActiveId(): string | null;
33
- has(id: string, except?: HoldableConversation): boolean;
20
+ has(id: string): boolean;
34
21
  getAll(): HoldableConversation[];
35
22
  get callsLength(): number;
36
23
  setActive(id: string): Promise<void>;
@@ -39,8 +39,6 @@ export declare class MediaSource extends EventEmitter {
39
39
  private _screenTrack;
40
40
  private _audioShareTrack;
41
41
  private _screenShareTrack;
42
- private _screenCaptureRequest;
43
- private _destroyed;
44
42
  /** Трек для отправки в медиа-канал. Может отличаться при скриншаринге в дата-канал */
45
43
  private _sendVideoTrack;
46
44
  /** Трек с камеры. В стриме будет другой трек при включенных видео эффектах */
@@ -15,7 +15,7 @@ import { IAsrStartParams, IAsrStopParams } from '../../types/Asr';
15
15
  import { AudienceModeHandsResponse } from '../../types/AudienceMode';
16
16
  import { ConversationData, ConversationOnJoinParams, ConversationOnStartParams } from '../../types/Conversation';
17
17
  import { ExternalId, ExternalParticipant, ExternalParticipantId, ExternalParticipantListChunk } from '../../types/ExternalId';
18
- import type { HangupParams } from '../../types/FastHangup';
18
+ import type { FastHangupHandler, HangupParams } from '../../types/FastHangup';
19
19
  import MediaModifiers from '../../types/MediaModifiers';
20
20
  import MediaSettings, { IVideoDimentions } from '../../types/MediaSettings';
21
21
  import { IAddMovieParams, IUpdateMovieData } from '../../types/MovieShare';
@@ -35,9 +35,6 @@ export default class Conversation extends EventEmitter {
35
35
  private readonly _signalingActor;
36
36
  private readonly _displayLayoutRequester;
37
37
  private _mediaSource;
38
- private _requestingLocalMedia;
39
- private _requestedLocalAudio?;
40
- private _requestedLocalVideo?;
41
38
  private _conversation;
42
39
  private _myLastRequestedLayouts;
43
40
  private _state;
@@ -59,17 +56,14 @@ export default class Conversation extends EventEmitter {
59
56
  private _isRealTimeAsrRequested;
60
57
  private _serverSettings;
61
58
  private _serverTimeOffset;
62
- private _serverConversationId;
59
+ private _delayedHangup;
63
60
  private _onFastHangup?;
64
61
  private _hangupEmitted;
65
62
  private _hangupPromise;
66
- private _hangupReason;
67
63
  private _abortController;
68
64
  private _registeredPeerReceived;
69
65
  private _calleeUnavailableTimer;
70
- private _pendingId;
71
- private _resolveSignalingInitialization;
72
- private readonly _signalingInitialization;
66
+ private _reservedId;
73
67
  private readonly _onUnload;
74
68
  private readonly _onRestore;
75
69
  private readonly _onVisibilityChange;
@@ -87,6 +81,7 @@ export default class Conversation extends EventEmitter {
87
81
  private readonly _statFirstMediaReceived;
88
82
  constructor(api: BaseApi, externalLogger: BaseLogger | null);
89
83
  static current(): Conversation | null;
84
+ static hangupAfterInit(onFastHangup?: FastHangupHandler): void;
90
85
  static id(): string | null;
91
86
  get id(): string;
92
87
  get externalId(): ExternalParticipantId | undefined;
@@ -122,8 +117,7 @@ export default class Conversation extends EventEmitter {
122
117
  accept(mediaOptions: MediaOption[]): Promise<ConversationData>;
123
118
  decline(params?: HangupParams): Promise<void>;
124
119
  hangup(params?: HangupParams): Promise<void>;
125
- private _waitForHangup;
126
- addParticipant(participantIds: ExternalId[], params?: AddParticipantParams): Promise<void>;
120
+ addParticipant(participantIds: ExternalId[], params?: AddParticipantParams): Promise<ExternalParticipant[] | undefined>;
127
121
  addParticipantLegacy(participantIds: CompositeUserId[], params?: AddParticipantParams): Promise<void>;
128
122
  removeParticipant(participantId: CompositeUserId, ban?: boolean): Promise<void>;
129
123
  setVolume(volume: number): void;
@@ -131,15 +125,11 @@ export default class Conversation extends EventEmitter {
131
125
  private _openTransport;
132
126
  private _allocateParticipantTransport;
133
127
  private _closeParticipantTransport;
134
- private _registerPending;
135
128
  private _cleanupRegistry;
136
- private _applyInitialActiveSelection;
137
129
  private _emitHangupOnce;
138
130
  private _sendHangupApi;
139
131
  private _close;
140
132
  private _sendHangup;
141
- private _throwIfClosed;
142
- private _applyServerConversation;
143
133
  destroy(): void;
144
134
  private _destroy;
145
135
  private _getConversationParams;
@@ -163,14 +153,13 @@ export default class Conversation extends EventEmitter {
163
153
  private _cacheParticipantExternalIds;
164
154
  private _setConversation;
165
155
  private _updateConversation;
166
- private _requestLocalMedia;
167
156
  private _createMediaSource;
168
157
  private _connectSignaling;
169
- private _completeSignalingInitialization;
170
158
  private _processConnection;
171
159
  private _onConversationParticipantListChunk;
172
160
  private _createParticipantListChunk;
173
161
  private _participantListChunkToExternalChunk;
162
+ private _participantsToExternal;
174
163
  private _registerConnectionParticipants;
175
164
  private _registerParticipants;
176
165
  /** Установим состояние локальных мьютов */
@@ -477,6 +466,8 @@ export default class Conversation extends EventEmitter {
477
466
  private _registerParticipant;
478
467
  private _getParticipant;
479
468
  }
469
+ declare function _resetPendingInstance(): void;
470
+ export { _resetPendingInstance };
480
471
  export declare class UpdateDisplayLayoutError extends Error {
481
472
  readonly participantErrors: {
482
473
  externalId: ExternalParticipantId;
@@ -37,7 +37,6 @@ declare function createParams(): {
37
37
  onSpeakerChanged: Mock<import("@vitest/spy").Procedure>;
38
38
  onAcceptedCall: Mock<import("@vitest/spy").Procedure>;
39
39
  onNonFatalError: Mock<import("@vitest/spy").Procedure>;
40
- onSignalingConnected: Mock<import("@vitest/spy").Procedure>;
41
40
  };
42
41
  export type ConversationTestParams = ReturnType<typeof createParams>;
43
42
  export type ConversationTestTools = {
@@ -37,6 +37,8 @@ export declare class Transport extends EventEmitter {
37
37
  private _opened;
38
38
  private _directTransport;
39
39
  private _serverTransport;
40
+ private _pendingServerAudio;
41
+ private _serverAudioController;
40
42
  private _serverSettings;
41
43
  private _dtListeners;
42
44
  private _stListeners;
@@ -91,6 +93,9 @@ export declare class Transport extends EventEmitter {
91
93
  private _onServerAudioMixStall;
92
94
  private _onRemoteDataStats;
93
95
  private _onRemoteTrackAdded;
96
+ private _onServerTrackAdded;
97
+ private _trySwitchToServerAudio;
98
+ private _clearPendingServerAudio;
94
99
  private _onRemoteTrackRemoved;
95
100
  private _onAsrTranscription;
96
101
  private _onSourceChanged;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/calls-sdk",
3
- "version": "2.8.13-dev.957e6761.0",
3
+ "version": "2.8.13-dev.a071796a.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",
@@ -635,10 +635,6 @@ declare namespace External {
635
635
  */
636
636
  function onParticipantIdChanged(prevId: ExternalParticipantId, newId: ExternalParticipantId, conversationId?: string): void;
637
637
  function onVideoSuspendSuggest(bandwidth: number, conversationId?: string): void;
638
- /**
639
- * Успешно применено первое подключение к сигналингу или переподключение.
640
- */
641
- function onSignalingConnected(conversationId: string): void;
642
638
  /**
643
639
  * Одобрено повышение пользователя в зеле ожидания/зале в режиме Audience
644
640
  *
@@ -562,9 +562,7 @@ export type ParamsObject = {
562
562
  */
563
563
  forwardEmptyIceCandidate: boolean;
564
564
  /**
565
- * Получен локальный стрим с камеры/микрофона, в том числе до подключения сигналинга.
566
- * Повторяется после изменения видео (включение, выключение, смена камеры).
567
- * Повторное событие может содержать тот же MediaStream с обновлёнными треками.
565
+ * Получен локальный стрим с камеры/микрофона
568
566
  */
569
567
  onLocalStream?: (stream: MediaStream | null, mediaSettings: MediaSettings, conversationId?: string) => void;
570
568
  /**
@@ -746,8 +744,7 @@ export type ParamsObject = {
746
744
  onLocalVolume?: (volume: number, isMicEnabled: boolean) => void;
747
745
  onJoinStatus?: (available: boolean, chatId: string, conversationId?: string) => void;
748
746
  /**
749
- * Звонок завершён локально. При hangup callback планируется сразу, ровно один раз, без ожидания сети.
750
- * Доставляется асинхронно; Promise hangup отдельно ждёт известную SDK работу по завершению.
747
+ * Звонок был завершен
751
748
  */
752
749
  onHangup?: (type: HangupReason | Error, conversationId: string | null) => void;
753
750
  /**
@@ -936,13 +933,6 @@ export type ParamsObject = {
936
933
  * @param bandwidth текущая полоса пропускания, kbps
937
934
  */
938
935
  onVideoSuspendSuggest?: (bandwidth: number, conversationId?: string) => void;
939
- /**
940
- * Первое подключение к сигналингу или переподключение успешно применено к состоянию звонка.
941
- * Звонок зарегистрирован под conversationId, локальное управление доступно, в том числе в зале ожидания.
942
- * Событие не означает принятие звонка собеседником или готовность WebRTC.
943
- * Callback вызывается асинхронно; к моменту вызова звонок может уже завершиться.
944
- */
945
- onSignalingConnected?: (conversationId: string) => void;
946
936
  /**
947
937
  * Одобрено повышение пользователя в зале ожидания/зале в режиме Audience
948
938
  *
@@ -34,15 +34,13 @@ export interface FastHangupResponse {
34
34
  *
35
35
  * `reason` и `conversationId` идут в signaling hangup.
36
36
  * `onFastHangup` заменяет Calls API `vchat.hangupConversation`, если обработчик передан
37
- * (явный hangup/decline, включая отмену инициализации).
38
- * При `hangup` без обработчика SDK отправляет Calls API beacon, если серверный ID уже известен.
39
- * При `declineCall` без обработчика остаётся только signaling hangup.
40
- * На закрытии вкладки (`pagehide`) SDK всегда использует beacon вместо обработчика.
37
+ * (явный hangup/decline или delayed hangup во время init).
38
+ * Если обработчик не передан, API hangup не вызывается — кроме закрытия вкладки (`pagehide`),
39
+ * где SDK всегда шлёт beacon, и delayed hangup без handler.
41
40
  */
42
41
  export interface HangupParams {
43
42
  /**
44
- * Текущий или исходный ID для локального hangup; declineCall требует текущий ID готового звонка.
45
- * Без ID: активный готовый, затем первый готовый, а для hangup — также единственный готовящийся звонок.
43
+ * ID звонка. Если опущен — завершается текущий активный звонок.
46
44
  */
47
45
  conversationId?: string;
48
46
  /**
@@ -63,6 +61,6 @@ export interface HangupParams {
63
61
  * На `pagehide` не используется — SDK всегда отправляет `sendBeacon`.
64
62
  *
65
63
  * @param params Параметры запроса
66
- * @param signal При `hangup` — отдельный AbortSignal завершения, при `declineCall` — сигнал текущего звонка, если он есть
64
+ * @param signal AbortSignal текущего звонка, если он ещё жив на момент вызова
67
65
  */
68
66
  export type FastHangupHandler = (params: FastHangupParams, signal?: AbortSignal) => Promise<FastHangupResponse>;