@azure/communication-react 1.11.0-alpha-202312060012 → 1.11.0-alpha-202312080012

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 (119) hide show
  1. package/dist/communication-react.d.ts +66 -63
  2. package/dist/dist-cjs/communication-react/index.js +203 -124
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetry.js +3 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetry.js.map +1 -1
  6. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  7. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  8. package/dist/dist-esm/calling-component-bindings/src/getRemoteParticipantsExcludingConsumers.d.ts +1 -22
  9. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.d.ts +2 -2
  10. package/dist/dist-esm/calling-component-bindings/src/handlers/createTeamsCallHandlers.d.ts +2 -2
  11. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.d.ts +2 -2
  12. package/dist/dist-esm/calling-component-bindings/src/utils/videoGalleryUtils.d.ts +2 -2
  13. package/dist/dist-esm/calling-stateful-client/src/CallContext.d.ts +2 -2
  14. package/dist/dist-esm/calling-stateful-client/src/CallContext.js +22 -7
  15. package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
  16. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js +23 -45
  17. package/dist/dist-esm/calling-stateful-client/src/CallSubscriber.js.map +1 -1
  18. package/dist/dist-esm/calling-stateful-client/src/InternalCallContext.d.ts +9 -11
  19. package/dist/dist-esm/calling-stateful-client/src/InternalCallContext.js +28 -13
  20. package/dist/dist-esm/calling-stateful-client/src/InternalCallContext.js.map +1 -1
  21. package/dist/dist-esm/calling-stateful-client/src/StatefulCallClient.d.ts +2 -2
  22. package/dist/dist-esm/calling-stateful-client/src/StreamUtils.js +52 -40
  23. package/dist/dist-esm/calling-stateful-client/src/StreamUtils.js.map +1 -1
  24. package/dist/dist-esm/calling-stateful-client/src/StreamUtilsLogging.d.ts +1 -1
  25. package/dist/dist-esm/calling-stateful-client/src/StreamUtilsLogging.js.map +1 -1
  26. package/dist/dist-esm/chat-stateful-client/src/StatefulChatClient.d.ts +3 -3
  27. package/dist/dist-esm/chat-stateful-client/src/convertChatMessage.d.ts +1 -1
  28. package/dist/dist-esm/chat-stateful-client/src/iterators/createDecoratedListMessages.d.ts +1 -1
  29. package/dist/dist-esm/chat-stateful-client/src/iterators/createDecoratedListParticipants.d.ts +1 -1
  30. package/dist/dist-esm/chat-stateful-client/src/iterators/createDecoratedListThreads.d.ts +1 -1
  31. package/dist/dist-esm/communication-react/src/mergedHooks.d.ts +2 -2
  32. package/dist/dist-esm/react-components/src/components/DevicesButton.d.ts +1 -1
  33. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenu.js.map +1 -1
  34. package/dist/dist-esm/react-components/src/components/ErrorBar.js.map +1 -1
  35. package/dist/dist-esm/react-components/src/components/FileCard.js.map +1 -1
  36. package/dist/dist-esm/react-components/src/components/LocalVideoCameraButton.d.ts +2 -0
  37. package/dist/dist-esm/react-components/src/components/LocalVideoCameraButton.js +2 -2
  38. package/dist/dist-esm/react-components/src/components/LocalVideoCameraButton.js.map +1 -1
  39. package/dist/dist-esm/react-components/src/components/LocalVideoTile.d.ts +1 -1
  40. package/dist/dist-esm/react-components/src/components/ModalClone/ModalClone.js.map +1 -1
  41. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts +1 -1
  42. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js.map +1 -1
  43. package/dist/dist-esm/react-components/src/components/VideoEffects/VideoBackgroundEffectsPicker.js.map +1 -1
  44. package/dist/dist-esm/react-components/src/components/VideoEffects/VideoEffectsItem.js.map +1 -1
  45. package/dist/dist-esm/react-components/src/components/VideoGallery/RemoteScreenShare.d.ts +1 -1
  46. package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.d.ts +1 -1
  47. package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts +1 -1
  48. package/dist/dist-esm/react-components/src/components/VideoGallery.js +8 -6
  49. package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
  50. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  51. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js +14 -0
  52. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js.map +1 -1
  53. package/dist/dist-esm/react-components/src/components/styles/VideoGallery.styles.d.ts +1 -1
  54. package/dist/dist-esm/react-components/src/components/styles/VideoGallery.styles.js +3 -3
  55. package/dist/dist-esm/react-components/src/components/styles/VideoGallery.styles.js.map +1 -1
  56. package/dist/dist-esm/react-components/src/components/utils/common.d.ts +1 -1
  57. package/dist/dist-esm/react-components/src/components/utils/getParticipantsWhoHaveReadMessage.d.ts +4 -4
  58. package/dist/dist-esm/react-components/src/components/utils/keyboardNavigation.d.ts +1 -2
  59. package/dist/dist-esm/react-components/src/components/utils.d.ts +1 -1
  60. package/dist/dist-esm/react-components/src/theming/v9ThemeShim.d.ts +1 -1
  61. package/dist/dist-esm/react-components/src/theming/v9ThemeShim.js +1 -1
  62. package/dist/dist-esm/react-components/src/theming/v9ThemeShim.js.map +1 -1
  63. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.d.ts +3 -3
  64. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +2 -0
  65. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  66. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +1 -1
  67. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LobbyTile.d.ts +1 -0
  68. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LobbyTile.js +8 -2
  69. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LobbyTile.js.map +1 -1
  70. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/useVideoEffectsPane.d.ts +1 -1
  71. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.d.ts +1 -1
  72. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +1 -2
  73. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  74. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.js +1 -1
  75. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.js.map +1 -1
  76. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/LocalVideoTileSelector.d.ts +1 -23
  77. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/activeVideoBackgroundEffectSelector.d.ts +1 -23
  78. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/callStatusSelector.d.ts +1 -23
  79. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/capabilitiesChangedInfoAndRoleSelector.d.ts +1 -23
  80. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/complianceBannerSelector.d.ts +1 -23
  81. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/deviceCountSelector.d.ts +1 -23
  82. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/devicePermissionSelector.d.ts +1 -23
  83. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/dominantRemoteParticipantSelector.d.ts +1 -23
  84. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/lobbySelector.d.ts +1 -23
  85. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localAndRemotePIPSelector.d.ts +1 -23
  86. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localPreviewSelector.d.ts +1 -23
  87. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localVideoStreamSelector.d.ts +1 -23
  88. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/mediaGallerySelector.d.ts +2 -46
  89. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/mutedNotificationSelector.d.ts +1 -23
  90. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/networkReconnectTileSelector.d.ts +1 -23
  91. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.d.ts +3 -3
  92. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js +3 -2
  93. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js.map +1 -1
  94. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallPage.styles.d.ts +1 -1
  95. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LobbyTile.styles.d.ts +5 -1
  96. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LobbyTile.styles.js +6 -0
  97. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LobbyTile.styles.js.map +1 -1
  98. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts +9 -1
  99. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +8 -4
  100. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  101. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/useConsoleErrors.d.ts +6 -0
  102. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/useConsoleErrors.js +31 -0
  103. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/useConsoleErrors.js.map +1 -0
  104. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +3 -3
  105. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  106. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.d.ts +6 -6
  107. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.d.ts +1 -1
  108. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatHeader.d.ts +3 -10
  109. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.d.ts +1 -1
  110. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/fileUploadsSelector.d.ts +1 -8
  111. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.styles.d.ts +1 -1
  112. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CustomButton.d.ts +4 -4
  113. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CustomButton.js.map +1 -1
  114. package/dist/dist-esm/react-composites/src/composites/common/ConvertContextualMenuItemToDrawerMenuItem.js.map +1 -1
  115. package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.js.map +1 -1
  116. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +45 -45
  117. package/dist/dist-esm/react-composites/src/composites/common/styles/Pane.styles.d.ts +1 -1
  118. package/dist/dist-esm/react-composites/src/composites/common/utils.d.ts +1 -1
  119. package/package.json +1 -1
