@azure/communication-call-automation
Version:
Azure client library for Azure Communication Call Automation services
337 lines (336 loc) • 14 kB
JavaScript
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