sip-connector 19.9.0 → 20.1.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 (35) hide show
  1. package/README.md +131 -37
  2. package/dist/{@SipConnector-BpypVXj0.js → @SipConnector-BTzZa4hh.js} +862 -554
  3. package/dist/@SipConnector-DL_XXmJn.cjs +1 -0
  4. package/dist/ApiManager/eventNames.d.ts +10 -3
  5. package/dist/CallManager/@CallManager.d.ts +18 -4
  6. package/dist/CallManager/MCUSession.d.ts +0 -1
  7. package/dist/CallManager/RecvSession.d.ts +1 -1
  8. package/dist/CallManager/RemoteStreamsManager.d.ts +20 -5
  9. package/dist/CallManager/RoleManager.d.ts +31 -0
  10. package/dist/CallManager/eventNames.d.ts +9 -2
  11. package/dist/CallManager/index.d.ts +1 -1
  12. package/dist/CallManager/types.d.ts +17 -5
  13. package/dist/ConnectionManager/@ConnectionManager.d.ts +2 -2
  14. package/dist/ConnectionManager/ConfigurationManager.d.ts +6 -1
  15. package/dist/ConnectionManager/ConnectionFlow.d.ts +5 -4
  16. package/dist/ConnectionManager/SipOperations.d.ts +2 -2
  17. package/dist/ConnectionManager/UAFactory.d.ts +4 -4
  18. package/dist/SipConnector/@SipConnector.d.ts +4 -2
  19. package/dist/SipConnector/eventNames.d.ts +1 -1
  20. package/dist/SipConnectorFacade/@SipConnectorFacade.d.ts +0 -2
  21. package/dist/VideoSendingBalancer/__fixtures__/createMockTrack.d.ts +1 -1
  22. package/dist/__fixtures__/RTCPeerConnectionMock.d.ts +1 -1
  23. package/dist/__fixtures__/index.d.ts +4 -4
  24. package/dist/doMock.cjs +1 -1
  25. package/dist/doMock.js +23 -21
  26. package/dist/index.cjs +1 -1
  27. package/dist/index.js +156 -171
  28. package/dist/tools/__fixtures__/connectToServer.d.ts +15 -15
  29. package/dist/tools/__fixtures__/permissions.d.ts +2 -2
  30. package/dist/tools/__fixtures__/processRequest.d.ts +2 -2
  31. package/dist/tools/index.d.ts +1 -0
  32. package/dist/tools/sendOffer.d.ts +39 -0
  33. package/dist/utils/utils.d.ts +1 -1
  34. package/package.json +4 -4
  35. package/dist/@SipConnector-CR3DyIpB.cjs +0 -1
package/README.md CHANGED
@@ -95,11 +95,11 @@ const facade = new SipConnectorFacade(sipConnector);
95
95
  // Подключение с объектом параметров
96
96
  await facade.connectToServer({
97
97
  userAgent: tools.getUserAgent({ appName: 'MyApp' }),
98
- sipWebSocketServerURL: 'wss://sip.example.com/ws',
99
- sipServerUrl: 'sip:example.com',
100
- name: '1001', // SIP URI user part
98
+ sipServerUrl: 'sip.example.com', // WebSocket URL (путь /webrtc/wss/ добавляется автоматически)
99
+ sipServerIp: 'sip.example.com', // SIP сервер IP
100
+ user: '1001', // SIP URI user part
101
101
  password: 'secret',
102
- isRegisteredUser: true, // Включить SIP REGISTER
102
+ register: true, // Включить SIP REGISTER
103
103
  });
104
104
 
105
105
  // Или с функцией для динамического получения параметров
@@ -108,11 +108,11 @@ await facade.connectToServer(async () => {
108
108
  const config = await fetchConnectionConfig();
109
109
  return {
110
110
  userAgent: tools.getUserAgent({ appName: 'MyApp' }),
111
- sipWebSocketServerURL: config.websocketUrl,
112
- sipServerUrl: config.sipUrl,
113
- name: config.username,
111
+ sipServerUrl: config.websocketUrl, // Без пути /webrtc/wss/ - он добавляется автоматически
112
+ sipServerIp: config.sipServerIp,
113
+ user: config.username,
114
114
  password: config.password,
115
- isRegisteredUser: true,
115
+ register: true,
116
116
  };
117
117
  });
