@azure/communication-react 1.25.0-alpha-202502210016 → 1.25.0-alpha-202502220016
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.
- package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-DsokkWhL.js → ChatMessageComponentAsRichTextEditBox-Ba_jF3Wg.js} +2 -2
- package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-DsokkWhL.js.map → ChatMessageComponentAsRichTextEditBox-Ba_jF3Wg.js.map} +1 -1
- package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-_CM_ICZr.js → RichTextSendBoxWrapper-BD4jRhIU.js} +2 -2
- package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-_CM_ICZr.js.map → RichTextSendBoxWrapper-BD4jRhIU.js.map} +1 -1
- package/dist/dist-cjs/communication-react/{index-B1vKDCnW.js → index-Q5MUexJ_.js} +15 -7
- package/dist/dist-cjs/communication-react/{index-B1vKDCnW.js.map → index-Q5MUexJ_.js.map} +1 -1
- package/dist/dist-cjs/communication-react/index.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +9 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
- package/package.json +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AzureCommunicationCallAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { compositeLogger } from '../../../Logger';\nimport { _isInCall, _isInLobbyOrConnecting } from '@internal/calling-component-bindings';\nimport {\n CallClientState,\n CallError,\n CallState,\n _createStatefulCallClientInner,\n StatefulCallClient,\n StatefulDeviceManager,\n TeamsCall,\n _isACSCall,\n _isTeamsCall\n} from '@internal/calling-stateful-client';\nimport { AcceptedTransfer } from '@internal/calling-stateful-client';\nimport { _isTeamsCallAgent } from '@internal/calling-stateful-client';\nimport { CallCommon } from '@internal/calling-stateful-client';\nimport { _TelemetryImplementationHint } from '@internal/acs-ui-common';\nimport {\n AudioOptions,\n CallAgent,\n GroupCallLocator,\n TeamsMeetingLinkLocator,\n LocalVideoStream as SDKLocalVideoStream,\n AudioDeviceInfo,\n VideoDeviceInfo,\n RemoteParticipant,\n PermissionConstraints,\n PropertyChangedEvent,\n RoomCallLocator,\n StartCallOptions,\n VideoOptions,\n Call\n} from '@azure/communication-calling';\nimport { SpotlightedParticipant } from '@azure/communication-calling';\nimport { TeamsMeetingIdLocator } from '@azure/communication-calling';\nimport { Reaction } from '@azure/communication-calling';\nimport { TeamsCaptions } from '@azure/communication-calling';\nimport { Captions, CaptionsInfo } from '@azure/communication-calling';\nimport { TransferEventArgs } from '@azure/communication-calling';\nimport { TeamsCaptionsInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(rtt) */\nimport type { RealTimeTextInfo } from '@azure/communication-calling';\nimport type { BackgroundBlurConfig, BackgroundReplacementConfig, DeviceAccess } from '@azure/communication-calling';\nimport type { CapabilitiesChangeInfo } from '@azure/communication-calling';\nimport { TeamsCallAgent } from '@azure/communication-calling';\nimport { Features } from '@azure/communication-calling';\nimport { AddPhoneNumberOptions } from '@azure/communication-calling';\nimport { DtmfTone } from '@azure/communication-calling';\n/* @conditional-compile-remove(breakout-rooms) */\nimport type { BreakoutRoom, BreakoutRoomsEventData, BreakoutRoomsUpdatedListener } from '@azure/communication-calling';\nimport { EventEmitter } from 'events';\nimport {\n CommonCallAdapter,\n CallEndedListener,\n CallIdChangedListener,\n CallAdapterState,\n DisplayNameChangedListener,\n IsMutedChangedListener,\n IsLocalScreenSharingActiveChangedListener,\n IsSpeakingChangedListener,\n ParticipantsJoinedListener,\n ParticipantsLeftListener,\n DiagnosticChangedEventListner,\n CallAdapterCallEndedEvent,\n CallAdapter,\n JoinCallOptions,\n StartCallIdentifier,\n StartCaptionsAdapterOptions,\n StopCaptionsAdapterOptions\n} from './CallAdapter';\nimport { ReactionResources } from '@internal/react-components';\nimport { TransferAcceptedListener } from './CallAdapter';\nimport { CapabilitiesChangedListener } from './CallAdapter';\nimport { SpotlightChangedListener } from './CallAdapter';\nimport {\n CaptionsReceivedListener,\n IsCaptionsActiveChangedListener,\n IsCaptionLanguageChangedListener,\n IsSpokenLanguageChangedListener\n} from './CallAdapter';\n/* @conditional-compile-remove(rtt) */\nimport { RealTimeTextReceivedListener } from './CallAdapter';\nimport {\n VideoBackgroundImage,\n VideoBackgroundEffect,\n VideoBackgroundBlurEffect,\n VideoBackgroundReplacementEffect\n} from './CallAdapter';\nimport { TeamsCallAdapter } from './CallAdapter';\nimport { getCallCompositePage, getLocatorOrTargetCallees, IsCallEndedPage, isCameraOn } from '../utils';\nimport { CreateVideoStreamViewResult, VideoStreamOptions } from '@internal/react-components';\nimport { toFlatCommunicationIdentifier, _toCommunicationIdentifier, _isValidIdentifier } from '@internal/acs-ui-common';\nimport {\n CommunicationTokenCredential,\n CommunicationUserIdentifier,\n CommunicationIdentifier,\n MicrosoftTeamsUserIdentifier,\n isMicrosoftTeamsUserIdentifier,\n MicrosoftTeamsAppIdentifier,\n UnknownIdentifier,\n isMicrosoftTeamsAppIdentifier\n} from '@azure/communication-common';\nimport { isCommunicationUserIdentifier } from '@azure/communication-common';\nimport { isPhoneNumberIdentifier, PhoneNumberIdentifier } from '@azure/communication-common';\nimport { ParticipantSubscriber } from './ParticipantSubcriber';\nimport { AdapterError } from '../../common/adapters';\nimport { DiagnosticsForwarder } from './DiagnosticsForwarder';\nimport { useEffect, useRef, useState } from 'react';\nimport { CallHandlersOf, createHandlers } from './createHandlers';\nimport { createProfileStateModifier, OnFetchProfileCallback } from './OnFetchProfileCallback';\nimport { getBackgroundEffectFromSelectedEffect } from '../utils';\nimport { getSelectedCameraFromAdapterState } from '../utils';\nimport {\n DeepNoiseSuppressionEffectDependency,\n VideoBackgroundEffectsDependency\n} from '@internal/calling-component-bindings';\nimport { CallSurvey, CallSurveyResponse } from '@azure/communication-calling';\nimport { CallingSoundSubscriber } from './CallingSoundSubscriber';\nimport { CallingSounds } from './CallAdapter';\n/* @conditional-compile-remove(together-mode) */\nimport { TogetherModeStreamViewResult, TogetherModeStreamOptions } from '@internal/react-components';\n\ntype CallTypeOf<AgentType extends CallAgent | TeamsCallAgent> = AgentType extends CallAgent ? Call : TeamsCall;\n\n/**\n * State used by the CallAdapter to manage the call state that is not exposed to the public API.\n */\ninterface CallAdapterPrivateState {\n /** Track how captions has been started to decide on showing UI or not */\n captionsTriggers?: {\n captionsStartedInBackground?: boolean;\n captionsStartedWithUI?: boolean;\n };\n}\n\ntype CallContextState = CallAdapterState & CallAdapterPrivateState;\n\n/** Context of call, which is a centralized context for all state updates */\nclass CallContext {\n private emitter: EventEmitter = new EventEmitter();\n private state: CallContextState;\n private callId: string | undefined;\n /* @conditional-compile-remove(breakout-rooms) */\n private isReturningFromBreakoutRoom: boolean = false;\n private displayNameModifier: AdapterStateModifier | undefined;\n\n constructor(\n clientState: CallClientState,\n isTeamsCall: boolean,\n isTeamsMeeting: boolean,\n isRoomsCall: boolean,\n options?: {\n maxListeners?: number;\n onFetchProfile?: OnFetchProfileCallback;\n videoBackgroundOptions?: {\n videoBackgroundImages?: VideoBackgroundImage[];\n onResolveDependency?: () => Promise<VideoBackgroundEffectsDependency>;\n };\n deepNoiseSuppressionOptions?: {\n onResolveDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;\n deepNoiseSuppressionOnByDefault?: boolean;\n hideDeepNoiseSuppressionButton?: boolean;\n };\n callingSounds?: CallingSounds;\n reactionResources?: ReactionResources;\n alternateCallerId?: string;\n },\n targetCallees?: StartCallIdentifier[]\n ) {\n this.state = {\n isLocalPreviewMicrophoneEnabled: false,\n userId: clientState.userId,\n displayName: clientState.callAgent?.displayName,\n devices: clientState.deviceManager,\n call: undefined,\n targetCallees: targetCallees as CommunicationIdentifier[],\n page: 'configuration',\n latestErrors: clientState.latestErrors,\n /* @conditional-compile-remove(breakout-rooms) */ latestNotifications: clientState.latestNotifications,\n isTeamsCall,\n isTeamsMeeting,\n isRoomsCall,\n alternateCallerId: options?.alternateCallerId,\n environmentInfo: clientState.environmentInfo,\n /* @conditional-compile-remove(unsupported-browser) */ unsupportedBrowserVersionsAllowed: false,\n videoBackgroundImages: options?.videoBackgroundOptions?.videoBackgroundImages,\n onResolveVideoEffectDependency: options?.videoBackgroundOptions?.onResolveDependency,\n onResolveDeepNoiseSuppressionDependency: options?.deepNoiseSuppressionOptions?.onResolveDependency,\n deepNoiseSuppressionOnByDefault: options?.deepNoiseSuppressionOptions?.deepNoiseSuppressionOnByDefault ?? true,\n hideDeepNoiseSuppressionButton: options?.deepNoiseSuppressionOptions?.hideDeepNoiseSuppressionButton ?? false,\n selectedVideoBackgroundEffect: undefined,\n cameraStatus: undefined,\n sounds: options?.callingSounds,\n reactions: options?.reactionResources\n };\n this.emitter.setMaxListeners(options?.maxListeners ?? 50);\n this.bindPublicMethods();\n this.displayNameModifier = options?.onFetchProfile\n ? createProfileStateModifier(options.onFetchProfile, () => {\n this.setState(this.getState());\n })\n : undefined;\n }\n\n private bindPublicMethods(): void {\n /* @conditional-compile-remove(unsupported-browser) */\n this.setAllowedUnsupportedBrowser.bind(this);\n }\n\n public onStateChange(handler: (_uiState: CallContextState) => void): void {\n this.emitter.on('stateChanged', handler);\n }\n\n public offStateChange(handler: (_uiState: CallContextState) => void): void {\n this.emitter.off('stateChanged', handler);\n }\n\n public setState(state: CallContextState): void {\n this.state = this.displayNameModifier ? this.displayNameModifier(state) : state;\n\n // This context privately tracks how captions was started to determine if captions is running only in the background.\n // If so we should not show the UI.\n this.state = captionsUIVisibilityModifier(this.state);\n\n this.emitter.emit('stateChanged', this.state);\n }\n\n public updateCaptionsStartedInBackground(captionsStartedInBackground: boolean): void {\n const captionsTriggers = this.state.captionsTriggers ?? {};\n captionsTriggers.captionsStartedInBackground = captionsStartedInBackground;\n this.setState({ ...this.state, captionsTriggers });\n }\n\n public updateCaptionsStartedWithUI(captionsStartedWithUI: boolean): void {\n const captionsTriggers = this.state.captionsTriggers ?? {};\n captionsTriggers.captionsStartedWithUI = captionsStartedWithUI;\n this.setState({ ...this.state, captionsTriggers });\n }\n\n public getState(): CallContextState {\n return this.state;\n }\n\n public setIsLocalMicrophoneEnabled(isLocalPreviewMicrophoneEnabled: boolean): void {\n this.setState({ ...this.state, isLocalPreviewMicrophoneEnabled });\n }\n\n // This is the key to find current call object in client state\n public setCurrentCallId(callId: string | undefined): void {\n this.callId = callId;\n }\n\n public setTargetCallee(targetCallees: StartCallIdentifier[]): void {\n this.setState({ ...this.state, targetCallees });\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n public setIsReturningFromBreakoutRoom(isReturningFromBreakoutRoom: boolean): void {\n this.isReturningFromBreakoutRoom = isReturningFromBreakoutRoom;\n }\n\n public onCallEnded(handler: (callEndedData: CallAdapterCallEndedEvent) => void): void {\n this.emitter.on('callEnded', handler);\n }\n\n public offCallEnded(handler: (callEndedData: CallAdapterCallEndedEvent) => void): void {\n this.emitter.off('callEnded', handler);\n }\n\n public updateClientState(clientState: CallClientState): void {\n let call = this.callId ? clientState.calls[this.callId] : undefined;\n const latestEndedCall = clientState.callsEnded ? findLatestEndedCall(clientState.callsEnded) : undefined;\n // As the state is transitioning to a new state, trigger appropriate callback events.\n const oldPage = this.state.page;\n /* @conditional-compile-remove(unsupported-browser) */\n const environmentInfo = {\n environmentInfo: this.state.environmentInfo,\n unsupportedBrowserVersionOptedIn: this.state.unsupportedBrowserVersionsAllowed\n };\n\n const latestAcceptedTransfer = call?.transfer.acceptedTransfers\n ? findLatestAcceptedTransfer(call.transfer.acceptedTransfers)\n : undefined;\n const transferCall = latestAcceptedTransfer ? clientState.calls[latestAcceptedTransfer.callId] : undefined;\n\n /* @conditional-compile-remove(breakout-rooms) */\n if (call?.state === 'Connected' || call?.state === 'Connecting') {\n this.setIsReturningFromBreakoutRoom(false);\n }\n\n let isReturningFromBreakoutRoom = false;\n /* @conditional-compile-remove(breakout-rooms) */\n isReturningFromBreakoutRoom = this.isReturningFromBreakoutRoom;\n\n const newPage = getCallCompositePage(\n call,\n latestEndedCall,\n transferCall,\n isReturningFromBreakoutRoom,\n /* @conditional-compile-remove(unsupported-browser) */ environmentInfo\n );\n if (!IsCallEndedPage(oldPage) && IsCallEndedPage(newPage)) {\n this.emitter.emit('callEnded', { callId: this.callId });\n // Reset the callId to undefined as the call has ended.\n this.setCurrentCallId(undefined);\n // Make sure that the call is set to undefined in the state.\n call = undefined;\n }\n\n if (this.state.page) {\n this.setState({\n ...this.state,\n userId: clientState.userId,\n displayName: clientState.callAgent?.displayName,\n call,\n page: newPage,\n endedCall: latestEndedCall,\n devices: clientState.deviceManager,\n latestErrors: clientState.latestErrors,\n /* @conditional-compile-remove(breakout-rooms) */ latestNotifications: clientState.latestNotifications,\n cameraStatus:\n call?.localVideoStreams.find((s) => s.mediaStreamType === 'Video') ||\n clientState.deviceManager.unparentedViews.find((s) => s.mediaStreamType === 'Video')\n ? 'On'\n : 'Off',\n acceptedTransferCallState: transferCall\n });\n }\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n public setAllowedUnsupportedBrowser(): void {\n this.setState({ ...this.state, unsupportedBrowserVersionsAllowed: true });\n }\n\n public setBackroundPickerImages(videoBackgroundImages: VideoBackgroundImage[]): void {\n this.setState({ ...this.state, videoBackgroundImages });\n }\n\n public setSelectedVideoBackgroundEffect(selectedVideoBackgroundEffect?: VideoBackgroundEffect): void {\n this.setState({ ...this.state, selectedVideoBackgroundEffect });\n }\n\n public setAcceptedTransferCall(call?: CallState): void {\n this.setState({ ...this.state, acceptedTransferCallState: call });\n }\n}\n\nconst findLatestEndedCall = (calls: { [key: string]: CallState }): CallState | undefined => {\n const callStates = Object.values(calls);\n if (callStates.length === 0) {\n return undefined;\n }\n let latestCall = callStates[0];\n for (const call of callStates.slice(1)) {\n if ((call.endTime?.getTime() ?? 0) > (latestCall?.endTime?.getTime() ?? 0)) {\n latestCall = call;\n }\n }\n return latestCall;\n};\n\nconst findLatestAcceptedTransfer = (acceptedTransfers: {\n [key: string]: AcceptedTransfer;\n}): AcceptedTransfer | undefined => {\n const acceptedTransferValues = Object.values(acceptedTransfers);\n if (acceptedTransferValues.length === 0) {\n return undefined;\n }\n let latestAcceptedTransfer = acceptedTransferValues[0];\n for (const acceptedTransfer of acceptedTransferValues.slice(1)) {\n if ((acceptedTransfer.timestamp?.getTime() ?? 0) > (latestAcceptedTransfer?.timestamp?.getTime() ?? 0)) {\n latestAcceptedTransfer = acceptedTransfer;\n }\n }\n return latestAcceptedTransfer;\n};\n\n/**\n * @private\n */\nexport type AdapterStateModifier = (state: CallAdapterState) => CallAdapterState;\n\n/**\n * @private\n */\nexport class AzureCommunicationCallAdapter<AgentType extends CallAgent | TeamsCallAgent = CallAgent>\n implements CommonCallAdapter\n{\n private callClient: StatefulCallClient;\n private callAgent: AgentType;\n private deviceManager: StatefulDeviceManager;\n private locator?: CallAdapterLocator;\n targetCallees?: StartCallIdentifier[];\n // Never use directly, even internally. Use `call` property instead.\n private _call?: CallCommon;\n private context: CallContext;\n private diagnosticsForwarder?: DiagnosticsForwarder;\n private handlers: CallHandlersOf<AgentType>;\n private participantSubscribers = new Map<string, ParticipantSubscriber>();\n private emitter: EventEmitter = new EventEmitter();\n private callingSoundSubscriber: CallingSoundSubscriber | undefined;\n private onClientStateChange: (clientState: CallClientState) => void;\n /* @conditional-compile-remove(breakout-rooms) */\n private originCall: CallCommon | undefined;\n private onResolveVideoBackgroundEffectsDependency?: () => Promise<VideoBackgroundEffectsDependency>;\n private onResolveDeepNoiseSuppressionDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;\n\n private get call(): CallCommon | undefined {\n return this._call;\n }\n\n private set call(newCall: CallCommon | undefined) {\n this.resetDiagnosticsForwarder(newCall);\n this._call = newCall;\n }\n constructor(\n callClient: StatefulCallClient,\n locator: CallAdapterLocator,\n callAgent: AgentType,\n deviceManager: StatefulDeviceManager,\n options?: AzureCommunicationCallAdapterOptions | TeamsAdapterOptions\n );\n constructor(\n callClient: StatefulCallClient,\n targetCallees: StartCallIdentifier[],\n callAgent: AgentType,\n deviceManager: StatefulDeviceManager,\n options?: AzureCommunicationCallAdapterOptions | TeamsAdapterOptions\n );\n constructor(\n callClient: StatefulCallClient,\n locatorOrTargetCalless: CallAdapterLocator | StartCallIdentifier[],\n callAgent: AgentType,\n deviceManager: StatefulDeviceManager,\n options?: AzureCommunicationCallAdapterOptions | TeamsAdapterOptions\n ) {\n this.bindPublicMethods();\n this.callClient = callClient;\n this.callAgent = callAgent;\n this.targetCallees =\n getLocatorOrTargetCallees(locatorOrTargetCalless) === true\n ? (locatorOrTargetCalless as StartCallIdentifier[])\n : undefined;\n this.locator =\n getLocatorOrTargetCallees(locatorOrTargetCalless) === false\n ? (locatorOrTargetCalless as CallAdapterLocator)\n : undefined;\n this.deviceManager = deviceManager;\n const isTeamsMeeting = this.locator ? 'meetingLink' in this.locator || 'meetingId' in this.locator : false;\n let isTeamsCall: boolean | undefined;\n this.targetCallees?.forEach((callee) => {\n if (isMicrosoftTeamsUserIdentifier(callee) || isMicrosoftTeamsAppIdentifier(callee)) {\n isTeamsCall = true;\n }\n });\n\n const isRoomsCall = this.locator ? 'roomId' in this.locator : false;\n\n this.onResolveVideoBackgroundEffectsDependency = options?.videoBackgroundOptions?.onResolveDependency;\n this.onResolveDeepNoiseSuppressionDependency = options?.deepNoiseSuppressionOptions?.onResolveDependency;\n\n this.context = new CallContext(\n callClient.getState(),\n !!isTeamsCall,\n isTeamsMeeting,\n isRoomsCall,\n options,\n this.targetCallees\n );\n\n this.context.onCallEnded((endCallData) => this.emitter.emit('callEnded', endCallData));\n\n const onStateChange = (clientState: CallClientState): void => {\n // unsubscribe when the instance gets disposed\n if (!this) {\n callClient.offStateChange(onStateChange);\n return;\n }\n // `updateClientState` searches for the current call from all the calls in the state using a cached `call.id`\n // from the call object. `call.id` can change during a call. We must update the cached `call.id` before\n // calling `updateClientState` so that we find the correct state object for the call even when `call.id`\n // has changed.\n // https://github.com/Azure/communication-ui-library/pull/1820\n if (this.call?.id) {\n this.context.setCurrentCallId(this.call.id);\n }\n\n // if the call hits the connected state we want to pause all calling sounds if playing.\n if (this.call?.state === 'Connected' && this.callingSoundSubscriber?.playingSounds) {\n this.callingSoundSubscriber.pauseSounds();\n }\n\n // If the call connects we need to clean up any previous unparentedViews\n if (\n (this.call?.state === 'InLobby' || this.call?.state === 'Connected') &&\n this.callClient.getState().deviceManager.unparentedViews.length > 0\n ) {\n this.callClient.getState().deviceManager.unparentedViews.forEach((view) => {\n this.callClient.disposeView(undefined, undefined, view);\n });\n }\n\n this.context.updateClientState(clientState);\n };\n\n this.handlers = createHandlers(callClient, callAgent, deviceManager, undefined, {\n onResolveVideoBackgroundEffectsDependency: this.onResolveVideoBackgroundEffectsDependency,\n onResolveDeepNoiseSuppressionDependency: this.onResolveDeepNoiseSuppressionDependency\n });\n\n this.onClientStateChange = onStateChange;\n\n this.subscribeDeviceManagerEvents();\n\n this.callClient.onStateChange(onStateChange);\n\n if (this.callAgent.kind === 'CallAgent') {\n const onCallsUpdated = (args: { added: Call[]; removed: Call[] }): void => {\n if (!this.call?.id) {\n return;\n }\n\n const removedCall = args.removed.find((call) => call.id === this.call?.id);\n if (!removedCall) {\n return;\n }\n\n const removedCallState = this.callClient.getState().callsEnded[removedCall.id];\n if (!removedCallState) {\n return;\n }\n\n const latestAcceptedTransfer = findLatestAcceptedTransfer(removedCallState.transfer.acceptedTransfers);\n const _callAgent = callAgent as CallAgent;\n const transferCall = _callAgent.calls.find((call: Call) => call.id === latestAcceptedTransfer?.callId);\n if (!transferCall) {\n return;\n }\n\n this.processNewCall(transferCall);\n };\n (this.callAgent as CallAgent).on('callsUpdated', onCallsUpdated);\n }\n\n if (this.callAgent.kind === 'TeamsCallAgent') {\n const onTeamsCallsUpdated = (args: { added: TeamsCall[]; removed: TeamsCall[] }): void => {\n if (!this.call?.id) {\n return;\n }\n\n const removedCall = args.removed.find((call) => call.id === this.call?.id);\n if (!removedCall) {\n return;\n }\n\n const removedCallState = this.callClient.getState().callsEnded[removedCall.id];\n if (!removedCallState) {\n return;\n }\n\n const latestAcceptedTransfer = findLatestAcceptedTransfer(removedCallState.transfer.acceptedTransfers);\n const _callAgent = callAgent as TeamsCallAgent;\n const transferCall = _callAgent.calls.find((call: TeamsCall) => call.id === latestAcceptedTransfer?.callId);\n if (!transferCall) {\n return;\n }\n\n this.processNewCall(transferCall);\n };\n (this.callAgent as TeamsCallAgent).on('callsUpdated', onTeamsCallsUpdated);\n }\n }\n\n // TODO: update this to include the 'selectedCameraChanged' when calling adds it to the device manager\n private subscribeDeviceManagerEvents(): void {\n this.deviceManager.on('selectedMicrophoneChanged', () => {\n this.emitter.emit('selectedMicrophoneChanged');\n });\n this.deviceManager.on('selectedSpeakerChanged', () => {\n this.emitter.emit('selectedSpeakerChanged');\n });\n }\n\n private bindPublicMethods(): void {\n this.onStateChange.bind(this);\n this.offStateChange.bind(this);\n this.getState.bind(this);\n this.dispose.bind(this);\n this.joinCall.bind(this);\n this.leaveCall.bind(this);\n this.setCamera.bind(this);\n this.setMicrophone.bind(this);\n this.setSpeaker.bind(this);\n this.askDevicePermission.bind(this);\n this.queryCameras.bind(this);\n this.queryMicrophones.bind(this);\n this.querySpeakers.bind(this);\n this.startCamera.bind(this);\n this.stopCamera.bind(this);\n this.mute.bind(this);\n this.unmute.bind(this);\n this.startCall.bind(this);\n this.startScreenShare.bind(this);\n this.stopScreenShare.bind(this);\n this.raiseHand.bind(this);\n this.onReactionClick.bind(this);\n this.lowerHand.bind(this);\n this.removeParticipant.bind(this);\n this.createStreamView.bind(this);\n this.disposeStreamView.bind(this);\n /* @conditional-compile-remove(together-mode) */\n this.createTogetherModeStreamView.bind(this);\n /* @conditional-compile-remove(together-mode) */\n this.startTogetherMode.bind(this);\n /* @conditional-compile-remove(together-mode) */\n this.setTogetherModeSceneSize.bind(this);\n /* @conditional-compile-remove(together-mode) */\n this.disposeTogetherModeStreamView.bind(this);\n this.disposeScreenShareStreamView.bind(this);\n this.disposeRemoteVideoStreamView.bind(this);\n this.disposeLocalVideoStreamView.bind(this);\n this.on.bind(this);\n this.off.bind(this);\n this.processNewCall.bind(this);\n this.addParticipant.bind(this);\n this.holdCall.bind(this);\n this.resumeCall.bind(this);\n this.sendDtmfTone.bind(this);\n /* @conditional-compile-remove(unsupported-browser) */\n this.allowUnsupportedBrowserVersion.bind(this);\n this.startCaptions.bind(this);\n this.stopCaptions.bind(this);\n this.setSpokenLanguage.bind(this);\n this.setCaptionLanguage.bind(this);\n /* @conditional-compile-remove(rtt) */\n this.sendRealTimeText.bind(this);\n this.startVideoBackgroundEffect.bind(this);\n this.stopVideoBackgroundEffects.bind(this);\n this.updateBackgroundPickerImages.bind(this);\n this.startNoiseSuppressionEffect.bind(this);\n this.stopNoiseSuppressionEffect.bind(this);\n this.submitSurvey.bind(this);\n this.startSpotlight.bind(this);\n this.stopSpotlight.bind(this);\n this.stopAllSpotlight.bind(this);\n this.muteParticipant.bind(this);\n this.muteAllRemoteParticipants.bind(this);\n this.forbidOthersAudio.bind(this);\n this.permitOthersAudio.bind(this);\n this.forbidOthersAudio.bind(this);\n this.permitOthersAudio.bind(this);\n }\n\n public dispose(): void {\n this.resetDiagnosticsForwarder();\n this.callClient.offStateChange(this.onClientStateChange);\n this.callAgent.dispose();\n }\n\n public async queryCameras(): Promise<VideoDeviceInfo[]> {\n const startTime = new Date().getTime();\n return await this.asyncTeeErrorToEventEmitter(async () => {\n const cameras = await this.deviceManager.getCameras();\n const endTime = new Date().getTime();\n compositeLogger.info('time to query cameras', endTime - startTime, 'ms');\n return cameras;\n });\n }\n\n public async queryMicrophones(): Promise<AudioDeviceInfo[]> {\n const startTime = new Date().getTime();\n return await this.asyncTeeErrorToEventEmitter(async () => {\n const microphones = await this.deviceManager.getMicrophones();\n const endTime = new Date().getTime();\n compositeLogger.info('time to query microphones', endTime - startTime, 'ms');\n return microphones;\n });\n }\n\n public async querySpeakers(): Promise<AudioDeviceInfo[]> {\n const startTime = new Date().getTime();\n return await this.asyncTeeErrorToEventEmitter(async () => {\n const speakers = (await this.deviceManager.isSpeakerSelectionAvailable) ? this.deviceManager.getSpeakers() : [];\n const endTime = new Date().getTime();\n compositeLogger.info('time to query speakers', endTime - startTime, 'ms');\n return speakers;\n });\n }\n\n public async askDevicePermission(constrain: PermissionConstraints): Promise<DeviceAccess> {\n const startTime = new Date().getTime();\n return await this.asyncTeeErrorToEventEmitter(async () => {\n const result = await this.deviceManager.askDevicePermission(constrain);\n const endTime = new Date().getTime();\n compositeLogger.info('time to query askDevicePermissions', endTime - startTime, 'ms');\n return result;\n });\n }\n\n public joinCall(options?: boolean | JoinCallOptions): CallTypeOf<AgentType> | undefined {\n if (_isInCall(this.getState().call?.state ?? 'None')) {\n throw new Error('You are already in the call!');\n } else if (this.locator === undefined) {\n throw new Error('Locator is not defined!');\n }\n\n return this.teeErrorToEventEmitter(() => {\n // Default to keeping camera/mic on if no override argument specified\n let shouldCameraBeOnInCall = this.getState().cameraStatus === 'On';\n let shouldMicrophoneBeOnInCall = this.getState().isLocalPreviewMicrophoneEnabled;\n\n // Apply override arguments\n if (typeof options === 'boolean') {\n // Deprecated joinCall API (boolen)\n shouldMicrophoneBeOnInCall = options;\n } else if (typeof options === 'object') {\n // Options bag API\n if (options.microphoneOn && options.microphoneOn !== 'keep') {\n shouldMicrophoneBeOnInCall = options.microphoneOn;\n }\n if (options.cameraOn && options.cameraOn !== 'keep') {\n shouldCameraBeOnInCall = options.cameraOn;\n }\n }\n\n const audioOptions: AudioOptions = { muted: !shouldMicrophoneBeOnInCall };\n const selectedCamera = getSelectedCameraFromAdapterState(this.getState());\n const videoOptions: VideoOptions =\n selectedCamera && shouldCameraBeOnInCall\n ? { localVideoStreams: [new SDKLocalVideoStream(selectedCamera)] }\n : {};\n const call = this._joinCall(audioOptions, videoOptions);\n\n /* @conditional-compile-remove(breakout-rooms) */\n this.originCall = call;\n this.processNewCall(call);\n return call;\n });\n }\n\n private _joinCall(audioOptions: AudioOptions, videoOptions: VideoOptions): CallTypeOf<AgentType> {\n const isTeamsMeeting = this.locator ? 'meetingLink' in this.locator : false;\n const isTeamsMeetingId = this.locator ? 'meetingId' in this.locator : false;\n const isRoomsCall = this.locator ? 'roomId' in this.locator : false;\n\n if (_isTeamsCallAgent(this.callAgent)) {\n if (isTeamsMeeting) {\n return this.callAgent.join(this.locator as TeamsMeetingLinkLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n if (isTeamsMeetingId) {\n return this.callAgent.join(this.locator as TeamsMeetingIdLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n throw new Error('Locator not supported by TeamsCallAgent');\n }\n\n if (isTeamsMeeting) {\n return this.callAgent.join(this.locator as TeamsMeetingLinkLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n\n if (isTeamsMeetingId) {\n return this.callAgent.join(this.locator as TeamsMeetingIdLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n if (isRoomsCall) {\n return this.callAgent.join(this.locator as RoomCallLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n return this.callAgent.join(this.locator as GroupCallLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n\n public async createStreamView(\n remoteUserId?: string,\n options?: VideoStreamOptions\n ): Promise<void | CreateVideoStreamViewResult> {\n if (remoteUserId === undefined) {\n return await this.handlers.onCreateLocalStreamView(options);\n } else {\n return await this.handlers.onCreateRemoteStreamView(remoteUserId, options);\n }\n }\n\n public async disposeStreamView(remoteUserId?: string): Promise<void> {\n if (remoteUserId === undefined) {\n await this.handlers.onDisposeLocalStreamView();\n } else {\n await this.handlers.onDisposeRemoteStreamView(remoteUserId);\n }\n }\n\n public async disposeScreenShareStreamView(remoteUserId: string): Promise<void> {\n if (remoteUserId !== '') {\n await this.handlers.onDisposeRemoteScreenShareStreamView(remoteUserId);\n } else {\n await this.handlers.onDisposeLocalScreenShareStreamView();\n }\n }\n\n public async disposeRemoteVideoStreamView(remoteUserId: string): Promise<void> {\n await this.handlers.onDisposeRemoteVideoStreamView(remoteUserId);\n }\n\n public async disposeLocalVideoStreamView(): Promise<void> {\n await this.handlers.onDisposeLocalStreamView();\n }\n\n /* @conditional-compile-remove(together-mode) */\n public async createTogetherModeStreamView(\n options?: TogetherModeStreamOptions\n ): Promise<void | TogetherModeStreamViewResult> {\n return await this.handlers.onCreateTogetherModeStreamView(options);\n }\n\n /* @conditional-compile-remove(together-mode) */\n public async startTogetherMode(): Promise<void> {\n return await this.handlers.onStartTogetherMode();\n }\n\n /* @conditional-compile-remove(together-mode) */\n public setTogetherModeSceneSize(width: number, height: number): void {\n return this.handlers.onSetTogetherModeSceneSize(width, height);\n }\n\n /* @conditional-compile-remove(together-mode) */\n public async disposeTogetherModeStreamView(): Promise<void> {\n return await this.handlers.onDisposeTogetherModeStreamView();\n }\n\n public async leaveCall(forEveryone?: boolean): Promise<void> {\n if (this.getState().page === 'transferring') {\n const transferCall = this.callAgent.calls.filter(\n (call) => call.id === this.getState().acceptedTransferCallState?.id\n )[0];\n transferCall?.hangUp();\n }\n await this.handlers.onHangUp(forEveryone);\n this.unsubscribeCallEvents();\n this.handlers = createHandlers(this.callClient, this.callAgent, this.deviceManager, this.call, {\n onResolveVideoBackgroundEffectsDependency: this.onResolveVideoBackgroundEffectsDependency,\n onResolveDeepNoiseSuppressionDependency: this.onResolveDeepNoiseSuppressionDependency\n });\n // We set the adapter.call object to undefined immediately when a call is ended.\n // We do not set the context.callId to undefined because it is a part of the immutable data flow loop.\n this.call = undefined;\n this.stopCamera();\n this.mute();\n }\n\n public async setCamera(device: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onSelectCamera(device, options);\n });\n }\n\n public async setMicrophone(device: AudioDeviceInfo): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onSelectMicrophone(device);\n });\n }\n\n public async setSpeaker(device: AudioDeviceInfo): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onSelectSpeaker(device);\n });\n }\n\n public async startCamera(options?: VideoStreamOptions): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n if (!isCameraOn(this.getState())) {\n // First kick off the effect on the local device before starting the camera in the call.\n // This prevents the effect not being applied for a brief moment when the camera is started.\n\n {\n const selectedEffect = this.getState().selectedVideoBackgroundEffect;\n const selectedCamera = getSelectedCameraFromAdapterState(this.getState());\n if (selectedEffect && selectedCamera && this.onResolveVideoBackgroundEffectsDependency) {\n const stream = new SDKLocalVideoStream(selectedCamera);\n const effect = getBackgroundEffectFromSelectedEffect(\n selectedEffect,\n await this.onResolveVideoBackgroundEffectsDependency()\n );\n\n if (effect) {\n await stream.feature(Features.VideoEffects).startEffects(effect);\n } else {\n await stream.feature(Features.VideoEffects).stopEffects();\n }\n }\n }\n\n await this.handlers.onToggleCamera(options);\n }\n });\n }\n\n public async stopCamera(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n if (isCameraOn(this.getState())) {\n await this.handlers.onToggleCamera();\n }\n });\n }\n\n public async mute(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n this.context.setIsLocalMicrophoneEnabled(false);\n if (_isInCall(this.call?.state) && !this.call?.isMuted) {\n await this.handlers.onToggleMicrophone();\n }\n });\n }\n\n public async unmute(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n this.context.setIsLocalMicrophoneEnabled(true);\n if ((_isInCall(this.call?.state) || _isInLobbyOrConnecting(this.call?.state)) && this.call?.isMuted) {\n await this.handlers.onToggleMicrophone();\n }\n });\n }\n\n public async startScreenShare(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n if (!this.call?.isScreenSharingOn) {\n await this.handlers.onToggleScreenShare();\n }\n });\n }\n\n public async stopScreenShare(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n if (this.call?.isScreenSharingOn) {\n await this.handlers.onToggleScreenShare();\n }\n });\n }\n\n public async raiseHand(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onToggleRaiseHand();\n });\n }\n\n public async lowerHand(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onToggleRaiseHand();\n });\n }\n\n public async onReactionClick(reaction: Reaction): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onReactionClick(reaction);\n });\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n public allowUnsupportedBrowserVersion(): void {\n this.context.setAllowedUnsupportedBrowser();\n this.context.updateClientState(this.callClient.getState());\n }\n\n public async startVideoBackgroundEffect(videoBackgroundEffect: VideoBackgroundEffect): Promise<void> {\n if (this.isBlurEffect(videoBackgroundEffect)) {\n const blurConfig = videoBackgroundEffect as BackgroundBlurConfig;\n await this.handlers.onBlurVideoBackground(blurConfig);\n } else if (this.isReplacementEffect(videoBackgroundEffect)) {\n const replaceConfig = videoBackgroundEffect as BackgroundReplacementConfig;\n await this.handlers.onReplaceVideoBackground(replaceConfig);\n }\n }\n\n public async stopVideoBackgroundEffects(): Promise<void> {\n await this.handlers.onRemoveVideoBackgroundEffects();\n }\n\n public updateBackgroundPickerImages(backgroundImages: VideoBackgroundImage[]): void {\n this.context.setBackroundPickerImages(backgroundImages);\n }\n\n public updateSelectedVideoBackgroundEffect(selectedVideoBackground: VideoBackgroundEffect): void {\n this.context.setSelectedVideoBackgroundEffect(selectedVideoBackground);\n }\n\n public async startNoiseSuppressionEffect(): Promise<void> {\n await this.handlers.onStartNoiseSuppressionEffect();\n }\n\n public async stopNoiseSuppressionEffect(): Promise<void> {\n await this.handlers.onStopNoiseSuppressionEffect();\n }\n\n public startCall(\n participants:\n | string[]\n | (\n | MicrosoftTeamsAppIdentifier\n | PhoneNumberIdentifier\n | CommunicationUserIdentifier\n | MicrosoftTeamsUserIdentifier\n | UnknownIdentifier\n )[],\n options?: StartCallOptions\n ): CallTypeOf<AgentType> | undefined {\n if (_isInCall(this.getState().call?.state ?? 'None')) {\n throw new Error('You are already in the call.');\n }\n\n const isCameraOn = this.getState().cameraStatus === 'On';\n const selectedCamera = getSelectedCameraFromAdapterState(this.getState());\n /* we only configure the video options here since the Calling SDK always unmutes the participant when starting a call */\n const startCallVideoOptions: StartCallOptions = selectedCamera\n ? {\n videoOptions: isCameraOn ? { localVideoStreams: [new SDKLocalVideoStream(selectedCamera)] } : undefined\n }\n : {};\n\n const combinedCallOptions = { ...startCallVideoOptions, ...options };\n\n const idsToAdd = participants.map((participant) => {\n const backendId: CommunicationIdentifier = _toCommunicationIdentifier(participant);\n if ('phoneNumber' in backendId) {\n if (options?.alternateCallerId === undefined) {\n throw new Error('Unable to start call, PSTN user present with no alternateCallerId.');\n }\n }\n return backendId;\n });\n\n this.context.setTargetCallee(\n idsToAdd as (\n | MicrosoftTeamsAppIdentifier\n | PhoneNumberIdentifier\n | CommunicationUserIdentifier\n | MicrosoftTeamsUserIdentifier\n | UnknownIdentifier\n )[]\n );\n\n const call = this.handlers.onStartCall(idsToAdd, combinedCallOptions) as CallTypeOf<AgentType>;\n if (!call) {\n throw new Error('Unable to start call.');\n }\n this.processNewCall(call);\n\n return call;\n }\n\n private processNewCall(call: CallCommon): void {\n this.call = call;\n this.context.setCurrentCallId(call.id);\n\n // Resync state after callId is set\n this.context.updateClientState(this.callClient.getState());\n this.handlers = createHandlers(this.callClient, this.callAgent, this.deviceManager, this.call, {\n onResolveVideoBackgroundEffectsDependency: this.onResolveVideoBackgroundEffectsDependency,\n onResolveDeepNoiseSuppressionDependency: this.onResolveDeepNoiseSuppressionDependency\n });\n this.subscribeCallEvents();\n }\n\n private isBlurEffect(effect: VideoBackgroundEffect): effect is VideoBackgroundBlurEffect {\n return effect.effectName === 'blur';\n }\n\n private isReplacementEffect(effect: VideoBackgroundEffect): effect is VideoBackgroundReplacementEffect {\n return effect.effectName === 'replacement';\n }\n\n public async removeParticipant(userId: string | CommunicationIdentifier): Promise<void> {\n let participant = userId;\n participant = _toCommunicationIdentifier(userId);\n this.handlers.onRemoveParticipant(participant);\n }\n\n public async addParticipant(participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void>;\n\n public async addParticipant(participant: CommunicationUserIdentifier): Promise<void>;\n\n public async addParticipant(\n participant: PhoneNumberIdentifier | CommunicationUserIdentifier,\n options?: AddPhoneNumberOptions\n ): Promise<void> {\n if (isPhoneNumberIdentifier(participant) && options) {\n this.handlers.onAddParticipant(participant, options);\n } else if (isCommunicationUserIdentifier(participant)) {\n this.handlers.onAddParticipant(participant);\n }\n }\n\n public async holdCall(): Promise<void> {\n if (this.call?.state !== 'LocalHold') {\n if (this.call?.isLocalVideoStarted) {\n this.stopCamera().then(() => {\n this.handlers.onToggleHold();\n });\n } else {\n this.handlers.onToggleHold();\n }\n }\n }\n\n public async resumeCall(): Promise<void> {\n if (this.call?.state === 'LocalHold') {\n this.handlers.onToggleHold().then(() => {\n if (this.call?.feature(Features.Capabilities).capabilities.turnVideoOn.isPresent === false) {\n this.stopCamera();\n }\n });\n }\n }\n\n public async sendDtmfTone(dtmfTone: DtmfTone): Promise<void> {\n this.handlers.onSendDtmfTone(dtmfTone);\n }\n\n public async startCaptions(options?: StartCaptionsAdapterOptions): Promise<void> {\n if (options?.startInBackground) {\n this.context.updateCaptionsStartedInBackground(true);\n } else {\n this.context.updateCaptionsStartedWithUI(true);\n }\n this.handlers.onStartCaptions(options);\n }\n\n public async stopCaptions(options?: StopCaptionsAdapterOptions): Promise<void> {\n if (options?.stopInBackground) {\n this.context.updateCaptionsStartedInBackground(false);\n }\n\n this.context.updateCaptionsStartedWithUI(false);\n\n // Only stop captions if they are not still running in the background\n if (!this.context.getState().captionsTriggers?.captionsStartedInBackground) {\n this.handlers.onStopCaptions();\n }\n }\n\n public async setCaptionLanguage(language: string): Promise<void> {\n this.handlers.onSetCaptionLanguage(language);\n }\n\n public async setSpokenLanguage(language: string): Promise<void> {\n this.handlers.onSetSpokenLanguage(language);\n }\n /* @conditional-compile-remove(rtt) */\n public async sendRealTimeText(text: string, isFinalized: boolean): Promise<void> {\n this.handlers.onSendRealTimeText(text, isFinalized);\n }\n public async submitSurvey(survey: CallSurvey): Promise<CallSurveyResponse | undefined> {\n return this.handlers.onSubmitSurvey(survey);\n }\n\n public async muteParticipant(userId: string): Promise<void> {\n this.handlers.onMuteParticipant(userId);\n }\n\n public async muteAllRemoteParticipants(): Promise<void> {\n this.handlers.onMuteAllRemoteParticipants();\n }\n\n public async startSpotlight(userIds?: string[]): Promise<void> {\n this.handlers.onStartSpotlight(userIds);\n }\n\n public async stopSpotlight(userIds?: string[]): Promise<void> {\n this.handlers.onStopSpotlight(userIds);\n }\n\n public async stopAllSpotlight(): Promise<void> {\n this.handlers.onStopAllSpotlight();\n }\n\n public async forbidAudio(userIds: string[]): Promise<void> {\n this.handlers.onForbidAudio?.(userIds);\n }\n\n public async permitAudio(userIds: string[]): Promise<void> {\n this.handlers.onPermitAudio?.(userIds);\n }\n\n public async forbidOthersAudio(): Promise<void> {\n this.handlers.onForbidOthersAudio?.();\n }\n\n public async permitOthersAudio(): Promise<void> {\n this.handlers.onPermitOthersAudio?.();\n }\n\n public async forbidVideo(userIds: string[]): Promise<void> {\n this.handlers.onForbidVideo?.(userIds);\n }\n\n public async permitVideo(userIds: string[]): Promise<void> {\n this.handlers.onPermitVideo?.(userIds);\n }\n\n public async forbidOthersVideo(): Promise<void> {\n this.handlers.onForbidOthersVideo?.();\n }\n\n public async permitOthersVideo(): Promise<void> {\n this.handlers.onPermitOthersVideo?.();\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n public async returnFromBreakoutRoom(): Promise<void> {\n const callState = this.call?.id ? this.callClient.getState().calls[this.call.id] : undefined;\n const assignedBreakoutRoom = callState?.breakoutRooms?.assignedBreakoutRoom;\n\n if (!assignedBreakoutRoom) {\n throw new Error(\n 'Could not return from breakout room because assigned breakout room state could not be retrieved.'\n );\n }\n\n this.context.setIsReturningFromBreakoutRoom(true);\n\n const mainMeeting = await assignedBreakoutRoom.returnToMainMeeting();\n this.originCall = mainMeeting;\n this.processNewCall(mainMeeting);\n }\n\n public getState(): CallAdapterState {\n return this.context.getState();\n }\n\n public onStateChange(handler: (state: CallAdapterState) => void): void {\n this.context.onStateChange(handler);\n }\n\n public offStateChange(handler: (state: CallAdapterState) => void): void {\n this.context.offStateChange(handler);\n }\n\n on(event: 'participantsJoined', listener: ParticipantsJoinedListener): void;\n on(event: 'participantsLeft', listener: ParticipantsLeftListener): void;\n on(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n on(event: 'callIdChanged', listener: CallIdChangedListener): void;\n on(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n on(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n on(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n on(event: 'callEnded', listener: CallEndedListener): void;\n on(event: 'diagnosticChanged', listener: DiagnosticChangedEventListner): void;\n on(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n on(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n on(event: 'error', errorHandler: (e: AdapterError) => void): void;\n on(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n on(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n on(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n on(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n /* @conditional-compile-remove(rtt) */\n on(event: 'realTimeTextReceived', listener: RealTimeTextReceivedListener): void;\n on(event: 'transferAccepted', listener: TransferAcceptedListener): void;\n on(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n on(event: 'roleChanged', listener: PropertyChangedEvent): void;\n on(event: 'spotlightChanged', listener: SpotlightChangedListener): void;\n on(event: 'mutedByOthers', listener: PropertyChangedEvent): void;\n /* @conditional-compile-remove(breakout-rooms) */\n on(event: 'breakoutRoomsUpdated', listener: BreakoutRoomsUpdatedListener): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public on(event: string, listener: (e: any) => void): void {\n this.emitter.on(event, listener);\n }\n\n private subscribeToCaptionEvents(): void {\n const captionsFeature = this.call?.feature(Features.Captions);\n if (\n captionsFeature?.captions.kind === 'TeamsCaptions' &&\n (this.context.getState().isTeamsCall || this.context.getState().isTeamsMeeting)\n ) {\n const teamsCaptionsFeature = captionsFeature.captions as TeamsCaptions;\n teamsCaptionsFeature.on('CaptionsReceived', this.teamsCaptionsReceived.bind(this));\n teamsCaptionsFeature.on('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));\n teamsCaptionsFeature.on('CaptionLanguageChanged', this.isCaptionLanguageChanged.bind(this));\n teamsCaptionsFeature.on('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));\n } else {\n const acsCaptionsFeature = captionsFeature?.captions as Captions;\n\n acsCaptionsFeature.on('CaptionsReceived', this.captionsReceived.bind(this));\n\n acsCaptionsFeature.on('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));\n\n acsCaptionsFeature.on('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));\n\n captionsFeature?.on('CaptionsKindChanged', this.captionsKindChanged.bind(this));\n }\n }\n\n private unsubscribeFromCaptionEvents(): void {\n const captionsFeature = this.call?.feature(Features.Captions);\n if (\n captionsFeature?.captions.kind === 'TeamsCaptions' &&\n (this.context.getState().isTeamsCall || this.context.getState().isTeamsMeeting)\n ) {\n const teamsCaptionsFeature = captionsFeature.captions as TeamsCaptions;\n teamsCaptionsFeature.off('CaptionsReceived', this.teamsCaptionsReceived.bind(this));\n teamsCaptionsFeature.off('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));\n teamsCaptionsFeature.off('CaptionLanguageChanged', this.isCaptionLanguageChanged.bind(this));\n teamsCaptionsFeature.off('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));\n } else {\n const acsCaptionsFeature = captionsFeature?.captions as Captions;\n\n acsCaptionsFeature.off('CaptionsReceived', this.captionsReceived.bind(this));\n\n acsCaptionsFeature.off('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));\n\n acsCaptionsFeature.off('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));\n\n captionsFeature?.off('CaptionsKindChanged', this.captionsKindChanged.bind(this));\n }\n }\n\n private subscribeCallEvents(): void {\n if (this.call) {\n this.callingSoundSubscriber = new CallingSoundSubscriber(\n this.call,\n this.getState().targetCallees,\n this.getState().sounds\n );\n }\n this.call?.on('remoteParticipantsUpdated', this.onRemoteParticipantsUpdated.bind(this));\n this.call?.on('isMutedChanged', this.isMyMutedChanged.bind(this));\n this.call?.on('isScreenSharingOnChanged', this.isScreenSharingOnChanged.bind(this));\n this.call?.on('idChanged', this.callIdChanged.bind(this));\n this.call?.on('roleChanged', this.roleChanged.bind(this));\n\n this.subscribeToCaptionEvents();\n this.call?.feature(Features.Transfer).on('transferAccepted', this.transferAccepted.bind(this));\n this.call?.feature(Features.Capabilities).on('capabilitiesChanged', this.capabilitiesChanged.bind(this));\n this.call?.feature(Features.Spotlight).on('spotlightChanged', this.spotlightChanged.bind(this));\n /* @conditional-compile-remove(rtt) */\n this.call?.feature(Features.RealTimeText).on('realTimeTextReceived', this.realTimeTextReceived.bind(this));\n /* @conditional-compile-remove(breakout-rooms) */\n const breakoutRoomsFeature = this.call?.feature(Features.BreakoutRooms);\n /* @conditional-compile-remove(breakout-rooms) */\n if (breakoutRoomsFeature) {\n breakoutRoomsFeature.on('breakoutRoomsUpdated', this.breakoutRoomsUpdated.bind(this));\n }\n }\n\n private unsubscribeCallEvents(): void {\n for (const subscriber of this.participantSubscribers.values()) {\n subscriber.unsubscribeAll();\n }\n this.participantSubscribers.clear();\n this.call?.off('remoteParticipantsUpdated', this.onRemoteParticipantsUpdated.bind(this));\n this.call?.off('isMutedChanged', this.isMyMutedChanged.bind(this));\n this.call?.off('isScreenSharingOnChanged', this.isScreenSharingOnChanged.bind(this));\n this.call?.off('idChanged', this.callIdChanged.bind(this));\n this.call?.off('roleChanged', this.roleChanged.bind(this));\n\n this.unsubscribeFromCaptionEvents();\n /* @conditional-compile-remove(rtt) */\n this.call?.feature(Features.RealTimeText).off('realTimeTextReceived', this.realTimeTextReceived.bind(this));\n if (this.callingSoundSubscriber) {\n this.callingSoundSubscriber.unsubscribeAll();\n }\n /* @conditional-compile-remove(breakout-rooms) */\n const breakoutRoomsFeature = this.call?.feature(Features.BreakoutRooms);\n /* @conditional-compile-remove(breakout-rooms) */\n if (breakoutRoomsFeature) {\n breakoutRoomsFeature.off('breakoutRoomsUpdated', this.breakoutRoomsUpdated.bind(this));\n }\n }\n\n private isMyMutedChanged = (): void => {\n this.emitter.emit('isMutedChanged', {\n participantId: this.getState().userId,\n isMuted: this.call?.isMuted\n });\n };\n\n private captionsKindChanged(): void {\n const captionsFeature = this.call?.feature(Features.Captions);\n const teamsCaptionsFeature = captionsFeature?.captions as TeamsCaptions;\n teamsCaptionsFeature.on('CaptionsReceived', this.teamsCaptionsReceived.bind(this));\n teamsCaptionsFeature.on('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));\n teamsCaptionsFeature.on('CaptionLanguageChanged', this.isCaptionLanguageChanged.bind(this));\n teamsCaptionsFeature.on('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));\n }\n\n private onRemoteParticipantsUpdated({\n added,\n removed\n }: {\n added: RemoteParticipant[];\n removed: RemoteParticipant[];\n }): void {\n if (added && added.length > 0) {\n this.emitter.emit('participantsJoined', { joined: added });\n }\n if (removed && removed.length > 0) {\n this.emitter.emit('participantsLeft', { removed: removed });\n }\n\n added.forEach((participant) => {\n this.participantSubscribers.set(\n toFlatCommunicationIdentifier(participant.identifier),\n new ParticipantSubscriber(participant, this.emitter)\n );\n });\n\n removed.forEach((participant) => {\n const subscriber = this.participantSubscribers.get(toFlatCommunicationIdentifier(participant.identifier));\n subscriber && subscriber.unsubscribeAll();\n this.participantSubscribers.delete(toFlatCommunicationIdentifier(participant.identifier));\n });\n }\n\n private isScreenSharingOnChanged(): void {\n this.emitter.emit('isLocalScreenSharingActiveChanged', { isScreenSharingOn: this.call?.isScreenSharingOn });\n }\n\n private teamsCaptionsReceived(captionsInfo: TeamsCaptionsInfo): void {\n this.emitter.emit('captionsReceived', { captionsInfo });\n }\n\n private captionsReceived(captionsInfo: CaptionsInfo): void {\n this.emitter.emit('captionsReceived', { captionsInfo });\n }\n /* @conditional-compile-remove(rtt) */\n private realTimeTextReceived(realTimeText: RealTimeTextInfo): void {\n this.emitter.emit('realTimeTextReceived', { realTimeText });\n }\n\n private isCaptionsActiveChanged(): void {\n const captionsFeature = this.call?.feature(Features.Captions).captions as TeamsCaptions | Captions;\n this.emitter.emit('isCaptionsActiveChanged', {\n isActive: captionsFeature.isCaptionsFeatureActive\n });\n }\n\n private isSpokenLanguageChanged(): void {\n const captionsFeature = this.call?.feature(Features.Captions).captions as TeamsCaptions | Captions;\n this.emitter.emit('isSpokenLanguageChanged', {\n activeSpokenLanguage: captionsFeature.activeSpokenLanguage\n });\n }\n\n private isCaptionLanguageChanged(): void {\n const captionsFeature = this.call?.feature(Features.Captions).captions as TeamsCaptions;\n this.emitter.emit('isCaptionLanguageChanged', {\n activeCaptionLanguage: captionsFeature.activeCaptionLanguage\n });\n }\n\n private transferAccepted(args: TransferEventArgs): void {\n this.emitter.emit('transferAccepted', args);\n }\n\n private capabilitiesChanged(data: CapabilitiesChangeInfo): void {\n if (data.newValue.turnVideoOn?.isPresent === false) {\n // stopCamera is handled by web sdk when video hard muted.\n this.disposeLocalVideoStreamView();\n }\n\n if (data.newValue.shareScreen?.isPresent === false) {\n this.stopScreenShare();\n }\n this.emitter.emit('capabilitiesChanged', data);\n }\n\n private roleChanged(): void {\n if (this.call?.role === 'Consumer') {\n this.call?.feature(Features.RaiseHand).lowerHand();\n }\n this.emitter.emit('roleChanged');\n }\n\n private spotlightChanged(args: { added: SpotlightedParticipant[]; removed: SpotlightedParticipant[] }): void {\n this.emitter.emit('spotlightChanged', args);\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n private breakoutRoomsUpdated(eventData: BreakoutRoomsEventData): void {\n if (eventData.type === 'assignedBreakoutRooms') {\n this.assignedBreakoutRoomUpdated(eventData.data);\n } else if (eventData.type === 'join') {\n this.breakoutRoomJoined(eventData.data);\n }\n this.emitter.emit('breakoutRoomsUpdated', eventData);\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n private assignedBreakoutRoomUpdated(breakoutRoom?: BreakoutRoom): void {\n if (!this.call?.id) {\n return;\n }\n if (this.originCall?.id !== this.call?.id && (!breakoutRoom || breakoutRoom.state === 'closed')) {\n this.returnFromBreakoutRoom();\n }\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n private breakoutRoomJoined(call: Call | TeamsCall): void {\n if (this.call?.id !== call.id) {\n this.processNewCall(call);\n }\n // Hang up other breakout room calls in case we are joining a new breakout room while already in one\n this.hangupOtherBreakoutRoomCalls(call.id);\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n private hangupOtherBreakoutRoomCalls(currentBreakoutRoomCallId: string): void {\n // Get other breakout room calls by checking which other calls have breakout room settings defined\n const otherBreakoutRoomCallStates = Object.values(this.callClient.getState().calls).filter((callState) => {\n return callState.breakoutRooms?.breakoutRoomSettings && callState.id !== currentBreakoutRoomCallId;\n });\n\n // Hang up other breakout room calls\n for (const breakoutRoom of otherBreakoutRoomCallStates) {\n const breakoutRoomCall = this.callAgent.calls.find((callAgentCall) => {\n return callAgentCall.id === breakoutRoom.id;\n });\n breakoutRoomCall?.hangUp();\n }\n }\n\n private callIdChanged(): void {\n this.call?.id && this.emitter.emit('callIdChanged', { callId: this.call.id });\n }\n\n private resetDiagnosticsForwarder(newCall?: CallCommon): void {\n if (this.diagnosticsForwarder) {\n this.diagnosticsForwarder.unsubscribe();\n }\n if (newCall) {\n this.diagnosticsForwarder = new DiagnosticsForwarder(this.emitter, newCall);\n }\n }\n\n off(event: 'participantsJoined', listener: ParticipantsJoinedListener): void;\n off(event: 'participantsLeft', listener: ParticipantsLeftListener): void;\n off(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n off(event: 'callIdChanged', listener: CallIdChangedListener): void;\n off(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n off(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n off(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n off(event: 'callEnded', listener: CallEndedListener): void;\n off(event: 'diagnosticChanged', listener: DiagnosticChangedEventListner): void;\n off(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n off(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n off(event: 'error', errorHandler: (e: AdapterError) => void): void;\n off(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n off(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n off(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n off(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n /* @conditional-compile-remove(rtt) */\n off(event: 'realTimeTextReceived', listener: RealTimeTextReceivedListener): void;\n off(event: 'transferAccepted', listener: TransferAcceptedListener): void;\n off(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n off(event: 'roleChanged', listener: PropertyChangedEvent): void;\n off(event: 'spotlightChanged', listener: SpotlightChangedListener): void;\n off(event: 'mutedByOthers', listener: PropertyChangedEvent): void;\n /* @conditional-compile-remove(breakout-rooms) */\n off(event: 'breakoutRoomsUpdated', listener: BreakoutRoomsUpdatedListener): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public off(event: string, listener: (e: any) => void): void {\n this.emitter.off(event, listener);\n }\n\n private async asyncTeeErrorToEventEmitter<T>(f: () => Promise<T>): Promise<T> {\n try {\n return await f();\n } catch (error) {\n if (isCallError(error as Error)) {\n this.emitter.emit('error', error as AdapterError);\n }\n throw error;\n }\n }\n\n private teeErrorToEventEmitter<T>(f: () => T): T {\n try {\n return f();\n } catch (error) {\n if (isCallError(error as Error)) {\n this.emitter.emit('error', error as AdapterError);\n }\n throw error;\n }\n }\n}\n\n/* @conditional-compile-remove(call-participants-locator) */\n/**\n * Locator used by {@link createAzureCommunicationCallAdapter} to call one or more participants\n *\n * @remarks\n * This is currently in beta and only supports calling one Teams User.\n *\n * @example\n * ```\n * ['8:orgid:ab220efe-5725-4742-9792-9fba7c9ac458']\n * ```\n *\n * @beta\n */\nexport type CallParticipantsLocator = {\n participantIds: string[];\n};\n\n/**\n * Locator used by {@link createAzureCommunicationCallAdapter} to locate the call to join\n *\n * @public\n */\nexport type CallAdapterLocator =\n | TeamsMeetingLinkLocator\n | GroupCallLocator\n | RoomCallLocator\n | /* @conditional-compile-remove(call-participants-locator) */ CallParticipantsLocator\n | TeamsMeetingIdLocator;\n\n/**\n * Common optional parameters to create {@link AzureCommunicationCallAdapter} or {@link TeamsCallAdapter}\n *\n * @public\n */\nexport type CommonCallAdapterOptions = {\n /**\n * Default set of background images for background image picker.\n */\n videoBackgroundOptions?: {\n videoBackgroundImages?: VideoBackgroundImage[];\n onResolveDependency?: () => Promise<VideoBackgroundEffectsDependency>;\n };\n /**\n * `DeepNoiseSuppressionEffect` options to be used for noise suppression.\n */\n deepNoiseSuppressionOptions?: {\n onResolveDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;\n deepNoiseSuppressionOnByDefault?: boolean;\n hideDeepNoiseSuppressionButton?: boolean;\n };\n /**\n * Use this to fetch profile information which will override data in {@link CallAdapterState} like display name\n * The onFetchProfile is fetch-and-forget one time action for each user, once a user profile is updated, the value will be cached\n * and would not be updated again within the lifecycle of adapter.\n */\n onFetchProfile?: OnFetchProfileCallback;\n /**\n * Sounds to use for calling events\n */\n callingSounds?: CallingSounds;\n /**\n * Reaction resource for reaction resources\n * @beta\n */\n reactionResources?: ReactionResources;\n /**\n * A phone number in E.164 format procured using Azure Communication Services that will be used to represent callers identity.\n * E.164 numbers are formatted as [+] [country code] [phone number including area code]. For example, +14255550123 for a US phone number.\n */\n alternateCallerId?: string;\n};\n\n/**\n * Optional parameters to create {@link AzureCommunicationCallAdapter}\n *\n * @public\n */\nexport type AzureCommunicationCallAdapterOptions = CommonCallAdapterOptions;\n\n/**\n * Arguments for creating the Azure Communication Services implementation of {@link CallAdapter}.\n *\n * Note: `displayName` can be a maximum of 256 characters.\n *\n * @public\n */\nexport type AzureCommunicationCallAdapterArgs = {\n userId: CommunicationUserIdentifier;\n displayName: string;\n credential: CommunicationTokenCredential;\n locator: CallAdapterLocator;\n /**\n * Optional parameters for the {@link AzureCommunicationCallAdapter} created\n */\n options?: AzureCommunicationCallAdapterOptions;\n};\n\n/**\n * Arguments for creating the Azure Communication Services implementation of {@link CallAdapter}.\n *\n * These arguments are used to create an outbound call scenarios.\n *\n * Note: `displayName` can be a maximum of 256 characters.\n *\n * @public\n */\nexport type AzureCommunicationOutboundCallAdapterArgs = {\n userId: CommunicationUserIdentifier;\n displayName: string;\n credential: CommunicationTokenCredential;\n targetCallees: StartCallIdentifier[];\n /**\n * A phone number in E.164 format procured using Azure Communication Services that will be used to represent callers identity.\n * E.164 numbers are formatted as [+] [country code] [phone number including area code]. For example, +14255550123 for a US phone number.\n */\n alternateCallerId?: string;\n\n /**\n * Optional parameters for the {@link AzureCommunicationCallAdapter} created\n */\n options?: AzureCommunicationCallAdapterOptions;\n};\n\n/**\n * Optional parameters to create {@link TeamsCallAdapter}\n *\n * @public\n */\nexport type TeamsAdapterOptions = CommonCallAdapterOptions;\n\n/**\n * Common part of args to create the Azure Communication Services implementation of {@link TeamsCallAdapter}.\n *\n * @public\n */\nexport type TeamsCallAdapterArgsCommon = {\n userId: MicrosoftTeamsUserIdentifier;\n credential: CommunicationTokenCredential;\n options?: TeamsAdapterOptions;\n};\n\n/**\n * Arguments for creating the Azure Communication Services implementation of {@link TeamsCallAdapter}.\n *\n * @public\n */\nexport type TeamsCallAdapterArgs = TeamsCallAdapterArgsCommon & {\n locator:\n | TeamsMeetingLinkLocator\n | /* @conditional-compile-remove(call-participants-locator) */ CallParticipantsLocator\n | TeamsMeetingIdLocator;\n};\n\n/* @conditional-compile-remove(teams-identity-support-beta) */\n/**\n * Parameter to start a call using a Teams user identity.\n *\n * @beta\n */\nexport type StartTeamsCallIdentifier =\n | MicrosoftTeamsUserIdentifier\n | PhoneNumberIdentifier\n | MicrosoftTeamsAppIdentifier\n | UnknownIdentifier;\n\n/* @conditional-compile-remove(teams-identity-support-beta) */\n/**\n * Arguments for creating the Azure Communication Services implementation of {@link TeamsCallAdapter}.\n *\n * This is used to create an outbound call scenarios.\n *\n * @beta\n */\nexport type TeamsOutboundCallAdapterArgs = TeamsCallAdapterArgsCommon & {\n targetCallees: StartTeamsCallIdentifier[];\n};\n\n/**\n * Create a {@link CallAdapter} backed by Azure Communication Services.\n *\n * This is the default implementation of {@link CallAdapter} provided by this library.\n *\n * Note: `displayName` can be a maximum of 256 characters.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapter(\n args: AzureCommunicationCallAdapterArgs\n): Promise<CallAdapter>;\n/**\n * Create a {@link CallAdapter} backed by Azure Communication Services.\n *\n * This is the default implementation of {@link CallAdapter} provided by this library.\n *\n * Note: `displayName` can be a maximum of 256 characters.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapter(\n args: AzureCommunicationOutboundCallAdapterArgs\n): Promise<CallAdapter>;\n/**\n * @public\n */\n/**\n * Create a {@link CallAdapter} backed by Azure Communication Services.\n *\n * This is the default implementation of {@link CallAdapter} provided by this library.\n *\n * Note: `displayName` can be a maximum of 256 characters.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapter(\n args: AzureCommunicationCallAdapterArgs | AzureCommunicationOutboundCallAdapterArgs\n): Promise<CallAdapter> {\n if (isMicrosoftTeamsUserIdentifier(args.userId)) {\n throw new Error(\n 'Microsoft Teams user identifier is not supported by AzureCommunicationCallAdapter. Instead use TeamsCallAdapter.'\n );\n }\n return _createAzureCommunicationCallAdapterInner({\n userId: args.userId,\n displayName: args.displayName,\n credential: args.credential,\n locator: (args as AzureCommunicationCallAdapterArgs).locator,\n targetCallees: (args as AzureCommunicationOutboundCallAdapterArgs).targetCallees,\n options: args.options\n });\n}\n\n/**\n * This inner function is used to allow injection of TelemetryImplementationHint without changing the public API.\n *\n * @internal\n */\nexport const _createAzureCommunicationCallAdapterInner = async ({\n userId,\n displayName,\n credential,\n locator,\n targetCallees,\n options,\n telemetryImplementationHint = 'Call'\n}: {\n userId: CommunicationUserIdentifier;\n displayName: string;\n credential: CommunicationTokenCredential;\n locator: CallAdapterLocator;\n targetCallees?: StartCallIdentifier[];\n alternateCallerId?: string;\n options?: AzureCommunicationCallAdapterOptions;\n telemetryImplementationHint?: _TelemetryImplementationHint;\n}): Promise<CallAdapter> => {\n if (!_isValidIdentifier(userId)) {\n throw new Error('Invalid identifier. Please provide valid identifier object.');\n }\n const callClient = _createStatefulCallClientInner(\n {\n userId\n },\n undefined,\n telemetryImplementationHint\n );\n const callAgent = await callClient.createCallAgent(credential, {\n displayName\n });\n let adapter;\n if (locator) {\n adapter = createAzureCommunicationCallAdapterFromClient(callClient, callAgent, locator, options);\n } else {\n adapter = createAzureCommunicationCallAdapterFromClient(\n callClient,\n callAgent,\n targetCallees as StartCallIdentifier[],\n options\n );\n }\n return adapter;\n};\n\n/**\n * @public\n */\nexport const createTeamsCallAdapter = async (\n args:\n | TeamsCallAdapterArgs\n | /* @conditional-compile-remove(teams-identity-support-beta) */ TeamsOutboundCallAdapterArgs\n): Promise<TeamsCallAdapter> => {\n const { userId, credential, options } = args;\n if (isCommunicationUserIdentifier(userId)) {\n throw new Error(\n 'Communication User identifier is not supported by TeamsCallAdapter, please use our AzureCommunicationCallAdapter.'\n );\n }\n const callClient = _createStatefulCallClientInner(\n {\n userId\n },\n undefined,\n 'Call' as _TelemetryImplementationHint\n );\n const callAgent = await callClient.createTeamsCallAgent(credential, {\n undefined\n });\n\n /* @conditional-compile-remove(teams-identity-support-beta) */\n if ('targetCallees' in args) {\n return createTeamsCallAdapterFromClient(callClient, callAgent, args.targetCallees, options);\n }\n\n const adapter = createTeamsCallAdapterFromClient(callClient, callAgent, args.locator, options);\n return adapter;\n};\n\ntype PartialArgsType<Adapter> = Adapter extends CallAdapter\n ? Partial<AzureCommunicationCallAdapterArgs>\n : Partial<TeamsCallAdapterArgs>;\n\ntype PartialArgsOutboundType<Adapter> = Adapter extends CallAdapter\n ? Partial<AzureCommunicationOutboundCallAdapterArgs>\n : Partial<TeamsCallAdapterArgs>;\n\ntype AdapterOf<AdapterKind extends 'AzureCommunication' | 'Teams'> = AdapterKind extends 'AzureCommunication'\n ? CallAdapter\n : never | TeamsCallAdapter;\n\n/**\n * @private\n */\nfunction useAzureCommunicationCallAdapterGeneric<\n AdapterKind extends 'AzureCommunication' | 'Teams',\n Adapter extends AdapterOf<AdapterKind>\n>(\n args: PartialArgsType<Adapter>,\n adapterKind: AdapterKind,\n afterCreate?: (adapter: Adapter) => Promise<Adapter>,\n beforeDispose?: (adapter: Adapter) => Promise<void>\n): Adapter | undefined;\n/**\n * @private\n */\nfunction useAzureCommunicationCallAdapterGeneric<\n AdapterKind extends 'AzureCommunication' | 'Teams',\n Adapter extends AdapterOf<AdapterKind>\n>(\n args: PartialArgsOutboundType<Adapter>,\n adapterKind: AdapterKind,\n afterCreate?: (adapter: Adapter) => Promise<Adapter>,\n beforeDispose?: (adapter: Adapter) => Promise<void>\n): Adapter | undefined;\n/**\n * @private\n */\nfunction useAzureCommunicationCallAdapterGeneric<\n AdapterKind extends 'AzureCommunication' | 'Teams',\n Adapter extends AdapterOf<AdapterKind>\n>(\n args: PartialArgsType<Adapter> | PartialArgsOutboundType<Adapter>,\n adapterKind: AdapterKind = 'AzureCommunication' as AdapterKind,\n afterCreate?: (adapter: Adapter) => Promise<Adapter>,\n beforeDispose?: (adapter: Adapter) => Promise<void>\n): Adapter | undefined {\n const { credential, userId } = args;\n const locator = 'locator' in args ? args.locator : undefined;\n const targetCallees = 'targetCallees' in args ? args.targetCallees : undefined;\n const displayName = 'displayName' in args ? args.displayName : undefined;\n\n const options = 'options' in args ? args.options : undefined;\n\n // State update needed to rerender the parent component when a new adapter is created.\n const [adapter, setAdapter] = useState<Adapter | undefined>(undefined);\n // Ref needed for cleanup to access the old adapter created asynchronously.\n const adapterRef = useRef<Adapter | undefined>(undefined);\n const creatingAdapterRef = useRef<boolean>(false);\n\n const afterCreateRef = useRef<((adapter: Adapter) => Promise<Adapter>) | undefined>(undefined);\n const beforeDisposeRef = useRef<((adapter: Adapter) => Promise<void>) | undefined>(undefined);\n // These refs are updated on *each* render, so that the latest values\n // are used in the `useEffect` closures below.\n // Using a Ref ensures that new values for the callbacks do not trigger the\n // useEffect blocks, and a new adapter creation / distruction is not triggered.\n afterCreateRef.current = afterCreate;\n beforeDisposeRef.current = beforeDispose;\n\n useEffect(\n () => {\n if (!credential || (!locator && !targetCallees) || !userId) {\n return;\n }\n\n if (adapterKind === 'AzureCommunication' && !displayName) {\n return;\n }\n (async () => {\n if (adapterRef.current) {\n // Dispose the old adapter when a new one is created.\n //\n // This clean up function uses `adapterRef` because `adapter` can not be added to the dependency array of\n // this `useEffect` -- we do not want to trigger a new adapter creation because of the first adapter\n // creation.\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n let newAdapter: Adapter | undefined = undefined;\n if (adapterKind === 'AzureCommunication') {\n // This is just the type check to ensure that displayName is defined.\n if (!displayName) {\n throw new Error('Unreachable code, displayName already checked above.');\n }\n if (creatingAdapterRef.current) {\n console.warn(\n 'Adapter is already being created, please see storybook for more information: https://azure.github.io/communication-ui-library/?path=/story/troubleshooting--page'\n );\n return;\n }\n creatingAdapterRef.current = true;\n if (locator) {\n newAdapter = (await createAzureCommunicationCallAdapter({\n credential,\n displayName: displayName,\n locator,\n userId: userId as CommunicationUserIdentifier,\n options\n })) as Adapter;\n } else if (targetCallees) {\n newAdapter = (await createAzureCommunicationCallAdapter({\n credential,\n displayName: displayName,\n targetCallees,\n userId: userId as CommunicationUserIdentifier,\n options\n })) as Adapter;\n }\n } else if (adapterKind === 'Teams') {\n if (creatingAdapterRef.current) {\n console.warn('Adapter is already being created, skipping creation.');\n return;\n }\n creatingAdapterRef.current = true;\n if (targetCallees) {\n /* @conditional-compile-remove(teams-identity-support-beta) */\n newAdapter = (await createTeamsCallAdapter({\n credential,\n userId: userId as MicrosoftTeamsUserIdentifier,\n targetCallees: targetCallees as StartTeamsCallIdentifier[],\n options\n })) as Adapter;\n } else {\n newAdapter = (await createTeamsCallAdapter({\n credential,\n locator: locator as TeamsMeetingLinkLocator,\n userId: userId as MicrosoftTeamsUserIdentifier,\n options\n })) as Adapter;\n }\n } else {\n throw new Error('Unreachable code, unknown adapterKind');\n }\n\n if (!newAdapter) {\n throw Error('Unreachable code! Get undefined adapter');\n }\n\n if (afterCreateRef.current) {\n newAdapter = await afterCreateRef.current(newAdapter);\n }\n adapterRef.current = newAdapter;\n creatingAdapterRef.current = false;\n setAdapter(newAdapter);\n })();\n },\n // Explicitly list all arguments so that caller doesn't have to memoize the `args` object.\n [\n adapterRef,\n afterCreateRef,\n beforeDisposeRef,\n adapterKind,\n credential,\n locator,\n userId,\n displayName,\n options,\n targetCallees\n ]\n );\n\n // Dispose any existing adapter when the component unmounts.\n useEffect(() => {\n return () => {\n (async () => {\n if (adapterRef.current) {\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n })();\n };\n }, []);\n\n return adapter;\n}\n\n/**\n * A custom React hook to simplify the creation of {@link CallAdapter}.\n *\n * Similar to {@link createAzureCommunicationCallAdapter}, but takes care of asynchronous\n * creation of the adapter internally.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n *\n * Note that you must memoize the arguments to avoid recreating adapter on each render.\n * See storybook for typical usage examples.\n *\n * @public\n */\nexport const useAzureCommunicationCallAdapter = (\n /**\n * Arguments to be passed to {@link createAzureCommunicationCallAdapter}.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n */\n args: Partial<AzureCommunicationCallAdapterArgs | AzureCommunicationOutboundCallAdapterArgs>,\n /**\n * Optional callback to modify the adapter once it is created.\n *\n * If set, must return the modified adapter.\n */\n afterCreate?: (adapter: CallAdapter) => Promise<CallAdapter>,\n /**\n * Optional callback called before the adapter is disposed.\n *\n * This is useful for clean up tasks, e.g., leaving any ongoing calls.\n */\n beforeDispose?: (adapter: CallAdapter) => Promise<void>\n): CallAdapter | undefined => {\n return useAzureCommunicationCallAdapterGeneric(args, 'AzureCommunication', afterCreate, beforeDispose);\n};\n\n/**\n * A custom React hook to simplify the creation of {@link TeamsCallAdapter}.\n *\n * Similar to {@link createTeamsAzureCommunicationCallAdapter}, but takes care of asynchronous\n * creation of the adapter internally.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n *\n * Note that you must memoize the arguments to avoid recreating adapter on each render.\n * See storybook for typical usage examples.\n *\n * @public\n */\nexport const useTeamsCallAdapter = (\n /**\n * Arguments to be passed to {@link createAzureCommunicationCallAdapter}.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n */\n args: Partial<\n TeamsCallAdapterArgs | /* @conditional-compile-remove(teams-identity-support-beta) */ TeamsOutboundCallAdapterArgs\n >,\n /**\n * Optional callback to modify the adapter once it is created.\n *\n * If set, must return the modified adapter.\n */\n afterCreate?: (adapter: TeamsCallAdapter) => Promise<TeamsCallAdapter>,\n /**\n * Optional callback called before the adapter is disposed.\n *\n * This is useful for clean up tasks, e.g., leaving any ongoing calls.\n */\n beforeDispose?: (adapter: TeamsCallAdapter) => Promise<void>\n): TeamsCallAdapter | undefined => {\n return useAzureCommunicationCallAdapterGeneric(args, 'Teams', afterCreate, beforeDispose);\n};\n\n/**\n * Create a {@link CallAdapter} using the provided {@link StatefulCallClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulCallClient}.\n * Consider using {@link createAzureCommunicationCallAdapter} for a simpler API.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapterFromClient(\n callClient: StatefulCallClient,\n callAgent: CallAgent,\n targetCallees: StartCallIdentifier[],\n options?: AzureCommunicationCallAdapterOptions\n): Promise<CallAdapter>;\n/**\n * Create a {@link CallAdapter} using the provided {@link StatefulCallClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulCallClient}.\n * Consider using {@link createAzureCommunicationCallAdapter} for a simpler API.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapterFromClient(\n callClient: StatefulCallClient,\n callAgent: CallAgent,\n locator: CallAdapterLocator,\n options?: AzureCommunicationCallAdapterOptions\n): Promise<CallAdapter>;\n/**\n * Create a {@link CallAdapter} using the provided {@link StatefulCallClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulCallClient}.\n * Consider using {@link createAzureCommunicationCallAdapter} for a simpler API.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapterFromClient(\n callClient: StatefulCallClient,\n callAgent: CallAgent,\n locatorOrtargetCallees: CallAdapterLocator | StartCallIdentifier[],\n options?: AzureCommunicationCallAdapterOptions\n): Promise<CallAdapter> {\n const deviceManager = (await callClient.getDeviceManager()) as StatefulDeviceManager;\n await Promise.all([deviceManager.getCameras(), deviceManager.getMicrophones()]);\n if (deviceManager.isSpeakerSelectionAvailable) {\n await deviceManager.getSpeakers();\n }\n if (getLocatorOrTargetCallees(locatorOrtargetCallees)) {\n return new AzureCommunicationCallAdapter(\n callClient,\n locatorOrtargetCallees as StartCallIdentifier[],\n callAgent,\n deviceManager,\n options\n );\n } else {\n return new AzureCommunicationCallAdapter(\n callClient,\n locatorOrtargetCallees as CallAdapterLocator,\n callAgent,\n deviceManager,\n options\n );\n }\n}\n\n/**\n * Create a {@link TeamsCallAdapter} using the provided {@link StatefulCallClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulCallClient}.\n * Consider using {@link createAzureCommunicationCallAdapter} for a simpler API.\n *\n * @public\n */\nexport const createTeamsCallAdapterFromClient = async (\n callClient: StatefulCallClient,\n callAgent: TeamsCallAgent,\n locator:\n | CallAdapterLocator\n | /* @conditional-compile-remove(teams-identity-support-beta) */ StartTeamsCallIdentifier[],\n options?: TeamsAdapterOptions\n): Promise<TeamsCallAdapter> => {\n const deviceManager = (await callClient.getDeviceManager()) as StatefulDeviceManager;\n await Promise.all([deviceManager.getCameras(), deviceManager.getMicrophones()]);\n if (deviceManager.isSpeakerSelectionAvailable) {\n await deviceManager.getSpeakers();\n }\n if (Array.isArray(locator)) {\n return new AzureCommunicationCallAdapter(callClient, locator, callAgent, deviceManager, options);\n } else {\n return new AzureCommunicationCallAdapter(callClient, locator, callAgent, deviceManager, options);\n }\n};\n\nconst captionsUIVisibilityModifier = (state: CallContextState): CallContextState => {\n // To hide captions to the UI, set isCaptionsFeatureActive to false and startCaptionsInProgress to false\n if (\n state.call?.captionsFeature &&\n state.captionsTriggers?.captionsStartedInBackground &&\n !state.captionsTriggers?.captionsStartedWithUI\n ) {\n return {\n ...state,\n call: {\n ...state.call,\n captionsFeature: {\n ...state.call.captionsFeature,\n isCaptionsFeatureActive: false,\n startCaptionsInProgress: false\n }\n }\n };\n }\n return state;\n};\n\nconst isCallError = (e: Error): e is CallError => {\n return 'target' in e && 'innerError' in e;\n};\n"]}
|
1
|
+
{"version":3,"file":"AzureCommunicationCallAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { compositeLogger } from '../../../Logger';\nimport { _isInCall, _isInLobbyOrConnecting } from '@internal/calling-component-bindings';\nimport {\n CallClientState,\n CallError,\n CallState,\n _createStatefulCallClientInner,\n StatefulCallClient,\n StatefulDeviceManager,\n TeamsCall,\n _isACSCall,\n _isTeamsCall\n} from '@internal/calling-stateful-client';\nimport { AcceptedTransfer } from '@internal/calling-stateful-client';\nimport { _isTeamsCallAgent } from '@internal/calling-stateful-client';\nimport { CallCommon } from '@internal/calling-stateful-client';\nimport { _TelemetryImplementationHint } from '@internal/acs-ui-common';\nimport {\n AudioOptions,\n CallAgent,\n GroupCallLocator,\n TeamsMeetingLinkLocator,\n LocalVideoStream as SDKLocalVideoStream,\n AudioDeviceInfo,\n VideoDeviceInfo,\n RemoteParticipant,\n PermissionConstraints,\n PropertyChangedEvent,\n RoomCallLocator,\n StartCallOptions,\n VideoOptions,\n Call\n} from '@azure/communication-calling';\nimport { SpotlightedParticipant } from '@azure/communication-calling';\nimport { TeamsMeetingIdLocator } from '@azure/communication-calling';\nimport { Reaction } from '@azure/communication-calling';\nimport { TeamsCaptions } from '@azure/communication-calling';\nimport { Captions, CaptionsInfo } from '@azure/communication-calling';\nimport { TransferEventArgs } from '@azure/communication-calling';\nimport { TeamsCaptionsInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(rtt) */\nimport type { RealTimeTextInfo } from '@azure/communication-calling';\nimport type { BackgroundBlurConfig, BackgroundReplacementConfig, DeviceAccess } from '@azure/communication-calling';\nimport type { CapabilitiesChangeInfo } from '@azure/communication-calling';\nimport { TeamsCallAgent } from '@azure/communication-calling';\nimport { Features } from '@azure/communication-calling';\nimport { AddPhoneNumberOptions } from '@azure/communication-calling';\nimport { DtmfTone } from '@azure/communication-calling';\n/* @conditional-compile-remove(breakout-rooms) */\nimport type { BreakoutRoom, BreakoutRoomsEventData, BreakoutRoomsUpdatedListener } from '@azure/communication-calling';\nimport { EventEmitter } from 'events';\nimport {\n CommonCallAdapter,\n CallEndedListener,\n CallIdChangedListener,\n CallAdapterState,\n DisplayNameChangedListener,\n IsMutedChangedListener,\n IsLocalScreenSharingActiveChangedListener,\n IsSpeakingChangedListener,\n ParticipantsJoinedListener,\n ParticipantsLeftListener,\n DiagnosticChangedEventListner,\n CallAdapterCallEndedEvent,\n CallAdapter,\n JoinCallOptions,\n StartCallIdentifier,\n StartCaptionsAdapterOptions,\n StopCaptionsAdapterOptions\n} from './CallAdapter';\nimport { ReactionResources } from '@internal/react-components';\nimport { TransferAcceptedListener } from './CallAdapter';\nimport { CapabilitiesChangedListener } from './CallAdapter';\nimport { SpotlightChangedListener } from './CallAdapter';\nimport {\n CaptionsReceivedListener,\n IsCaptionsActiveChangedListener,\n IsCaptionLanguageChangedListener,\n IsSpokenLanguageChangedListener\n} from './CallAdapter';\n/* @conditional-compile-remove(rtt) */\nimport { RealTimeTextReceivedListener } from './CallAdapter';\nimport {\n VideoBackgroundImage,\n VideoBackgroundEffect,\n VideoBackgroundBlurEffect,\n VideoBackgroundReplacementEffect\n} from './CallAdapter';\nimport { TeamsCallAdapter } from './CallAdapter';\nimport { getCallCompositePage, getLocatorOrTargetCallees, IsCallEndedPage, isCameraOn } from '../utils';\nimport { CreateVideoStreamViewResult, VideoStreamOptions } from '@internal/react-components';\nimport { toFlatCommunicationIdentifier, _toCommunicationIdentifier, _isValidIdentifier } from '@internal/acs-ui-common';\nimport {\n CommunicationTokenCredential,\n CommunicationUserIdentifier,\n CommunicationIdentifier,\n MicrosoftTeamsUserIdentifier,\n isMicrosoftTeamsUserIdentifier,\n MicrosoftTeamsAppIdentifier,\n UnknownIdentifier,\n isMicrosoftTeamsAppIdentifier\n} from '@azure/communication-common';\nimport { isCommunicationUserIdentifier } from '@azure/communication-common';\nimport { isPhoneNumberIdentifier, PhoneNumberIdentifier } from '@azure/communication-common';\nimport { ParticipantSubscriber } from './ParticipantSubcriber';\nimport { AdapterError } from '../../common/adapters';\nimport { DiagnosticsForwarder } from './DiagnosticsForwarder';\nimport { useEffect, useRef, useState } from 'react';\nimport { CallHandlersOf, createHandlers } from './createHandlers';\nimport { createProfileStateModifier, OnFetchProfileCallback } from './OnFetchProfileCallback';\nimport { getBackgroundEffectFromSelectedEffect } from '../utils';\nimport { getSelectedCameraFromAdapterState } from '../utils';\nimport {\n DeepNoiseSuppressionEffectDependency,\n VideoBackgroundEffectsDependency\n} from '@internal/calling-component-bindings';\nimport { CallSurvey, CallSurveyResponse } from '@azure/communication-calling';\nimport { CallingSoundSubscriber } from './CallingSoundSubscriber';\nimport { CallingSounds } from './CallAdapter';\n/* @conditional-compile-remove(together-mode) */\nimport { TogetherModeStreamViewResult, TogetherModeStreamOptions } from '@internal/react-components';\n\ntype CallTypeOf<AgentType extends CallAgent | TeamsCallAgent> = AgentType extends CallAgent ? Call : TeamsCall;\n\n/**\n * State used by the CallAdapter to manage the call state that is not exposed to the public API.\n */\ninterface CallAdapterPrivateState {\n /** Track how captions has been started to decide on showing UI or not */\n captionsTriggers?: {\n captionsStartedInBackground?: boolean;\n captionsStartedWithUI?: boolean;\n };\n}\n\n/**\n * For each time that we use the hook {@link useSelector} in the {@link CallComposite} we add another listener\n * to the `stateChanged` event on the this adapter. This number is set in relation to the number of\n * times that we are using the hook useSelector in the CallComposite.\n *\n * We will need to update this as the threshold is reached with more usages of useSelector.\n */\nconst EVENT_LISTENER_WARNING_WARNING_LIMIT = 125;\n\ntype CallContextState = CallAdapterState & CallAdapterPrivateState;\n\n/** Context of call, which is a centralized context for all state updates */\nclass CallContext {\n private emitter: EventEmitter = new EventEmitter();\n private state: CallContextState;\n private callId: string | undefined;\n /* @conditional-compile-remove(breakout-rooms) */\n private isReturningFromBreakoutRoom: boolean = false;\n private displayNameModifier: AdapterStateModifier | undefined;\n\n constructor(\n clientState: CallClientState,\n isTeamsCall: boolean,\n isTeamsMeeting: boolean,\n isRoomsCall: boolean,\n options?: {\n maxListeners?: number;\n onFetchProfile?: OnFetchProfileCallback;\n videoBackgroundOptions?: {\n videoBackgroundImages?: VideoBackgroundImage[];\n onResolveDependency?: () => Promise<VideoBackgroundEffectsDependency>;\n };\n deepNoiseSuppressionOptions?: {\n onResolveDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;\n deepNoiseSuppressionOnByDefault?: boolean;\n hideDeepNoiseSuppressionButton?: boolean;\n };\n callingSounds?: CallingSounds;\n reactionResources?: ReactionResources;\n alternateCallerId?: string;\n },\n targetCallees?: StartCallIdentifier[]\n ) {\n this.state = {\n isLocalPreviewMicrophoneEnabled: false,\n userId: clientState.userId,\n displayName: clientState.callAgent?.displayName,\n devices: clientState.deviceManager,\n call: undefined,\n targetCallees: targetCallees as CommunicationIdentifier[],\n page: 'configuration',\n latestErrors: clientState.latestErrors,\n /* @conditional-compile-remove(breakout-rooms) */ latestNotifications: clientState.latestNotifications,\n isTeamsCall,\n isTeamsMeeting,\n isRoomsCall,\n alternateCallerId: options?.alternateCallerId,\n environmentInfo: clientState.environmentInfo,\n /* @conditional-compile-remove(unsupported-browser) */ unsupportedBrowserVersionsAllowed: false,\n videoBackgroundImages: options?.videoBackgroundOptions?.videoBackgroundImages,\n onResolveVideoEffectDependency: options?.videoBackgroundOptions?.onResolveDependency,\n onResolveDeepNoiseSuppressionDependency: options?.deepNoiseSuppressionOptions?.onResolveDependency,\n deepNoiseSuppressionOnByDefault: options?.deepNoiseSuppressionOptions?.deepNoiseSuppressionOnByDefault ?? true,\n hideDeepNoiseSuppressionButton: options?.deepNoiseSuppressionOptions?.hideDeepNoiseSuppressionButton ?? false,\n selectedVideoBackgroundEffect: undefined,\n cameraStatus: undefined,\n sounds: options?.callingSounds,\n reactions: options?.reactionResources\n };\n this.emitter.setMaxListeners(options?.maxListeners ?? EVENT_LISTENER_WARNING_WARNING_LIMIT);\n this.bindPublicMethods();\n this.displayNameModifier = options?.onFetchProfile\n ? createProfileStateModifier(options.onFetchProfile, () => {\n this.setState(this.getState());\n })\n : undefined;\n }\n\n private bindPublicMethods(): void {\n /* @conditional-compile-remove(unsupported-browser) */\n this.setAllowedUnsupportedBrowser.bind(this);\n }\n\n public onStateChange(handler: (_uiState: CallContextState) => void): void {\n this.emitter.on('stateChanged', handler);\n }\n\n public offStateChange(handler: (_uiState: CallContextState) => void): void {\n this.emitter.off('stateChanged', handler);\n }\n\n public setState(state: CallContextState): void {\n this.state = this.displayNameModifier ? this.displayNameModifier(state) : state;\n\n // This context privately tracks how captions was started to determine if captions is running only in the background.\n // If so we should not show the UI.\n this.state = captionsUIVisibilityModifier(this.state);\n\n this.emitter.emit('stateChanged', this.state);\n }\n\n public updateCaptionsStartedInBackground(captionsStartedInBackground: boolean): void {\n const captionsTriggers = this.state.captionsTriggers ?? {};\n captionsTriggers.captionsStartedInBackground = captionsStartedInBackground;\n this.setState({ ...this.state, captionsTriggers });\n }\n\n public updateCaptionsStartedWithUI(captionsStartedWithUI: boolean): void {\n const captionsTriggers = this.state.captionsTriggers ?? {};\n captionsTriggers.captionsStartedWithUI = captionsStartedWithUI;\n this.setState({ ...this.state, captionsTriggers });\n }\n\n public getState(): CallContextState {\n return this.state;\n }\n\n public setIsLocalMicrophoneEnabled(isLocalPreviewMicrophoneEnabled: boolean): void {\n this.setState({ ...this.state, isLocalPreviewMicrophoneEnabled });\n }\n\n // This is the key to find current call object in client state\n public setCurrentCallId(callId: string | undefined): void {\n this.callId = callId;\n }\n\n public setTargetCallee(targetCallees: StartCallIdentifier[]): void {\n this.setState({ ...this.state, targetCallees });\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n public setIsReturningFromBreakoutRoom(isReturningFromBreakoutRoom: boolean): void {\n this.isReturningFromBreakoutRoom = isReturningFromBreakoutRoom;\n }\n\n public onCallEnded(handler: (callEndedData: CallAdapterCallEndedEvent) => void): void {\n this.emitter.on('callEnded', handler);\n }\n\n public offCallEnded(handler: (callEndedData: CallAdapterCallEndedEvent) => void): void {\n this.emitter.off('callEnded', handler);\n }\n\n public updateClientState(clientState: CallClientState): void {\n let call = this.callId ? clientState.calls[this.callId] : undefined;\n const latestEndedCall = clientState.callsEnded ? findLatestEndedCall(clientState.callsEnded) : undefined;\n // As the state is transitioning to a new state, trigger appropriate callback events.\n const oldPage = this.state.page;\n /* @conditional-compile-remove(unsupported-browser) */\n const environmentInfo = {\n environmentInfo: this.state.environmentInfo,\n unsupportedBrowserVersionOptedIn: this.state.unsupportedBrowserVersionsAllowed\n };\n\n const latestAcceptedTransfer = call?.transfer.acceptedTransfers\n ? findLatestAcceptedTransfer(call.transfer.acceptedTransfers)\n : undefined;\n const transferCall = latestAcceptedTransfer ? clientState.calls[latestAcceptedTransfer.callId] : undefined;\n\n /* @conditional-compile-remove(breakout-rooms) */\n if (call?.state === 'Connected' || call?.state === 'Connecting') {\n this.setIsReturningFromBreakoutRoom(false);\n }\n\n let isReturningFromBreakoutRoom = false;\n /* @conditional-compile-remove(breakout-rooms) */\n isReturningFromBreakoutRoom = this.isReturningFromBreakoutRoom;\n\n const newPage = getCallCompositePage(\n call,\n latestEndedCall,\n transferCall,\n isReturningFromBreakoutRoom,\n /* @conditional-compile-remove(unsupported-browser) */ environmentInfo\n );\n if (!IsCallEndedPage(oldPage) && IsCallEndedPage(newPage)) {\n this.emitter.emit('callEnded', { callId: this.callId });\n // Reset the callId to undefined as the call has ended.\n this.setCurrentCallId(undefined);\n // Make sure that the call is set to undefined in the state.\n call = undefined;\n }\n\n if (this.state.page) {\n this.setState({\n ...this.state,\n userId: clientState.userId,\n displayName: clientState.callAgent?.displayName,\n call,\n page: newPage,\n endedCall: latestEndedCall,\n devices: clientState.deviceManager,\n latestErrors: clientState.latestErrors,\n /* @conditional-compile-remove(breakout-rooms) */ latestNotifications: clientState.latestNotifications,\n cameraStatus:\n call?.localVideoStreams.find((s) => s.mediaStreamType === 'Video') ||\n clientState.deviceManager.unparentedViews.find((s) => s.mediaStreamType === 'Video')\n ? 'On'\n : 'Off',\n acceptedTransferCallState: transferCall\n });\n }\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n public setAllowedUnsupportedBrowser(): void {\n this.setState({ ...this.state, unsupportedBrowserVersionsAllowed: true });\n }\n\n public setBackroundPickerImages(videoBackgroundImages: VideoBackgroundImage[]): void {\n this.setState({ ...this.state, videoBackgroundImages });\n }\n\n public setSelectedVideoBackgroundEffect(selectedVideoBackgroundEffect?: VideoBackgroundEffect): void {\n this.setState({ ...this.state, selectedVideoBackgroundEffect });\n }\n\n public setAcceptedTransferCall(call?: CallState): void {\n this.setState({ ...this.state, acceptedTransferCallState: call });\n }\n}\n\nconst findLatestEndedCall = (calls: { [key: string]: CallState }): CallState | undefined => {\n const callStates = Object.values(calls);\n if (callStates.length === 0) {\n return undefined;\n }\n let latestCall = callStates[0];\n for (const call of callStates.slice(1)) {\n if ((call.endTime?.getTime() ?? 0) > (latestCall?.endTime?.getTime() ?? 0)) {\n latestCall = call;\n }\n }\n return latestCall;\n};\n\nconst findLatestAcceptedTransfer = (acceptedTransfers: {\n [key: string]: AcceptedTransfer;\n}): AcceptedTransfer | undefined => {\n const acceptedTransferValues = Object.values(acceptedTransfers);\n if (acceptedTransferValues.length === 0) {\n return undefined;\n }\n let latestAcceptedTransfer = acceptedTransferValues[0];\n for (const acceptedTransfer of acceptedTransferValues.slice(1)) {\n if ((acceptedTransfer.timestamp?.getTime() ?? 0) > (latestAcceptedTransfer?.timestamp?.getTime() ?? 0)) {\n latestAcceptedTransfer = acceptedTransfer;\n }\n }\n return latestAcceptedTransfer;\n};\n\n/**\n * @private\n */\nexport type AdapterStateModifier = (state: CallAdapterState) => CallAdapterState;\n\n/**\n * @private\n */\nexport class AzureCommunicationCallAdapter<AgentType extends CallAgent | TeamsCallAgent = CallAgent>\n implements CommonCallAdapter\n{\n private callClient: StatefulCallClient;\n private callAgent: AgentType;\n private deviceManager: StatefulDeviceManager;\n private locator?: CallAdapterLocator;\n targetCallees?: StartCallIdentifier[];\n // Never use directly, even internally. Use `call` property instead.\n private _call?: CallCommon;\n private context: CallContext;\n private diagnosticsForwarder?: DiagnosticsForwarder;\n private handlers: CallHandlersOf<AgentType>;\n private participantSubscribers = new Map<string, ParticipantSubscriber>();\n private emitter: EventEmitter = new EventEmitter();\n private callingSoundSubscriber: CallingSoundSubscriber | undefined;\n private onClientStateChange: (clientState: CallClientState) => void;\n /* @conditional-compile-remove(breakout-rooms) */\n private originCall: CallCommon | undefined;\n private onResolveVideoBackgroundEffectsDependency?: () => Promise<VideoBackgroundEffectsDependency>;\n private onResolveDeepNoiseSuppressionDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;\n\n private get call(): CallCommon | undefined {\n return this._call;\n }\n\n private set call(newCall: CallCommon | undefined) {\n this.resetDiagnosticsForwarder(newCall);\n this._call = newCall;\n }\n constructor(\n callClient: StatefulCallClient,\n locator: CallAdapterLocator,\n callAgent: AgentType,\n deviceManager: StatefulDeviceManager,\n options?: AzureCommunicationCallAdapterOptions | TeamsAdapterOptions\n );\n constructor(\n callClient: StatefulCallClient,\n targetCallees: StartCallIdentifier[],\n callAgent: AgentType,\n deviceManager: StatefulDeviceManager,\n options?: AzureCommunicationCallAdapterOptions | TeamsAdapterOptions\n );\n constructor(\n callClient: StatefulCallClient,\n locatorOrTargetCalless: CallAdapterLocator | StartCallIdentifier[],\n callAgent: AgentType,\n deviceManager: StatefulDeviceManager,\n options?: AzureCommunicationCallAdapterOptions | TeamsAdapterOptions\n ) {\n this.bindPublicMethods();\n this.callClient = callClient;\n this.callAgent = callAgent;\n this.targetCallees =\n getLocatorOrTargetCallees(locatorOrTargetCalless) === true\n ? (locatorOrTargetCalless as StartCallIdentifier[])\n : undefined;\n this.locator =\n getLocatorOrTargetCallees(locatorOrTargetCalless) === false\n ? (locatorOrTargetCalless as CallAdapterLocator)\n : undefined;\n this.deviceManager = deviceManager;\n const isTeamsMeeting = this.locator ? 'meetingLink' in this.locator || 'meetingId' in this.locator : false;\n let isTeamsCall: boolean | undefined;\n this.targetCallees?.forEach((callee) => {\n if (isMicrosoftTeamsUserIdentifier(callee) || isMicrosoftTeamsAppIdentifier(callee)) {\n isTeamsCall = true;\n }\n });\n\n const isRoomsCall = this.locator ? 'roomId' in this.locator : false;\n\n this.onResolveVideoBackgroundEffectsDependency = options?.videoBackgroundOptions?.onResolveDependency;\n this.onResolveDeepNoiseSuppressionDependency = options?.deepNoiseSuppressionOptions?.onResolveDependency;\n\n this.context = new CallContext(\n callClient.getState(),\n !!isTeamsCall,\n isTeamsMeeting,\n isRoomsCall,\n options,\n this.targetCallees\n );\n\n this.context.onCallEnded((endCallData) => this.emitter.emit('callEnded', endCallData));\n\n const onStateChange = (clientState: CallClientState): void => {\n // unsubscribe when the instance gets disposed\n if (!this) {\n callClient.offStateChange(onStateChange);\n return;\n }\n // `updateClientState` searches for the current call from all the calls in the state using a cached `call.id`\n // from the call object. `call.id` can change during a call. We must update the cached `call.id` before\n // calling `updateClientState` so that we find the correct state object for the call even when `call.id`\n // has changed.\n // https://github.com/Azure/communication-ui-library/pull/1820\n if (this.call?.id) {\n this.context.setCurrentCallId(this.call.id);\n }\n\n // if the call hits the connected state we want to pause all calling sounds if playing.\n if (this.call?.state === 'Connected' && this.callingSoundSubscriber?.playingSounds) {\n this.callingSoundSubscriber.pauseSounds();\n }\n\n // If the call connects we need to clean up any previous unparentedViews\n if (\n (this.call?.state === 'InLobby' || this.call?.state === 'Connected') &&\n this.callClient.getState().deviceManager.unparentedViews.length > 0\n ) {\n this.callClient.getState().deviceManager.unparentedViews.forEach((view) => {\n this.callClient.disposeView(undefined, undefined, view);\n });\n }\n\n this.context.updateClientState(clientState);\n };\n\n this.handlers = createHandlers(callClient, callAgent, deviceManager, undefined, {\n onResolveVideoBackgroundEffectsDependency: this.onResolveVideoBackgroundEffectsDependency,\n onResolveDeepNoiseSuppressionDependency: this.onResolveDeepNoiseSuppressionDependency\n });\n\n this.onClientStateChange = onStateChange;\n\n this.subscribeDeviceManagerEvents();\n\n this.callClient.onStateChange(onStateChange);\n\n if (this.callAgent.kind === 'CallAgent') {\n const onCallsUpdated = (args: { added: Call[]; removed: Call[] }): void => {\n if (!this.call?.id) {\n return;\n }\n\n const removedCall = args.removed.find((call) => call.id === this.call?.id);\n if (!removedCall) {\n return;\n }\n\n const removedCallState = this.callClient.getState().callsEnded[removedCall.id];\n if (!removedCallState) {\n return;\n }\n\n const latestAcceptedTransfer = findLatestAcceptedTransfer(removedCallState.transfer.acceptedTransfers);\n const _callAgent = callAgent as CallAgent;\n const transferCall = _callAgent.calls.find((call: Call) => call.id === latestAcceptedTransfer?.callId);\n if (!transferCall) {\n return;\n }\n\n this.processNewCall(transferCall);\n };\n (this.callAgent as CallAgent).on('callsUpdated', onCallsUpdated);\n }\n\n if (this.callAgent.kind === 'TeamsCallAgent') {\n const onTeamsCallsUpdated = (args: { added: TeamsCall[]; removed: TeamsCall[] }): void => {\n if (!this.call?.id) {\n return;\n }\n\n const removedCall = args.removed.find((call) => call.id === this.call?.id);\n if (!removedCall) {\n return;\n }\n\n const removedCallState = this.callClient.getState().callsEnded[removedCall.id];\n if (!removedCallState) {\n return;\n }\n\n const latestAcceptedTransfer = findLatestAcceptedTransfer(removedCallState.transfer.acceptedTransfers);\n const _callAgent = callAgent as TeamsCallAgent;\n const transferCall = _callAgent.calls.find((call: TeamsCall) => call.id === latestAcceptedTransfer?.callId);\n if (!transferCall) {\n return;\n }\n\n this.processNewCall(transferCall);\n };\n (this.callAgent as TeamsCallAgent).on('callsUpdated', onTeamsCallsUpdated);\n }\n }\n\n // TODO: update this to include the 'selectedCameraChanged' when calling adds it to the device manager\n private subscribeDeviceManagerEvents(): void {\n this.deviceManager.on('selectedMicrophoneChanged', () => {\n this.emitter.emit('selectedMicrophoneChanged');\n });\n this.deviceManager.on('selectedSpeakerChanged', () => {\n this.emitter.emit('selectedSpeakerChanged');\n });\n }\n\n private bindPublicMethods(): void {\n this.onStateChange.bind(this);\n this.offStateChange.bind(this);\n this.getState.bind(this);\n this.dispose.bind(this);\n this.joinCall.bind(this);\n this.leaveCall.bind(this);\n this.setCamera.bind(this);\n this.setMicrophone.bind(this);\n this.setSpeaker.bind(this);\n this.askDevicePermission.bind(this);\n this.queryCameras.bind(this);\n this.queryMicrophones.bind(this);\n this.querySpeakers.bind(this);\n this.startCamera.bind(this);\n this.stopCamera.bind(this);\n this.mute.bind(this);\n this.unmute.bind(this);\n this.startCall.bind(this);\n this.startScreenShare.bind(this);\n this.stopScreenShare.bind(this);\n this.raiseHand.bind(this);\n this.onReactionClick.bind(this);\n this.lowerHand.bind(this);\n this.removeParticipant.bind(this);\n this.createStreamView.bind(this);\n this.disposeStreamView.bind(this);\n /* @conditional-compile-remove(together-mode) */\n this.createTogetherModeStreamView.bind(this);\n /* @conditional-compile-remove(together-mode) */\n this.startTogetherMode.bind(this);\n /* @conditional-compile-remove(together-mode) */\n this.setTogetherModeSceneSize.bind(this);\n /* @conditional-compile-remove(together-mode) */\n this.disposeTogetherModeStreamView.bind(this);\n this.disposeScreenShareStreamView.bind(this);\n this.disposeRemoteVideoStreamView.bind(this);\n this.disposeLocalVideoStreamView.bind(this);\n this.on.bind(this);\n this.off.bind(this);\n this.processNewCall.bind(this);\n this.addParticipant.bind(this);\n this.holdCall.bind(this);\n this.resumeCall.bind(this);\n this.sendDtmfTone.bind(this);\n /* @conditional-compile-remove(unsupported-browser) */\n this.allowUnsupportedBrowserVersion.bind(this);\n this.startCaptions.bind(this);\n this.stopCaptions.bind(this);\n this.setSpokenLanguage.bind(this);\n this.setCaptionLanguage.bind(this);\n /* @conditional-compile-remove(rtt) */\n this.sendRealTimeText.bind(this);\n this.startVideoBackgroundEffect.bind(this);\n this.stopVideoBackgroundEffects.bind(this);\n this.updateBackgroundPickerImages.bind(this);\n this.startNoiseSuppressionEffect.bind(this);\n this.stopNoiseSuppressionEffect.bind(this);\n this.submitSurvey.bind(this);\n this.startSpotlight.bind(this);\n this.stopSpotlight.bind(this);\n this.stopAllSpotlight.bind(this);\n this.muteParticipant.bind(this);\n this.muteAllRemoteParticipants.bind(this);\n this.forbidOthersAudio.bind(this);\n this.permitOthersAudio.bind(this);\n this.forbidOthersAudio.bind(this);\n this.permitOthersAudio.bind(this);\n }\n\n public dispose(): void {\n this.resetDiagnosticsForwarder();\n this.callClient.offStateChange(this.onClientStateChange);\n this.callAgent.dispose();\n }\n\n public async queryCameras(): Promise<VideoDeviceInfo[]> {\n const startTime = new Date().getTime();\n return await this.asyncTeeErrorToEventEmitter(async () => {\n const cameras = await this.deviceManager.getCameras();\n const endTime = new Date().getTime();\n compositeLogger.info('time to query cameras', endTime - startTime, 'ms');\n return cameras;\n });\n }\n\n public async queryMicrophones(): Promise<AudioDeviceInfo[]> {\n const startTime = new Date().getTime();\n return await this.asyncTeeErrorToEventEmitter(async () => {\n const microphones = await this.deviceManager.getMicrophones();\n const endTime = new Date().getTime();\n compositeLogger.info('time to query microphones', endTime - startTime, 'ms');\n return microphones;\n });\n }\n\n public async querySpeakers(): Promise<AudioDeviceInfo[]> {\n const startTime = new Date().getTime();\n return await this.asyncTeeErrorToEventEmitter(async () => {\n const speakers = (await this.deviceManager.isSpeakerSelectionAvailable) ? this.deviceManager.getSpeakers() : [];\n const endTime = new Date().getTime();\n compositeLogger.info('time to query speakers', endTime - startTime, 'ms');\n return speakers;\n });\n }\n\n public async askDevicePermission(constrain: PermissionConstraints): Promise<DeviceAccess> {\n const startTime = new Date().getTime();\n return await this.asyncTeeErrorToEventEmitter(async () => {\n const result = await this.deviceManager.askDevicePermission(constrain);\n const endTime = new Date().getTime();\n compositeLogger.info('time to query askDevicePermissions', endTime - startTime, 'ms');\n return result;\n });\n }\n\n public joinCall(options?: boolean | JoinCallOptions): CallTypeOf<AgentType> | undefined {\n if (_isInCall(this.getState().call?.state ?? 'None')) {\n throw new Error('You are already in the call!');\n } else if (this.locator === undefined) {\n throw new Error('Locator is not defined!');\n }\n\n return this.teeErrorToEventEmitter(() => {\n // Default to keeping camera/mic on if no override argument specified\n let shouldCameraBeOnInCall = this.getState().cameraStatus === 'On';\n let shouldMicrophoneBeOnInCall = this.getState().isLocalPreviewMicrophoneEnabled;\n\n // Apply override arguments\n if (typeof options === 'boolean') {\n // Deprecated joinCall API (boolen)\n shouldMicrophoneBeOnInCall = options;\n } else if (typeof options === 'object') {\n // Options bag API\n if (options.microphoneOn && options.microphoneOn !== 'keep') {\n shouldMicrophoneBeOnInCall = options.microphoneOn;\n }\n if (options.cameraOn && options.cameraOn !== 'keep') {\n shouldCameraBeOnInCall = options.cameraOn;\n }\n }\n\n const audioOptions: AudioOptions = { muted: !shouldMicrophoneBeOnInCall };\n const selectedCamera = getSelectedCameraFromAdapterState(this.getState());\n const videoOptions: VideoOptions =\n selectedCamera && shouldCameraBeOnInCall\n ? { localVideoStreams: [new SDKLocalVideoStream(selectedCamera)] }\n : {};\n const call = this._joinCall(audioOptions, videoOptions);\n\n /* @conditional-compile-remove(breakout-rooms) */\n this.originCall = call;\n this.processNewCall(call);\n return call;\n });\n }\n\n private _joinCall(audioOptions: AudioOptions, videoOptions: VideoOptions): CallTypeOf<AgentType> {\n const isTeamsMeeting = this.locator ? 'meetingLink' in this.locator : false;\n const isTeamsMeetingId = this.locator ? 'meetingId' in this.locator : false;\n const isRoomsCall = this.locator ? 'roomId' in this.locator : false;\n\n if (_isTeamsCallAgent(this.callAgent)) {\n if (isTeamsMeeting) {\n return this.callAgent.join(this.locator as TeamsMeetingLinkLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n if (isTeamsMeetingId) {\n return this.callAgent.join(this.locator as TeamsMeetingIdLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n throw new Error('Locator not supported by TeamsCallAgent');\n }\n\n if (isTeamsMeeting) {\n return this.callAgent.join(this.locator as TeamsMeetingLinkLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n\n if (isTeamsMeetingId) {\n return this.callAgent.join(this.locator as TeamsMeetingIdLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n if (isRoomsCall) {\n return this.callAgent.join(this.locator as RoomCallLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n return this.callAgent.join(this.locator as GroupCallLocator, {\n audioOptions,\n videoOptions\n }) as CallTypeOf<AgentType>;\n }\n\n public async createStreamView(\n remoteUserId?: string,\n options?: VideoStreamOptions\n ): Promise<void | CreateVideoStreamViewResult> {\n if (remoteUserId === undefined) {\n return await this.handlers.onCreateLocalStreamView(options);\n } else {\n return await this.handlers.onCreateRemoteStreamView(remoteUserId, options);\n }\n }\n\n public async disposeStreamView(remoteUserId?: string): Promise<void> {\n if (remoteUserId === undefined) {\n await this.handlers.onDisposeLocalStreamView();\n } else {\n await this.handlers.onDisposeRemoteStreamView(remoteUserId);\n }\n }\n\n public async disposeScreenShareStreamView(remoteUserId: string): Promise<void> {\n if (remoteUserId !== '') {\n await this.handlers.onDisposeRemoteScreenShareStreamView(remoteUserId);\n } else {\n await this.handlers.onDisposeLocalScreenShareStreamView();\n }\n }\n\n public async disposeRemoteVideoStreamView(remoteUserId: string): Promise<void> {\n await this.handlers.onDisposeRemoteVideoStreamView(remoteUserId);\n }\n\n public async disposeLocalVideoStreamView(): Promise<void> {\n await this.handlers.onDisposeLocalStreamView();\n }\n\n /* @conditional-compile-remove(together-mode) */\n public async createTogetherModeStreamView(\n options?: TogetherModeStreamOptions\n ): Promise<void | TogetherModeStreamViewResult> {\n return await this.handlers.onCreateTogetherModeStreamView(options);\n }\n\n /* @conditional-compile-remove(together-mode) */\n public async startTogetherMode(): Promise<void> {\n return await this.handlers.onStartTogetherMode();\n }\n\n /* @conditional-compile-remove(together-mode) */\n public setTogetherModeSceneSize(width: number, height: number): void {\n return this.handlers.onSetTogetherModeSceneSize(width, height);\n }\n\n /* @conditional-compile-remove(together-mode) */\n public async disposeTogetherModeStreamView(): Promise<void> {\n return await this.handlers.onDisposeTogetherModeStreamView();\n }\n\n public async leaveCall(forEveryone?: boolean): Promise<void> {\n if (this.getState().page === 'transferring') {\n const transferCall = this.callAgent.calls.filter(\n (call) => call.id === this.getState().acceptedTransferCallState?.id\n )[0];\n transferCall?.hangUp();\n }\n await this.handlers.onHangUp(forEveryone);\n this.unsubscribeCallEvents();\n this.handlers = createHandlers(this.callClient, this.callAgent, this.deviceManager, this.call, {\n onResolveVideoBackgroundEffectsDependency: this.onResolveVideoBackgroundEffectsDependency,\n onResolveDeepNoiseSuppressionDependency: this.onResolveDeepNoiseSuppressionDependency\n });\n // We set the adapter.call object to undefined immediately when a call is ended.\n // We do not set the context.callId to undefined because it is a part of the immutable data flow loop.\n this.call = undefined;\n this.stopCamera();\n this.mute();\n }\n\n public async setCamera(device: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onSelectCamera(device, options);\n });\n }\n\n public async setMicrophone(device: AudioDeviceInfo): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onSelectMicrophone(device);\n });\n }\n\n public async setSpeaker(device: AudioDeviceInfo): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onSelectSpeaker(device);\n });\n }\n\n public async startCamera(options?: VideoStreamOptions): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n if (!isCameraOn(this.getState())) {\n // First kick off the effect on the local device before starting the camera in the call.\n // This prevents the effect not being applied for a brief moment when the camera is started.\n\n {\n const selectedEffect = this.getState().selectedVideoBackgroundEffect;\n const selectedCamera = getSelectedCameraFromAdapterState(this.getState());\n if (selectedEffect && selectedCamera && this.onResolveVideoBackgroundEffectsDependency) {\n const stream = new SDKLocalVideoStream(selectedCamera);\n const effect = getBackgroundEffectFromSelectedEffect(\n selectedEffect,\n await this.onResolveVideoBackgroundEffectsDependency()\n );\n\n if (effect) {\n await stream.feature(Features.VideoEffects).startEffects(effect);\n } else {\n await stream.feature(Features.VideoEffects).stopEffects();\n }\n }\n }\n\n await this.handlers.onToggleCamera(options);\n }\n });\n }\n\n public async stopCamera(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n if (isCameraOn(this.getState())) {\n await this.handlers.onToggleCamera();\n }\n });\n }\n\n public async mute(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n this.context.setIsLocalMicrophoneEnabled(false);\n if (_isInCall(this.call?.state) && !this.call?.isMuted) {\n await this.handlers.onToggleMicrophone();\n }\n });\n }\n\n public async unmute(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n this.context.setIsLocalMicrophoneEnabled(true);\n if ((_isInCall(this.call?.state) || _isInLobbyOrConnecting(this.call?.state)) && this.call?.isMuted) {\n await this.handlers.onToggleMicrophone();\n }\n });\n }\n\n public async startScreenShare(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n if (!this.call?.isScreenSharingOn) {\n await this.handlers.onToggleScreenShare();\n }\n });\n }\n\n public async stopScreenShare(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n if (this.call?.isScreenSharingOn) {\n await this.handlers.onToggleScreenShare();\n }\n });\n }\n\n public async raiseHand(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onToggleRaiseHand();\n });\n }\n\n public async lowerHand(): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onToggleRaiseHand();\n });\n }\n\n public async onReactionClick(reaction: Reaction): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onReactionClick(reaction);\n });\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n public allowUnsupportedBrowserVersion(): void {\n this.context.setAllowedUnsupportedBrowser();\n this.context.updateClientState(this.callClient.getState());\n }\n\n public async startVideoBackgroundEffect(videoBackgroundEffect: VideoBackgroundEffect): Promise<void> {\n if (this.isBlurEffect(videoBackgroundEffect)) {\n const blurConfig = videoBackgroundEffect as BackgroundBlurConfig;\n await this.handlers.onBlurVideoBackground(blurConfig);\n } else if (this.isReplacementEffect(videoBackgroundEffect)) {\n const replaceConfig = videoBackgroundEffect as BackgroundReplacementConfig;\n await this.handlers.onReplaceVideoBackground(replaceConfig);\n }\n }\n\n public async stopVideoBackgroundEffects(): Promise<void> {\n await this.handlers.onRemoveVideoBackgroundEffects();\n }\n\n public updateBackgroundPickerImages(backgroundImages: VideoBackgroundImage[]): void {\n this.context.setBackroundPickerImages(backgroundImages);\n }\n\n public updateSelectedVideoBackgroundEffect(selectedVideoBackground: VideoBackgroundEffect): void {\n this.context.setSelectedVideoBackgroundEffect(selectedVideoBackground);\n }\n\n public async startNoiseSuppressionEffect(): Promise<void> {\n await this.handlers.onStartNoiseSuppressionEffect();\n }\n\n public async stopNoiseSuppressionEffect(): Promise<void> {\n await this.handlers.onStopNoiseSuppressionEffect();\n }\n\n public startCall(\n participants:\n | string[]\n | (\n | MicrosoftTeamsAppIdentifier\n | PhoneNumberIdentifier\n | CommunicationUserIdentifier\n | MicrosoftTeamsUserIdentifier\n | UnknownIdentifier\n )[],\n options?: StartCallOptions\n ): CallTypeOf<AgentType> | undefined {\n if (_isInCall(this.getState().call?.state ?? 'None')) {\n throw new Error('You are already in the call.');\n }\n\n const isCameraOn = this.getState().cameraStatus === 'On';\n const selectedCamera = getSelectedCameraFromAdapterState(this.getState());\n /* we only configure the video options here since the Calling SDK always unmutes the participant when starting a call */\n const startCallVideoOptions: StartCallOptions = selectedCamera\n ? {\n videoOptions: isCameraOn ? { localVideoStreams: [new SDKLocalVideoStream(selectedCamera)] } : undefined\n }\n : {};\n\n const combinedCallOptions = { ...startCallVideoOptions, ...options };\n\n const idsToAdd = participants.map((participant) => {\n const backendId: CommunicationIdentifier = _toCommunicationIdentifier(participant);\n if ('phoneNumber' in backendId) {\n if (options?.alternateCallerId === undefined) {\n throw new Error('Unable to start call, PSTN user present with no alternateCallerId.');\n }\n }\n return backendId;\n });\n\n this.context.setTargetCallee(\n idsToAdd as (\n | MicrosoftTeamsAppIdentifier\n | PhoneNumberIdentifier\n | CommunicationUserIdentifier\n | MicrosoftTeamsUserIdentifier\n | UnknownIdentifier\n )[]\n );\n\n const call = this.handlers.onStartCall(idsToAdd, combinedCallOptions) as CallTypeOf<AgentType>;\n if (!call) {\n throw new Error('Unable to start call.');\n }\n this.processNewCall(call);\n\n return call;\n }\n\n private processNewCall(call: CallCommon): void {\n this.call = call;\n this.context.setCurrentCallId(call.id);\n\n // Resync state after callId is set\n this.context.updateClientState(this.callClient.getState());\n this.handlers = createHandlers(this.callClient, this.callAgent, this.deviceManager, this.call, {\n onResolveVideoBackgroundEffectsDependency: this.onResolveVideoBackgroundEffectsDependency,\n onResolveDeepNoiseSuppressionDependency: this.onResolveDeepNoiseSuppressionDependency\n });\n this.subscribeCallEvents();\n }\n\n private isBlurEffect(effect: VideoBackgroundEffect): effect is VideoBackgroundBlurEffect {\n return effect.effectName === 'blur';\n }\n\n private isReplacementEffect(effect: VideoBackgroundEffect): effect is VideoBackgroundReplacementEffect {\n return effect.effectName === 'replacement';\n }\n\n public async removeParticipant(userId: string | CommunicationIdentifier): Promise<void> {\n let participant = userId;\n participant = _toCommunicationIdentifier(userId);\n this.handlers.onRemoveParticipant(participant);\n }\n\n public async addParticipant(participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void>;\n\n public async addParticipant(participant: CommunicationUserIdentifier): Promise<void>;\n\n public async addParticipant(\n participant: PhoneNumberIdentifier | CommunicationUserIdentifier,\n options?: AddPhoneNumberOptions\n ): Promise<void> {\n if (isPhoneNumberIdentifier(participant) && options) {\n this.handlers.onAddParticipant(participant, options);\n } else if (isCommunicationUserIdentifier(participant)) {\n this.handlers.onAddParticipant(participant);\n }\n }\n\n public async holdCall(): Promise<void> {\n if (this.call?.state !== 'LocalHold') {\n if (this.call?.isLocalVideoStarted) {\n this.stopCamera().then(() => {\n this.handlers.onToggleHold();\n });\n } else {\n this.handlers.onToggleHold();\n }\n }\n }\n\n public async resumeCall(): Promise<void> {\n if (this.call?.state === 'LocalHold') {\n this.handlers.onToggleHold().then(() => {\n if (this.call?.feature(Features.Capabilities).capabilities.turnVideoOn.isPresent === false) {\n this.stopCamera();\n }\n });\n }\n }\n\n public async sendDtmfTone(dtmfTone: DtmfTone): Promise<void> {\n this.handlers.onSendDtmfTone(dtmfTone);\n }\n\n public async startCaptions(options?: StartCaptionsAdapterOptions): Promise<void> {\n if (options?.startInBackground) {\n this.context.updateCaptionsStartedInBackground(true);\n } else {\n this.context.updateCaptionsStartedWithUI(true);\n }\n this.handlers.onStartCaptions(options);\n }\n\n public async stopCaptions(options?: StopCaptionsAdapterOptions): Promise<void> {\n if (options?.stopInBackground) {\n this.context.updateCaptionsStartedInBackground(false);\n }\n\n this.context.updateCaptionsStartedWithUI(false);\n\n // Only stop captions if they are not still running in the background\n if (!this.context.getState().captionsTriggers?.captionsStartedInBackground) {\n this.handlers.onStopCaptions();\n }\n }\n\n public async setCaptionLanguage(language: string): Promise<void> {\n this.handlers.onSetCaptionLanguage(language);\n }\n\n public async setSpokenLanguage(language: string): Promise<void> {\n this.handlers.onSetSpokenLanguage(language);\n }\n /* @conditional-compile-remove(rtt) */\n public async sendRealTimeText(text: string, isFinalized: boolean): Promise<void> {\n this.handlers.onSendRealTimeText(text, isFinalized);\n }\n public async submitSurvey(survey: CallSurvey): Promise<CallSurveyResponse | undefined> {\n return this.handlers.onSubmitSurvey(survey);\n }\n\n public async muteParticipant(userId: string): Promise<void> {\n this.handlers.onMuteParticipant(userId);\n }\n\n public async muteAllRemoteParticipants(): Promise<void> {\n this.handlers.onMuteAllRemoteParticipants();\n }\n\n public async startSpotlight(userIds?: string[]): Promise<void> {\n this.handlers.onStartSpotlight(userIds);\n }\n\n public async stopSpotlight(userIds?: string[]): Promise<void> {\n this.handlers.onStopSpotlight(userIds);\n }\n\n public async stopAllSpotlight(): Promise<void> {\n this.handlers.onStopAllSpotlight();\n }\n\n public async forbidAudio(userIds: string[]): Promise<void> {\n this.handlers.onForbidAudio?.(userIds);\n }\n\n public async permitAudio(userIds: string[]): Promise<void> {\n this.handlers.onPermitAudio?.(userIds);\n }\n\n public async forbidOthersAudio(): Promise<void> {\n this.handlers.onForbidOthersAudio?.();\n }\n\n public async permitOthersAudio(): Promise<void> {\n this.handlers.onPermitOthersAudio?.();\n }\n\n public async forbidVideo(userIds: string[]): Promise<void> {\n this.handlers.onForbidVideo?.(userIds);\n }\n\n public async permitVideo(userIds: string[]): Promise<void> {\n this.handlers.onPermitVideo?.(userIds);\n }\n\n public async forbidOthersVideo(): Promise<void> {\n this.handlers.onForbidOthersVideo?.();\n }\n\n public async permitOthersVideo(): Promise<void> {\n this.handlers.onPermitOthersVideo?.();\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n public async returnFromBreakoutRoom(): Promise<void> {\n const callState = this.call?.id ? this.callClient.getState().calls[this.call.id] : undefined;\n const assignedBreakoutRoom = callState?.breakoutRooms?.assignedBreakoutRoom;\n\n if (!assignedBreakoutRoom) {\n throw new Error(\n 'Could not return from breakout room because assigned breakout room state could not be retrieved.'\n );\n }\n\n this.context.setIsReturningFromBreakoutRoom(true);\n\n const mainMeeting = await assignedBreakoutRoom.returnToMainMeeting();\n this.originCall = mainMeeting;\n this.processNewCall(mainMeeting);\n }\n\n public getState(): CallAdapterState {\n return this.context.getState();\n }\n\n public onStateChange(handler: (state: CallAdapterState) => void): void {\n this.context.onStateChange(handler);\n }\n\n public offStateChange(handler: (state: CallAdapterState) => void): void {\n this.context.offStateChange(handler);\n }\n\n on(event: 'participantsJoined', listener: ParticipantsJoinedListener): void;\n on(event: 'participantsLeft', listener: ParticipantsLeftListener): void;\n on(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n on(event: 'callIdChanged', listener: CallIdChangedListener): void;\n on(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n on(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n on(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n on(event: 'callEnded', listener: CallEndedListener): void;\n on(event: 'diagnosticChanged', listener: DiagnosticChangedEventListner): void;\n on(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n on(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n on(event: 'error', errorHandler: (e: AdapterError) => void): void;\n on(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n on(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n on(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n on(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n /* @conditional-compile-remove(rtt) */\n on(event: 'realTimeTextReceived', listener: RealTimeTextReceivedListener): void;\n on(event: 'transferAccepted', listener: TransferAcceptedListener): void;\n on(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n on(event: 'roleChanged', listener: PropertyChangedEvent): void;\n on(event: 'spotlightChanged', listener: SpotlightChangedListener): void;\n on(event: 'mutedByOthers', listener: PropertyChangedEvent): void;\n /* @conditional-compile-remove(breakout-rooms) */\n on(event: 'breakoutRoomsUpdated', listener: BreakoutRoomsUpdatedListener): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public on(event: string, listener: (e: any) => void): void {\n this.emitter.on(event, listener);\n }\n\n private subscribeToCaptionEvents(): void {\n const captionsFeature = this.call?.feature(Features.Captions);\n if (\n captionsFeature?.captions.kind === 'TeamsCaptions' &&\n (this.context.getState().isTeamsCall || this.context.getState().isTeamsMeeting)\n ) {\n const teamsCaptionsFeature = captionsFeature.captions as TeamsCaptions;\n teamsCaptionsFeature.on('CaptionsReceived', this.teamsCaptionsReceived.bind(this));\n teamsCaptionsFeature.on('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));\n teamsCaptionsFeature.on('CaptionLanguageChanged', this.isCaptionLanguageChanged.bind(this));\n teamsCaptionsFeature.on('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));\n } else {\n const acsCaptionsFeature = captionsFeature?.captions as Captions;\n\n acsCaptionsFeature.on('CaptionsReceived', this.captionsReceived.bind(this));\n\n acsCaptionsFeature.on('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));\n\n acsCaptionsFeature.on('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));\n\n captionsFeature?.on('CaptionsKindChanged', this.captionsKindChanged.bind(this));\n }\n }\n\n private unsubscribeFromCaptionEvents(): void {\n const captionsFeature = this.call?.feature(Features.Captions);\n if (\n captionsFeature?.captions.kind === 'TeamsCaptions' &&\n (this.context.getState().isTeamsCall || this.context.getState().isTeamsMeeting)\n ) {\n const teamsCaptionsFeature = captionsFeature.captions as TeamsCaptions;\n teamsCaptionsFeature.off('CaptionsReceived', this.teamsCaptionsReceived.bind(this));\n teamsCaptionsFeature.off('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));\n teamsCaptionsFeature.off('CaptionLanguageChanged', this.isCaptionLanguageChanged.bind(this));\n teamsCaptionsFeature.off('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));\n } else {\n const acsCaptionsFeature = captionsFeature?.captions as Captions;\n\n acsCaptionsFeature.off('CaptionsReceived', this.captionsReceived.bind(this));\n\n acsCaptionsFeature.off('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));\n\n acsCaptionsFeature.off('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));\n\n captionsFeature?.off('CaptionsKindChanged', this.captionsKindChanged.bind(this));\n }\n }\n\n private subscribeCallEvents(): void {\n if (this.call) {\n this.callingSoundSubscriber = new CallingSoundSubscriber(\n this.call,\n this.getState().targetCallees,\n this.getState().sounds\n );\n }\n this.call?.on('remoteParticipantsUpdated', this.onRemoteParticipantsUpdated.bind(this));\n this.call?.on('isMutedChanged', this.isMyMutedChanged.bind(this));\n this.call?.on('isScreenSharingOnChanged', this.isScreenSharingOnChanged.bind(this));\n this.call?.on('idChanged', this.callIdChanged.bind(this));\n this.call?.on('roleChanged', this.roleChanged.bind(this));\n\n this.subscribeToCaptionEvents();\n this.call?.feature(Features.Transfer).on('transferAccepted', this.transferAccepted.bind(this));\n this.call?.feature(Features.Capabilities).on('capabilitiesChanged', this.capabilitiesChanged.bind(this));\n this.call?.feature(Features.Spotlight).on('spotlightChanged', this.spotlightChanged.bind(this));\n /* @conditional-compile-remove(rtt) */\n this.call?.feature(Features.RealTimeText).on('realTimeTextReceived', this.realTimeTextReceived.bind(this));\n /* @conditional-compile-remove(breakout-rooms) */\n const breakoutRoomsFeature = this.call?.feature(Features.BreakoutRooms);\n /* @conditional-compile-remove(breakout-rooms) */\n if (breakoutRoomsFeature) {\n breakoutRoomsFeature.on('breakoutRoomsUpdated', this.breakoutRoomsUpdated.bind(this));\n }\n }\n\n private unsubscribeCallEvents(): void {\n for (const subscriber of this.participantSubscribers.values()) {\n subscriber.unsubscribeAll();\n }\n this.participantSubscribers.clear();\n this.call?.off('remoteParticipantsUpdated', this.onRemoteParticipantsUpdated.bind(this));\n this.call?.off('isMutedChanged', this.isMyMutedChanged.bind(this));\n this.call?.off('isScreenSharingOnChanged', this.isScreenSharingOnChanged.bind(this));\n this.call?.off('idChanged', this.callIdChanged.bind(this));\n this.call?.off('roleChanged', this.roleChanged.bind(this));\n\n this.unsubscribeFromCaptionEvents();\n /* @conditional-compile-remove(rtt) */\n this.call?.feature(Features.RealTimeText).off('realTimeTextReceived', this.realTimeTextReceived.bind(this));\n if (this.callingSoundSubscriber) {\n this.callingSoundSubscriber.unsubscribeAll();\n }\n /* @conditional-compile-remove(breakout-rooms) */\n const breakoutRoomsFeature = this.call?.feature(Features.BreakoutRooms);\n /* @conditional-compile-remove(breakout-rooms) */\n if (breakoutRoomsFeature) {\n breakoutRoomsFeature.off('breakoutRoomsUpdated', this.breakoutRoomsUpdated.bind(this));\n }\n }\n\n private isMyMutedChanged = (): void => {\n this.emitter.emit('isMutedChanged', {\n participantId: this.getState().userId,\n isMuted: this.call?.isMuted\n });\n };\n\n private captionsKindChanged(): void {\n const captionsFeature = this.call?.feature(Features.Captions);\n const teamsCaptionsFeature = captionsFeature?.captions as TeamsCaptions;\n teamsCaptionsFeature.on('CaptionsReceived', this.teamsCaptionsReceived.bind(this));\n teamsCaptionsFeature.on('CaptionsActiveChanged', this.isCaptionsActiveChanged.bind(this));\n teamsCaptionsFeature.on('CaptionLanguageChanged', this.isCaptionLanguageChanged.bind(this));\n teamsCaptionsFeature.on('SpokenLanguageChanged', this.isSpokenLanguageChanged.bind(this));\n }\n\n private onRemoteParticipantsUpdated({\n added,\n removed\n }: {\n added: RemoteParticipant[];\n removed: RemoteParticipant[];\n }): void {\n if (added && added.length > 0) {\n this.emitter.emit('participantsJoined', { joined: added });\n }\n if (removed && removed.length > 0) {\n this.emitter.emit('participantsLeft', { removed: removed });\n }\n\n added.forEach((participant) => {\n this.participantSubscribers.set(\n toFlatCommunicationIdentifier(participant.identifier),\n new ParticipantSubscriber(participant, this.emitter)\n );\n });\n\n removed.forEach((participant) => {\n const subscriber = this.participantSubscribers.get(toFlatCommunicationIdentifier(participant.identifier));\n subscriber && subscriber.unsubscribeAll();\n this.participantSubscribers.delete(toFlatCommunicationIdentifier(participant.identifier));\n });\n }\n\n private isScreenSharingOnChanged(): void {\n this.emitter.emit('isLocalScreenSharingActiveChanged', { isScreenSharingOn: this.call?.isScreenSharingOn });\n }\n\n private teamsCaptionsReceived(captionsInfo: TeamsCaptionsInfo): void {\n this.emitter.emit('captionsReceived', { captionsInfo });\n }\n\n private captionsReceived(captionsInfo: CaptionsInfo): void {\n this.emitter.emit('captionsReceived', { captionsInfo });\n }\n /* @conditional-compile-remove(rtt) */\n private realTimeTextReceived(realTimeText: RealTimeTextInfo): void {\n this.emitter.emit('realTimeTextReceived', { realTimeText });\n }\n\n private isCaptionsActiveChanged(): void {\n const captionsFeature = this.call?.feature(Features.Captions).captions as TeamsCaptions | Captions;\n this.emitter.emit('isCaptionsActiveChanged', {\n isActive: captionsFeature.isCaptionsFeatureActive\n });\n }\n\n private isSpokenLanguageChanged(): void {\n const captionsFeature = this.call?.feature(Features.Captions).captions as TeamsCaptions | Captions;\n this.emitter.emit('isSpokenLanguageChanged', {\n activeSpokenLanguage: captionsFeature.activeSpokenLanguage\n });\n }\n\n private isCaptionLanguageChanged(): void {\n const captionsFeature = this.call?.feature(Features.Captions).captions as TeamsCaptions;\n this.emitter.emit('isCaptionLanguageChanged', {\n activeCaptionLanguage: captionsFeature.activeCaptionLanguage\n });\n }\n\n private transferAccepted(args: TransferEventArgs): void {\n this.emitter.emit('transferAccepted', args);\n }\n\n private capabilitiesChanged(data: CapabilitiesChangeInfo): void {\n if (data.newValue.turnVideoOn?.isPresent === false) {\n // stopCamera is handled by web sdk when video hard muted.\n this.disposeLocalVideoStreamView();\n }\n\n if (data.newValue.shareScreen?.isPresent === false) {\n this.stopScreenShare();\n }\n this.emitter.emit('capabilitiesChanged', data);\n }\n\n private roleChanged(): void {\n if (this.call?.role === 'Consumer') {\n this.call?.feature(Features.RaiseHand).lowerHand();\n }\n this.emitter.emit('roleChanged');\n }\n\n private spotlightChanged(args: { added: SpotlightedParticipant[]; removed: SpotlightedParticipant[] }): void {\n this.emitter.emit('spotlightChanged', args);\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n private breakoutRoomsUpdated(eventData: BreakoutRoomsEventData): void {\n if (eventData.type === 'assignedBreakoutRooms') {\n this.assignedBreakoutRoomUpdated(eventData.data);\n } else if (eventData.type === 'join') {\n this.breakoutRoomJoined(eventData.data);\n }\n this.emitter.emit('breakoutRoomsUpdated', eventData);\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n private assignedBreakoutRoomUpdated(breakoutRoom?: BreakoutRoom): void {\n if (!this.call?.id) {\n return;\n }\n if (this.originCall?.id !== this.call?.id && (!breakoutRoom || breakoutRoom.state === 'closed')) {\n this.returnFromBreakoutRoom();\n }\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n private breakoutRoomJoined(call: Call | TeamsCall): void {\n if (this.call?.id !== call.id) {\n this.processNewCall(call);\n }\n // Hang up other breakout room calls in case we are joining a new breakout room while already in one\n this.hangupOtherBreakoutRoomCalls(call.id);\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n private hangupOtherBreakoutRoomCalls(currentBreakoutRoomCallId: string): void {\n // Get other breakout room calls by checking which other calls have breakout room settings defined\n const otherBreakoutRoomCallStates = Object.values(this.callClient.getState().calls).filter((callState) => {\n return callState.breakoutRooms?.breakoutRoomSettings && callState.id !== currentBreakoutRoomCallId;\n });\n\n // Hang up other breakout room calls\n for (const breakoutRoom of otherBreakoutRoomCallStates) {\n const breakoutRoomCall = this.callAgent.calls.find((callAgentCall) => {\n return callAgentCall.id === breakoutRoom.id;\n });\n breakoutRoomCall?.hangUp();\n }\n }\n\n private callIdChanged(): void {\n this.call?.id && this.emitter.emit('callIdChanged', { callId: this.call.id });\n }\n\n private resetDiagnosticsForwarder(newCall?: CallCommon): void {\n if (this.diagnosticsForwarder) {\n this.diagnosticsForwarder.unsubscribe();\n }\n if (newCall) {\n this.diagnosticsForwarder = new DiagnosticsForwarder(this.emitter, newCall);\n }\n }\n\n off(event: 'participantsJoined', listener: ParticipantsJoinedListener): void;\n off(event: 'participantsLeft', listener: ParticipantsLeftListener): void;\n off(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n off(event: 'callIdChanged', listener: CallIdChangedListener): void;\n off(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n off(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n off(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n off(event: 'callEnded', listener: CallEndedListener): void;\n off(event: 'diagnosticChanged', listener: DiagnosticChangedEventListner): void;\n off(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n off(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n off(event: 'error', errorHandler: (e: AdapterError) => void): void;\n off(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n off(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n off(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n off(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n /* @conditional-compile-remove(rtt) */\n off(event: 'realTimeTextReceived', listener: RealTimeTextReceivedListener): void;\n off(event: 'transferAccepted', listener: TransferAcceptedListener): void;\n off(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n off(event: 'roleChanged', listener: PropertyChangedEvent): void;\n off(event: 'spotlightChanged', listener: SpotlightChangedListener): void;\n off(event: 'mutedByOthers', listener: PropertyChangedEvent): void;\n /* @conditional-compile-remove(breakout-rooms) */\n off(event: 'breakoutRoomsUpdated', listener: BreakoutRoomsUpdatedListener): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public off(event: string, listener: (e: any) => void): void {\n this.emitter.off(event, listener);\n }\n\n private async asyncTeeErrorToEventEmitter<T>(f: () => Promise<T>): Promise<T> {\n try {\n return await f();\n } catch (error) {\n if (isCallError(error as Error)) {\n this.emitter.emit('error', error as AdapterError);\n }\n throw error;\n }\n }\n\n private teeErrorToEventEmitter<T>(f: () => T): T {\n try {\n return f();\n } catch (error) {\n if (isCallError(error as Error)) {\n this.emitter.emit('error', error as AdapterError);\n }\n throw error;\n }\n }\n}\n\n/* @conditional-compile-remove(call-participants-locator) */\n/**\n * Locator used by {@link createAzureCommunicationCallAdapter} to call one or more participants\n *\n * @remarks\n * This is currently in beta and only supports calling one Teams User.\n *\n * @example\n * ```\n * ['8:orgid:ab220efe-5725-4742-9792-9fba7c9ac458']\n * ```\n *\n * @beta\n */\nexport type CallParticipantsLocator = {\n participantIds: string[];\n};\n\n/**\n * Locator used by {@link createAzureCommunicationCallAdapter} to locate the call to join\n *\n * @public\n */\nexport type CallAdapterLocator =\n | TeamsMeetingLinkLocator\n | GroupCallLocator\n | RoomCallLocator\n | /* @conditional-compile-remove(call-participants-locator) */ CallParticipantsLocator\n | TeamsMeetingIdLocator;\n\n/**\n * Common optional parameters to create {@link AzureCommunicationCallAdapter} or {@link TeamsCallAdapter}\n *\n * @public\n */\nexport type CommonCallAdapterOptions = {\n /**\n * Default set of background images for background image picker.\n */\n videoBackgroundOptions?: {\n videoBackgroundImages?: VideoBackgroundImage[];\n onResolveDependency?: () => Promise<VideoBackgroundEffectsDependency>;\n };\n /**\n * `DeepNoiseSuppressionEffect` options to be used for noise suppression.\n */\n deepNoiseSuppressionOptions?: {\n onResolveDependency?: () => Promise<DeepNoiseSuppressionEffectDependency>;\n deepNoiseSuppressionOnByDefault?: boolean;\n hideDeepNoiseSuppressionButton?: boolean;\n };\n /**\n * Use this to fetch profile information which will override data in {@link CallAdapterState} like display name\n * The onFetchProfile is fetch-and-forget one time action for each user, once a user profile is updated, the value will be cached\n * and would not be updated again within the lifecycle of adapter.\n */\n onFetchProfile?: OnFetchProfileCallback;\n /**\n * Sounds to use for calling events\n */\n callingSounds?: CallingSounds;\n /**\n * Reaction resource for reaction resources\n * @beta\n */\n reactionResources?: ReactionResources;\n /**\n * A phone number in E.164 format procured using Azure Communication Services that will be used to represent callers identity.\n * E.164 numbers are formatted as [+] [country code] [phone number including area code]. For example, +14255550123 for a US phone number.\n */\n alternateCallerId?: string;\n};\n\n/**\n * Optional parameters to create {@link AzureCommunicationCallAdapter}\n *\n * @public\n */\nexport type AzureCommunicationCallAdapterOptions = CommonCallAdapterOptions;\n\n/**\n * Arguments for creating the Azure Communication Services implementation of {@link CallAdapter}.\n *\n * Note: `displayName` can be a maximum of 256 characters.\n *\n * @public\n */\nexport type AzureCommunicationCallAdapterArgs = {\n userId: CommunicationUserIdentifier;\n displayName: string;\n credential: CommunicationTokenCredential;\n locator: CallAdapterLocator;\n /**\n * Optional parameters for the {@link AzureCommunicationCallAdapter} created\n */\n options?: AzureCommunicationCallAdapterOptions;\n};\n\n/**\n * Arguments for creating the Azure Communication Services implementation of {@link CallAdapter}.\n *\n * These arguments are used to create an outbound call scenarios.\n *\n * Note: `displayName` can be a maximum of 256 characters.\n *\n * @public\n */\nexport type AzureCommunicationOutboundCallAdapterArgs = {\n userId: CommunicationUserIdentifier;\n displayName: string;\n credential: CommunicationTokenCredential;\n targetCallees: StartCallIdentifier[];\n /**\n * A phone number in E.164 format procured using Azure Communication Services that will be used to represent callers identity.\n * E.164 numbers are formatted as [+] [country code] [phone number including area code]. For example, +14255550123 for a US phone number.\n */\n alternateCallerId?: string;\n\n /**\n * Optional parameters for the {@link AzureCommunicationCallAdapter} created\n */\n options?: AzureCommunicationCallAdapterOptions;\n};\n\n/**\n * Optional parameters to create {@link TeamsCallAdapter}\n *\n * @public\n */\nexport type TeamsAdapterOptions = CommonCallAdapterOptions;\n\n/**\n * Common part of args to create the Azure Communication Services implementation of {@link TeamsCallAdapter}.\n *\n * @public\n */\nexport type TeamsCallAdapterArgsCommon = {\n userId: MicrosoftTeamsUserIdentifier;\n credential: CommunicationTokenCredential;\n options?: TeamsAdapterOptions;\n};\n\n/**\n * Arguments for creating the Azure Communication Services implementation of {@link TeamsCallAdapter}.\n *\n * @public\n */\nexport type TeamsCallAdapterArgs = TeamsCallAdapterArgsCommon & {\n locator:\n | TeamsMeetingLinkLocator\n | /* @conditional-compile-remove(call-participants-locator) */ CallParticipantsLocator\n | TeamsMeetingIdLocator;\n};\n\n/* @conditional-compile-remove(teams-identity-support-beta) */\n/**\n * Parameter to start a call using a Teams user identity.\n *\n * @beta\n */\nexport type StartTeamsCallIdentifier =\n | MicrosoftTeamsUserIdentifier\n | PhoneNumberIdentifier\n | MicrosoftTeamsAppIdentifier\n | UnknownIdentifier;\n\n/* @conditional-compile-remove(teams-identity-support-beta) */\n/**\n * Arguments for creating the Azure Communication Services implementation of {@link TeamsCallAdapter}.\n *\n * This is used to create an outbound call scenarios.\n *\n * @beta\n */\nexport type TeamsOutboundCallAdapterArgs = TeamsCallAdapterArgsCommon & {\n targetCallees: StartTeamsCallIdentifier[];\n};\n\n/**\n * Create a {@link CallAdapter} backed by Azure Communication Services.\n *\n * This is the default implementation of {@link CallAdapter} provided by this library.\n *\n * Note: `displayName` can be a maximum of 256 characters.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapter(\n args: AzureCommunicationCallAdapterArgs\n): Promise<CallAdapter>;\n/**\n * Create a {@link CallAdapter} backed by Azure Communication Services.\n *\n * This is the default implementation of {@link CallAdapter} provided by this library.\n *\n * Note: `displayName` can be a maximum of 256 characters.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapter(\n args: AzureCommunicationOutboundCallAdapterArgs\n): Promise<CallAdapter>;\n/**\n * @public\n */\n/**\n * Create a {@link CallAdapter} backed by Azure Communication Services.\n *\n * This is the default implementation of {@link CallAdapter} provided by this library.\n *\n * Note: `displayName` can be a maximum of 256 characters.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapter(\n args: AzureCommunicationCallAdapterArgs | AzureCommunicationOutboundCallAdapterArgs\n): Promise<CallAdapter> {\n if (isMicrosoftTeamsUserIdentifier(args.userId)) {\n throw new Error(\n 'Microsoft Teams user identifier is not supported by AzureCommunicationCallAdapter. Instead use TeamsCallAdapter.'\n );\n }\n return _createAzureCommunicationCallAdapterInner({\n userId: args.userId,\n displayName: args.displayName,\n credential: args.credential,\n locator: (args as AzureCommunicationCallAdapterArgs).locator,\n targetCallees: (args as AzureCommunicationOutboundCallAdapterArgs).targetCallees,\n options: args.options\n });\n}\n\n/**\n * This inner function is used to allow injection of TelemetryImplementationHint without changing the public API.\n *\n * @internal\n */\nexport const _createAzureCommunicationCallAdapterInner = async ({\n userId,\n displayName,\n credential,\n locator,\n targetCallees,\n options,\n telemetryImplementationHint = 'Call'\n}: {\n userId: CommunicationUserIdentifier;\n displayName: string;\n credential: CommunicationTokenCredential;\n locator: CallAdapterLocator;\n targetCallees?: StartCallIdentifier[];\n alternateCallerId?: string;\n options?: AzureCommunicationCallAdapterOptions;\n telemetryImplementationHint?: _TelemetryImplementationHint;\n}): Promise<CallAdapter> => {\n if (!_isValidIdentifier(userId)) {\n throw new Error('Invalid identifier. Please provide valid identifier object.');\n }\n const callClient = _createStatefulCallClientInner(\n {\n userId\n },\n undefined,\n telemetryImplementationHint\n );\n const callAgent = await callClient.createCallAgent(credential, {\n displayName\n });\n let adapter;\n if (locator) {\n adapter = createAzureCommunicationCallAdapterFromClient(callClient, callAgent, locator, options);\n } else {\n adapter = createAzureCommunicationCallAdapterFromClient(\n callClient,\n callAgent,\n targetCallees as StartCallIdentifier[],\n options\n );\n }\n return adapter;\n};\n\n/**\n * @public\n */\nexport const createTeamsCallAdapter = async (\n args:\n | TeamsCallAdapterArgs\n | /* @conditional-compile-remove(teams-identity-support-beta) */ TeamsOutboundCallAdapterArgs\n): Promise<TeamsCallAdapter> => {\n const { userId, credential, options } = args;\n if (isCommunicationUserIdentifier(userId)) {\n throw new Error(\n 'Communication User identifier is not supported by TeamsCallAdapter, please use our AzureCommunicationCallAdapter.'\n );\n }\n const callClient = _createStatefulCallClientInner(\n {\n userId\n },\n undefined,\n 'Call' as _TelemetryImplementationHint\n );\n const callAgent = await callClient.createTeamsCallAgent(credential, {\n undefined\n });\n\n /* @conditional-compile-remove(teams-identity-support-beta) */\n if ('targetCallees' in args) {\n return createTeamsCallAdapterFromClient(callClient, callAgent, args.targetCallees, options);\n }\n\n const adapter = createTeamsCallAdapterFromClient(callClient, callAgent, args.locator, options);\n return adapter;\n};\n\ntype PartialArgsType<Adapter> = Adapter extends CallAdapter\n ? Partial<AzureCommunicationCallAdapterArgs>\n : Partial<TeamsCallAdapterArgs>;\n\ntype PartialArgsOutboundType<Adapter> = Adapter extends CallAdapter\n ? Partial<AzureCommunicationOutboundCallAdapterArgs>\n : Partial<TeamsCallAdapterArgs>;\n\ntype AdapterOf<AdapterKind extends 'AzureCommunication' | 'Teams'> = AdapterKind extends 'AzureCommunication'\n ? CallAdapter\n : never | TeamsCallAdapter;\n\n/**\n * @private\n */\nfunction useAzureCommunicationCallAdapterGeneric<\n AdapterKind extends 'AzureCommunication' | 'Teams',\n Adapter extends AdapterOf<AdapterKind>\n>(\n args: PartialArgsType<Adapter>,\n adapterKind: AdapterKind,\n afterCreate?: (adapter: Adapter) => Promise<Adapter>,\n beforeDispose?: (adapter: Adapter) => Promise<void>\n): Adapter | undefined;\n/**\n * @private\n */\nfunction useAzureCommunicationCallAdapterGeneric<\n AdapterKind extends 'AzureCommunication' | 'Teams',\n Adapter extends AdapterOf<AdapterKind>\n>(\n args: PartialArgsOutboundType<Adapter>,\n adapterKind: AdapterKind,\n afterCreate?: (adapter: Adapter) => Promise<Adapter>,\n beforeDispose?: (adapter: Adapter) => Promise<void>\n): Adapter | undefined;\n/**\n * @private\n */\nfunction useAzureCommunicationCallAdapterGeneric<\n AdapterKind extends 'AzureCommunication' | 'Teams',\n Adapter extends AdapterOf<AdapterKind>\n>(\n args: PartialArgsType<Adapter> | PartialArgsOutboundType<Adapter>,\n adapterKind: AdapterKind = 'AzureCommunication' as AdapterKind,\n afterCreate?: (adapter: Adapter) => Promise<Adapter>,\n beforeDispose?: (adapter: Adapter) => Promise<void>\n): Adapter | undefined {\n const { credential, userId } = args;\n const locator = 'locator' in args ? args.locator : undefined;\n const targetCallees = 'targetCallees' in args ? args.targetCallees : undefined;\n const displayName = 'displayName' in args ? args.displayName : undefined;\n\n const options = 'options' in args ? args.options : undefined;\n\n // State update needed to rerender the parent component when a new adapter is created.\n const [adapter, setAdapter] = useState<Adapter | undefined>(undefined);\n // Ref needed for cleanup to access the old adapter created asynchronously.\n const adapterRef = useRef<Adapter | undefined>(undefined);\n const creatingAdapterRef = useRef<boolean>(false);\n\n const afterCreateRef = useRef<((adapter: Adapter) => Promise<Adapter>) | undefined>(undefined);\n const beforeDisposeRef = useRef<((adapter: Adapter) => Promise<void>) | undefined>(undefined);\n // These refs are updated on *each* render, so that the latest values\n // are used in the `useEffect` closures below.\n // Using a Ref ensures that new values for the callbacks do not trigger the\n // useEffect blocks, and a new adapter creation / distruction is not triggered.\n afterCreateRef.current = afterCreate;\n beforeDisposeRef.current = beforeDispose;\n\n useEffect(\n () => {\n if (!credential || (!locator && !targetCallees) || !userId) {\n return;\n }\n\n if (adapterKind === 'AzureCommunication' && !displayName) {\n return;\n }\n (async () => {\n if (adapterRef.current) {\n // Dispose the old adapter when a new one is created.\n //\n // This clean up function uses `adapterRef` because `adapter` can not be added to the dependency array of\n // this `useEffect` -- we do not want to trigger a new adapter creation because of the first adapter\n // creation.\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n let newAdapter: Adapter | undefined = undefined;\n if (adapterKind === 'AzureCommunication') {\n // This is just the type check to ensure that displayName is defined.\n if (!displayName) {\n throw new Error('Unreachable code, displayName already checked above.');\n }\n if (creatingAdapterRef.current) {\n console.warn(\n 'Adapter is already being created, please see storybook for more information: https://azure.github.io/communication-ui-library/?path=/story/troubleshooting--page'\n );\n return;\n }\n creatingAdapterRef.current = true;\n if (locator) {\n newAdapter = (await createAzureCommunicationCallAdapter({\n credential,\n displayName: displayName,\n locator,\n userId: userId as CommunicationUserIdentifier,\n options\n })) as Adapter;\n } else if (targetCallees) {\n newAdapter = (await createAzureCommunicationCallAdapter({\n credential,\n displayName: displayName,\n targetCallees,\n userId: userId as CommunicationUserIdentifier,\n options\n })) as Adapter;\n }\n } else if (adapterKind === 'Teams') {\n if (creatingAdapterRef.current) {\n console.warn('Adapter is already being created, skipping creation.');\n return;\n }\n creatingAdapterRef.current = true;\n if (targetCallees) {\n /* @conditional-compile-remove(teams-identity-support-beta) */\n newAdapter = (await createTeamsCallAdapter({\n credential,\n userId: userId as MicrosoftTeamsUserIdentifier,\n targetCallees: targetCallees as StartTeamsCallIdentifier[],\n options\n })) as Adapter;\n } else {\n newAdapter = (await createTeamsCallAdapter({\n credential,\n locator: locator as TeamsMeetingLinkLocator,\n userId: userId as MicrosoftTeamsUserIdentifier,\n options\n })) as Adapter;\n }\n } else {\n throw new Error('Unreachable code, unknown adapterKind');\n }\n\n if (!newAdapter) {\n throw Error('Unreachable code! Get undefined adapter');\n }\n\n if (afterCreateRef.current) {\n newAdapter = await afterCreateRef.current(newAdapter);\n }\n adapterRef.current = newAdapter;\n creatingAdapterRef.current = false;\n setAdapter(newAdapter);\n })();\n },\n // Explicitly list all arguments so that caller doesn't have to memoize the `args` object.\n [\n adapterRef,\n afterCreateRef,\n beforeDisposeRef,\n adapterKind,\n credential,\n locator,\n userId,\n displayName,\n options,\n targetCallees\n ]\n );\n\n // Dispose any existing adapter when the component unmounts.\n useEffect(() => {\n return () => {\n (async () => {\n if (adapterRef.current) {\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n })();\n };\n }, []);\n\n return adapter;\n}\n\n/**\n * A custom React hook to simplify the creation of {@link CallAdapter}.\n *\n * Similar to {@link createAzureCommunicationCallAdapter}, but takes care of asynchronous\n * creation of the adapter internally.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n *\n * Note that you must memoize the arguments to avoid recreating adapter on each render.\n * See storybook for typical usage examples.\n *\n * @public\n */\nexport const useAzureCommunicationCallAdapter = (\n /**\n * Arguments to be passed to {@link createAzureCommunicationCallAdapter}.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n */\n args: Partial<AzureCommunicationCallAdapterArgs | AzureCommunicationOutboundCallAdapterArgs>,\n /**\n * Optional callback to modify the adapter once it is created.\n *\n * If set, must return the modified adapter.\n */\n afterCreate?: (adapter: CallAdapter) => Promise<CallAdapter>,\n /**\n * Optional callback called before the adapter is disposed.\n *\n * This is useful for clean up tasks, e.g., leaving any ongoing calls.\n */\n beforeDispose?: (adapter: CallAdapter) => Promise<void>\n): CallAdapter | undefined => {\n return useAzureCommunicationCallAdapterGeneric(args, 'AzureCommunication', afterCreate, beforeDispose);\n};\n\n/**\n * A custom React hook to simplify the creation of {@link TeamsCallAdapter}.\n *\n * Similar to {@link createTeamsAzureCommunicationCallAdapter}, but takes care of asynchronous\n * creation of the adapter internally.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n *\n * Note that you must memoize the arguments to avoid recreating adapter on each render.\n * See storybook for typical usage examples.\n *\n * @public\n */\nexport const useTeamsCallAdapter = (\n /**\n * Arguments to be passed to {@link createAzureCommunicationCallAdapter}.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n */\n args: Partial<\n TeamsCallAdapterArgs | /* @conditional-compile-remove(teams-identity-support-beta) */ TeamsOutboundCallAdapterArgs\n >,\n /**\n * Optional callback to modify the adapter once it is created.\n *\n * If set, must return the modified adapter.\n */\n afterCreate?: (adapter: TeamsCallAdapter) => Promise<TeamsCallAdapter>,\n /**\n * Optional callback called before the adapter is disposed.\n *\n * This is useful for clean up tasks, e.g., leaving any ongoing calls.\n */\n beforeDispose?: (adapter: TeamsCallAdapter) => Promise<void>\n): TeamsCallAdapter | undefined => {\n return useAzureCommunicationCallAdapterGeneric(args, 'Teams', afterCreate, beforeDispose);\n};\n\n/**\n * Create a {@link CallAdapter} using the provided {@link StatefulCallClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulCallClient}.\n * Consider using {@link createAzureCommunicationCallAdapter} for a simpler API.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapterFromClient(\n callClient: StatefulCallClient,\n callAgent: CallAgent,\n targetCallees: StartCallIdentifier[],\n options?: AzureCommunicationCallAdapterOptions\n): Promise<CallAdapter>;\n/**\n * Create a {@link CallAdapter} using the provided {@link StatefulCallClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulCallClient}.\n * Consider using {@link createAzureCommunicationCallAdapter} for a simpler API.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapterFromClient(\n callClient: StatefulCallClient,\n callAgent: CallAgent,\n locator: CallAdapterLocator,\n options?: AzureCommunicationCallAdapterOptions\n): Promise<CallAdapter>;\n/**\n * Create a {@link CallAdapter} using the provided {@link StatefulCallClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulCallClient}.\n * Consider using {@link createAzureCommunicationCallAdapter} for a simpler API.\n *\n * @public\n */\nexport async function createAzureCommunicationCallAdapterFromClient(\n callClient: StatefulCallClient,\n callAgent: CallAgent,\n locatorOrtargetCallees: CallAdapterLocator | StartCallIdentifier[],\n options?: AzureCommunicationCallAdapterOptions\n): Promise<CallAdapter> {\n const deviceManager = (await callClient.getDeviceManager()) as StatefulDeviceManager;\n await Promise.all([deviceManager.getCameras(), deviceManager.getMicrophones()]);\n if (deviceManager.isSpeakerSelectionAvailable) {\n await deviceManager.getSpeakers();\n }\n if (getLocatorOrTargetCallees(locatorOrtargetCallees)) {\n return new AzureCommunicationCallAdapter(\n callClient,\n locatorOrtargetCallees as StartCallIdentifier[],\n callAgent,\n deviceManager,\n options\n );\n } else {\n return new AzureCommunicationCallAdapter(\n callClient,\n locatorOrtargetCallees as CallAdapterLocator,\n callAgent,\n deviceManager,\n options\n );\n }\n}\n\n/**\n * Create a {@link TeamsCallAdapter} using the provided {@link StatefulCallClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulCallClient}.\n * Consider using {@link createAzureCommunicationCallAdapter} for a simpler API.\n *\n * @public\n */\nexport const createTeamsCallAdapterFromClient = async (\n callClient: StatefulCallClient,\n callAgent: TeamsCallAgent,\n locator:\n | CallAdapterLocator\n | /* @conditional-compile-remove(teams-identity-support-beta) */ StartTeamsCallIdentifier[],\n options?: TeamsAdapterOptions\n): Promise<TeamsCallAdapter> => {\n const deviceManager = (await callClient.getDeviceManager()) as StatefulDeviceManager;\n await Promise.all([deviceManager.getCameras(), deviceManager.getMicrophones()]);\n if (deviceManager.isSpeakerSelectionAvailable) {\n await deviceManager.getSpeakers();\n }\n if (Array.isArray(locator)) {\n return new AzureCommunicationCallAdapter(callClient, locator, callAgent, deviceManager, options);\n } else {\n return new AzureCommunicationCallAdapter(callClient, locator, callAgent, deviceManager, options);\n }\n};\n\nconst captionsUIVisibilityModifier = (state: CallContextState): CallContextState => {\n // To hide captions to the UI, set isCaptionsFeatureActive to false and startCaptionsInProgress to false\n if (\n state.call?.captionsFeature &&\n state.captionsTriggers?.captionsStartedInBackground &&\n !state.captionsTriggers?.captionsStartedWithUI\n ) {\n return {\n ...state,\n call: {\n ...state.call,\n captionsFeature: {\n ...state.call.captionsFeature,\n isCaptionsFeatureActive: false,\n startCaptionsInProgress: false\n }\n }\n };\n }\n return state;\n};\n\nconst isCallError = (e: Error): e is CallError => {\n return 'target' in e && 'innerError' in e;\n};\n"]}
|