@@ -39,9 +39,8 @@ export class CallSubscriber {
39
39
  this._call.feature(Features.DominantSpeakers).on('dominantSpeakersChanged', this.dominantSpeakersChanged);
40
40
  /* @conditional-compile-remove(total-participant-count) */
41
41
  this._call.on('totalParticipantCountChanged', this.totalParticipantCountChangedHandler);
42
- // At time of writing only one LocalVideoStream is supported by SDK.
43
- if (this._call.localVideoStreams.length > 0) {
44
- this._internalContext.setLocalRenderInfo(this._callIdRef.callId, this._call.localVideoStreams[0], 'NotRendered', undefined);
42
+ for (const localVideoStream of this._call.localVideoStreams) {
43
+ this._internalContext.setLocalRenderInfo(this._callIdRef.callId, localVideoStream.mediaStreamType, localVideoStream, 'NotRendered', undefined);
45
44
  }
46
45
  if (this._call.remoteParticipants.length > 0) {
47
46
  this._call.remoteParticipants.forEach((participant) => {
@@ -70,10 +69,11 @@ export class CallSubscriber {
70
69
  this._participantSubscribers.clear();
71
70
  // If we are unsubscribing that means we no longer want to display any video for this call (callEnded or callAgent
72
71
  // disposed) and we should not be updating it any more. So if video is rendering we stop rendering.
73
- if (this._call.localVideoStreams && this._call.localVideoStreams[0]) {
74
- disposeView(this._context, this._internalContext, this._callIdRef.callId, undefined, convertSdkLocalStreamToDeclarativeLocalStream(this._call.localVideoStreams[0]));
72
+ for (const localVideoStream of this._call.localVideoStreams) {
73
+ const mediaStreamType = localVideoStream.mediaStreamType;
74
+ disposeView(this._context, this._internalContext, this._callIdRef.callId, undefined, convertSdkLocalStreamToDeclarativeLocalStream(localVideoStream));
75
+ this._internalContext.deleteLocalRenderInfo(this._callIdRef.callId, mediaStreamType);
75
76
  }
76
- this._internalContext.deleteLocalRenderInfo(this._callIdRef.callId);
77
77
  this._diagnosticsSubscriber.unsubscribe();
78
78
  this._recordingSubscriber.unsubscribe();
79
79
  this._transcriptionSubscriber.unsubscribe();
@@ -137,49 +137,27 @@ export class CallSubscriber {
137
137
  };
138
138
  this.localVideoStreamsUpdated = (event) => {
139
139
  var _a, _b;
140
- // Exclude screenshare streams from added local video streams
141
- const addedLocalVideoStreamsExcludingScreenShare = event.added.filter((localVideoStream) => localVideoStream.mediaStreamType !== 'ScreenSharing');
142
- // At time of writing only one LocalVideoStream is supported by SDK.
143
- if (addedLocalVideoStreamsExcludingScreenShare.length > 0) {
140
+ for (const localVideoStream of event.added) {
141
+ const mediaStreamType = localVideoStream.mediaStreamType;
144
142
  // IMPORTANT: The internalContext should be set before context. This is done to ensure that the internal context
145
143
  // has the required data when component re-renders due to external state changes.
146
- this._internalContext.setLocalRenderInfo(this._callIdRef.callId, addedLocalVideoStreamsExcludingScreenShare[0], 'NotRendered', undefined);
147
- const currentLocalVideoStreams = this._call.localVideoStreams;
148
- const localVideoStreams = addedLocalVideoStreamsExcludingScreenShare
149
- .concat(currentLocalVideoStreams)
150
- .map((stream) => convertSdkLocalStreamToDeclarativeLocalStream(stream));
151
- this._context.setCallLocalVideoStream(this._callIdRef.callId, localVideoStreams);
152
- /* @conditional-compile-remove(video-background-effects) */
153
- {
154
- // Subscribe to video effect changes
155
- const localVideoStreamKey = event.added[0].source.id;
156
- (_a = this._localVideoStreamVideoEffectsSubscribers.get(localVideoStreamKey)) === null || _a === void 0 ? void 0 : _a.unsubscribe();
157
- this._localVideoStreamVideoEffectsSubscribers.set(localVideoStreamKey, new LocalVideoStreamVideoEffectsSubscriber({
158
- parent: this._callIdRef,
159
- context: this._context,
160
- localVideoStream: this._call.localVideoStreams[0],
161
- localVideoStreamEffectsAPI: this._call.localVideoStreams[0].feature(Features.VideoEffects)
162
- }));
163
- }
144
+ this._internalContext.setLocalRenderInfo(this._callIdRef.callId, mediaStreamType, localVideoStream, 'NotRendered', undefined);
145
+ // Subscribe to video effect changes
146
+ (_a = this._localVideoStreamVideoEffectsSubscribers.get(mediaStreamType)) === null || _a === void 0 ? void 0 : _a.unsubscribe();
147
+ this._localVideoStreamVideoEffectsSubscribers.set(mediaStreamType, new LocalVideoStreamVideoEffectsSubscriber({
148
+ parent: this._callIdRef,
149
+ context: this._context,
150
+ localVideoStream: localVideoStream,
151
+ localVideoStreamEffectsAPI: localVideoStream.feature(Features.VideoEffects)
152
+ }));
164
153
  }
165
- if (event.removed.length > 0) {
166
- /* @conditional-compile-remove(video-background-effects) */
167
- {
168
- const localVideoStreamKey = event.removed[0].source.id;
169
- (_b = this._localVideoStreamVideoEffectsSubscribers.get(localVideoStreamKey)) === null || _b === void 0 ? void 0 : _b.unsubscribe();
170
- }
171
- disposeView(this._context, this._internalContext, this._callIdRef.callId, undefined, convertSdkLocalStreamToDeclarativeLocalStream(event.removed[0]));
172
- /**
173
- * This check is to make sure that we are not deleting the local render info for the local video stream if there is one.
174
- *
175
- * TODO: we need to make sure the we are supporting the local screenshare stream that is now being tracked. This is a stop gap solution.
176
- */
177
- if (event.removed[0].mediaStreamType === 'ScreenSharing') {
178
- return;
179
- }
180
- this._internalContext.deleteLocalRenderInfo(this._callIdRef.callId);
181
- this._context.setCallLocalVideoStream(this._callIdRef.callId, []);
154
+ for (const localVideoStream of event.removed) {
155
+ const mediaStreamType = localVideoStream.mediaStreamType;
156
+ (_b = this._localVideoStreamVideoEffectsSubscribers.get(mediaStreamType)) === null || _b === void 0 ? void 0 : _b.unsubscribe();
157
+ disposeView(this._context, this._internalContext, this._callIdRef.callId, undefined, convertSdkLocalStreamToDeclarativeLocalStream(localVideoStream));
158
+ this._internalContext.deleteLocalRenderInfo(this._callIdRef.callId, mediaStreamType);
182
159
  }
160
+ this._context.setCallLocalVideoStream(this._callIdRef.callId, event.added.map(convertSdkLocalStreamToDeclarativeLocalStream), event.removed.map(convertSdkLocalStreamToDeclarativeLocalStream));
183
161
  };
184
162
  this.dominantSpeakersChanged = () => {
185
163
  const dominantSpeakers = this._call.feature(Features.DominantSpeakers).dominantSpeakers;
@@ -1 +1 @@
1
- {"version":3,"file":"CallSubscriber.js","sourceRoot":"","sources":["../../../../../calling-stateful-client/src/CallSubscriber.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Features, LocalVideoStream, RemoteParticipant } from '@azure/communication-calling';\n/* @conditional-compile-remove(close-captions) */\nimport { TeamsCaptions } from '@azure/communication-calling';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\nimport { CallCommon } from './BetaToStableTypes';\nimport { CallContext } from './CallContext';\nimport { CallIdRef } from './CallIdRef';\n/* @conditional-compile-remove(close-captions) */\nimport { CaptionsSubscriber } from './CaptionsSubscriber';\nimport {\n convertSdkLocalStreamToDeclarativeLocalStream,\n convertSdkParticipantToDeclarativeParticipant\n} from './Converter';\nimport { InternalCallContext } from './InternalCallContext';\n/* @conditional-compile-remove(video-background-effects) */\nimport { LocalVideoStreamVideoEffectsSubscriber } from './LocalVideoStreamVideoEffectsSubscriber';\nimport { ParticipantSubscriber } from './ParticipantSubscriber';\nimport { RecordingSubscriber } from './RecordingSubscriber';\nimport { disposeView } from './StreamUtils';\nimport { TranscriptionSubscriber } from './TranscriptionSubscriber';\nimport { UserFacingDiagnosticsSubscriber } from './UserFacingDiagnosticsSubscriber';\n/* @conditional-compile-remove(raise-hand) */\nimport { RaiseHandSubscriber } from './RaiseHandSubscriber';\n/* @conditional-compile-remove(optimal-video-count) */\nimport { OptimalVideoCountSubscriber } from './OptimalVideoCountSubscriber';\n/* @conditional-compile-remove(capabilities) */\nimport { CapabilitiesSubscriber } from './CapabilitiesSubscriber';\n\n/**\n * Keeps track of the listeners assigned to a particular call because when we get an event from SDK, it doesn't tell us\n * which call it is for. If we keep track of this then we know which call in the state that needs an update and also\n * which property of that call. Also we can use this when unregistering to a call.\n */\nexport class CallSubscriber {\n private _call: CallCommon;\n private _callIdRef: CallIdRef;\n private _context: CallContext;\n private _internalContext: InternalCallContext;\n\n private _diagnosticsSubscriber: UserFacingDiagnosticsSubscriber;\n private _participantSubscribers: Map<string, ParticipantSubscriber>;\n private _recordingSubscriber: RecordingSubscriber;\n private _transcriptionSubscriber: TranscriptionSubscriber;\n /* @conditional-compile-remove(optimal-video-count) */\n private _optimalVideoCountSubscriber: OptimalVideoCountSubscriber;\n /* @conditional-compile-remove(close-captions) */\n private _captionsSubscriber?: CaptionsSubscriber;\n /* @conditional-compile-remove(raise-hand) */\n private _raiseHandSubscriber?: RaiseHandSubscriber;\n /* @conditional-compile-remove(video-background-effects) */\n private _localVideoStreamVideoEffectsSubscribers: Map<string, LocalVideoStreamVideoEffectsSubscriber>;\n /* @conditional-compile-remove(capabilities) */\n private _capabilitiesSubscriber: CapabilitiesSubscriber;\n\n constructor(call: CallCommon, context: CallContext, internalContext: InternalCallContext) {\n this._call = call;\n this._callIdRef = { callId: call.id };\n this._context = context;\n this._internalContext = internalContext;\n\n this._diagnosticsSubscriber = new UserFacingDiagnosticsSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.UserFacingDiagnostics)\n );\n this._participantSubscribers = new Map<string, ParticipantSubscriber>();\n this._recordingSubscriber = new RecordingSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.Recording)\n );\n this._transcriptionSubscriber = new TranscriptionSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.Transcription)\n );\n /* @conditional-compile-remove(raise-hand) */\n this._raiseHandSubscriber = new RaiseHandSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.RaiseHand)\n );\n /* @conditional-compile-remove(optimal-video-count) */\n this._optimalVideoCountSubscriber = new OptimalVideoCountSubscriber({\n callIdRef: this._callIdRef,\n context: this._context,\n localOptimalVideoCountFeature: this._call.feature(Features.OptimalVideoCount)\n });\n /* @conditional-compile-remove(video-background-effects) */\n this._localVideoStreamVideoEffectsSubscribers = new Map();\n\n /* @conditional-compile-remove(capabilities) */\n this._capabilitiesSubscriber = new CapabilitiesSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.Capabilities)\n );\n\n this.subscribe();\n }\n\n private subscribe = (): void => {\n this._call.on('stateChanged', this.stateChanged);\n /* @conditional-compile-remove(close-captions) */\n this._call.on('stateChanged', this.initCaptionSubscriber);\n this._call.on('idChanged', this.idChanged);\n this._call.on('isScreenSharingOnChanged', this.isScreenSharingOnChanged);\n this._call.on('remoteParticipantsUpdated', this.remoteParticipantsUpdated);\n this._call.on('localVideoStreamsUpdated', this.localVideoStreamsUpdated);\n this._call.on('isMutedChanged', this.isMuteChanged);\n /* @conditional-compile-remove(rooms) */ /* @conditional-compile-remove(capabilities) */\n this._call.on('roleChanged', this.callRoleChangedHandler);\n this._call.feature(Features.DominantSpeakers).on('dominantSpeakersChanged', this.dominantSpeakersChanged);\n /* @conditional-compile-remove(total-participant-count) */\n this._call.on('totalParticipantCountChanged', this.totalParticipantCountChangedHandler);\n\n // At time of writing only one LocalVideoStream is supported by SDK.\n if (this._call.localVideoStreams.length > 0) {\n this._internalContext.setLocalRenderInfo(\n this._callIdRef.callId,\n this._call.localVideoStreams[0],\n 'NotRendered',\n undefined\n );\n }\n\n if (this._call.remoteParticipants.length > 0) {\n this._call.remoteParticipants.forEach((participant: RemoteParticipant) => {\n this.addParticipantListener(participant);\n });\n\n this._context.setCallRemoteParticipants(\n this._callIdRef.callId,\n this._call.remoteParticipants.map(convertSdkParticipantToDeclarativeParticipant),\n []\n );\n }\n };\n\n public unsubscribe = (): void => {\n this._call.off('stateChanged', this.stateChanged);\n /* @conditional-compile-remove(close-captions) */\n this._call.off('stateChanged', this.initCaptionSubscriber);\n this._call.off('idChanged', this.idChanged);\n this._call.off('isScreenSharingOnChanged', this.isScreenSharingOnChanged);\n this._call.off('remoteParticipantsUpdated', this.remoteParticipantsUpdated);\n this._call.off('localVideoStreamsUpdated', this.localVideoStreamsUpdated);\n this._call.off('isMutedChanged', this.isMuteChanged);\n /* @conditional-compile-remove(rooms) */ /* @conditional-compile-remove(capabilities) */\n this._call.off('roleChanged', this.callRoleChangedHandler);\n /* @conditional-compile-remove(total-participant-count) */\n this._call.off('totalParticipantCountChanged', this.totalParticipantCountChangedHandler);\n\n this._participantSubscribers.forEach((participantSubscriber: ParticipantSubscriber) => {\n participantSubscriber.unsubscribe();\n });\n this._participantSubscribers.clear();\n\n // If we are unsubscribing that means we no longer want to display any video for this call (callEnded or callAgent\n // disposed) and we should not be updating it any more. So if video is rendering we stop rendering.\n if (this._call.localVideoStreams && this._call.localVideoStreams[0]) {\n disposeView(\n this._context,\n this._internalContext,\n this._callIdRef.callId,\n undefined,\n convertSdkLocalStreamToDeclarativeLocalStream(this._call.localVideoStreams[0])\n );\n }\n\n this._internalContext.deleteLocalRenderInfo(this._callIdRef.callId);\n\n this._diagnosticsSubscriber.unsubscribe();\n this._recordingSubscriber.unsubscribe();\n this._transcriptionSubscriber.unsubscribe();\n /* @conditional-compile-remove(optimal-video-count) */\n this._optimalVideoCountSubscriber.unsubscribe();\n /* @conditional-compile-remove(close-captions) */\n this._captionsSubscriber?.unsubscribe();\n /* @conditional-compile-remove(raise-hand) */\n this._raiseHandSubscriber?.unsubscribe();\n /* @conditional-compile-remove(capabilities) */\n this._capabilitiesSubscriber.unsubscribe();\n };\n\n private addParticipantListener(participant: RemoteParticipant): void {\n const participantKey = toFlatCommunicationIdentifier(participant.identifier);\n this._participantSubscribers.get(participantKey)?.unsubscribe();\n this._participantSubscribers.set(\n participantKey,\n new ParticipantSubscriber(this._callIdRef, participant, this._context, this._internalContext)\n );\n }\n\n private removeParticipantListener(participant: RemoteParticipant): void {\n const participantKey = toFlatCommunicationIdentifier(participant.identifier);\n const participantSubscriber = this._participantSubscribers.get(participantKey);\n if (participantSubscriber) {\n participantSubscriber.unsubscribe();\n this._participantSubscribers.delete(participantKey);\n }\n }\n\n private stateChanged = (): void => {\n this._context.setCallState(this._callIdRef.callId, this._call.state);\n };\n\n /* @conditional-compile-remove(close-captions) */\n private initCaptionSubscriber = (): void => {\n // subscribe to captions here so that we don't call captions when call is not initialized\n if (this._call.state === 'Connected' && !this._captionsSubscriber) {\n if (this._call.feature(Features.Captions).captions.kind === 'TeamsCaptions') {\n this._captionsSubscriber = new CaptionsSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.Captions).captions as TeamsCaptions\n );\n this._call.off('stateChanged', this.initCaptionSubscriber);\n }\n }\n };\n\n private idChanged = (): void => {\n this._internalContext.setCallId(this._call.id, this._callIdRef.callId);\n this._context.setCallId(this._call.id, this._callIdRef.callId);\n this._callIdRef.callId = this._call.id;\n };\n\n private isScreenSharingOnChanged = (): void => {\n this._context.setCallIsScreenSharingOn(this._callIdRef.callId, this._call.isScreenSharingOn);\n };\n\n private isMuteChanged = (): void => {\n this._context.setCallIsMicrophoneMuted(this._callIdRef.callId, this._call.isMuted);\n };\n\n /* @conditional-compile-remove(rooms) */ /* @conditional-compile-remove(capabilities) */\n private callRoleChangedHandler = (): void => {\n this._context.setRole(this._callIdRef.callId, this._call.role);\n };\n\n /* @conditional-compile-remove(total-participant-count) */\n private totalParticipantCountChangedHandler = (): void => {\n this._context.setTotalParticipantCount(this._callIdRef.callId, this._call.totalParticipantCount);\n };\n\n private remoteParticipantsUpdated = (event: { added: RemoteParticipant[]; removed: RemoteParticipant[] }): void => {\n event.added.forEach((participant: RemoteParticipant) => {\n this.addParticipantListener(participant);\n });\n event.removed.forEach((participant: RemoteParticipant) => {\n this.removeParticipantListener(participant);\n });\n\n // Remove any added participants from remoteParticipantsEnded if they are there and add any removed participants to\n // remoteParticipantsEnded.\n this._context.setCallRemoteParticipantsEnded(\n this._callIdRef.callId,\n event.removed.map(convertSdkParticipantToDeclarativeParticipant),\n event.added.map((participant: RemoteParticipant) => {\n return toFlatCommunicationIdentifier(participant.identifier);\n })\n );\n\n // Add added participants to remoteParticipants and remove removed participants from remoteParticipants.\n this._context.setCallRemoteParticipants(\n this._callIdRef.callId,\n event.added.map(convertSdkParticipantToDeclarativeParticipant),\n event.removed.map((participant: RemoteParticipant) => {\n return toFlatCommunicationIdentifier(participant.identifier);\n })\n );\n };\n\n private localVideoStreamsUpdated = (event: { added: LocalVideoStream[]; removed: LocalVideoStream[] }): void => {\n // Exclude screenshare streams from added local video streams\n const addedLocalVideoStreamsExcludingScreenShare = event.added.filter(\n (localVideoStream) => localVideoStream.mediaStreamType !== 'ScreenSharing'\n );\n // At time of writing only one LocalVideoStream is supported by SDK.\n if (addedLocalVideoStreamsExcludingScreenShare.length > 0) {\n // IMPORTANT: The internalContext should be set before context. This is done to ensure that the internal context\n // has the required data when component re-renders due to external state changes.\n this._internalContext.setLocalRenderInfo(\n this._callIdRef.callId,\n addedLocalVideoStreamsExcludingScreenShare[0],\n 'NotRendered',\n undefined\n );\n const currentLocalVideoStreams = this._call.localVideoStreams;\n const localVideoStreams = addedLocalVideoStreamsExcludingScreenShare\n .concat(currentLocalVideoStreams)\n .map((stream) => convertSdkLocalStreamToDeclarativeLocalStream(stream));\n this._context.setCallLocalVideoStream(this._callIdRef.callId, localVideoStreams);\n\n /* @conditional-compile-remove(video-background-effects) */\n {\n // Subscribe to video effect changes\n const localVideoStreamKey = event.added[0].source.id;\n this._localVideoStreamVideoEffectsSubscribers.get(localVideoStreamKey)?.unsubscribe();\n this._localVideoStreamVideoEffectsSubscribers.set(\n localVideoStreamKey,\n new LocalVideoStreamVideoEffectsSubscriber({\n parent: this._callIdRef,\n context: this._context,\n localVideoStream: this._call.localVideoStreams[0],\n localVideoStreamEffectsAPI: this._call.localVideoStreams[0].feature(Features.VideoEffects)\n })\n );\n }\n }\n if (event.removed.length > 0) {\n /* @conditional-compile-remove(video-background-effects) */\n {\n const localVideoStreamKey = event.removed[0].source.id;\n this._localVideoStreamVideoEffectsSubscribers.get(localVideoStreamKey)?.unsubscribe();\n }\n disposeView(\n this._context,\n this._internalContext,\n this._callIdRef.callId,\n undefined,\n convertSdkLocalStreamToDeclarativeLocalStream(event.removed[0])\n );\n /**\n * This check is to make sure that we are not deleting the local render info for the local video stream if there is one.\n *\n * TODO: we need to make sure the we are supporting the local screenshare stream that is now being tracked. This is a stop gap solution.\n */\n if (event.removed[0].mediaStreamType === 'ScreenSharing') {\n return;\n }\n this._internalContext.deleteLocalRenderInfo(this._callIdRef.callId);\n this._context.setCallLocalVideoStream(this._callIdRef.callId, []);\n }\n };\n\n private dominantSpeakersChanged = (): void => {\n const dominantSpeakers = this._call.feature(Features.DominantSpeakers).dominantSpeakers;\n this._context.setCallDominantSpeakers(this._callIdRef.callId, dominantSpeakers);\n };\n}\n\"../../acs-ui-common/src\""]}
1
+ {"version":3,"file":"CallSubscriber.js","sourceRoot":"","sources":["../../../../../calling-stateful-client/src/CallSubscriber.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Features, LocalVideoStream, RemoteParticipant } from '@azure/communication-calling';\n/* @conditional-compile-remove(close-captions) */\nimport { TeamsCaptions } from '@azure/communication-calling';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\nimport { CallCommon } from './BetaToStableTypes';\nimport { CallContext } from './CallContext';\nimport { CallIdRef } from './CallIdRef';\n/* @conditional-compile-remove(close-captions) */\nimport { CaptionsSubscriber } from './CaptionsSubscriber';\nimport {\n convertSdkLocalStreamToDeclarativeLocalStream,\n convertSdkParticipantToDeclarativeParticipant\n} from './Converter';\nimport { InternalCallContext } from './InternalCallContext';\n/* @conditional-compile-remove(video-background-effects) */\nimport { LocalVideoStreamVideoEffectsSubscriber } from './LocalVideoStreamVideoEffectsSubscriber';\nimport { ParticipantSubscriber } from './ParticipantSubscriber';\nimport { RecordingSubscriber } from './RecordingSubscriber';\nimport { disposeView } from './StreamUtils';\nimport { TranscriptionSubscriber } from './TranscriptionSubscriber';\nimport { UserFacingDiagnosticsSubscriber } from './UserFacingDiagnosticsSubscriber';\n/* @conditional-compile-remove(raise-hand) */\nimport { RaiseHandSubscriber } from './RaiseHandSubscriber';\n/* @conditional-compile-remove(optimal-video-count) */\nimport { OptimalVideoCountSubscriber } from './OptimalVideoCountSubscriber';\n/* @conditional-compile-remove(capabilities) */\nimport { CapabilitiesSubscriber } from './CapabilitiesSubscriber';\n\n/**\n * Keeps track of the listeners assigned to a particular call because when we get an event from SDK, it doesn't tell us\n * which call it is for. If we keep track of this then we know which call in the state that needs an update and also\n * which property of that call. Also we can use this when unregistering to a call.\n */\nexport class CallSubscriber {\n private _call: CallCommon;\n private _callIdRef: CallIdRef;\n private _context: CallContext;\n private _internalContext: InternalCallContext;\n\n private _diagnosticsSubscriber: UserFacingDiagnosticsSubscriber;\n private _participantSubscribers: Map<string, ParticipantSubscriber>;\n private _recordingSubscriber: RecordingSubscriber;\n private _transcriptionSubscriber: TranscriptionSubscriber;\n /* @conditional-compile-remove(optimal-video-count) */\n private _optimalVideoCountSubscriber: OptimalVideoCountSubscriber;\n /* @conditional-compile-remove(close-captions) */\n private _captionsSubscriber?: CaptionsSubscriber;\n /* @conditional-compile-remove(raise-hand) */\n private _raiseHandSubscriber?: RaiseHandSubscriber;\n /* @conditional-compile-remove(video-background-effects) */\n private _localVideoStreamVideoEffectsSubscribers: Map<string, LocalVideoStreamVideoEffectsSubscriber>;\n /* @conditional-compile-remove(capabilities) */\n private _capabilitiesSubscriber: CapabilitiesSubscriber;\n\n constructor(call: CallCommon, context: CallContext, internalContext: InternalCallContext) {\n this._call = call;\n this._callIdRef = { callId: call.id };\n this._context = context;\n this._internalContext = internalContext;\n\n this._diagnosticsSubscriber = new UserFacingDiagnosticsSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.UserFacingDiagnostics)\n );\n this._participantSubscribers = new Map<string, ParticipantSubscriber>();\n this._recordingSubscriber = new RecordingSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.Recording)\n );\n this._transcriptionSubscriber = new TranscriptionSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.Transcription)\n );\n /* @conditional-compile-remove(raise-hand) */\n this._raiseHandSubscriber = new RaiseHandSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.RaiseHand)\n );\n /* @conditional-compile-remove(optimal-video-count) */\n this._optimalVideoCountSubscriber = new OptimalVideoCountSubscriber({\n callIdRef: this._callIdRef,\n context: this._context,\n localOptimalVideoCountFeature: this._call.feature(Features.OptimalVideoCount)\n });\n /* @conditional-compile-remove(video-background-effects) */\n this._localVideoStreamVideoEffectsSubscribers = new Map();\n\n /* @conditional-compile-remove(capabilities) */\n this._capabilitiesSubscriber = new CapabilitiesSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.Capabilities)\n );\n\n this.subscribe();\n }\n\n private subscribe = (): void => {\n this._call.on('stateChanged', this.stateChanged);\n /* @conditional-compile-remove(close-captions) */\n this._call.on('stateChanged', this.initCaptionSubscriber);\n this._call.on('idChanged', this.idChanged);\n this._call.on('isScreenSharingOnChanged', this.isScreenSharingOnChanged);\n this._call.on('remoteParticipantsUpdated', this.remoteParticipantsUpdated);\n this._call.on('localVideoStreamsUpdated', this.localVideoStreamsUpdated);\n this._call.on('isMutedChanged', this.isMuteChanged);\n /* @conditional-compile-remove(rooms) */ /* @conditional-compile-remove(capabilities) */\n this._call.on('roleChanged', this.callRoleChangedHandler);\n this._call.feature(Features.DominantSpeakers).on('dominantSpeakersChanged', this.dominantSpeakersChanged);\n /* @conditional-compile-remove(total-participant-count) */\n this._call.on('totalParticipantCountChanged', this.totalParticipantCountChangedHandler);\n\n for (const localVideoStream of this._call.localVideoStreams) {\n this._internalContext.setLocalRenderInfo(\n this._callIdRef.callId,\n localVideoStream.mediaStreamType,\n localVideoStream,\n 'NotRendered',\n undefined\n );\n }\n\n if (this._call.remoteParticipants.length > 0) {\n this._call.remoteParticipants.forEach((participant: RemoteParticipant) => {\n this.addParticipantListener(participant);\n });\n\n this._context.setCallRemoteParticipants(\n this._callIdRef.callId,\n this._call.remoteParticipants.map(convertSdkParticipantToDeclarativeParticipant),\n []\n );\n }\n };\n\n public unsubscribe = (): void => {\n this._call.off('stateChanged', this.stateChanged);\n /* @conditional-compile-remove(close-captions) */\n this._call.off('stateChanged', this.initCaptionSubscriber);\n this._call.off('idChanged', this.idChanged);\n this._call.off('isScreenSharingOnChanged', this.isScreenSharingOnChanged);\n this._call.off('remoteParticipantsUpdated', this.remoteParticipantsUpdated);\n this._call.off('localVideoStreamsUpdated', this.localVideoStreamsUpdated);\n this._call.off('isMutedChanged', this.isMuteChanged);\n /* @conditional-compile-remove(rooms) */ /* @conditional-compile-remove(capabilities) */\n this._call.off('roleChanged', this.callRoleChangedHandler);\n /* @conditional-compile-remove(total-participant-count) */\n this._call.off('totalParticipantCountChanged', this.totalParticipantCountChangedHandler);\n\n this._participantSubscribers.forEach((participantSubscriber: ParticipantSubscriber) => {\n participantSubscriber.unsubscribe();\n });\n this._participantSubscribers.clear();\n\n // If we are unsubscribing that means we no longer want to display any video for this call (callEnded or callAgent\n // disposed) and we should not be updating it any more. So if video is rendering we stop rendering.\n for (const localVideoStream of this._call.localVideoStreams) {\n const mediaStreamType = localVideoStream.mediaStreamType;\n disposeView(\n this._context,\n this._internalContext,\n this._callIdRef.callId,\n undefined,\n convertSdkLocalStreamToDeclarativeLocalStream(localVideoStream)\n );\n this._internalContext.deleteLocalRenderInfo(this._callIdRef.callId, mediaStreamType);\n }\n\n this._diagnosticsSubscriber.unsubscribe();\n this._recordingSubscriber.unsubscribe();\n this._transcriptionSubscriber.unsubscribe();\n /* @conditional-compile-remove(optimal-video-count) */\n this._optimalVideoCountSubscriber.unsubscribe();\n /* @conditional-compile-remove(close-captions) */\n this._captionsSubscriber?.unsubscribe();\n /* @conditional-compile-remove(raise-hand) */\n this._raiseHandSubscriber?.unsubscribe();\n /* @conditional-compile-remove(capabilities) */\n this._capabilitiesSubscriber.unsubscribe();\n };\n\n private addParticipantListener(participant: RemoteParticipant): void {\n const participantKey = toFlatCommunicationIdentifier(participant.identifier);\n this._participantSubscribers.get(participantKey)?.unsubscribe();\n this._participantSubscribers.set(\n participantKey,\n new ParticipantSubscriber(this._callIdRef, participant, this._context, this._internalContext)\n );\n }\n\n private removeParticipantListener(participant: RemoteParticipant): void {\n const participantKey = toFlatCommunicationIdentifier(participant.identifier);\n const participantSubscriber = this._participantSubscribers.get(participantKey);\n if (participantSubscriber) {\n participantSubscriber.unsubscribe();\n this._participantSubscribers.delete(participantKey);\n }\n }\n\n private stateChanged = (): void => {\n this._context.setCallState(this._callIdRef.callId, this._call.state);\n };\n\n /* @conditional-compile-remove(close-captions) */\n private initCaptionSubscriber = (): void => {\n // subscribe to captions here so that we don't call captions when call is not initialized\n if (this._call.state === 'Connected' && !this._captionsSubscriber) {\n if (this._call.feature(Features.Captions).captions.kind === 'TeamsCaptions') {\n this._captionsSubscriber = new CaptionsSubscriber(\n this._callIdRef,\n this._context,\n this._call.feature(Features.Captions).captions as TeamsCaptions\n );\n this._call.off('stateChanged', this.initCaptionSubscriber);\n }\n }\n };\n\n private idChanged = (): void => {\n this._internalContext.setCallId(this._call.id, this._callIdRef.callId);\n this._context.setCallId(this._call.id, this._callIdRef.callId);\n this._callIdRef.callId = this._call.id;\n };\n\n private isScreenSharingOnChanged = (): void => {\n this._context.setCallIsScreenSharingOn(this._callIdRef.callId, this._call.isScreenSharingOn);\n };\n\n private isMuteChanged = (): void => {\n this._context.setCallIsMicrophoneMuted(this._callIdRef.callId, this._call.isMuted);\n };\n\n /* @conditional-compile-remove(rooms) */ /* @conditional-compile-remove(capabilities) */\n private callRoleChangedHandler = (): void => {\n this._context.setRole(this._callIdRef.callId, this._call.role);\n };\n\n /* @conditional-compile-remove(total-participant-count) */\n private totalParticipantCountChangedHandler = (): void => {\n this._context.setTotalParticipantCount(this._callIdRef.callId, this._call.totalParticipantCount);\n };\n\n private remoteParticipantsUpdated = (event: { added: RemoteParticipant[]; removed: RemoteParticipant[] }): void => {\n event.added.forEach((participant: RemoteParticipant) => {\n this.addParticipantListener(participant);\n });\n event.removed.forEach((participant: RemoteParticipant) => {\n this.removeParticipantListener(participant);\n });\n\n // Remove any added participants from remoteParticipantsEnded if they are there and add any removed participants to\n // remoteParticipantsEnded.\n this._context.setCallRemoteParticipantsEnded(\n this._callIdRef.callId,\n event.removed.map(convertSdkParticipantToDeclarativeParticipant),\n event.added.map((participant: RemoteParticipant) => {\n return toFlatCommunicationIdentifier(participant.identifier);\n })\n );\n\n // Add added participants to remoteParticipants and remove removed participants from remoteParticipants.\n this._context.setCallRemoteParticipants(\n this._callIdRef.callId,\n event.added.map(convertSdkParticipantToDeclarativeParticipant),\n event.removed.map((participant: RemoteParticipant) => {\n return toFlatCommunicationIdentifier(participant.identifier);\n })\n );\n };\n\n private localVideoStreamsUpdated = (event: { added: LocalVideoStream[]; removed: LocalVideoStream[] }): void => {\n for (const localVideoStream of event.added) {\n const mediaStreamType = localVideoStream.mediaStreamType;\n // IMPORTANT: The internalContext should be set before context. This is done to ensure that the internal context\n // has the required data when component re-renders due to external state changes.\n this._internalContext.setLocalRenderInfo(\n this._callIdRef.callId,\n mediaStreamType,\n localVideoStream,\n 'NotRendered',\n undefined\n );\n\n // Subscribe to video effect changes\n this._localVideoStreamVideoEffectsSubscribers.get(mediaStreamType)?.unsubscribe();\n this._localVideoStreamVideoEffectsSubscribers.set(\n mediaStreamType,\n new LocalVideoStreamVideoEffectsSubscriber({\n parent: this._callIdRef,\n context: this._context,\n localVideoStream: localVideoStream,\n localVideoStreamEffectsAPI: localVideoStream.feature(Features.VideoEffects)\n })\n );\n }\n for (const localVideoStream of event.removed) {\n const mediaStreamType = localVideoStream.mediaStreamType;\n this._localVideoStreamVideoEffectsSubscribers.get(mediaStreamType)?.unsubscribe();\n disposeView(\n this._context,\n this._internalContext,\n this._callIdRef.callId,\n undefined,\n convertSdkLocalStreamToDeclarativeLocalStream(localVideoStream)\n );\n\n this._internalContext.deleteLocalRenderInfo(this._callIdRef.callId, mediaStreamType);\n }\n\n this._context.setCallLocalVideoStream(\n this._callIdRef.callId,\n event.added.map(convertSdkLocalStreamToDeclarativeLocalStream),\n event.removed.map(convertSdkLocalStreamToDeclarativeLocalStream)\n );\n };\n\n private dominantSpeakersChanged = (): void => {\n const dominantSpeakers = this._call.feature(Features.DominantSpeakers).dominantSpeakers;\n this._context.setCallDominantSpeakers(this._callIdRef.callId, dominantSpeakers);\n };\n}\n\"../../acs-ui-common/src\""]}
@@ -1,4 +1,4 @@
1
- import { LocalVideoStream, RemoteVideoStream, VideoStreamRenderer } from '@azure/communication-calling';
1
+ import { LocalVideoStream, MediaStreamType, RemoteVideoStream, VideoStreamRenderer } from '@azure/communication-calling';
2
2
  import { LocalVideoStreamState } from './CallClientState';
3
3
  import type { CallContext } from './CallContext';
4
4
  /**
@@ -14,22 +14,19 @@ export declare type RenderStatus = 'NotRendered' | 'Rendering' | 'Rendered' | 'S
14
14
  /**
15
15
  * Internal container to hold common state needed to keep track of renders.
16
16
  */
17
- export interface RenderInfo {
17
+ export interface RenderInfo<T> {
18
18
  status: RenderStatus;
19
19
  renderer: VideoStreamRenderer | undefined;
20
+ stream: T;
20
21
  }
21
22
  /**
22
23
  * Internally used to keep track of the status, renderer, and awaiting promise, associated with a LocalVideoStream.
23
24
  */
24
- export interface LocalRenderInfo extends RenderInfo {
25
- stream: LocalVideoStream;
26
- }
25
+ export declare type LocalRenderInfo = RenderInfo<LocalVideoStream>;
27
26
  /**
28
27
  * Internally used to keep track of the status, renderer, and awaiting promise, associated with a RemoteVideoStream.
29
28
  */
30
- export interface RemoteRenderInfo extends RenderInfo {
31
- stream: RemoteVideoStream;
32
- }
29
+ export declare type RemoteRenderInfo = RenderInfo<RemoteVideoStream>;
33
30
  /**
34
31
  * Contains internal data used between different Declarative components to share data.
35
32
  */
@@ -45,9 +42,10 @@ export declare class InternalCallContext {
45
42
  getRemoteRenderInfoForParticipant(callId: string, participantKey: string, streamId: number): RemoteRenderInfo | undefined;
46
43
  setRemoteRenderInfo(callId: string, participantKey: string, streamId: number, stream: RemoteVideoStream, status: RenderStatus, renderer: VideoStreamRenderer | undefined): void;
47
44
  deleteRemoteRenderInfo(callId: string, participantKey: string, streamId: number): void;
48
- setLocalRenderInfo(callId: string, stream: LocalVideoStream, status: RenderStatus, renderer: VideoStreamRenderer | undefined): void;
49
- getLocalRenderInfo(callId: string): LocalRenderInfo | undefined;
50
- deleteLocalRenderInfo(callId: string): void;
45
+ setLocalRenderInfo(callId: string, streamKey: MediaStreamType, stream: LocalVideoStream, status: RenderStatus, renderer: VideoStreamRenderer | undefined): void;
46
+ getLocalRenderInfosForCall(callId: string): Map<MediaStreamType, LocalRenderInfo> | undefined;
47
+ getLocalRenderInfo(callId: string, streamKey: MediaStreamType): LocalRenderInfo | undefined;
48
+ deleteLocalRenderInfo(callId: string, streamKey: MediaStreamType): void;
51
49
  getUnparentedRenderInfo(localVideoStream: LocalVideoStreamState): LocalRenderInfo | undefined;
52
50
  getUnparentedRenderInfos(): LocalVideoStream[];
53
51
  setUnparentedRenderInfo(statefulStream: LocalVideoStreamState, stream: LocalVideoStream, status: RenderStatus, renderer: VideoStreamRenderer | undefined): void;
@@ -12,10 +12,9 @@ export class InternalCallContext {
12
12
  constructor() {
13
13
  // <CallId, <ParticipantKey, <StreamId, RemoteRenderInfo>>
14
14
  this._remoteRenderInfos = new Map();
15
- // <CallId, LocalRenderInfo>.
15
+ // <CallId, <MediaStreamType, LocalRenderInfo>>.
16
16
  this._localRenderInfos = new Map();
17
17
  // Used for keeping track of rendered LocalVideoStreams that are not part of a Call.
18
- // The key is the stream ID. We assume each stream ID to only have one owning render info
19
18
  this._unparentedRenderInfos = new Map();
20
19
  this._callIdHistory = new CallIdHistory();
21
20
  // Used for keeping track of video effects subscribers that are not part of a Call.
@@ -77,37 +76,53 @@ export class InternalCallContext {
77
76
  }
78
77
  participantRenderInfos.delete(streamId);
79
78
  }
80
- setLocalRenderInfo(callId, stream, status, renderer) {
81
- this._localRenderInfos.set(this._callIdHistory.latestCallId(callId), { stream, status, renderer });
79
+ setLocalRenderInfo(callId, streamKey, stream, status, renderer) {
80
+ let localRenderInfosForCall = this._localRenderInfos.get(this._callIdHistory.latestCallId(callId));
81
+ if (!localRenderInfosForCall) {
82
+ localRenderInfosForCall = new Map();
83
+ this._localRenderInfos.set(this._callIdHistory.latestCallId(callId), localRenderInfosForCall);
84
+ }
85
+ localRenderInfosForCall.set(streamKey, { stream, status, renderer });
82
86
  }
83
- getLocalRenderInfo(callId) {
87
+ getLocalRenderInfosForCall(callId) {
84
88
  return this._localRenderInfos.get(this._callIdHistory.latestCallId(callId));
85
89
  }
86
- deleteLocalRenderInfo(callId) {
87
- this._localRenderInfos.delete(this._callIdHistory.latestCallId(callId));
90
+ getLocalRenderInfo(callId, streamKey) {
91
+ const localRenderInfosForCall = this._localRenderInfos.get(this._callIdHistory.latestCallId(callId));
92
+ if (!localRenderInfosForCall) {
93
+ return undefined;
94
+ }
95
+ return localRenderInfosForCall.get(streamKey);
96
+ }
97
+ deleteLocalRenderInfo(callId, streamKey) {
98
+ const localRenderInfoForCall = this._localRenderInfos.get(this._callIdHistory.latestCallId(callId));
99
+ if (!localRenderInfoForCall) {
100
+ return;
101
+ }
102
+ localRenderInfoForCall.delete(streamKey);
88
103
  }
89
104
  getUnparentedRenderInfo(localVideoStream) {
90
- return this._unparentedRenderInfos.get(localVideoStream.source.id);
105
+ return this._unparentedRenderInfos.get(localVideoStream.mediaStreamType);
91
106
  }
92
107
  getUnparentedRenderInfos() {
93
108
  return [...this._unparentedRenderInfos].map(([, renderInfo]) => renderInfo.stream);
94
109
  }
95
110
  setUnparentedRenderInfo(statefulStream, stream, status, renderer) {
96
- this._unparentedRenderInfos.set(statefulStream.source.id, { stream, status, renderer });
111
+ this._unparentedRenderInfos.set(statefulStream.mediaStreamType, { stream, status, renderer });
97
112
  }
98
113
  deleteUnparentedRenderInfo(localVideoStream) {
99
114
  var _a;
100
115
  /* @conditional-compile-remove(video-background-effects) */
101
- (_a = this._unparentedViewVideoEffectsSubscriber.get(localVideoStream.source.id)) === null || _a === void 0 ? void 0 : _a.unsubscribe();
102
- this._unparentedRenderInfos.delete(localVideoStream.source.id);
116
+ (_a = this._unparentedViewVideoEffectsSubscriber.get(localVideoStream.mediaStreamType)) === null || _a === void 0 ? void 0 : _a.unsubscribe();
117
+ this._unparentedRenderInfos.delete(localVideoStream.mediaStreamType);
103
118
  }
104
119
  subscribeToUnparentedViewVideoEffects(localVideoStream, callContext) {
105
120
  var _a;
106
121
  /* @conditional-compile-remove(video-background-effects) */
107
122
  {
108
123
  // Ensure we aren't setting multiple subscriptions
109
- (_a = this._unparentedViewVideoEffectsSubscriber.get(localVideoStream.source.id)) === null || _a === void 0 ? void 0 : _a.unsubscribe();
110
- this._unparentedViewVideoEffectsSubscriber.set(localVideoStream.source.id, new LocalVideoStreamVideoEffectsSubscriber({
124
+ (_a = this._unparentedViewVideoEffectsSubscriber.get(localVideoStream.mediaStreamType)) === null || _a === void 0 ? void 0 : _a.unsubscribe();
125
+ this._unparentedViewVideoEffectsSubscriber.set(localVideoStream.mediaStreamType, new LocalVideoStreamVideoEffectsSubscriber({
111
126
  parent: 'unparented',
112
127
  context: callContext,
113
128
  localVideoStream: localVideoStream,
@@ -1 +1 @@
1
- {"version":3,"file":"InternalCallContext.js","sourceRoot":"","sources":["../../../../../calling-stateful-client/src/InternalCallContext.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { LocalVideoStream, RemoteVideoStream, VideoStreamRenderer } from '@azure/communication-calling';\nimport { LocalVideoStreamState } from './CallClientState';\nimport type { CallContext } from './CallContext';\nimport { CallIdHistory } from './CallIdHistory';\n\n/* @conditional-compile-remove(video-background-effects) */\nimport { LocalVideoStreamVideoEffectsSubscriber } from './LocalVideoStreamVideoEffectsSubscriber';\n/* @conditional-compile-remove(video-background-effects) */\nimport { Features } from '@azure/communication-calling';\n\n/**\n * Internally tracked render status. Stores the status of a video render of a stream as rendering could take a long\n * time.\n *\n * 'NotRendered' - the stream has not yet been rendered\n * 'Rendering' - the stream is currently rendering\n * 'Rendered' - the stream has been rendered\n * 'Stopping' - the stream is currently rendering but has been signaled to stop\n */\nexport type RenderStatus = 'NotRendered' | 'Rendering' | 'Rendered' | 'Stopping';\n\n/**\n * Internal container to hold common state needed to keep track of renders.\n */\nexport interface RenderInfo {\n status: RenderStatus;\n renderer: VideoStreamRenderer | undefined;\n}\n\n/**\n * Internally used to keep track of the status, renderer, and awaiting promise, associated with a LocalVideoStream.\n */\nexport interface LocalRenderInfo extends RenderInfo {\n stream: LocalVideoStream;\n}\n\n/**\n * Internally used to keep track of the status, renderer, and awaiting promise, associated with a RemoteVideoStream.\n */\nexport interface RemoteRenderInfo extends RenderInfo {\n stream: RemoteVideoStream;\n}\n\n/**\n * Contains internal data used between different Declarative components to share data.\n */\nexport class InternalCallContext {\n // <CallId, <ParticipantKey, <StreamId, RemoteRenderInfo>>\n private _remoteRenderInfos = new Map<string, Map<string, Map<number, RemoteRenderInfo>>>();\n\n // <CallId, LocalRenderInfo>.\n private _localRenderInfos = new Map<string, LocalRenderInfo>();\n\n // Used for keeping track of rendered LocalVideoStreams that are not part of a Call.\n // The key is the stream ID. We assume each stream ID to only have one owning render info\n private _unparentedRenderInfos = new Map<string, LocalRenderInfo>();\n private _callIdHistory = new CallIdHistory();\n\n // Used for keeping track of video effects subscribers that are not part of a Call.\n // The key is the stream ID. We assume each stream ID\n /* @conditional-compile-remove(video-background-effects) */\n private _unparentedViewVideoEffectsSubscriber = new Map<string, LocalVideoStreamVideoEffectsSubscriber | undefined>();\n\n public setCallId(newCallId: string, oldCallId: string): void {\n this._callIdHistory.updateCallIdHistory(newCallId, oldCallId);\n const remoteRenderInfos = this._remoteRenderInfos.get(oldCallId);\n if (remoteRenderInfos) {\n this._remoteRenderInfos.delete(oldCallId);\n this._remoteRenderInfos.set(newCallId, remoteRenderInfos);\n }\n\n const localRenderInfos = this._localRenderInfos.get(oldCallId);\n if (localRenderInfos) {\n this._localRenderInfos.delete(oldCallId);\n this._localRenderInfos.set(newCallId, localRenderInfos);\n }\n }\n\n public getCallIds(): IterableIterator<string> {\n return this._remoteRenderInfos.keys();\n }\n\n public getRemoteRenderInfoForCall(callId: string): Map<string, Map<number, RemoteRenderInfo>> | undefined {\n return this._remoteRenderInfos.get(this._callIdHistory.latestCallId(callId));\n }\n\n public getRemoteRenderInfoForParticipant(\n callId: string,\n participantKey: string,\n streamId: number\n ): RemoteRenderInfo | undefined {\n const callRenderInfos = this._remoteRenderInfos.get(this._callIdHistory.latestCallId(callId));\n if (!callRenderInfos) {\n return undefined;\n }\n const participantRenderInfos = callRenderInfos.get(participantKey);\n if (!participantRenderInfos) {\n return undefined;\n }\n return participantRenderInfos.get(streamId);\n }\n\n public setRemoteRenderInfo(\n callId: string,\n participantKey: string,\n streamId: number,\n stream: RemoteVideoStream,\n status: RenderStatus,\n renderer: VideoStreamRenderer | undefined\n ): void {\n let callRenderInfos = this._remoteRenderInfos.get(this._callIdHistory.latestCallId(callId));\n if (!callRenderInfos) {\n callRenderInfos = new Map<string, Map<number, RemoteRenderInfo>>();\n this._remoteRenderInfos.set(this._callIdHistory.latestCallId(callId), callRenderInfos);\n }\n\n let participantRenderInfos = callRenderInfos.get(participantKey);\n if (!participantRenderInfos) {\n participantRenderInfos = new Map<number, RemoteRenderInfo>();\n callRenderInfos.set(participantKey, participantRenderInfos);\n }\n\n participantRenderInfos.set(streamId, { stream, status, renderer });\n }\n\n public deleteRemoteRenderInfo(callId: string, participantKey: string, streamId: number): void {\n const callRenderInfos = this._remoteRenderInfos.get(this._callIdHistory.latestCallId(callId));\n if (!callRenderInfos) {\n return;\n }\n\n const participantRenderInfos = callRenderInfos.get(participantKey);\n if (!participantRenderInfos) {\n return;\n }\n\n participantRenderInfos.delete(streamId);\n }\n\n public setLocalRenderInfo(\n callId: string,\n stream: LocalVideoStream,\n status: RenderStatus,\n renderer: VideoStreamRenderer | undefined\n ): void {\n this._localRenderInfos.set(this._callIdHistory.latestCallId(callId), { stream, status, renderer });\n }\n\n public getLocalRenderInfo(callId: string): LocalRenderInfo | undefined {\n return this._localRenderInfos.get(this._callIdHistory.latestCallId(callId));\n }\n\n public deleteLocalRenderInfo(callId: string): void {\n this._localRenderInfos.delete(this._callIdHistory.latestCallId(callId));\n }\n\n public getUnparentedRenderInfo(localVideoStream: LocalVideoStreamState): LocalRenderInfo | undefined {\n return this._unparentedRenderInfos.get(localVideoStream.source.id);\n }\n\n public getUnparentedRenderInfos(): LocalVideoStream[] {\n return [...this._unparentedRenderInfos].map(([, renderInfo]) => renderInfo.stream);\n }\n\n public setUnparentedRenderInfo(\n statefulStream: LocalVideoStreamState,\n stream: LocalVideoStream,\n status: RenderStatus,\n renderer: VideoStreamRenderer | undefined\n ): void {\n this._unparentedRenderInfos.set(statefulStream.source.id, { stream, status, renderer });\n }\n\n public deleteUnparentedRenderInfo(localVideoStream: LocalVideoStreamState): void {\n /* @conditional-compile-remove(video-background-effects) */\n this._unparentedViewVideoEffectsSubscriber.get(localVideoStream.source.id)?.unsubscribe();\n\n this._unparentedRenderInfos.delete(localVideoStream.source.id);\n }\n\n public subscribeToUnparentedViewVideoEffects(localVideoStream: LocalVideoStream, callContext: CallContext): void {\n /* @conditional-compile-remove(video-background-effects) */\n {\n // Ensure we aren't setting multiple subscriptions\n this._unparentedViewVideoEffectsSubscriber.get(localVideoStream.source.id)?.unsubscribe();\n this._unparentedViewVideoEffectsSubscriber.set(\n localVideoStream.source.id,\n new LocalVideoStreamVideoEffectsSubscriber({\n parent: 'unparented',\n context: callContext,\n localVideoStream: localVideoStream,\n localVideoStreamEffectsAPI: localVideoStream.feature(Features.VideoEffects)\n })\n );\n }\n }\n\n // UnparentedRenderInfos are not cleared as they are not part of the Call state.\n public clearCallRelatedState(): void {\n this._remoteRenderInfos.clear();\n this._localRenderInfos.clear();\n }\n}\n"]}
1
+ {"version":3,"file":"InternalCallContext.js","sourceRoot":"","sources":["../../../../../calling-stateful-client/src/InternalCallContext.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAUlC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,2DAA2D;AAC3D,OAAO,EAAE,sCAAsC,EAAE,MAAM,0CAA0C,CAAC;AAClG,2DAA2D;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAgCxD;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAAhC;QACE,0DAA0D;QAClD,uBAAkB,GAAG,IAAI,GAAG,EAAsD,CAAC;QAE3F,gDAAgD;QACxC,sBAAiB,GAAG,IAAI,GAAG,EAAiD,CAAC;QAErF,oFAAoF;QAC5E,2BAAsB,GAAG,IAAI,GAAG,EAAoC,CAAC;QACrE,mBAAc,GAAG,IAAI,aAAa,EAAE,CAAC;QAE7C,mFAAmF;QACnF,qDAAqD;QACrD,2DAA2D;QACnD,0CAAqC,GAAG,IAAI,GAAG,EAA8D,CAAC;IAkKxH,CAAC;IAhKQ,SAAS,CAAC,SAAiB,EAAE,SAAiB;QACnD,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9D,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;SAC3D;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/D,IAAI,gBAAgB,EAAE;YACpB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;SACzD;IACH,CAAC;IAEM,UAAU;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IAEM,0BAA0B,CAAC,MAAc;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/E,CAAC;IAEM,iCAAiC,CACtC,MAAc,EACd,cAAsB,EACtB,QAAgB;QAEhB,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,sBAAsB,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnE,IAAI,CAAC,sBAAsB,EAAE;YAC3B,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAEM,mBAAmB,CACxB,MAAc,EACd,cAAsB,EACtB,QAAgB,EAChB,MAAyB,EACzB,MAAoB,EACpB,QAAyC;QAEzC,IAAI,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,eAAe,EAAE;YACpB,eAAe,GAAG,IAAI,GAAG,EAAyC,CAAC;YACnE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC;SACxF;QAED,IAAI,sBAAsB,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,sBAAsB,EAAE;YAC3B,sBAAsB,GAAG,IAAI,GAAG,EAA4B,CAAC;YAC7D,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;SAC7D;QAED,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrE,CAAC;IAEM,sBAAsB,CAAC,MAAc,EAAE,cAAsB,EAAE,QAAgB;QACpF,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO;SACR;QAED,MAAM,sBAAsB,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnE,IAAI,CAAC,sBAAsB,EAAE;YAC3B,OAAO;SACR;QAED,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAEM,kBAAkB,CACvB,MAAc,EACd,SAA0B,EAC1B,MAAwB,EACxB,MAAoB,EACpB,QAAyC;QAEzC,IAAI,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACnG,IAAI,CAAC,uBAAuB,EAAE;YAC5B,uBAAuB,GAAG,IAAI,GAAG,EAAoC,CAAC;YACtE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,uBAAuB,CAAC,CAAC;SAC/F;QAED,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvE,CAAC;IAEM,0BAA0B,CAAC,MAAc;QAC9C,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,CAAC;IAEM,kBAAkB,CAAC,MAAc,EAAE,SAA0B;QAClE,MAAM,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,uBAAuB,EAAE;YAC5B,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;IAEM,qBAAqB,CAAC,MAAc,EAAE,SAA0B;QACrE,MAAM,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,sBAAsB,EAAE;YAC3B,OAAO;SACR;QAED,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAEM,uBAAuB,CAAC,gBAAuC;QACpE,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC3E,CAAC;IAEM,wBAAwB;QAC7B,OAAO,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACrF,CAAC;IAEM,uBAAuB,CAC5B,cAAqC,EACrC,MAAwB,EACxB,MAAoB,EACpB,QAAyC;QAEzC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,cAAc,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChG,CAAC;IAEM,0BAA0B,CAAC,gBAAuC;;QACvE,2DAA2D;QAC3D,MAAA,IAAI,CAAC,qCAAqC,CAAC,GAAG,CAAC,gBAAgB,CAAC,eAAe,CAAC,0CAAE,WAAW,EAAE,CAAC;QAEhG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACvE,CAAC;IAEM,qCAAqC,CAAC,gBAAkC,EAAE,WAAwB;;QACvG,2DAA2D;QAC3D;YACE,kDAAkD;YAClD,MAAA,IAAI,CAAC,qCAAqC,CAAC,GAAG,CAAC,gBAAgB,CAAC,eAAe,CAAC,0CAAE,WAAW,EAAE,CAAC;YAChG,IAAI,CAAC,qCAAqC,CAAC,GAAG,CAC5C,gBAAgB,CAAC,eAAe,EAChC,IAAI,sCAAsC,CAAC;gBACzC,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,WAAW;gBACpB,gBAAgB,EAAE,gBAAgB;gBAClC,0BAA0B,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;aAC5E,CAAC,CACH,CAAC;SACH;IACH,CAAC;IAED,gFAAgF;IACzE,qBAAqB;QAC1B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n LocalVideoStream,\n MediaStreamType,\n RemoteVideoStream,\n VideoStreamRenderer\n} from '@azure/communication-calling';\nimport { LocalVideoStreamState } from './CallClientState';\nimport type { CallContext } from './CallContext';\nimport { CallIdHistory } from './CallIdHistory';\n\n/* @conditional-compile-remove(video-background-effects) */\nimport { LocalVideoStreamVideoEffectsSubscriber } from './LocalVideoStreamVideoEffectsSubscriber';\n/* @conditional-compile-remove(video-background-effects) */\nimport { Features } from '@azure/communication-calling';\n\n/**\n * Internally tracked render status. Stores the status of a video render of a stream as rendering could take a long\n * time.\n *\n * 'NotRendered' - the stream has not yet been rendered\n * 'Rendering' - the stream is currently rendering\n * 'Rendered' - the stream has been rendered\n * 'Stopping' - the stream is currently rendering but has been signaled to stop\n */\nexport type RenderStatus = 'NotRendered' | 'Rendering' | 'Rendered' | 'Stopping';\n\n/**\n * Internal container to hold common state needed to keep track of renders.\n */\nexport interface RenderInfo<T> {\n status: RenderStatus;\n renderer: VideoStreamRenderer | undefined;\n stream: T;\n}\n\n/**\n * Internally used to keep track of the status, renderer, and awaiting promise, associated with a LocalVideoStream.\n */\nexport type LocalRenderInfo = RenderInfo<LocalVideoStream>;\n\n/**\n * Internally used to keep track of the status, renderer, and awaiting promise, associated with a RemoteVideoStream.\n */\nexport type RemoteRenderInfo = RenderInfo<RemoteVideoStream>;\n\n/**\n * Contains internal data used between different Declarative components to share data.\n */\nexport class InternalCallContext {\n // <CallId, <ParticipantKey, <StreamId, RemoteRenderInfo>>\n private _remoteRenderInfos = new Map<string, Map<string, Map<number, RemoteRenderInfo>>>();\n\n // <CallId, <MediaStreamType, LocalRenderInfo>>.\n private _localRenderInfos = new Map<string, Map<MediaStreamType, LocalRenderInfo>>();\n\n // Used for keeping track of rendered LocalVideoStreams that are not part of a Call.\n private _unparentedRenderInfos = new Map<MediaStreamType, LocalRenderInfo>();\n private _callIdHistory = new CallIdHistory();\n\n // Used for keeping track of video effects subscribers that are not part of a Call.\n // The key is the stream ID. We assume each stream ID\n /* @conditional-compile-remove(video-background-effects) */\n private _unparentedViewVideoEffectsSubscriber = new Map<string, LocalVideoStreamVideoEffectsSubscriber | undefined>();\n\n public setCallId(newCallId: string, oldCallId: string): void {\n this._callIdHistory.updateCallIdHistory(newCallId, oldCallId);\n const remoteRenderInfos = this._remoteRenderInfos.get(oldCallId);\n if (remoteRenderInfos) {\n this._remoteRenderInfos.delete(oldCallId);\n this._remoteRenderInfos.set(newCallId, remoteRenderInfos);\n }\n\n const localRenderInfos = this._localRenderInfos.get(oldCallId);\n if (localRenderInfos) {\n this._localRenderInfos.delete(oldCallId);\n this._localRenderInfos.set(newCallId, localRenderInfos);\n }\n }\n\n public getCallIds(): IterableIterator<string> {\n return this._remoteRenderInfos.keys();\n }\n\n public getRemoteRenderInfoForCall(callId: string): Map<string, Map<number, RemoteRenderInfo>> | undefined {\n return this._remoteRenderInfos.get(this._callIdHistory.latestCallId(callId));\n }\n\n public getRemoteRenderInfoForParticipant(\n callId: string,\n participantKey: string,\n streamId: number\n ): RemoteRenderInfo | undefined {\n const callRenderInfos = this._remoteRenderInfos.get(this._callIdHistory.latestCallId(callId));\n if (!callRenderInfos) {\n return undefined;\n }\n const participantRenderInfos = callRenderInfos.get(participantKey);\n if (!participantRenderInfos) {\n return undefined;\n }\n return participantRenderInfos.get(streamId);\n }\n\n public setRemoteRenderInfo(\n callId: string,\n participantKey: string,\n streamId: number,\n stream: RemoteVideoStream,\n status: RenderStatus,\n renderer: VideoStreamRenderer | undefined\n ): void {\n let callRenderInfos = this._remoteRenderInfos.get(this._callIdHistory.latestCallId(callId));\n if (!callRenderInfos) {\n callRenderInfos = new Map<string, Map<number, RemoteRenderInfo>>();\n this._remoteRenderInfos.set(this._callIdHistory.latestCallId(callId), callRenderInfos);\n }\n\n let participantRenderInfos = callRenderInfos.get(participantKey);\n if (!participantRenderInfos) {\n participantRenderInfos = new Map<number, RemoteRenderInfo>();\n callRenderInfos.set(participantKey, participantRenderInfos);\n }\n\n participantRenderInfos.set(streamId, { stream, status, renderer });\n }\n\n public deleteRemoteRenderInfo(callId: string, participantKey: string, streamId: number): void {\n const callRenderInfos = this._remoteRenderInfos.get(this._callIdHistory.latestCallId(callId));\n if (!callRenderInfos) {\n return;\n }\n\n const participantRenderInfos = callRenderInfos.get(participantKey);\n if (!participantRenderInfos) {\n return;\n }\n\n participantRenderInfos.delete(streamId);\n }\n\n public setLocalRenderInfo(\n callId: string,\n streamKey: MediaStreamType,\n stream: LocalVideoStream,\n status: RenderStatus,\n renderer: VideoStreamRenderer | undefined\n ): void {\n let localRenderInfosForCall = this._localRenderInfos.get(this._callIdHistory.latestCallId(callId));\n if (!localRenderInfosForCall) {\n localRenderInfosForCall = new Map<MediaStreamType, LocalRenderInfo>();\n this._localRenderInfos.set(this._callIdHistory.latestCallId(callId), localRenderInfosForCall);\n }\n\n localRenderInfosForCall.set(streamKey, { stream, status, renderer });\n }\n\n public getLocalRenderInfosForCall(callId: string): Map<MediaStreamType, LocalRenderInfo> | undefined {\n return this._localRenderInfos.get(this._callIdHistory.latestCallId(callId));\n }\n\n public getLocalRenderInfo(callId: string, streamKey: MediaStreamType): LocalRenderInfo | undefined {\n const localRenderInfosForCall = this._localRenderInfos.get(this._callIdHistory.latestCallId(callId));\n if (!localRenderInfosForCall) {\n return undefined;\n }\n\n return localRenderInfosForCall.get(streamKey);\n }\n\n public deleteLocalRenderInfo(callId: string, streamKey: MediaStreamType): void {\n const localRenderInfoForCall = this._localRenderInfos.get(this._callIdHistory.latestCallId(callId));\n if (!localRenderInfoForCall) {\n return;\n }\n\n localRenderInfoForCall.delete(streamKey);\n }\n\n public getUnparentedRenderInfo(localVideoStream: LocalVideoStreamState): LocalRenderInfo | undefined {\n return this._unparentedRenderInfos.get(localVideoStream.mediaStreamType);\n }\n\n public getUnparentedRenderInfos(): LocalVideoStream[] {\n return [...this._unparentedRenderInfos].map(([, renderInfo]) => renderInfo.stream);\n }\n\n public setUnparentedRenderInfo(\n statefulStream: LocalVideoStreamState,\n stream: LocalVideoStream,\n status: RenderStatus,\n renderer: VideoStreamRenderer | undefined\n ): void {\n this._unparentedRenderInfos.set(statefulStream.mediaStreamType, { stream, status, renderer });\n }\n\n public deleteUnparentedRenderInfo(localVideoStream: LocalVideoStreamState): void {\n /* @conditional-compile-remove(video-background-effects) */\n this._unparentedViewVideoEffectsSubscriber.get(localVideoStream.mediaStreamType)?.unsubscribe();\n\n this._unparentedRenderInfos.delete(localVideoStream.mediaStreamType);\n }\n\n public subscribeToUnparentedViewVideoEffects(localVideoStream: LocalVideoStream, callContext: CallContext): void {\n /* @conditional-compile-remove(video-background-effects) */\n {\n // Ensure we aren't setting multiple subscriptions\n this._unparentedViewVideoEffectsSubscriber.get(localVideoStream.mediaStreamType)?.unsubscribe();\n this._unparentedViewVideoEffectsSubscriber.set(\n localVideoStream.mediaStreamType,\n new LocalVideoStreamVideoEffectsSubscriber({\n parent: 'unparented',\n context: callContext,\n localVideoStream: localVideoStream,\n localVideoStreamEffectsAPI: localVideoStream.feature(Features.VideoEffects)\n })\n );\n }\n }\n\n // UnparentedRenderInfos are not cleared as they are not part of the Call state.\n public clearCallRelatedState(): void {\n this._remoteRenderInfos.clear();\n this._localRenderInfos.clear();\n }\n}\n"]}
@@ -191,13 +191,13 @@ export declare type StatefulCallClientOptions = {
191
191
  *
192
192
  * @public
193
193
  */
194
- export declare const createStatefulCallClient: (args: StatefulCallClientArgs, options?: StatefulCallClientOptions | undefined) => StatefulCallClient;
194
+ export declare const createStatefulCallClient: (args: StatefulCallClientArgs, options?: StatefulCallClientOptions) => StatefulCallClient;
195
195
  /**
196
196
  * This inner function is used to allow injection of TelemetryImplementationHint without changing the public API.
197
197
  *
198
198
  * @internal
199
199
  */
200
- export declare const _createStatefulCallClientInner: (args: StatefulCallClientArgs, options?: StatefulCallClientOptions | undefined, telemetryImplementationHint?: _TelemetryImplementationHint) => StatefulCallClient;
200
+ export declare const _createStatefulCallClientInner: (args: StatefulCallClientArgs, options?: StatefulCallClientOptions, telemetryImplementationHint?: _TelemetryImplementationHint) => StatefulCallClient;
201
201
  /**
202
202
  * Package-internal version of createStatefulCallClient that allows dependency injection.
203
203
  *