118
118
  ```
@@ -126,14 +126,23 @@ const localStream = await navigator.mediaDevices.getUserMedia({
126
126
  video: true,
127
127
  });
128
128
 
129
+ // Подписка на изменения удаленных потоков
130
+ const unsubscribeRemoteStreams = sipConnector.on('call:remote-streams-changed', (event) => {
131
+ console.log('Изменение удаленных потоков:', {
132
+ participantId: event.participantId,
133
+ changeType: event.changeType, // 'added' | 'removed'
134
+ trackId: event.trackId,
135
+ streams: event.streams, // Актуальный массив всех удаленных потоков
136
+ });
137
+
138
+ // Обновление UI с новыми потоками
139
+ updateRemoteStreamsDisplay(event.streams);
140
+ });
141
+
129
142
  // Инициация звонка
130
143
  const pc = await facade.callToServer({
131
144
  conference: '12345',
132
145
  mediaStream: localStream,
133
- setRemoteStreams: (streams) => {
134
- // Обработка удаленных потоков
135
- console.log('Получены удаленные потоки:', streams);
136
- },
137
146
  });
138
147
 
139
148
  // Подписка на WebRTC-статистику
@@ -148,6 +157,7 @@ const unsubscribeStats = facade.onStats(({ outbound, inbound }) => {
148
157
  ```typescript
149
158
  await facade.disconnectFromServer();
150
159
  unsubscribeStats();
160
+ unsubscribeRemoteStreams();
151
161
  ```
152
162
 
153
163
  ---
@@ -157,15 +167,17 @@ unsubscribeStats();
157
167
  ### Обработка входящих вызовов
158
168
 
159
169
  ```typescript
170
+ // Подписка на изменения удаленных потоков (до ответа на звонок)
171
+ const unsubscribeRemoteStreams = sipConnector.on('call:remote-streams-changed', (event) => {
172
+ console.log('Изменение удаленных потоков:', event);
173
+ displayRemoteStreams(event.streams);
174
+ });
175
+
160
176
  // Подписка на входящие события
161
177
  sipConnector.on('incoming-call:incomingCall', () => {
162
178
  // Автоматический ответ с локальным потоком
163
179
  facade.answerToIncomingCall({
164
180
  mediaStream: localStream,
165
- setRemoteStreams: (streams) => {
166
- // Отображение удаленных потоков
167
- displayRemoteStreams(streams);
168
- },
169
181
  });
170
182
  });
171
183
  ```
@@ -277,20 +289,40 @@ await facade.startPresentation({
277
289
  ### Отслеживание перемещений
278
290
 
279
291
  ```typescript
280
- // Подписка на перемещение в зрители
281
- const unsubscribeMoveToSpectators = facade.onMoveToSpectators(() => {
282
- console.log('Участник перемещен в зрители');
283
- updateParticipantRole('spectator');
284
- });
292
+ // Подписка на перемещение в зрители (новый формат с audioId)
293
+ const unsubscribeMoveToSpectators = sipConnector.on(
294
+ 'api:participant:move-request-to-spectators',
295
+ (data) => {
296
+ if (data.isSynthetic) {
297
+ console.log('Участник перемещен в зрители (синтетическое событие)');
298
+ } else {
299
+ console.log('Участник перемещен в зрители с audioId:', data.audioId);
300
+ }
301
+ updateParticipantRole('spectator');
302
+ },
303
+ );
304
+
305
+ // Подписка на перемещение в зрители (старый формат для обратной совместимости)
306
+ const unsubscribeMoveToSpectatorsSynthetic = sipConnector.on(
307
+ 'api:participant:move-request-to-spectators-synthetic',
308
+ () => {
309
+ console.log('Участник перемещен в зрители (старый формат)');
310
+ updateParticipantRole('spectator');
311
+ },
312
+ );
285
313
 
286
314
  // Подписка на перемещение в участники
287
- const unsubscribeMoveToParticipants = facade.onMoveToParticipants(() => {
288
- console.log('Участник перемещен в участники');
289
- updateParticipantRole('participant');
290
- });
315
+ const unsubscribeMoveToParticipants = sipConnector.on(
316
+ 'api:participant:move-request-to-participants',
317
+ () => {
318
+ console.log('Участник перемещен в участники');
319
+ updateParticipantRole('participant');
320
+ },
321
+ );
291
322
 
292
323
  // Отписка при необходимости
293
324
  unsubscribeMoveToSpectators();
325
+ unsubscribeMoveToSpectatorsSynthetic();
294
326
  unsubscribeMoveToParticipants();
295
327
  ```
296
328
 
@@ -317,7 +349,24 @@ facade.onUseLicense((license) => {
317
349
  ### Работа с удаленными потоками
318
350
 
319
351
  ```typescript
320
- // Получение текущих удаленных потоков
352
+ // Подписка на изменения удаленных потоков
353
+ let currentRemoteStreams: MediaStream[] = [];
354
+
355
+ const unsubscribeRemoteStreams = sipConnector.on('call:remote-streams-changed', (event) => {
356
+ console.log('Изменение удаленных потоков:', {
357
+ participantId: event.participantId,
358
+ changeType: event.changeType, // 'added' | 'removed'
359
+ trackId: event.trackId,
360
+ });
361
+
362
+ // Обновляем текущие потоки
363
+ currentRemoteStreams = event.streams;
364
+
365
+ // Обновляем UI
366
+ updateStreamsDisplay(event.streams);
367
+ });
368
+
369
+ // Получение текущих удаленных потоков (синхронный метод)
321
370
  const remoteStreams = facade.getRemoteStreams();
