@vkontakte/calls-sdk 2.8.11-dev.a36ba1d7.0 → 2.8.11-dev.a56a8981.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.
@@ -0,0 +1,26 @@
1
+ import Conversation from './Conversation';
2
+ import MediaSettings from '../types/MediaSettings';
3
+ export interface HoldableConversation extends Conversation {
4
+ id: string;
5
+ hold(hold: boolean, lastActiveMediaSettings?: MediaSettings): Promise<void>;
6
+ }
7
+ export declare class CallRegistry {
8
+ private _conversations;
9
+ private _activeId;
10
+ private _mutex;
11
+ add(conversation: HoldableConversation): void;
12
+ remove(id: string | null): void;
13
+ get(id: string): HoldableConversation | undefined;
14
+ getActive(): HoldableConversation | null;
15
+ getFirst(): HoldableConversation | null;
16
+ getActiveId(): string | null;
17
+ has(id: string): boolean;
18
+ getAll(): HoldableConversation[];
19
+ get callsLength(): number;
20
+ setActive(id: string): Promise<void>;
21
+ setHold(id: string): Promise<void>;
22
+ switchCall(id: string): Promise<void>;
23
+ clear(): void;
24
+ }
25
+ declare const callRegistry: CallRegistry;
26
+ export { callRegistry };
@@ -16,7 +16,7 @@ import { ConversationData, ConversationOnStartParams } from '../types/Conversati
16
16
  import { ExternalId, ExternalParticipant, ExternalParticipantId, ExternalParticipantListChunk, ExternalUserId } from '../types/ExternalId';
17
17
  import type { FastJoinHandler } from '../types/FastJoin';
18
18
  import MediaModifiers from '../types/MediaModifiers';
19
- import { IVideoDimentions } from '../types/MediaSettings';
19
+ import MediaSettings, { IVideoDimentions } from '../types/MediaSettings';
20
20
  import { IAddMovieParams, IUpdateMovieData } from '../types/MovieShare';
21
21
  import MuteStates from '../types/MuteStates';
22
22
  import { CompositeUserId, IGetParticipantsParameters, ParticipantId, ParticipantStateData } from '../types/Participant';
