@azure/communication-react 1.4.3-alpha-202212220013.0 → 1.4.3-alpha-202301040014.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/communication-react.d.ts +45 -33
- package/dist/dist-cjs/communication-react/index.js +61 -36
- package/dist/dist-cjs/communication-react/index.js.map +1 -1
- package/dist/dist-esm/acs-ui-common/src/identifier.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/identifier.js.map +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/calling-stateful-client/src/StatefulCallClient.d.ts +2 -1
- package/dist/dist-esm/calling-stateful-client/src/StatefulCallClient.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +15 -5
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +56 -31
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.d.ts +2 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/index.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/index.d.ts +2 -2
- package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js.map +1 -1
- package/package.json +8 -8
@@ -5,7 +5,7 @@ const COMMUNICATION_USER_PREFIX = '8:acs:';
|
|
5
5
|
const PHONE_NUMBER_PREFIX = '4:';
|
6
6
|
const TEAMS_DOD_PREFIX = '8:dod:';
|
7
7
|
const TEAMS_GCCH_PREFIX = '8:gcch:';
|
8
|
-
const TEAMS_USER_PREFIX = '8:
|
8
|
+
const TEAMS_USER_PREFIX = '8:orgid:';
|
9
9
|
const TEAMS_VISITOR_PREFIX = '8:teamsvisitor:';
|
10
10
|
/**
|
11
11
|
* A string representation of a {@link @azure/communication-common#CommunicationIdentifier}.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/identifier.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAEL,6BAA6B,EAC7B,8BAA8B,EAC9B,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAErC,MAAM,yBAAyB,GAAG,QAAQ,CAAC;AAC3C,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAClC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AACpC,MAAM,iBAAiB,GAAG,
|
1
|
+
{"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/identifier.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n CommunicationIdentifier,\n isCommunicationUserIdentifier,\n isMicrosoftTeamsUserIdentifier,\n isPhoneNumberIdentifier\n} from '@azure/communication-common';\n\nconst COMMUNICATION_USER_PREFIX = '8:acs:';\nconst PHONE_NUMBER_PREFIX = '4:';\nconst TEAMS_DOD_PREFIX = '8:dod:';\nconst TEAMS_GCCH_PREFIX = '8:gcch:';\nconst TEAMS_USER_PREFIX = '8:orgid:';\nconst TEAMS_VISITOR_PREFIX = '8:teamsvisitor:';\n\n/**\n * A string representation of a {@link @azure/communication-common#CommunicationIdentifier}.\n *\n * This string representation of CommunicationIdentifier is guaranteed to be stable for\n * a unique Communication user. Thus,\n * - it can be used to persist a user's identity in external databases.\n * - it can be used as keys into a Map to store data for the user.\n *\n * @public\n */\nexport const toFlatCommunicationIdentifier = (identifier: CommunicationIdentifier): string => {\n if (isCommunicationUserIdentifier(identifier)) {\n return identifier.communicationUserId;\n }\n if (isMicrosoftTeamsUserIdentifier(identifier)) {\n if (identifier.isAnonymous) {\n return TEAMS_VISITOR_PREFIX + identifier.microsoftTeamsUserId;\n }\n if (identifier.cloud === 'dod') {\n return TEAMS_DOD_PREFIX + identifier.microsoftTeamsUserId;\n }\n if (identifier.cloud === 'gcch') {\n return TEAMS_GCCH_PREFIX + identifier.microsoftTeamsUserId;\n }\n return TEAMS_USER_PREFIX + identifier.microsoftTeamsUserId;\n }\n if (isPhoneNumberIdentifier(identifier)) {\n return PHONE_NUMBER_PREFIX + identifier.phoneNumber;\n }\n return identifier.id;\n};\n\n/**\n * Reverse operation of {@link toFlatCommunicationIdentifier}.\n *\n * @public\n */\nexport const fromFlatCommunicationIdentifier = (id: string): CommunicationIdentifier => {\n if (id.startsWith(COMMUNICATION_USER_PREFIX)) {\n // The prefix is preserved for this variant of the identifier.\n return { communicationUserId: id };\n }\n if (id.startsWith(PHONE_NUMBER_PREFIX) || id.startsWith('+')) {\n const isPhoneNumber = id.startsWith(PHONE_NUMBER_PREFIX) ? id.replace(PHONE_NUMBER_PREFIX, '') : id;\n return { phoneNumber: isPhoneNumber };\n }\n if (id.startsWith(TEAMS_USER_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_USER_PREFIX, '') };\n }\n if (id.startsWith(TEAMS_DOD_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_DOD_PREFIX, ''), cloud: 'dod' };\n }\n if (id.startsWith(TEAMS_GCCH_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_GCCH_PREFIX, ''), cloud: 'gcch' };\n }\n if (id.startsWith(TEAMS_VISITOR_PREFIX)) {\n return { microsoftTeamsUserId: id.replace(TEAMS_VISITOR_PREFIX, ''), isAnonymous: true };\n }\n return { id };\n};\n\n/**\n * Returns a CommunicationIdentifier.\n * @internal\n */\nexport const _toCommunicationIdentifier = (id: string | CommunicationIdentifier): CommunicationIdentifier => {\n if (typeof id === 'string') {\n return fromFlatCommunicationIdentifier(id);\n }\n return id;\n};\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"telemetryVersion.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/telemetryVersion.js"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;AAElC,wCAAwC;AAExC,MAAM,CAAC,OAAO,GAAG,4BAA4B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// GENERATED FILE. DO NOT EDIT MANUALLY.\n\nmodule.exports = '1.4.3-alpha-
|
1
|
+
{"version":3,"file":"telemetryVersion.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/telemetryVersion.js"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;AAElC,wCAAwC;AAExC,MAAM,CAAC,OAAO,GAAG,4BAA4B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// GENERATED FILE. DO NOT EDIT MANUALLY.\n\nmodule.exports = '1.4.3-alpha-202301040014.0';\n"]}
|
@@ -5,6 +5,7 @@ import { DeclarativeCallAgent } from './CallAgentDeclarative';
|
|
5
5
|
import { InternalCallContext } from './InternalCallContext';
|
6
6
|
import { CreateViewResult } from './StreamUtils';
|
7
7
|
import { CommunicationIdentifier, CommunicationUserIdentifier } from '@azure/communication-common';
|
8
|
+
import { MicrosoftTeamsUserIdentifier } from '@azure/communication-common';
|
8
9
|
/**
|
9
10
|
* Defines the methods that allow CallClient {@link @azure/communication-calling#CallClient} to be used statefully.
|
10
11
|
* The interface provides access to proxied state and also allows registering a handler for state change events. For
|
@@ -146,7 +147,7 @@ export declare type StatefulCallClientArgs = {
|
|
146
147
|
* UserId from SDK. This is provided for developer convenience to easily access the userId from the
|
147
148
|
* state. It is not used by StatefulCallClient.
|
148
149
|
*/
|
149
|
-
userId: CommunicationUserIdentifier;
|
150
|
+
userId: CommunicationUserIdentifier | /* @conditional-compile-remove(teams-identity-support) */ MicrosoftTeamsUserIdentifier;
|
150
151
|
/**
|
151
152
|
* A phone number in E.164 format that will be used to represent the callers identity. This number is required
|
152
153
|
* to start a PSTN call.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"StatefulCallClient.js","sourceRoot":"","sources":["../../../../../calling-stateful-client/src/StatefulCallClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { deviceManagerDeclaratify } from './DeviceManagerDeclarative';\nimport { CallClient, CallClientOptions, CreateViewOptions, DeviceManager } from '@azure/communication-calling';\n/* @conditional-compile-remove(unsupported-browser) */\nimport { Features } from '@azure/communication-calling';\nimport { CallClientState, LocalVideoStreamState, RemoteVideoStreamState } from './CallClientState';\nimport { CallContext } from './CallContext';\nimport { callAgentDeclaratify, DeclarativeCallAgent } from './CallAgentDeclarative';\nimport { InternalCallContext } from './InternalCallContext';\nimport { createView, disposeView, CreateViewResult } from './StreamUtils';\nimport { CommunicationIdentifier, CommunicationUserIdentifier, getIdentifierKind } from '@azure/communication-common';\nimport { toFlatCommunicationIdentifier, _getApplicationId } from '@internal/acs-ui-common';\nimport { callingStatefulLogger } from './Logger';\n/* @conditional-compile-remove(teams-identity-support) */\nimport { DeclarativeTeamsCallAgent, teamsCallAgentDeclaratify } from './TeamsCallAgentDeclarative';\nimport { videoStreamRendererViewDeclaratify } from './VideoStreamRendererViewDeclarative';\n\n/**\n * Defines the methods that allow CallClient {@link @azure/communication-calling#CallClient} to be used statefully.\n * The interface provides access to proxied state and also allows registering a handler for state change events. For\n * state definition see {@link CallClientState}.\n *\n * State change events are driven by:\n * - Returned data from {@link @azure/communication-calling#DeviceManager} APIs.\n * - Returned data from {@link @azure/communication-calling#CallAgent} APIs.\n * - Listeners automatically attached to various azure communication-calling objects:\n * - CallAgent 'incomingCall'\n * - CallAgent 'callsUpdated'\n * - DeviceManager 'videoDevicesUpdated'\n * - DeviceManager 'audioDevicesUpdated\n * - DeviceManager 'selectedMicrophoneChanged'\n * - DeviceManager 'selectedSpeakerChanged'\n * - Call 'stateChanged'\n * - Call 'idChanged'\n * - Call 'isMutedChanged'\n * - Call 'isScreenSharingOnChanged'\n * - Call 'remoteParticipantsUpdated'\n * - Call 'localVideoStreamsUpdated'\n * - IncomingCall 'callEnded'\n * - RemoteParticipant 'stateChanged'\n * - RemoteParticipant 'isMutedChanged'\n * - RemoteParticipant 'displayNameChanged'\n * - RemoteParticipant 'isSpeakingChanged'\n * - RemoteParticipant 'videoStreamsUpdated'\n * - RemoteVideoStream 'isAvailableChanged'\n * - TranscriptionCallFeature 'isTranscriptionActiveChanged'\n * - RecordingCallFeature 'isRecordingActiveChanged'\n *\n * @public\n */\nexport interface StatefulCallClient extends CallClient {\n /**\n * Holds all the state that we could proxy from CallClient {@link @azure/communication-calling#CallClient} as\n * CallClientState {@link CallClientState}.\n */\n getState(): CallClientState;\n /**\n * Allows a handler to be registered for 'stateChanged' events.\n *\n * @param handler - Callback to receive the state.\n */\n onStateChange(handler: (state: CallClientState) => void): void;\n /**\n * Allows unregistering for 'stateChanged' events.\n *\n * @param handler - Original callback to be unsubscribed.\n */\n offStateChange(handler: (state: CallClientState) => void): void;\n /**\n * Renders a {@link RemoteVideoStreamState} or {@link LocalVideoStreamState} and stores the resulting\n * {@link VideoStreamRendererViewState} under the relevant {@link RemoteVideoStreamState} or\n * {@link LocalVideoStreamState} or as unparented view in the state. Under the hood calls\n * {@link @azure/communication-calling#VideoStreamRenderer.createView}.\n *\n * Scenario 1: Render RemoteVideoStreamState\n * - CallId is required, participantId is required, and stream of type RemoteVideoStreamState is required\n * - Resulting {@link VideoStreamRendererViewState} is stored in the given callId and participantId in\n * {@link CallClientState}\n *\n * Scenario 2: Render LocalVideoStreamState for a call\n * - CallId is required, participantId must be undefined, and stream of type LocalVideoStreamState is required.\n * - The {@link @azure/communication-calling#Call.localVideoStreams} must already be started using\n * {@link @azure/communication-calling#Call.startVideo}.\n * - Resulting {@link VideoStreamRendererViewState} is stored in the given callId {@link CallState.localVideoStreams}\n * in {@link CallClientState}.\n *\n * - Scenario 2: Render LocalVideoStreamState not part of a call (example rendering camera for local preview)\n * - CallId must be undefined, participantId must be undefined, and stream of type LocalVideoStreamState is required.\n * - Resulting {@link VideoStreamRendererViewState} is stored in under the given LocalVideoStreamState in\n * {@link CallClientState.deviceManager.unparentedViews}\n *\n * @param callId - CallId for the given stream. Can be undefined if the stream is not part of any call.\n * @param participantId - {@link RemoteParticipant.identifier} associated with the given RemoteVideoStreamState. Could\n * be undefined if rendering LocalVideoStreamState.\n * @param stream - The LocalVideoStreamState or RemoteVideoStreamState to start rendering.\n * @param options - Options that are passed to the {@link @azure/communication-calling#VideoStreamRenderer}.\n */\n createView(\n callId: string | undefined,\n participantId: CommunicationIdentifier | undefined,\n stream: LocalVideoStreamState | RemoteVideoStreamState,\n options?: CreateViewOptions\n ): Promise<CreateViewResult | undefined>;\n /**\n * Stops rendering a {@link RemoteVideoStreamState} or {@link LocalVideoStreamState} and removes the\n * {@link VideoStreamRendererView} from the relevant {@link RemoteVideoStreamState} in {@link CallClientState} or\n * {@link LocalVideoStream} in {@link CallClientState} or appropriate\n * {@link CallClientState.deviceManager.unparentedViews} Under the hood calls\n * {@link @azure/communication-calling#VideoStreamRenderer.dispose}.\n *\n * Its important to disposeView to clean up resources properly.\n *\n * Scenario 1: Dispose RemoteVideoStreamState\n * - CallId is required, participantId is required, and stream of type RemoteVideoStreamState is required\n *\n * Scenario 2: Dispose LocalVideoStreamState for a call\n * - CallId is required, participantId must be undefined, and stream of type LocalVideoStreamState is required.\n *\n * - Scenario 2: Dispose LocalVideoStreamState not part of a call\n * - CallId must be undefined, participantId must be undefined, and stream of type LocalVideoStreamState is required.\n * - LocalVideoStreamState must be the original one passed to createView.\n *\n * @param callId - CallId for the given stream. Can be undefined if the stream is not part of any call.\n * @param participantId - {@link RemoteParticipant.identifier} associated with the given RemoteVideoStreamState. Could\n * be undefined if disposing LocalVideoStreamState.\n * @param stream - The LocalVideoStreamState or RemoteVideoStreamState to dispose.\n */\n disposeView(\n callId: string | undefined,\n participantId: CommunicationIdentifier | undefined,\n stream: LocalVideoStreamState | RemoteVideoStreamState\n ): void;\n\n /** @conditional-compile-remove(one-to-n-calling) */\n /**\n * The CallAgent is used to handle calls.\n * To create the CallAgent, pass a CommunicationTokenCredential object provided from SDK.\n * - The CallClient can only have one active CallAgent instance at a time.\n * - You can create a new CallClient instance to create a new CallAgent.\n * - You can dispose of a CallClient's current active CallAgent, and call the CallClient's\n * createCallAgent() method again to create a new CallAgent.\n * @param tokenCredential - The token credential. Use AzureCommunicationTokenCredential from `@azure/communication-common` to create a credential.\n * @param options - The CallAgentOptions for additional options like display name.\n * @public\n */\n createCallAgent(...args: Parameters<CallClient['createCallAgent']>): Promise<DeclarativeCallAgent>;\n}\n\n/**\n * A function to modify the state of the StatefulCallClient.\n *\n * Provided as a callback to the {@link StatefulCallClient.modifyState} method.\n *\n * The function must modify the provided state in place as much as possible.\n * Making large modifications can lead to bad performance by causing spurious rerendering of the UI.\n *\n * Consider using commonly used modifier functions exported from this package.\n */\nexport type CallStateModifier = (state: CallClientState) => void;\n\n/**\n * ProxyCallClient proxies CallClient {@link @azure/communication-calling#CallClient} and subscribes to all events that\n * affect state. ProxyCallClient keeps its own copy of the call state and when state is updated, ProxyCallClient emits\n * the event 'stateChanged'.\n */\nclass ProxyCallClient implements ProxyHandler<CallClient> {\n private _context: CallContext;\n private _internalContext: InternalCallContext;\n private _callAgent:\n | DeclarativeCallAgent\n | /* @conditional-compile-remove(teams-identity-support) */ DeclarativeTeamsCallAgent\n | undefined;\n private _deviceManager: DeviceManager | undefined;\n private _sdkDeviceManager: DeviceManager | undefined;\n\n constructor(context: CallContext, internalContext: InternalCallContext) {\n this._context = context;\n this._internalContext = internalContext;\n }\n\n public get<P extends keyof CallClient>(target: CallClient, prop: P): any {\n switch (prop) {\n case 'createCallAgent': {\n return this._context.withAsyncErrorTeedToState(\n async (...args: Parameters<CallClient['createCallAgent']>): Promise<DeclarativeCallAgent> => {\n // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous\n // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative\n // callAgent if the createCallAgent succeeds.\n const callAgent = await target.createCallAgent(...args);\n this._callAgent = callAgentDeclaratify(callAgent, this._context, this._internalContext);\n this._context.setCallAgent({\n displayName: this._callAgent.displayName\n });\n return this._callAgent;\n },\n 'CallClient.createCallAgent'\n );\n }\n case 'createTeamsCallAgent': {\n /* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState(\n async (...args: Parameters<CallClient['createTeamsCallAgent']>): Promise<DeclarativeTeamsCallAgent> => {\n // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous\n // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative\n // callAgent if the createCallAgent succeeds.\n const callAgent = await target.createTeamsCallAgent(...args);\n this._callAgent = teamsCallAgentDeclaratify(callAgent, this._context, this._internalContext);\n this._context.setCallAgent({\n displayName: undefined\n });\n return this._callAgent;\n },\n 'CallClient.createTeamsCallAgent'\n );\n return Reflect.get(target, prop);\n }\n case 'getDeviceManager': {\n return this._context.withAsyncErrorTeedToState(async () => {\n // As of writing, the SDK always returns the same instance of DeviceManager so we keep a reference of\n // DeviceManager and if it does not change we return the cached DeclarativeDeviceManager. If it does not we'll\n // throw an error that indicate we need to fix this issue as our implementation has diverged from the SDK.\n const deviceManager = await target.getDeviceManager();\n if (this._sdkDeviceManager) {\n if (this._sdkDeviceManager === deviceManager) {\n return this._deviceManager;\n } else {\n throw new Error(\n 'Multiple DeviceManager not supported. This means a incompatible version of communication-calling is ' +\n 'used OR calling declarative was not properly updated to communication-calling version.'\n );\n }\n } else {\n this._sdkDeviceManager = deviceManager;\n }\n this._deviceManager = deviceManagerDeclaratify(deviceManager, this._context);\n return this._deviceManager;\n }, 'CallClient.getDeviceManager');\n }\n case 'feature': {\n /* @conditional-compile-remove(unsupported-browser) */\n return this._context.withErrorTeedToState((...args: Parameters<CallClient['feature']>) => {\n if (args[0] === Features.DebugInfo) {\n const feature = target.feature(Features.DebugInfo);\n /**\n * add to this object if we want to proxy anything else off the DebugInfo feature object.\n */\n return {\n ...feature,\n getEnvironmentInfo: async () => {\n const environmentInfo = await feature.getEnvironmentInfo();\n this._context.setEnvironmentInfo(environmentInfo);\n return environmentInfo;\n }\n };\n }\n return Reflect.get(target, prop);\n }, 'CallClient.feature');\n }\n default:\n return Reflect.get(target, prop);\n }\n }\n}\n\n/**\n * Arguments to construct the StatefulCallClient.\n *\n * @public\n */\nexport type StatefulCallClientArgs = {\n /**\n * UserId from SDK. This is provided for developer convenience to easily access the userId from the\n * state. It is not used by StatefulCallClient.\n */\n userId: CommunicationUserIdentifier;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * A phone number in E.164 format that will be used to represent the callers identity. This number is required\n * to start a PSTN call.\n *\n * example: +11234567\n *\n * This is not a cached value from the headless calling client.\n */\n alternateCallerId?: string;\n};\n\n/**\n * Options to construct the StatefulCallClient with.\n *\n * @public\n */\nexport type StatefulCallClientOptions = {\n /**\n * Options to construct the {@link @axure/communication-calling#CallClient} with.\n */\n callClientOptions: CallClientOptions;\n /**\n * Sets the max listeners limit of the 'stateChange' event. Defaults to the node.js EventEmitter.defaultMaxListeners\n * if not specified.\n */\n maxStateChangeListeners?: number;\n};\n\n/**\n * Creates a StatefulCallClient {@link StatefulCallClient} by proxying CallClient\n * {@link @azure/communication-calling#CallClient} with ProxyCallClient {@link ProxyCallClient} which then allows access\n * to state in a declarative way.\n *\n * It is important to use the {@link @azure/communication-calling#DeviceManager} and\n * {@link @azure/communication-calling#CallAgent} and {@link @azure/communication-calling#Call} (and etc.) that are\n * obtained from the StatefulCallClient in order for their state changes to be proxied properly.\n *\n * @param args - {@link StatefulCallClientArgs}\n * @param options - {@link StatefulCallClientOptions}\n *\n * @public\n */\nexport const createStatefulCallClient = (\n args: StatefulCallClientArgs,\n options?: StatefulCallClientOptions\n): StatefulCallClient => {\n callingStatefulLogger.info(`Creating calling stateful client using library version: ${_getApplicationId()}`);\n return createStatefulCallClientWithDeps(\n new CallClient(withTelemetryTag(options?.callClientOptions)),\n new CallContext(\n getIdentifierKind(args.userId),\n options?.maxStateChangeListeners,\n /* @conditional-compile-remove(PSTN-calls) */ args.alternateCallerId\n ),\n new InternalCallContext()\n );\n};\n\n/**\n * Package-internal version of createStatefulCallClient that allows dependency injection.\n *\n * This function should not be exported from the package.\n */\nexport const createStatefulCallClientWithDeps = (\n callClient: CallClient,\n context: CallContext,\n internalContext: InternalCallContext\n): StatefulCallClient => {\n Object.defineProperty(callClient, 'getState', {\n configurable: false,\n value: () => context.getState()\n });\n Object.defineProperty(callClient, 'onStateChange', {\n configurable: false,\n value: (handler: (state: CallClientState) => void) => context.onStateChange(handler)\n });\n Object.defineProperty(callClient, 'offStateChange', {\n configurable: false,\n value: (handler: (state: CallClientState) => void) => context.offStateChange(handler)\n });\n Object.defineProperty(callClient, 'createView', {\n configurable: false,\n value: async (\n callId: string | undefined,\n participantId: CommunicationIdentifier | undefined,\n stream: LocalVideoStreamState | RemoteVideoStreamState,\n options?: CreateViewOptions\n ): Promise<CreateViewResult | undefined> => {\n const participantIdKind = participantId ? getIdentifierKind(participantId) : undefined;\n const result = await createView(context, internalContext, callId, participantIdKind, stream, options);\n // We only need to declaratify the VideoStreamRendererView object for remote participants. Because the updateScalingMode only needs to be called on remote participant stream views.\n if ('id' in stream && callId && participantId && result) {\n const participantKey = toFlatCommunicationIdentifier(participantId);\n result.view = videoStreamRendererViewDeclaratify(result.view, context, callId, participantKey, stream.id);\n }\n return result;\n }\n });\n Object.defineProperty(callClient, 'disposeView', {\n configurable: false,\n value: (\n callId: string | undefined,\n participantId: CommunicationIdentifier | undefined,\n stream: LocalVideoStreamState | RemoteVideoStreamState\n ): void => {\n const participantIdKind = participantId ? getIdentifierKind(participantId) : undefined;\n disposeView(context, internalContext, callId, participantIdKind, stream);\n }\n });\n\n return new Proxy(callClient, new ProxyCallClient(context, internalContext)) as StatefulCallClient;\n};\n\nconst withTelemetryTag = (options?: CallClientOptions): CallClientOptions => {\n const tags = options?.diagnostics?.tags ?? [];\n tags.push(_getApplicationId());\n return {\n ...options,\n diagnostics: {\n ...options?.diagnostics,\n tags\n }\n };\n};\n\"../../acs-ui-common/src\""]}
|
1
|
+
{"version":3,"file":"StatefulCallClient.js","sourceRoot":"","sources":["../../../../../calling-stateful-client/src/StatefulCallClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { deviceManagerDeclaratify } from './DeviceManagerDeclarative';\nimport { CallClient, CallClientOptions, CreateViewOptions, DeviceManager } from '@azure/communication-calling';\n/* @conditional-compile-remove(unsupported-browser) */\nimport { Features } from '@azure/communication-calling';\nimport { CallClientState, LocalVideoStreamState, RemoteVideoStreamState } from './CallClientState';\nimport { CallContext } from './CallContext';\nimport { callAgentDeclaratify, DeclarativeCallAgent } from './CallAgentDeclarative';\nimport { InternalCallContext } from './InternalCallContext';\nimport { createView, disposeView, CreateViewResult } from './StreamUtils';\nimport { CommunicationIdentifier, CommunicationUserIdentifier, getIdentifierKind } from '@azure/communication-common';\nimport { toFlatCommunicationIdentifier, _getApplicationId } from '@internal/acs-ui-common';\nimport { callingStatefulLogger } from './Logger';\n/* @conditional-compile-remove(teams-identity-support) */\nimport { DeclarativeTeamsCallAgent, teamsCallAgentDeclaratify } from './TeamsCallAgentDeclarative';\n/* @conditional-compile-remove(teams-identity-support) */\nimport { MicrosoftTeamsUserIdentifier } from '@azure/communication-common';\nimport { videoStreamRendererViewDeclaratify } from './VideoStreamRendererViewDeclarative';\n\n/**\n * Defines the methods that allow CallClient {@link @azure/communication-calling#CallClient} to be used statefully.\n * The interface provides access to proxied state and also allows registering a handler for state change events. For\n * state definition see {@link CallClientState}.\n *\n * State change events are driven by:\n * - Returned data from {@link @azure/communication-calling#DeviceManager} APIs.\n * - Returned data from {@link @azure/communication-calling#CallAgent} APIs.\n * - Listeners automatically attached to various azure communication-calling objects:\n * - CallAgent 'incomingCall'\n * - CallAgent 'callsUpdated'\n * - DeviceManager 'videoDevicesUpdated'\n * - DeviceManager 'audioDevicesUpdated\n * - DeviceManager 'selectedMicrophoneChanged'\n * - DeviceManager 'selectedSpeakerChanged'\n * - Call 'stateChanged'\n * - Call 'idChanged'\n * - Call 'isMutedChanged'\n * - Call 'isScreenSharingOnChanged'\n * - Call 'remoteParticipantsUpdated'\n * - Call 'localVideoStreamsUpdated'\n * - IncomingCall 'callEnded'\n * - RemoteParticipant 'stateChanged'\n * - RemoteParticipant 'isMutedChanged'\n * - RemoteParticipant 'displayNameChanged'\n * - RemoteParticipant 'isSpeakingChanged'\n * - RemoteParticipant 'videoStreamsUpdated'\n * - RemoteVideoStream 'isAvailableChanged'\n * - TranscriptionCallFeature 'isTranscriptionActiveChanged'\n * - RecordingCallFeature 'isRecordingActiveChanged'\n *\n * @public\n */\nexport interface StatefulCallClient extends CallClient {\n /**\n * Holds all the state that we could proxy from CallClient {@link @azure/communication-calling#CallClient} as\n * CallClientState {@link CallClientState}.\n */\n getState(): CallClientState;\n /**\n * Allows a handler to be registered for 'stateChanged' events.\n *\n * @param handler - Callback to receive the state.\n */\n onStateChange(handler: (state: CallClientState) => void): void;\n /**\n * Allows unregistering for 'stateChanged' events.\n *\n * @param handler - Original callback to be unsubscribed.\n */\n offStateChange(handler: (state: CallClientState) => void): void;\n /**\n * Renders a {@link RemoteVideoStreamState} or {@link LocalVideoStreamState} and stores the resulting\n * {@link VideoStreamRendererViewState} under the relevant {@link RemoteVideoStreamState} or\n * {@link LocalVideoStreamState} or as unparented view in the state. Under the hood calls\n * {@link @azure/communication-calling#VideoStreamRenderer.createView}.\n *\n * Scenario 1: Render RemoteVideoStreamState\n * - CallId is required, participantId is required, and stream of type RemoteVideoStreamState is required\n * - Resulting {@link VideoStreamRendererViewState} is stored in the given callId and participantId in\n * {@link CallClientState}\n *\n * Scenario 2: Render LocalVideoStreamState for a call\n * - CallId is required, participantId must be undefined, and stream of type LocalVideoStreamState is required.\n * - The {@link @azure/communication-calling#Call.localVideoStreams} must already be started using\n * {@link @azure/communication-calling#Call.startVideo}.\n * - Resulting {@link VideoStreamRendererViewState} is stored in the given callId {@link CallState.localVideoStreams}\n * in {@link CallClientState}.\n *\n * - Scenario 2: Render LocalVideoStreamState not part of a call (example rendering camera for local preview)\n * - CallId must be undefined, participantId must be undefined, and stream of type LocalVideoStreamState is required.\n * - Resulting {@link VideoStreamRendererViewState} is stored in under the given LocalVideoStreamState in\n * {@link CallClientState.deviceManager.unparentedViews}\n *\n * @param callId - CallId for the given stream. Can be undefined if the stream is not part of any call.\n * @param participantId - {@link RemoteParticipant.identifier} associated with the given RemoteVideoStreamState. Could\n * be undefined if rendering LocalVideoStreamState.\n * @param stream - The LocalVideoStreamState or RemoteVideoStreamState to start rendering.\n * @param options - Options that are passed to the {@link @azure/communication-calling#VideoStreamRenderer}.\n */\n createView(\n callId: string | undefined,\n participantId: CommunicationIdentifier | undefined,\n stream: LocalVideoStreamState | RemoteVideoStreamState,\n options?: CreateViewOptions\n ): Promise<CreateViewResult | undefined>;\n /**\n * Stops rendering a {@link RemoteVideoStreamState} or {@link LocalVideoStreamState} and removes the\n * {@link VideoStreamRendererView} from the relevant {@link RemoteVideoStreamState} in {@link CallClientState} or\n * {@link LocalVideoStream} in {@link CallClientState} or appropriate\n * {@link CallClientState.deviceManager.unparentedViews} Under the hood calls\n * {@link @azure/communication-calling#VideoStreamRenderer.dispose}.\n *\n * Its important to disposeView to clean up resources properly.\n *\n * Scenario 1: Dispose RemoteVideoStreamState\n * - CallId is required, participantId is required, and stream of type RemoteVideoStreamState is required\n *\n * Scenario 2: Dispose LocalVideoStreamState for a call\n * - CallId is required, participantId must be undefined, and stream of type LocalVideoStreamState is required.\n *\n * - Scenario 2: Dispose LocalVideoStreamState not part of a call\n * - CallId must be undefined, participantId must be undefined, and stream of type LocalVideoStreamState is required.\n * - LocalVideoStreamState must be the original one passed to createView.\n *\n * @param callId - CallId for the given stream. Can be undefined if the stream is not part of any call.\n * @param participantId - {@link RemoteParticipant.identifier} associated with the given RemoteVideoStreamState. Could\n * be undefined if disposing LocalVideoStreamState.\n * @param stream - The LocalVideoStreamState or RemoteVideoStreamState to dispose.\n */\n disposeView(\n callId: string | undefined,\n participantId: CommunicationIdentifier | undefined,\n stream: LocalVideoStreamState | RemoteVideoStreamState\n ): void;\n\n /** @conditional-compile-remove(one-to-n-calling) */\n /**\n * The CallAgent is used to handle calls.\n * To create the CallAgent, pass a CommunicationTokenCredential object provided from SDK.\n * - The CallClient can only have one active CallAgent instance at a time.\n * - You can create a new CallClient instance to create a new CallAgent.\n * - You can dispose of a CallClient's current active CallAgent, and call the CallClient's\n * createCallAgent() method again to create a new CallAgent.\n * @param tokenCredential - The token credential. Use AzureCommunicationTokenCredential from `@azure/communication-common` to create a credential.\n * @param options - The CallAgentOptions for additional options like display name.\n * @public\n */\n createCallAgent(...args: Parameters<CallClient['createCallAgent']>): Promise<DeclarativeCallAgent>;\n}\n\n/**\n * A function to modify the state of the StatefulCallClient.\n *\n * Provided as a callback to the {@link StatefulCallClient.modifyState} method.\n *\n * The function must modify the provided state in place as much as possible.\n * Making large modifications can lead to bad performance by causing spurious rerendering of the UI.\n *\n * Consider using commonly used modifier functions exported from this package.\n */\nexport type CallStateModifier = (state: CallClientState) => void;\n\n/**\n * ProxyCallClient proxies CallClient {@link @azure/communication-calling#CallClient} and subscribes to all events that\n * affect state. ProxyCallClient keeps its own copy of the call state and when state is updated, ProxyCallClient emits\n * the event 'stateChanged'.\n */\nclass ProxyCallClient implements ProxyHandler<CallClient> {\n private _context: CallContext;\n private _internalContext: InternalCallContext;\n private _callAgent:\n | DeclarativeCallAgent\n | /* @conditional-compile-remove(teams-identity-support) */ DeclarativeTeamsCallAgent\n | undefined;\n private _deviceManager: DeviceManager | undefined;\n private _sdkDeviceManager: DeviceManager | undefined;\n\n constructor(context: CallContext, internalContext: InternalCallContext) {\n this._context = context;\n this._internalContext = internalContext;\n }\n\n public get<P extends keyof CallClient>(target: CallClient, prop: P): any {\n switch (prop) {\n case 'createCallAgent': {\n return this._context.withAsyncErrorTeedToState(\n async (...args: Parameters<CallClient['createCallAgent']>): Promise<DeclarativeCallAgent> => {\n // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous\n // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative\n // callAgent if the createCallAgent succeeds.\n const callAgent = await target.createCallAgent(...args);\n this._callAgent = callAgentDeclaratify(callAgent, this._context, this._internalContext);\n this._context.setCallAgent({\n displayName: this._callAgent.displayName\n });\n return this._callAgent;\n },\n 'CallClient.createCallAgent'\n );\n }\n case 'createTeamsCallAgent': {\n /* @conditional-compile-remove(teams-identity-support) */ return this._context.withAsyncErrorTeedToState(\n async (...args: Parameters<CallClient['createTeamsCallAgent']>): Promise<DeclarativeTeamsCallAgent> => {\n // createCallAgent will throw an exception if the previous callAgent was not disposed. If the previous\n // callAgent was disposed then it would have unsubscribed to events so we can just create a new declarative\n // callAgent if the createCallAgent succeeds.\n const callAgent = await target.createTeamsCallAgent(...args);\n this._callAgent = teamsCallAgentDeclaratify(callAgent, this._context, this._internalContext);\n this._context.setCallAgent({\n displayName: undefined\n });\n return this._callAgent;\n },\n 'CallClient.createTeamsCallAgent'\n );\n return Reflect.get(target, prop);\n }\n case 'getDeviceManager': {\n return this._context.withAsyncErrorTeedToState(async () => {\n // As of writing, the SDK always returns the same instance of DeviceManager so we keep a reference of\n // DeviceManager and if it does not change we return the cached DeclarativeDeviceManager. If it does not we'll\n // throw an error that indicate we need to fix this issue as our implementation has diverged from the SDK.\n const deviceManager = await target.getDeviceManager();\n if (this._sdkDeviceManager) {\n if (this._sdkDeviceManager === deviceManager) {\n return this._deviceManager;\n } else {\n throw new Error(\n 'Multiple DeviceManager not supported. This means a incompatible version of communication-calling is ' +\n 'used OR calling declarative was not properly updated to communication-calling version.'\n );\n }\n } else {\n this._sdkDeviceManager = deviceManager;\n }\n this._deviceManager = deviceManagerDeclaratify(deviceManager, this._context);\n return this._deviceManager;\n }, 'CallClient.getDeviceManager');\n }\n case 'feature': {\n /* @conditional-compile-remove(unsupported-browser) */\n return this._context.withErrorTeedToState((...args: Parameters<CallClient['feature']>) => {\n if (args[0] === Features.DebugInfo) {\n const feature = target.feature(Features.DebugInfo);\n /**\n * add to this object if we want to proxy anything else off the DebugInfo feature object.\n */\n return {\n ...feature,\n getEnvironmentInfo: async () => {\n const environmentInfo = await feature.getEnvironmentInfo();\n this._context.setEnvironmentInfo(environmentInfo);\n return environmentInfo;\n }\n };\n }\n return Reflect.get(target, prop);\n }, 'CallClient.feature');\n }\n default:\n return Reflect.get(target, prop);\n }\n }\n}\n\n/**\n * Arguments to construct the StatefulCallClient.\n *\n * @public\n */\nexport type StatefulCallClientArgs = {\n /**\n * UserId from SDK. This is provided for developer convenience to easily access the userId from the\n * state. It is not used by StatefulCallClient.\n */\n userId:\n | CommunicationUserIdentifier\n | /* @conditional-compile-remove(teams-identity-support) */ MicrosoftTeamsUserIdentifier;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * A phone number in E.164 format that will be used to represent the callers identity. This number is required\n * to start a PSTN call.\n *\n * example: +11234567\n *\n * This is not a cached value from the headless calling client.\n */\n alternateCallerId?: string;\n};\n\n/**\n * Options to construct the StatefulCallClient with.\n *\n * @public\n */\nexport type StatefulCallClientOptions = {\n /**\n * Options to construct the {@link @axure/communication-calling#CallClient} with.\n */\n callClientOptions: CallClientOptions;\n /**\n * Sets the max listeners limit of the 'stateChange' event. Defaults to the node.js EventEmitter.defaultMaxListeners\n * if not specified.\n */\n maxStateChangeListeners?: number;\n};\n\n/**\n * Creates a StatefulCallClient {@link StatefulCallClient} by proxying CallClient\n * {@link @azure/communication-calling#CallClient} with ProxyCallClient {@link ProxyCallClient} which then allows access\n * to state in a declarative way.\n *\n * It is important to use the {@link @azure/communication-calling#DeviceManager} and\n * {@link @azure/communication-calling#CallAgent} and {@link @azure/communication-calling#Call} (and etc.) that are\n * obtained from the StatefulCallClient in order for their state changes to be proxied properly.\n *\n * @param args - {@link StatefulCallClientArgs}\n * @param options - {@link StatefulCallClientOptions}\n *\n * @public\n */\nexport const createStatefulCallClient = (\n args: StatefulCallClientArgs,\n options?: StatefulCallClientOptions\n): StatefulCallClient => {\n callingStatefulLogger.info(`Creating calling stateful client using library version: ${_getApplicationId()}`);\n return createStatefulCallClientWithDeps(\n new CallClient(withTelemetryTag(options?.callClientOptions)),\n new CallContext(\n getIdentifierKind(args.userId),\n options?.maxStateChangeListeners,\n /* @conditional-compile-remove(PSTN-calls) */ args.alternateCallerId\n ),\n new InternalCallContext()\n );\n};\n\n/**\n * Package-internal version of createStatefulCallClient that allows dependency injection.\n *\n * This function should not be exported from the package.\n */\nexport const createStatefulCallClientWithDeps = (\n callClient: CallClient,\n context: CallContext,\n internalContext: InternalCallContext\n): StatefulCallClient => {\n Object.defineProperty(callClient, 'getState', {\n configurable: false,\n value: () => context.getState()\n });\n Object.defineProperty(callClient, 'onStateChange', {\n configurable: false,\n value: (handler: (state: CallClientState) => void) => context.onStateChange(handler)\n });\n Object.defineProperty(callClient, 'offStateChange', {\n configurable: false,\n value: (handler: (state: CallClientState) => void) => context.offStateChange(handler)\n });\n Object.defineProperty(callClient, 'createView', {\n configurable: false,\n value: async (\n callId: string | undefined,\n participantId: CommunicationIdentifier | undefined,\n stream: LocalVideoStreamState | RemoteVideoStreamState,\n options?: CreateViewOptions\n ): Promise<CreateViewResult | undefined> => {\n const participantIdKind = participantId ? getIdentifierKind(participantId) : undefined;\n const result = await createView(context, internalContext, callId, participantIdKind, stream, options);\n // We only need to declaratify the VideoStreamRendererView object for remote participants. Because the updateScalingMode only needs to be called on remote participant stream views.\n if ('id' in stream && callId && participantId && result) {\n const participantKey = toFlatCommunicationIdentifier(participantId);\n result.view = videoStreamRendererViewDeclaratify(result.view, context, callId, participantKey, stream.id);\n }\n return result;\n }\n });\n Object.defineProperty(callClient, 'disposeView', {\n configurable: false,\n value: (\n callId: string | undefined,\n participantId: CommunicationIdentifier | undefined,\n stream: LocalVideoStreamState | RemoteVideoStreamState\n ): void => {\n const participantIdKind = participantId ? getIdentifierKind(participantId) : undefined;\n disposeView(context, internalContext, callId, participantIdKind, stream);\n }\n });\n\n return new Proxy(callClient, new ProxyCallClient(context, internalContext)) as StatefulCallClient;\n};\n\nconst withTelemetryTag = (options?: CallClientOptions): CallClientOptions => {\n const tags = options?.diagnostics?.tags ?? [];\n tags.push(_getApplicationId());\n return {\n ...options,\n diagnostics: {\n ...options?.diagnostics,\n tags\n }\n };\n};\n\"../../acs-ui-common/src\""]}
|
@@ -7,7 +7,7 @@ import { CommonCallAdapter, CallEndedListener, CallIdChangedListener, CallAdapte
|
|
7
7
|
import { TeamsCallAdapter } from './CallAdapter';
|
8
8
|
import { CreateVideoStreamViewResult, VideoStreamOptions } from "../../../../../react-components/src";
|
9
9
|
import { Role } from "../../../../../react-components/src";
|
10
|
-
import { CommunicationTokenCredential, CommunicationUserIdentifier, PhoneNumberIdentifier, CommunicationIdentifier } from '@azure/communication-common';
|
10
|
+
import { CommunicationTokenCredential, CommunicationUserIdentifier, PhoneNumberIdentifier, CommunicationIdentifier, MicrosoftTeamsUserIdentifier } from '@azure/communication-common';
|
11
11
|
import { AdapterError } from '../../common/adapters';
|
12
12
|
declare type CallTypeOf<AgentType extends CallAgent | BetaTeamsCallAgent> = AgentType extends CallAgent ? Call : TeamsCall;
|
13
13
|
/**
|
@@ -153,6 +153,16 @@ export declare type AzureCommunicationCallAdapterArgs = {
|
|
153
153
|
*/
|
154
154
|
options?: AzureCommunicationCallAdapterOptions;
|
155
155
|
};
|
156
|
+
/**
|
157
|
+
* Arguments for creating the Azure Communication Services implementation of {@link TeamsCallAdapter}.
|
158
|
+
*
|
159
|
+
* @beta
|
160
|
+
*/
|
161
|
+
export declare type TeamsCallAdapterArgs = {
|
162
|
+
userId: MicrosoftTeamsUserIdentifier;
|
163
|
+
credential: CommunicationTokenCredential;
|
164
|
+
locator: TeamsMeetingLinkLocator;
|
165
|
+
};
|
156
166
|
/**
|
157
167
|
* Create a {@link CallAdapter} backed by Azure Communication Services.
|
158
168
|
*
|
@@ -162,11 +172,11 @@ export declare type AzureCommunicationCallAdapterArgs = {
|
|
162
172
|
*
|
163
173
|
* @public
|
164
174
|
*/
|
165
|
-
export declare const createAzureCommunicationCallAdapter: ({ userId, displayName, credential, locator, alternateCallerId
|
175
|
+
export declare const createAzureCommunicationCallAdapter: ({ userId, displayName, credential, locator, alternateCallerId }: AzureCommunicationCallAdapterArgs) => Promise<CallAdapter>;
|
166
176
|
/**
|
167
177
|
* @beta
|
168
178
|
*/
|
169
|
-
export declare const
|
179
|
+
export declare const createTeamsCallAdapter: ({ userId, credential, locator }: TeamsCallAdapterArgs) => Promise<TeamsCallAdapter>;
|
170
180
|
/**
|
171
181
|
* A custom React hook to simplify the creation of {@link CallAdapter}.
|
172
182
|
*
|
@@ -196,7 +206,7 @@ export declare const useAzureCommunicationCallAdapter: (args: Partial<AzureCommu
|
|
196
206
|
*
|
197
207
|
* @beta
|
198
208
|
*/
|
199
|
-
export declare const
|
209
|
+
export declare const useTeamsCallAdapter: (args: Partial<TeamsCallAdapterArgs>, afterCreate?: ((adapter: TeamsCallAdapter) => Promise<TeamsCallAdapter>) | undefined, beforeDispose?: ((adapter: TeamsCallAdapter) => Promise<void>) | undefined) => TeamsCallAdapter | undefined;
|
200
210
|
/**
|
201
211
|
* Create a {@link CallAdapter} using the provided {@link StatefulCallClient}.
|
202
212
|
*
|
@@ -214,6 +224,6 @@ export declare const createAzureCommunicationCallAdapterFromClient: (callClient:
|
|
214
224
|
*
|
215
225
|
* @beta
|
216
226
|
*/
|
217
|
-
export declare const
|
227
|
+
export declare const createTeamsCallAdapterFromClient: (callClient: StatefulCallClient, callAgent: TeamsCallAgent, locator: CallAdapterLocator) => Promise<TeamsCallAdapter>;
|
218
228
|
export {};
|
219
229
|
//# sourceMappingURL=AzureCommunicationCallAdapter.d.ts.map
|
@@ -603,8 +603,7 @@ export class AzureCommunicationCallAdapter {
|
|
603
603
|
* @public
|
604
604
|
*/
|
605
605
|
export const createAzureCommunicationCallAdapter = ({ userId, displayName, credential, locator,
|
606
|
-
/* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,
|
607
|
-
/* @conditional-compile-remove(rooms) */ options }) => __awaiter(void 0, void 0, void 0, function* () {
|
606
|
+
/* @conditional-compile-remove(PSTN-calls) */ alternateCallerId }) => __awaiter(void 0, void 0, void 0, function* () {
|
608
607
|
if (!isValidIdentifier(userId)) {
|
609
608
|
throw new Error('Invalid identifier. Please provide valid identifier object.');
|
610
609
|
}
|
@@ -615,33 +614,33 @@ export const createAzureCommunicationCallAdapter = ({ userId, displayName, crede
|
|
615
614
|
const callAgent = yield callClient.createCallAgent(credential, {
|
616
615
|
displayName
|
617
616
|
});
|
618
|
-
const adapter = createAzureCommunicationCallAdapterFromClient(callClient, callAgent, locator
|
619
|
-
/* @conditional-compile-remove(rooms) */ options);
|
617
|
+
const adapter = createAzureCommunicationCallAdapterFromClient(callClient, callAgent, locator);
|
620
618
|
return adapter;
|
621
619
|
});
|
622
620
|
/* @conditional-compile-remove(teams-identity-support) */
|
623
621
|
/**
|
624
622
|
* @beta
|
625
623
|
*/
|
626
|
-
export const
|
627
|
-
/* @conditional-compile-remove(PSTN-calls) */ alternateCallerId }) => __awaiter(void 0, void 0, void 0, function* () {
|
624
|
+
export const createTeamsCallAdapter = ({ userId, credential, locator }) => __awaiter(void 0, void 0, void 0, function* () {
|
628
625
|
const callClient = createStatefulCallClient({
|
629
|
-
userId
|
630
|
-
/* @conditional-compile-remove(PSTN-calls) */ alternateCallerId
|
626
|
+
userId
|
631
627
|
});
|
632
628
|
const callAgent = yield callClient.createTeamsCallAgent(credential, {
|
633
629
|
undefined
|
634
630
|
});
|
635
|
-
const adapter =
|
631
|
+
const adapter = createTeamsCallAdapterFromClient(callClient, callAgent, locator);
|
636
632
|
return adapter;
|
637
633
|
});
|
638
634
|
/**
|
639
635
|
* @private
|
640
636
|
*/
|
641
|
-
const useAzureCommunicationCallAdapterGeneric = (args,
|
642
|
-
const { credential,
|
643
|
-
|
644
|
-
|
637
|
+
const useAzureCommunicationCallAdapterGeneric = (args, afterCreate, beforeDispose, adapterKind = 'AzureCommunication') => {
|
638
|
+
const { credential, locator, userId } = args;
|
639
|
+
const displayName = 'displayName' in args ? args.displayName : undefined;
|
640
|
+
/* @conditional-compile-remove(PSTN-calls) */
|
641
|
+
const alternateCallerId = 'alternateCallerId' in args ? args.alternateCallerId : undefined;
|
642
|
+
/* @conditional-compile-remove(rooms) */
|
643
|
+
const options = 'options' in args ? args.options : undefined;
|
645
644
|
// State update needed to rerender the parent component when a new adapter is created.
|
646
645
|
const [adapter, setAdapter] = useState(undefined);
|
647
646
|
// Ref needed for cleanup to access the old adapter created asynchronously.
|
@@ -655,7 +654,10 @@ const useAzureCommunicationCallAdapterGeneric = (args, createAzureCommunicationC
|
|
655
654
|
afterCreateRef.current = afterCreate;
|
656
655
|
beforeDisposeRef.current = beforeDispose;
|
657
656
|
useEffect(() => {
|
658
|
-
if (!credential || !
|
657
|
+
if (!credential || !locator || !userId) {
|
658
|
+
return;
|
659
|
+
}
|
660
|
+
if (adapterKind === 'AzureCommunication' && !displayName) {
|
659
661
|
return;
|
660
662
|
}
|
661
663
|
(() => __awaiter(void 0, void 0, void 0, function* () {
|
@@ -671,14 +673,35 @@ const useAzureCommunicationCallAdapterGeneric = (args, createAzureCommunicationC
|
|
671
673
|
adapterRef.current.dispose();
|
672
674
|
adapterRef.current = undefined;
|
673
675
|
}
|
674
|
-
let newAdapter =
|
675
|
-
|
676
|
-
displayName
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
676
|
+
let newAdapter = undefined;
|
677
|
+
if (adapterKind === 'AzureCommunication') {
|
678
|
+
// This is just the type check to ensure that displayName is defined.
|
679
|
+
if (!displayName) {
|
680
|
+
throw new Error('Unreachable code, displayName already checked above.');
|
681
|
+
}
|
682
|
+
newAdapter = (yield createAzureCommunicationCallAdapter({
|
683
|
+
credential,
|
684
|
+
displayName: displayName,
|
685
|
+
locator,
|
686
|
+
userId: userId,
|
687
|
+
/* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,
|
688
|
+
/* @conditional-compile-remove(rooms) */ options
|
689
|
+
}));
|
690
|
+
}
|
691
|
+
else if (adapterKind === 'Teams') {
|
692
|
+
/* @conditional-compile-remove(teams-identity-support) */
|
693
|
+
newAdapter = (yield createTeamsCallAdapter({
|
694
|
+
credential,
|
695
|
+
locator: locator,
|
696
|
+
userId: userId
|
697
|
+
}));
|
698
|
+
}
|
699
|
+
else {
|
700
|
+
throw new Error('Unreachable code, unknown adapterKind');
|
701
|
+
}
|
702
|
+
if (!newAdapter) {
|
703
|
+
throw Error('Unreachable code! Get undefined adapter');
|
704
|
+
}
|
682
705
|
if (afterCreateRef.current) {
|
683
706
|
newAdapter = yield afterCreateRef.current(newAdapter);
|
684
707
|
}
|
@@ -690,14 +713,16 @@ const useAzureCommunicationCallAdapterGeneric = (args, createAzureCommunicationC
|
|
690
713
|
[
|
691
714
|
adapterRef,
|
692
715
|
afterCreateRef,
|
693
|
-
/* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,
|
694
716
|
beforeDisposeRef,
|
695
|
-
createAzureCommunicationCallAdapter,
|
696
717
|
credential,
|
697
|
-
displayName,
|
698
718
|
locator,
|
699
|
-
|
700
|
-
userId
|
719
|
+
adapterKind,
|
720
|
+
userId,
|
721
|
+
displayName,
|
722
|
+
/* @conditional-compile-remove(PSTN-calls) */
|
723
|
+
alternateCallerId,
|
724
|
+
/* @conditional-compile-remove(rooms) */
|
725
|
+
options
|
701
726
|
]);
|
702
727
|
// Dispose any existing adapter when the component unmounts.
|
703
728
|
useEffect(() => {
|
@@ -749,7 +774,7 @@ afterCreate,
|
|
749
774
|
* This is useful for clean up tasks, e.g., leaving any ongoing calls.
|
750
775
|
*/
|
751
776
|
beforeDispose) => {
|
752
|
-
return useAzureCommunicationCallAdapterGeneric(args,
|
777
|
+
return useAzureCommunicationCallAdapterGeneric(args, afterCreate, beforeDispose, 'AzureCommunication');
|
753
778
|
};
|
754
779
|
/* @conditional-compile-remove(teams-identity-support) */
|
755
780
|
/**
|
@@ -766,7 +791,7 @@ beforeDispose) => {
|
|
766
791
|
*
|
767
792
|
* @beta
|
768
793
|
*/
|
769
|
-
export const
|
794
|
+
export const useTeamsCallAdapter = (
|
770
795
|
/**
|
771
796
|
* Arguments to be passed to {@link createAzureCommunicationCallAdapter}.
|
772
797
|
*
|
@@ -786,7 +811,7 @@ afterCreate,
|
|
786
811
|
* This is useful for clean up tasks, e.g., leaving any ongoing calls.
|
787
812
|
*/
|
788
813
|
beforeDispose) => {
|
789
|
-
return useAzureCommunicationCallAdapterGeneric(args,
|
814
|
+
return useAzureCommunicationCallAdapterGeneric(args, afterCreate, beforeDispose, 'Teams');
|
790
815
|
};
|
791
816
|
/**
|
792
817
|
* Create a {@link CallAdapter} using the provided {@link StatefulCallClient}.
|
@@ -812,7 +837,7 @@ export const createAzureCommunicationCallAdapterFromClient = (callClient, callAg
|
|
812
837
|
*
|
813
838
|
* @beta
|
814
839
|
*/
|
815
|
-
export const
|
840
|
+
export const createTeamsCallAdapterFromClient = (callClient, callAgent, locator) => __awaiter(void 0, void 0, void 0, function* () {
|
816
841
|
const deviceManager = (yield callClient.getDeviceManager());
|
817
842
|
/* @conditional-compile-remove(unsupported-browser) */
|
818
843
|
yield callClient.feature(Features.DebugInfo).getEnvironmentInfo();
|