322
371
  if (remoteStreams) {
323
372
  console.log('Активные удаленные потоки:', remoteStreams.length);
@@ -432,15 +481,15 @@ sipConnector.on('api:restart', (data) => {
432
481
 
433
482
  SDK использует **событийно-ориентированную архитектуру** с префиксами для группировки:
434
483
 
435
- | Префикс | Описание | Примеры событий |
436
- | ------------------ | ------------------------ | ----------------------------------------- |
437
- | `connection:*` | События подключения | `connected`, `disconnected` |
438
- | `call:*` | События звонков | `accepted`, `ended`, `failed` |
439
- | `api:*` | События от сервера | `enterRoom`, `useLicense`, `restart` |
440
- | `incoming-call:*` | События входящих звонков | `incomingCall` |
441
- | `presentation:*` | События презентаций | `started`, `stopped` |
442
- | `stats:*` | События статистики | `collected` |
443
- | `video-balancer:*` | События балансировки | `balancing-started`, `parameters-updated` |
484
+ | Префикс | Описание | Примеры событий |
485
+ | ------------------ | ------------------------ | ------------------------------------------------------------------------------ |
486
+ | `connection:*` | События подключения | `connected`, `disconnected` |
487
+ | `call:*` | События звонков | `accepted`, `ended`, `failed`, `remote-streams-changed` |
488
+ | `api:*` | События от сервера | `enterRoom`, `useLicense`, `restart`, `participant:move-request-to-spectators` |
489
+ | `incoming-call:*` | События входящих звонков | `incomingCall` |
490
+ | `presentation:*` | События презентаций | `started`, `stopped` |
491
+ | `stats:*` | События статистики | `collected` |
492
+ | `video-balancer:*` | События балансировки | `balancing-started`, `parameters-updated` |
444
493
 
445
494
  ### Основные события
446
495
 
@@ -475,8 +524,50 @@ sipConnector.on('api:useLicense', (license) => {
475
524
  sipConnector.on('api:restart', (data) => {
476
525
  console.log('Событие restart от сервера:', data);
477
526
  });
527
+
528
+ // Изменения удаленных потоков
529
+ sipConnector.on('call:remote-streams-changed', (event) => {
530
+ console.log('Изменение удаленных потоков:', {
531
+ participantId: event.participantId,
532
+ changeType: event.changeType, // 'added' | 'removed'
533
+ trackId: event.trackId,
534
+ streams: event.streams,
535
+ });
536
+ });
537
+
538
+ // Перемещение участников
539
+ sipConnector.on('api:participant:move-request-to-spectators', (data) => {
540
+ if (data.isSynthetic) {
541
+ console.log('Перемещение в зрители (синтетическое)');
542
+ } else {
543
+ console.log('Перемещение в зрители с audioId:', data.audioId);
544
+ }
545
+ });
546
+
547
+ sipConnector.on('api:participant:move-request-to-spectators-synthetic', () => {
548
+ console.log('Перемещение в зрители (старый формат для обратной совместимости)');
549
+ });
478
550
  ```
479
551
 
552
+ ### Детальная таблица событий
553
+
554
+ #### События звонков (`call:*`)
555
+
556
+ | Событие | Описание | Данные |
557
+ | ----------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------ |
558
+ | `call:accepted` | Звонок принят | - |
559
+ | `call:ended` | Звонок завершен | `EndEvent` |
560
+ | `call:failed` | Звонок завершился с ошибкой | `EndEvent` |
561
+ | `call:remote-streams-changed` | Изменение удаленных потоков | `{ participantId: string, changeType: 'added' \| 'removed', trackId: string, streams: MediaStream[] }` |
562
+
563
+ #### События участников (`api:participant:*`)
564
+
565
+ | Событие | Описание | Данные |
566
+ | ------------------------------------------------------ | ------------------------------ | ------------------------------------------------------------------ |
567
+ | `api:participant:move-request-to-spectators` | Перемещение в зрители (новый) | `{ isSynthetic: true } \| { isSynthetic: false, audioId: string }` |
568
+ | `api:participant:move-request-to-spectators-synthetic` | Перемещение в зрители (старый) | - |
569
+ | `api:participant:move-request-to-participants` | Перемещение в участники | - |
570
+
480
571
  ### Продвинутые паттерны
481
572
 
482
573
  ```typescript
@@ -759,8 +850,11 @@ sipConnector.startAutoConnect({
759
850
  getParameters: async () => {
760
851
  return {
761
852
  displayName: 'displayName',
762
- sipWebSocketServerURL: 'wss://example.com/ws',
763
- sipServerUrl: 'sipServerUrl',
853
+ sipServerUrl: 'example.com', // Путь /webrtc/wss/ добавляется автоматически
854
+ sipServerIp: 'sip.example.com',
855
+ user: 'user',
856
+ password: 'password',
857
+ register: true,
764
858
  };
765
859
  },
766
860
  // Проверяет готовность к подключению