UNPKG

@azure/communication-call-automation

Version:
337 lines (336 loc) 14 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var callAutomationClient_exports = {}; __export(callAutomationClient_exports, { CallAutomationClient: () => CallAutomationClient }); module.exports = __toCommonJS(callAutomationClient_exports); var import_core_auth = require("@azure/core-auth"); var import_communication_common = require("@azure/communication-common"); var import_logger = require("./models/logger.js"); var import_src = require("./generated/src/index.js"); var import_callConnection = require("./callConnection.js"); var import_callRecording = require("./callRecording.js"); var import_converters = require("./utli/converters.js"); var import_core_util = require("@azure/core-util"); const isCallAutomationClientOptions = (options) => !!options && !(0, import_core_auth.isTokenCredential)(options) && !(0, import_communication_common.isKeyCredential)(options); class CallAutomationClient { callAutomationApiClient; sourceIdentity; credential; internalPipelineOptions; constructor(connectionStringOrUrl, credentialOrOptions, maybeOptions = {}) { const options = isCallAutomationClientOptions(credentialOrOptions) ? credentialOrOptions : maybeOptions; if (!options?.userAgentOptions) { options.userAgentOptions = {}; } this.internalPipelineOptions = { ...options, ...{ loggingOptions: { logger: import_logger.logger.info } } }; const { url, credential } = (0, import_communication_common.parseClientArguments)(connectionStringOrUrl, credentialOrOptions); const authPolicy = (0, import_communication_common.createCommunicationAuthPolicy)(credential); this.credential = credential; this.callAutomationApiClient = new import_src.CallAutomationApiClient(url, this.internalPipelineOptions); this.callAutomationApiClient.pipeline.addPolicy(authPolicy); this.sourceIdentity = (0, import_converters.communicationUserIdentifierModelConverter)(options.sourceIdentity); } /** * Initializes a new instance of CallConnection. * @param callConnectionId - The CallConnection id for the CallConnection instance. (ex: 421CONTOSO-cRD6-4RDc-a078-99dRANDOMf). */ getCallConnection(callConnectionId) { return new import_callConnection.CallConnection( callConnectionId, this.callAutomationApiClient.endpoint, this.credential, this.internalPipelineOptions ); } /** * Initializes a new instance of CallRecording. */ getCallRecording() { return new import_callRecording.CallRecording( this.callAutomationApiClient.endpoint, this.credential, this.internalPipelineOptions ); } /** * Get Source Identity that is used for create and answer call */ getSourceIdentity() { return (0, import_converters.communicationUserIdentifierConverter)(this.sourceIdentity); } async createCallInternal(request, options) { const optionsInternal = { ...options, repeatabilityFirstSent: /* @__PURE__ */ new Date(), repeatabilityRequestID: (0, import_core_util.randomUUID)() }; const { callConnectionId, answeredBy, targets, sourceCallerIdNumber, source, answeredFor, ...result } = await this.callAutomationApiClient.createCall(request, optionsInternal); if (callConnectionId) { const callConnectionPropertiesDto = { ...result, callConnectionId, source: source ? (0, import_converters.communicationIdentifierConverter)(source) : void 0, answeredby: (0, import_converters.communicationUserIdentifierConverter)(answeredBy), answeredFor: answeredFor ? (0, import_converters.phoneNumberIdentifierConverter)(answeredFor) : void 0, targetParticipants: targets?.map( (returnedTarget) => (0, import_converters.communicationIdentifierConverter)(returnedTarget) ), sourceCallerIdNumber: sourceCallerIdNumber ? (0, import_converters.phoneNumberIdentifierConverter)(sourceCallerIdNumber) : void 0 }; const callConnection = new import_callConnection.CallConnection( callConnectionId, this.callAutomationApiClient.endpoint, this.credential, this.internalPipelineOptions ); const createCallResult = { callConnectionProperties: callConnectionPropertiesDto, callConnection }; return createCallResult; } throw "callConnectionProperties / callConnectionId is missing in createCall result"; } /** * Create an outgoing call from source to a target identity. * @param targetParticipant - A single target. * @param callbackUrl - The callback url. * @param options - Additional request options contains createCallConnection api options. */ async createCall(targetParticipant, callbackUrl, options = {}) { const request = { source: this.sourceIdentity, targets: [(0, import_converters.communicationIdentifierModelConverter)(targetParticipant.targetParticipant)], callbackUri: callbackUrl, operationContext: options.operationContext, callIntelligenceOptions: options.callIntelligenceOptions, mediaStreamingOptions: options.mediaStreamingOptions, transcriptionOptions: options.transcriptionOptions, sourceCallerIdNumber: (0, import_converters.PhoneNumberIdentifierModelConverter)( targetParticipant.sourceCallIdNumber ), sourceDisplayName: targetParticipant.sourceDisplayName, teamsAppSource: (0, import_converters.microsoftTeamsAppIdentifierModelConverter)(options.teamsAppSource) }; return this.createCallInternal(request, options); } /** * Create an outgoing call from source to a group of targets identities. * @param targetParticipants - A group of targets identities. * @param callbackUrl - The callback url. * @param options - Additional request options contains createCallConnection api options. */ async createGroupCall(targetParticipants, callbackUrl, options = {}) { const request = { source: this.sourceIdentity, targets: targetParticipants.map((target) => (0, import_converters.communicationIdentifierModelConverter)(target)), callbackUri: callbackUrl, operationContext: options.operationContext, callIntelligenceOptions: options.callIntelligenceOptions, mediaStreamingOptions: options.mediaStreamingOptions, transcriptionOptions: options.transcriptionOptions, sourceCallerIdNumber: (0, import_converters.PhoneNumberIdentifierModelConverter)(options.sourceCallIdNumber), sourceDisplayName: options.sourceDisplayName, teamsAppSource: (0, import_converters.microsoftTeamsAppIdentifierModelConverter)(options.teamsAppSource) }; return this.createCallInternal(request, options); } /** * Answer the call. * @param incomingCallContext - The context associated with the call. * @param callbackUrl - The callback url. * @param options - Additional request options contains answerCall api options. */ async answerCall(incomingCallContext, callbackUrl, options = {}) { const { callIntelligenceOptions, mediaStreamingOptions, transcriptionOptions, operationContext, ...operationOptions } = options; const request = { incomingCallContext, mediaStreamingOptions, transcriptionOptions, callIntelligenceOptions, operationContext, callbackUri: callbackUrl, answeredBy: this.sourceIdentity }; const optionsInternal = { ...operationOptions, repeatabilityFirstSent: /* @__PURE__ */ new Date(), repeatabilityRequestID: (0, import_core_util.randomUUID)() }; const { callConnectionId, targets, sourceCallerIdNumber, answeredBy, source, answeredFor, ...result } = await this.callAutomationApiClient.answerCall(request, optionsInternal); if (callConnectionId) { const callConnectionProperties = { ...result, callConnectionId, source: source ? (0, import_converters.communicationIdentifierConverter)(source) : void 0, answeredby: (0, import_converters.communicationUserIdentifierConverter)(answeredBy), answeredFor: answeredFor ? (0, import_converters.phoneNumberIdentifierConverter)(answeredFor) : void 0, targetParticipants: targets?.map((target) => (0, import_converters.communicationIdentifierConverter)(target)), sourceCallerIdNumber: sourceCallerIdNumber ? (0, import_converters.phoneNumberIdentifierConverter)(sourceCallerIdNumber) : void 0 }; const callConnection = new import_callConnection.CallConnection( callConnectionId, this.callAutomationApiClient.endpoint, this.credential, this.internalPipelineOptions ); const answerCallResult = { callConnectionProperties, callConnection }; return answerCallResult; } throw "callConnectionProperties / callConnectionId is missing in createCall result"; } /** * Redirect the call. * * @param incomingCallContext - The context associated with the call. * @param targetParticipant - The target identity to redirect the call to. * @param options - Additional request options contains redirectCall api options. */ async redirectCall(incomingCallContext, targetParticipant, options = {}) { const request = { incomingCallContext, target: (0, import_converters.communicationIdentifierModelConverter)(targetParticipant.targetParticipant) }; const optionsInternal = { ...options, repeatabilityFirstSent: /* @__PURE__ */ new Date(), repeatabilityRequestID: (0, import_core_util.randomUUID)() }; return this.callAutomationApiClient.redirectCall(request, optionsInternal); } /** * Reject the call. * * @param incomingCallContext - The context associated with the call. * @param options - Additional request options contains rejectCall api options. */ async rejectCall(incomingCallContext, options = {}) { const request = { incomingCallContext, callRejectReason: options.callRejectReason }; const optionsInternal = { ...options, repeatabilityFirstSent: /* @__PURE__ */ new Date(), repeatabilityRequestID: (0, import_core_util.randomUUID)() }; return this.callAutomationApiClient.rejectCall(request, optionsInternal); } /** * Create connection to room call. * @param callLocator - Call locator to create connection. * @param callbackUrl - The callback url * @param options - Additional request options contains connect api options. */ async connectCall(callLocator, callbackUrl, options = {}) { const connectRequest = { callLocator, callbackUri: callbackUrl, operationContext: options.operationContext, callIntelligenceOptions: options.callIntelligenceOptions, mediaStreamingOptions: options.mediaStreamingOptions, transcriptionOptions: options.transcriptionOptions }; if (callLocator.kind === "groupCallLocator") { connectRequest.callLocator.kind = "groupCallLocator"; connectRequest.callLocator.groupCallId = callLocator.id; } else if (callLocator.kind === "roomCallLocator") { connectRequest.callLocator.kind = "roomCallLocator"; connectRequest.callLocator.roomId = callLocator.id; } else { connectRequest.callLocator.kind = "serverCallLocator"; connectRequest.callLocator.serverCallId = callLocator.id; } const optionsInternal = { ...options, repeatabilityFirstSent: /* @__PURE__ */ new Date(), repeatabilityRequestID: (0, import_core_util.randomUUID)() }; const { callConnectionId, targets, sourceCallerIdNumber, answeredBy, source, answeredFor, ...result } = await this.callAutomationApiClient.connect(connectRequest, optionsInternal); if (callConnectionId) { const callConnectionProperties = { ...result, callConnectionId, source: source ? (0, import_converters.communicationIdentifierConverter)(source) : void 0, answeredby: answeredBy ? (0, import_converters.communicationUserIdentifierConverter)(answeredBy) : void 0, targetParticipants: targets?.map((target) => (0, import_converters.communicationIdentifierConverter)(target)), answeredFor: answeredFor ? (0, import_converters.phoneNumberIdentifierConverter)(answeredFor) : void 0, sourceCallerIdNumber: sourceCallerIdNumber ? (0, import_converters.phoneNumberIdentifierConverter)(sourceCallerIdNumber) : void 0 }; const callConnection = new import_callConnection.CallConnection( callConnectionId, this.callAutomationApiClient.endpoint, this.credential, this.internalPipelineOptions ); const connectResult = { callConnectionProperties, callConnection }; return connectResult; } throw "callConnectionProperties / callConnectionId is missing in connect result"; } } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { CallAutomationClient }); //# sourceMappingURL=callAutomationClient.js.map