@@ -37,9 +37,13 @@ export default class Conversation extends EventEmitter {
37
37
  private _conversation;
38
38
  private _myLastRequestedLayouts;
39
39
  private _state;
40
+ private _previousState;
41
+ /** Если пользователь в зале ожидания, холд должен вызываться после промоута */
42
+ private _waitingHallHoldPending;
40
43
  private _participantState;
41
44
  private _participants;
42
45
  private _pendingParticipants;
46
+ private _directTransportIsMaster?;
43
47
  private _transport;
44
48
  private _debugInfo;
45
49
  private readonly _debug;
@@ -52,10 +56,8 @@ export default class Conversation extends EventEmitter {
52
56
  private _isRealTimeAsrRequested;
53
57
  private _serverSettings;
54
58
  private _serverTimeOffset;
55
- private static _current;
56
- private static _activationMutex;
57
- private static _delayedHangup;
58
- private static _abortController;
59
+ private _delayedHangup;
60
+ private _abortController;
59
61
  private readonly _onUnload;
60
62
  private readonly _audioOutput;
61
63
  private readonly _stats;
@@ -73,6 +75,10 @@ export default class Conversation extends EventEmitter {
73
75
  static current(): Conversation | null;
74
76
  static hangupAfterInit(): void;
75
77
  static id(): string | null;
78
+ get id(): string;
79
+ get externalId(): ExternalParticipantId | undefined;
80
+ get mediaSettings(): MediaSettings | undefined;
81
+ get isCallHeld(): boolean;
76
82
  static debugSessionId(): string | null;
77
83
  static getSyncedTime(): number;
78
84
  get debugSessionId(): string | null;
@@ -108,11 +114,12 @@ export default class Conversation extends EventEmitter {
108
114
  setVolume(volume: number): void;
109
115
  updateStatisticsInterval(): void;
110
116
  private _openTransport;
117
+ private _allocateParticipantTransport;
111
118
  private _close;
112
119
  destroy(): Promise<void>;
113
120
  private _getConversationParams;
114
121
  private _setConversationParams;
115
- private _addGeoParamsToEndpoint;
122
+ private _buildSignalingEndpoint;
116
123
  /**
117
124
  * @throws ErrorEvent
118
125
  */
@@ -139,7 +146,12 @@ export default class Conversation extends EventEmitter {
139
146
  private _registerParticipants;
140
147
  /** Установим состояние локальных мьютов */
141
148
  private _registerParticipantLocalMuteState;
142
- private _getStatusByTransportState;
149
+ private _remoteParticipantSessionState;
150
+ private _buildConnectionStatus;
151
+ private _isParticipantSessionStateApplicable;
152
+ private _setTransportStatus;
153
+ private _setSessionState;
154
+ private _emitParticipantTransition;
143
155
  private _registerParticipantInCache;
144
156
  private _getExistedParticipantByIdOrCreate;
145
157
  private _getExternalIdByParticipantId;
@@ -179,6 +191,7 @@ export default class Conversation extends EventEmitter {
179
191
  private _cleanupParticipants;
180
192
  private _cleanupParticipantAgnosticStreams;
181
193
  private _cleanupTransport;
194
+ private _cleanupTransportForHold;
182
195
  private _cleanupSpeakerDetector;
183
196
  private _cleanupSpecListener;
184
197
  private _cleanupSignaling;
@@ -206,15 +219,18 @@ export default class Conversation extends EventEmitter {
206
219
  */
207
220
  changePriorities(priorities: ParticipantPriority[]): Promise<void>;
208
221
  changeParticipantState(state: ParticipantStateData, compositeUserId?: CompositeUserId): Promise<void>;
209
- hold(hold: boolean): Promise<void>;
222
+ hold(hold: boolean, lastActiveMediaSettings?: MediaSettings): Promise<void>;
223
+ private _holdLocally;
224
+ private _resumeLocalMedia;
225
+ private _restoreStateAfterHold;
226
+ private _isWaitingForPromotion;
227
+ private _getWaitingForPromotionStatus;
210
228
  putHandsDown(): Promise<void>;
211
229
  requestKeyFrame(participantStreamDescription: ParticipantStreamDescription): Promise<void | SignalingMessage>;
212
230
  requestTestMode(consumerCommand: string, producerCommand: string): Promise<void>;
213
231
  updateDisplayLayout(layouts: ParticipantLayout[]): Promise<void>;
214
232
  requestDisplayLayout(requests: DisplayLayoutRequest[]): Promise<void>;
215
233
  feedback(key: string): Promise<SignalingMessage>;
216
- userFeedbackStats(userResponse: number, reason?: string, groupCallUsersCount?: number): void;
217
- sendClientEvent(eventType: string, eventData?: Record<string, string | number | boolean>, immediately?: boolean): void;
218
234
  private _changeMediaSettings;
219
235
  private _stopStreaming;
220
236
  /**
@@ -310,11 +326,17 @@ export default class Conversation extends EventEmitter {
310
326
  private _changeMultipleParticipantState;
311
327
  private _invokeRolesChangedCallbackIfNeeded;
312
328
  private _onSignalingNotification;
329
+ private _onSignalingTopologyChanged;
313
330
  private _onPromotionApproved;
314
331
  private _onSignalingReconnect;
315
332
  private _onSignalingFailed;
316
333
  private _onAcceptedCall;
317
334
  private _onHungup;
335
+ private _onSessionState;
336
+ private _reconcileParticipantSessionStates;
337
+ private _updateParticipantExternalId;
338
+ private _updateParticipantSessionState;
339
+ private _emitParticipantEffectiveStatusIfSessionOverridesTransport;
318
340
  private _onAddedParticipant;
319
341
  private _onJoinedParticipant;
320
342
  private _onClosedConversation;
@@ -351,6 +373,7 @@ export default class Conversation extends EventEmitter {
351
373
  private _onPinParticipant;
352
374
  private _onOptionsChanged;
353
375
  private _onNetworkStatus;
376
+ private _emitHeldParticipantsStatus;
354
377
  private _onRemoteStreamSecond;
355
378
  /**
356
379
  * Коллбек, вызывающийся при получении/остановке стрима от AnimojiReceiver
@@ -371,6 +394,7 @@ export default class Conversation extends EventEmitter {
371
394
  private _onSpeakerChanged;
372
395
  private _onTransportStateChanged;
373
396
  private _onTransportLocalStateChanged;
397
+ private _areTransportParticipantsOnHold;
374
398
  private _onRemoteTrackAdded;
375
399
  private _onRemoteTrackRemoved;
376
400
  private _removeAudioTrack;
@@ -400,6 +424,7 @@ export default class Conversation extends EventEmitter {
400
424
  private _onFeedback;
401
425
  private _onDecorativeParticipantIdChanged;
402
426
  private _onVideoSuspendSuggest;
427
+ private _onParticipantHold;
403
428
  private _isMe;
404
429
  private _getMuteStatesForRoomId;
405
430
  private _getMuteStatesForCurrentRoom;
@@ -409,6 +434,8 @@ export default class Conversation extends EventEmitter {
409
434
  private _getParticipants;
410
435
  private _getParticipant;
411
436
  }
437
+ declare function _resetPendingInstance(): void;
438
+ export { _resetPendingInstance };
412
439
  export declare class UpdateDisplayLayoutError extends Error {
413
440
  readonly participantErrors: {
414
441
  externalId: ExternalParticipantId;
@@ -47,6 +47,7 @@ export declare class MediaSource extends EventEmitter {
47
47
  /** Трек аудио эффектов. Не изменяется на протяжении всего времени */
48
48
  private _audioEffectsTrack;
49
49
  private _mediaSettings;
50
+ private _lastMediaSettings;
50
51
  private _videoStatusOnScreenCapturingEnabled;
51
52
  private _effect;
52
53
  private _audioEffectParams;
@@ -67,7 +68,11 @@ export declare class MediaSource extends EventEmitter {
67
68
  getSendAudioTrack(): MediaStreamTrack | null;
68
69
  get isAnimojiRequested(): boolean;
69
70
  addTrackToPeerConnection(pc: RTCPeerConnection, observer: boolean, noDataChannel: boolean): void;
71
+ /**
72
+ * @deprecated Используйте гетер mediaSettings
73
+ */
70
74
  getMediaSettings(): MediaSettings;
75
+ get mediaSettings(): MediaSettings;
71
76
  changeDevice(kind: MediaDeviceKind): Promise<void>;
72
77
  /**
73
78
  * Установка кастомного стрима для видео, например внешний шаринг экрана
@@ -95,6 +100,8 @@ export declare class MediaSource extends EventEmitter {
95
100
  private _setEffect;
96
101
  private _stopEffect;
97
102
  destroy(): void;
103
+ stopLocalMedia(): Promise<void>;
104
+ resumeLocalMedia(lastActiveMediaSettings?: MediaSettings): Promise<void>;
98
105
  toggleScreenCapturing(settings: ScreenCaptureSettings): Promise<void>;
99
106
  disableScreenCapturing(): Promise<void>;
100
107
  private videoTrackMuteHandler;
@@ -12,12 +12,17 @@ export default class SpecListener extends EventEmitter {
12
12
  private readonly _debug;
13
13
  private readonly _logger;
14
14
  private _connectionTimeout;
15
+ private _connectionTimeoutSuppressed;
15
16
  private _volumeTimeout;
16
17
  constructor(transport: Transport, volumesDetector: VolumesDetector, participants: Record<ParticipantId, Participant>, debug?: DebugLogger, logger?: StatsLogger | null);
17
18
  destroy(): void;
18
19
  onChangeRemoteMediaSettings(participantId: ParticipantId, mediaSettings: MediaSettings): void;
20
+ onParticipantHoldChanged(): void;
21
+ private _getConnectionTimeout;
22
+ private _getVolumeTimeout;
19
23
  private _onTransportStateChanged;
20
24
  private _onVolumesDetected;
21
25
  private _onConnectionTimeout;
26
+ private _reportConnectionTimeout;
22
27
  private _onVolumeTimeout;
23
28
  }
@@ -10,20 +10,17 @@ export default class StatsLogger extends BaseLogger {
10
10
  private readonly _conversationIdProvider;
11
11
  private readonly _batchInterval;
12
12
  private _batchedClientStats;
13
- private _batchedClientEvents;
14
13
  private _batchTimeout;
15
14
  private _serverTimeDelta;
16
15
  constructor(api: BaseApi, externalLogger: BaseLogger | null, conversationIdProvider: () => string | null);
17
16
  log(name: StatLog, value?: string, immediately?: boolean): void;
18
17
  logClientStats(data: Record<string, string | number | boolean | undefined | null>, immediately?: boolean): void;
19
- logClientEvent(data: Record<string, string | number | boolean | undefined | null>, immediately?: boolean): void;
20
18
  destroy(): void;
21
19
  private _getConversationId;
22
20
  private _sendBatch;
23
21
  private _startTimeout;
24
22
  private _stopTimeout;
25
23
  private _sendClientStats;
26
- private _sendClientEvents;
27
24
  private _calculateServerTimeDelta;
28
25
  private _now;
29
26
  }
@@ -12,5 +12,7 @@ export default abstract class WorkerBase {
12
12
  protected _sendToWorker(type: string, data?: {
13
13
  [key: string]: any;
14
14
  }, transfer?: any[]): void;
15
+ private _formatWorkerError;
16
+ private _formatWorkerMessageError;
15
17
  static isBrowserSupported(): boolean;
16
18
  }
@@ -27,6 +27,7 @@ export default class DirectTransport extends BaseTransport {
27
27
  private _iceRestartTimeout;
28
28
  private _reconnectionTimeout;
29
29
  private _reconnectionPrevented;
30
+ private _remoteHold;
30
31
  private _lastStat;
31
32
  private _fingerprint;
32
33
  private _neverConnected;
@@ -50,6 +51,10 @@ export default class DirectTransport extends BaseTransport {
50
51
  updateSettings(settings: ServerSettings): void;
51
52
  preventRestart(): void;
52
53
  allowRestart(): void;
54
+ setRemoteHold(hold: boolean): void;
55
+ private _recreatePeerConnection;
56
+ private _createPeerConnection;
57
+ private _disposePeerConnection;
53
58
  setAnimojiTransport(receiver: AnimojiReceiver, sender: AnimojiSender): void;
54
59
  close(error?: Error): void;
55
60
  private _setState;
@@ -55,6 +55,8 @@ export declare class Transport extends EventEmitter {
55
55
  open(participantIds: ParticipantId[], peerId?: string | null, observer?: boolean, force?: boolean): void;
56
56
  close(participantId: ParticipantId): void;
57
57
  destroy(): void;
58
+ holdClose(): void;
59
+ setRemoteHold(hold: boolean): void;
58
60
  getTopology(): TransportTopology;
59
61
  isAllocated(participantId: ParticipantId): boolean;
60
62
  allocated(): string[];
package/default/Api.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- import BaseApi, { ClientEvent, ClientStats } from '../abstract/BaseApi';
1
+ import BaseApi, { 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';
5
5
  import ConversationResponse from '../types/ConversationResponse';
6
6
  import { ExternalId, ExternalParticipantId, ExternalUserId } from '../types/ExternalId';
7
7
  import { CompositeUserId, OkUserId, ParticipantId } from '../types/Participant';
8
+ import PushData from '../types/PushData';
8
9
  export default class Api extends BaseApi {
9
10
  private _userId;
10
11
  private _uuid;
@@ -19,7 +20,6 @@ export default class Api extends BaseApi {
19
20
  private _removeCachedAnonymLogin;
20
21
  private _applyAnonymLogin;
21
22
  logClientStats(items: ClientStats[]): void;
22
- logClientEvents(items: ClientEvent[]): void;
23
23
  uploadDebugLogs(conversationId: string, startTime: number, endTime: number, log: string): Promise<void>;
24
24
  joinConversation(conversationId: string, isVideo?: boolean, chatId?: string): Promise<ConversationResponse>;
25
25
  createConversation(conversationId: string, payload?: string, requireAuthToJoin?: boolean, { onlyAdminCanShareMovie, audienceMode, audioOnly, waitForAdmin, closedConversation, }?: {
@@ -65,4 +65,5 @@ export default class Api extends BaseApi {
65
65
  cleanup(): void;
66
66
  private _getExternalIdsByOkIds;
67
67
  getServerTime(): Promise<number>;
68
+ getInbounds(): Promise<PushData[]>;
68
69
  }
@@ -24,6 +24,7 @@ declare enum SignalingNotification {
24
24
  REALLOC_CON = "realloc-con",
25
25
  AUDIO_ACTIVITY = "audio-activity",
26
26
  SPEAKER_CHANGED = "speaker-changed",
27
+ SESSION_STATE = "session-state",
27
28
  STALLED_ACTIVITY = "stalled-activity",
28
29
  CHAT_MESSAGE = "chat-message",
29
30
  CUSTOM_DATA = "custom-data",
@@ -50,6 +51,7 @@ declare enum SignalingNotification {
50
51
  ASR_STARTED = "asr-started",
51
52
  ASR_STOPPED = "asr-stopped",
52
53
  DECORATIVE_PARTICIPANT_ID_CHANGED = "decorative-participant-id-changed",
53
- VIDEO_SUSPEND_SUGGEST = "video-suspend-suggest"
54
+ VIDEO_SUSPEND_SUGGEST = "video-suspend-suggest",
55
+ HOLD = "hold"
54
56
  }
55
57
  export default SignalingNotification;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/calls-sdk",
3
- "version": "2.8.11-dev.a36ba1d7.0",
3
+ "version": "2.8.11-dev.a56a8981.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",
@@ -0,0 +1,5 @@
1
+ import { TCapabilities } from '../types/Capabilities';
2
+ declare namespace Capabilities {
3
+ function get(): TCapabilities;
4
+ }
5
+ export default Capabilities;