@webex/contact-center 3.11.0 → 3.12.0-llmrefactor.2
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/.sdd/manifest.json +882 -0
- package/AGENTS.md +94 -0
- package/ai-docs/ARCHITECTURE.md +168 -0
- package/ai-docs/CONTRACTS.md +46 -0
- package/ai-docs/GETTING_STARTED.md +168 -0
- package/ai-docs/GLOSSARY.md +43 -0
- package/ai-docs/README.md +138 -0
- package/ai-docs/REVIEW_CHECKLIST.md +41 -0
- package/ai-docs/RULES.md +444 -0
- package/ai-docs/SECURITY.md +52 -0
- package/ai-docs/SERVICE_STATE.md +48 -0
- package/ai-docs/SPEC_INDEX.md +65 -0
- package/ai-docs/adr/0001-spec-source-policy.md +55 -0
- package/ai-docs/adr/README.md +8 -0
- package/ai-docs/adr/_adr-template.md +31 -0
- package/ai-docs/contact-center-spec.md +341 -0
- package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
- package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
- package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
- package/ai-docs/patterns/event-driven-patterns.md +485 -0
- package/ai-docs/patterns/testing-patterns.md +480 -0
- package/ai-docs/patterns/typescript-patterns.md +365 -0
- package/ai-docs/templates/README.md +102 -0
- package/ai-docs/templates/documentation/create-agents-md.md +240 -0
- package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
- package/ai-docs/templates/existing-service/bug-fix.md +254 -0
- package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
- package/ai-docs/templates/new-method/00-master.md +80 -0
- package/ai-docs/templates/new-method/01-requirements.md +232 -0
- package/ai-docs/templates/new-method/02-implementation.md +295 -0
- package/ai-docs/templates/new-method/03-tests.md +201 -0
- package/ai-docs/templates/new-method/04-validation.md +141 -0
- package/ai-docs/templates/new-service/00-master.md +109 -0
- package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
- package/ai-docs/templates/new-service/02-code-generation.md +346 -0
- package/ai-docs/templates/new-service/03-integration.md +178 -0
- package/ai-docs/templates/new-service/04-test-generation.md +205 -0
- package/ai-docs/templates/new-service/05-validation.md +145 -0
- package/dist/cc.js +379 -50
- package/dist/cc.js.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +22 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.js +27 -5
- package/dist/index.js.map +1 -1
- package/dist/metrics/behavioral-events.js +114 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +32 -3
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/ApiAiAssistant.js +318 -0
- package/dist/services/ApiAiAssistant.js.map +1 -0
- package/dist/services/UserPreference.js +427 -0
- package/dist/services/UserPreference.js.map +1 -0
- package/dist/services/agent/types.js.map +1 -1
- package/dist/services/config/Util.js +8 -4
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +35 -2
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +41 -2
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +66 -8
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/constants.js +27 -1
- package/dist/services/constants.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +122 -25
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/aqm-reqs.js +92 -17
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +22 -6
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/core/websocket/connection-service.js +3 -1
- package/dist/services/core/websocket/connection-service.js.map +1 -1
- package/dist/services/core/websocket/types.js.map +1 -1
- package/dist/services/index.js +6 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/task/Task.js +688 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +45 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +751 -457
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +220 -23
- package/dist/services/task/TaskUtils.js.map +1 -1
- package/dist/services/task/constants.js +23 -2
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/dialer.js +129 -0
- package/dist/services/task/dialer.js.map +1 -1
- package/dist/services/task/digital/Digital.js +77 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +873 -0
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
- package/dist/services/task/state-machine/actions.js +567 -0
- package/dist/services/task/state-machine/actions.js.map +1 -0
- package/dist/services/task/state-machine/constants.js +161 -0
- package/dist/services/task/state-machine/constants.js.map +1 -0
- package/dist/services/task/state-machine/guards.js +382 -0
- package/dist/services/task/state-machine/guards.js.map +1 -0
- package/dist/services/task/state-machine/index.js +53 -0
- package/dist/services/task/state-machine/index.js.map +1 -0
- package/dist/services/task/state-machine/types.js +54 -0
- package/dist/services/task/state-machine/types.js.map +1 -0
- package/dist/services/task/state-machine/uiControlsComputer.js +603 -0
- package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
- package/dist/services/task/taskDataNormalizer.js +99 -0
- package/dist/services/task/taskDataNormalizer.js.map +1 -0
- package/dist/services/task/types.js +227 -4
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1044 -0
- package/dist/services/task/voice/Voice.js.map +1 -0
- package/dist/services/task/voice/WebRTC.js +149 -0
- package/dist/services/task/voice/WebRTC.js.map +1 -0
- package/dist/types/cc.d.ts +894 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +66 -0
- package/dist/types/index.d.ts +199 -0
- package/dist/types/logger-proxy.d.ts +71 -0
- package/dist/types/metrics/MetricsManager.d.ts +223 -0
- package/dist/types/metrics/behavioral-events.d.ts +29 -0
- package/dist/types/metrics/constants.d.ts +181 -0
- package/dist/types/services/AddressBook.d.ts +74 -0
- package/dist/types/services/ApiAiAssistant.d.ts +49 -0
- package/dist/types/services/EntryPoint.d.ts +67 -0
- package/dist/types/services/Queue.d.ts +76 -0
- package/dist/types/services/UserPreference.d.ts +118 -0
- package/dist/types/services/WebCallingService.d.ts +1 -0
- package/dist/types/services/agent/index.d.ts +46 -0
- package/dist/types/services/agent/types.d.ts +413 -0
- package/dist/types/services/config/Util.d.ts +20 -0
- package/dist/types/services/config/constants.d.ts +270 -0
- package/dist/types/services/config/index.d.ts +177 -0
- package/dist/types/services/config/types.d.ts +1368 -0
- package/dist/types/services/constants.d.ts +110 -0
- package/dist/types/services/core/Err.d.ts +125 -0
- package/dist/types/services/core/GlobalTypes.d.ts +58 -0
- package/dist/types/services/core/Utils.d.ts +121 -0
- package/dist/types/services/core/WebexRequest.d.ts +22 -0
- package/dist/types/services/core/aqm-reqs.d.ts +65 -0
- package/dist/types/services/core/constants.d.ts +99 -0
- package/dist/types/services/core/types.d.ts +47 -0
- package/dist/types/services/core/websocket/WebSocketManager.d.ts +36 -0
- package/dist/types/services/core/websocket/connection-service.d.ts +27 -0
- package/dist/types/services/core/websocket/keepalive.worker.d.ts +2 -0
- package/dist/types/services/core/websocket/types.d.ts +37 -0
- package/dist/types/services/index.d.ts +54 -0
- package/dist/types/services/task/AutoWrapup.d.ts +40 -0
- package/dist/types/services/task/Task.d.ts +157 -0
- package/dist/types/services/task/TaskFactory.d.ts +12 -0
- package/dist/types/services/task/TaskManager.d.ts +1 -0
- package/dist/types/services/task/TaskUtils.d.ts +138 -0
- package/dist/types/services/task/constants.d.ts +91 -0
- package/dist/types/services/task/contact.d.ts +69 -0
- package/dist/types/services/task/dialer.d.ts +73 -0
- package/dist/types/services/task/digital/Digital.d.ts +22 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1194 -0
- package/dist/types/services/task/state-machine/actions.d.ts +10 -0
- package/dist/types/services/task/state-machine/constants.d.ts +107 -0
- package/dist/types/services/task/state-machine/guards.d.ts +102 -0
- package/dist/types/services/task/state-machine/index.d.ts +13 -0
- package/dist/types/services/task/state-machine/types.d.ts +269 -0
- package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
- package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
- package/dist/types/services/task/types.d.ts +1856 -0
- package/dist/types/services/task/voice/Voice.d.ts +184 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
- package/dist/types/types.d.ts +778 -0
- package/dist/types/utils/PageCache.d.ts +173 -0
- package/dist/types/webex-config.d.ts +53 -0
- package/dist/types/webex.d.ts +8 -0
- package/dist/types.js +130 -1
- package/dist/types.js.map +1 -1
- package/dist/webex.js +14 -2
- package/dist/webex.js.map +1 -1
- package/package.json +16 -12
- package/src/cc.ts +477 -51
- package/src/config.ts +6 -0
- package/src/constants.ts +21 -1
- package/src/index.ts +24 -5
- package/src/metrics/ai-docs/AGENTS.md +350 -0
- package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
- package/src/metrics/ai-docs/metrics-spec.md +854 -0
- package/src/metrics/behavioral-events.ts +120 -0
- package/src/metrics/constants.ts +37 -3
- package/src/services/ApiAiAssistant.ts +412 -0
- package/src/services/UserPreference.ts +509 -0
- package/src/services/agent/ai-docs/AGENTS.md +240 -0
- package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
- package/src/services/agent/ai-docs/agent-spec.md +504 -0
- package/src/services/agent/types.ts +1 -1
- package/src/services/ai-docs/AGENTS.md +386 -0
- package/src/services/ai-docs/services-spec.md +492 -0
- package/src/services/config/Util.ts +10 -2
- package/src/services/config/ai-docs/AGENTS.md +255 -0
- package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
- package/src/services/config/ai-docs/config-spec.md +669 -0
- package/src/services/config/constants.ts +37 -1
- package/src/services/config/index.ts +45 -1
- package/src/services/config/types.ts +241 -11
- package/src/services/constants.ts +29 -0
- package/src/services/core/Err.ts +3 -0
- package/src/services/core/Utils.ts +143 -30
- package/src/services/core/ai-docs/AGENTS.md +381 -0
- package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
- package/src/services/core/ai-docs/core-spec.md +783 -0
- package/src/services/core/aqm-reqs.ts +100 -22
- package/src/services/core/websocket/WebSocketManager.ts +23 -6
- package/src/services/core/websocket/connection-service.ts +5 -1
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +4 -0
- package/src/services/task/Task.ts +837 -0
- package/src/services/task/TaskFactory.ts +55 -0
- package/src/services/task/TaskManager.ts +793 -521
- package/src/services/task/TaskUtils.ts +314 -24
- package/src/services/task/ai-docs/AGENTS.md +457 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +594 -0
- package/src/services/task/ai-docs/task-spec.md +1319 -0
- package/src/services/task/constants.ts +23 -0
- package/src/services/task/dialer.ts +136 -1
- package/src/services/task/digital/Digital.ts +95 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1166 -0
- package/src/services/task/state-machine/actions.ts +738 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +458 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1137 -0
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2177 -0
- package/src/services/task/state-machine/constants.ts +172 -0
- package/src/services/task/state-machine/guards.ts +445 -0
- package/src/services/task/state-machine/index.ts +28 -0
- package/src/services/task/state-machine/types.ts +243 -0
- package/src/services/task/state-machine/uiControlsComputer.ts +961 -0
- package/src/services/task/taskDataNormalizer.ts +137 -0
- package/src/services/task/types.ts +734 -71
- package/src/services/task/voice/Voice.ts +1270 -0
- package/src/services/task/voice/WebRTC.ts +187 -0
- package/src/types.ts +205 -2
- package/src/utils/AGENTS.md +278 -0
- package/src/utils/ai-docs/utils-spec.md +381 -0
- package/src/webex.js +2 -0
- package/test/unit/spec/cc.ts +503 -43
- package/test/unit/spec/logger-proxy.ts +70 -0
- package/test/unit/spec/services/ApiAiAssistant.ts +273 -0
- package/test/unit/spec/services/UserPreference.ts +401 -0
- package/test/unit/spec/services/WebCallingService.ts +7 -1
- package/test/unit/spec/services/config/index.ts +85 -29
- package/test/unit/spec/services/core/Utils.ts +481 -2
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +137 -41
- package/test/unit/spec/services/core/websocket/connection-service.ts +3 -1
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +477 -0
- package/test/unit/spec/services/task/TaskFactory.ts +62 -0
- package/test/unit/spec/services/task/TaskManager.ts +1001 -1003
- package/test/unit/spec/services/task/TaskUtils.ts +235 -0
- package/test/unit/spec/services/task/dialer.ts +372 -96
- package/test/unit/spec/services/task/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +2651 -0
- package/test/unit/spec/services/task/state-machine/guards.ts +637 -0
- package/test/unit/spec/services/task/state-machine/types.ts +18 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +2663 -0
- package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
- package/test/unit/spec/services/task/voice/Voice.ts +649 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
- package/dist/services/task/index.js +0 -1525
- package/dist/services/task/index.js.map +0 -1
- package/src/services/task/index.ts +0 -1801
- package/test/unit/spec/services/task/index.ts +0 -2184
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_constants","require","_Utils","_types","_Task","_interopRequireDefault","_loggerProxy","_MetricsManager","_constants2","_stateMachine","_TaskUtils","e","__esModule","default","Voice","Task","constructor","contact","data","callOptions","wrapupData","agentId","resolvedOptions","isEndTaskEnabled","isEndConsultEnabled","voiceVariant","VOICE_VARIANT","PSTN","isRecordingEnabled","getStateMachineSnapshot","stateMachineService","getSnapshot","accept","unsupportedMethodError","METHODS","ACCEPT","decline","REJECT","hold","holdResume","resume","snapshot","snapshotState","value","mainInteractionId","interaction","interactionId","mainMediaResource","media","mediaResourceId","mediaHoldState","isHold","shouldHold","TaskState","HELD","RESUME_INITIATING","CONNECTED","state","currentState","matches","error","Error","LoggerProxy","module","CC_FILE","method","HOLD_RESUME","CONFERENCING","initiatingEvent","TaskEvent","HOLD_INITIATED","UNHOLD_INITIATED","send","type","info","successEvt","failedEvt","METRIC_EVENT_NAMES","TASK_HOLD_SUCCESS","TASK_HOLD_FAILED","TASK_RESUME_SUCCESS","TASK_RESUME_FAILED","metricsManager","timeEvent","response","HOLD_SUCCESS","trackEvent","taskId","MetricsManager","getCommonTrackingFieldForAQMResponse","log","trackingId","unHold","UNHOLD_SUCCESS","failureEvent","HOLD_FAILED","UNHOLD_FAILED","reason","toString","detailedError","getErrorDetails","getCommonTrackingFieldForAQMResponseFailed","details","pauseRecording","recordingControlsAvailable","recordingInProgress","context","recordingActive","Boolean","TASK_PAUSE_RECORDING_SUCCESS","TASK_PAUSE_RECORDING_FAILED","result","resumeRecording","resumeRecordingPayload","recordingPaused","TASK_RESUME_RECORDING_SUCCESS","TASK_RESUME_RECORDING_FAILED","autoResumed","consult","consultPayload","canConsult","CONSULT","destination","to","destinationType","requestInteractionId","TASK_CONSULT_START_SUCCESS","TASK_CONSULT_START_FAILED","CONSULT_SUCCESS","taskData","CONSULT_FAILED","endConsult","consultEndPayload","TASK_CONSULT_END_SUCCESS","TASK_CONSULT_END_FAILED","consultEnd","transfer","payload","TRANSFER_CALL","TASK_TRANSFER_SUCCESS","TASK_TRANSFER_FAILED","normalizedDestinationType","toLowerCase","CONSULT_TRANSFER_DESTINATION_TYPE","QUEUE","consultContext","destAgent","consultDestinationAgentId","destAgentId","AGENT","consultTransfer","isConsultTransfer","err","consultConference","derivedDestAgentId","calculateDestAgentId","derivedDestType","calculateDestType","resolvedDestinationType","consultDestinationType","consultationData","MERGE_TO_CONFERENCE","CONSULT_CONFERENCE","paramsDataForConferenceV2","buildConsultConferenceParamData","CONFERENCE_START","TASK_CONFERENCE_START_SUCCESS","CONFERENCE_FAILED","failedParamsData","TASK_CONFERENCE_START_FAILED","exitConference","isConferencingState","isConferenceInProgressFromData","getIsConferenceInProgress","EXIT_CONFERENCE","TASK_CONFERENCE_EXIT_SUCCESS","TASK_CONFERENCE_EXIT_FAILED","EXIT_CONFERENCE_SUCCESS","EXIT_CONFERENCE_FAILED","transferConference","isValidState","CONSULTING","TRANSFER_CONFERENCE","TASK_CONFERENCE_TRANSFER_SUCCESS","TASK_CONFERENCE_TRANSFER_FAILED","conferenceTransfer","TRANSFER_CONFERENCE_SUCCESS","TRANSFER_CONFERENCE_FAILED","switchCall","consultMediaResourceId","getConsultMediaResourceId","isOnConsultLeg","consultCallHeld","targetEvent","SWITCH_TO_MAIN_CALL","SWITCH_TO_CONSULT","revertEvent","TASK_SWITCH_CALL_SUCCESS","TASK_SWITCH_CALL_FAILED","direction","getChannelSpecificActionOverrides","baseOverrides","emitTaskHold","createEmitSelfAction","TASK_EVENTS","TASK_HOLD","updateTaskData","emitTaskResume","TASK_RESUME","emitTaskRecordingStarted","TASK_RECORDING_STARTED","emitTaskRecordingPaused","TASK_RECORDING_PAUSED","emitTaskRecordingPauseFailed","TASK_RECORDING_PAUSE_FAILED","emitTaskRecordingResumed","TASK_RECORDING_RESUMED","emitTaskRecordingResumeFailed","TASK_RECORDING_RESUME_FAILED","emitTaskParticipantJoined","TASK_PARTICIPANT_JOINED","emitTaskParticipantLeft","TASK_PARTICIPANT_LEFT","emitTaskConferenceStarted","TASK_CONFERENCE_STARTED","emitTaskConferenceEnded","TASK_CONFERENCE_ENDED","emitTaskConferenceFailed","TASK_CONFERENCE_FAILED","emitTaskExitConference","TASK_EXIT_CONFERENCE","emitTaskTransferConference","TASK_TRANSFER_CONFERENCE","emitTaskSwitchCall","TASK_SWITCH_CALL","emitTaskTransferConferenceFailed","emitTaskOutdialFailed","event","emit","TASK_OUTDIAL_FAILED","exports"],"sources":["Voice.ts"],"sourcesContent":["import {CC_FILE, METHODS} from '../../../constants';\nimport {\n buildConsultConferenceParamData,\n calculateDestAgentId,\n calculateDestType,\n getErrorDetails,\n} from '../../core/Utils';\nimport routingContact from '../contact';\nimport {\n ConsultPayload,\n ConsultEndPayload,\n ResumeRecordingPayload,\n TaskData,\n TaskResponse,\n IVoice,\n VoiceUIControlOptions,\n TransferPayLoad,\n ConsultTransferPayLoad,\n consultConferencePayloadData,\n CONSULT_TRANSFER_DESTINATION_TYPE,\n TASK_EVENTS,\n VOICE_VARIANT,\n} from '../types';\nimport Task from '../Task';\nimport LoggerProxy from '../../../logger-proxy';\nimport MetricsManager from '../../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../../metrics/constants';\nimport {TaskState, TaskEvent, TaskActionArgs} from '../state-machine';\nimport {WrapupData} from '../../config/types';\nimport {getConsultMediaResourceId, getIsConferenceInProgress} from '../TaskUtils';\n\nexport default class Voice extends Task implements IVoice {\n constructor(\n contact: ReturnType<typeof routingContact>,\n data: TaskData,\n callOptions?: VoiceUIControlOptions,\n wrapupData?: WrapupData,\n agentId?: string\n ) {\n const resolvedOptions = {\n isEndTaskEnabled: callOptions?.isEndTaskEnabled ?? true,\n isEndConsultEnabled: callOptions?.isEndConsultEnabled ?? true,\n voiceVariant: callOptions?.voiceVariant ?? VOICE_VARIANT.PSTN,\n isRecordingEnabled: callOptions?.isRecordingEnabled ?? true,\n };\n\n super(\n contact,\n data,\n {\n ...resolvedOptions,\n },\n wrapupData,\n agentId\n );\n }\n\n private getStateMachineSnapshot() {\n return this.stateMachineService?.getSnapshot?.();\n }\n\n /**\n * This method is used to accept the task.\n * It is expected to be overridden by child classes.\n * @returns Promise<TaskResponse>\n * @throws Error\n */\n public async accept(): Promise<TaskResponse> {\n super.unsupportedMethodError(METHODS.ACCEPT);\n }\n\n /**\n * This method is used to decline the task.\n * It is expected to be overridden by child classes.\n * @returns Promise<TaskResponse>\n * @throws Error\n */\n public async decline(): Promise<TaskResponse> {\n super.unsupportedMethodError(METHODS.REJECT);\n }\n\n /**\n * This is used to hold the task.\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.hold().then(()=>{}).catch(()=>{})\n * ```\n * */\n public async hold(): Promise<TaskResponse> {\n return this.holdResume();\n }\n\n /**\n * This is used to resume the task.\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.resume().then(()=>{}).catch(()=>{})\n * ```\n * */\n public async resume(): Promise<TaskResponse> {\n return this.holdResume();\n }\n\n /**\n * This is used to hold or resume the task.\n * @param isHeld: boolean - true to hold the task, false to resume it\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.holdResume(isHeld: true).then(()=>{}).catch(()=>{})\n * ```\n * */\n public async holdResume(): Promise<TaskResponse> {\n /* \n Determine if the task is being held or resumed based on the media resource state\n If the media resource is not found, default to resuming the task\n */\n const snapshot = this.getStateMachineSnapshot();\n const snapshotState = snapshot?.value as TaskState | undefined;\n const mainInteractionId = this.data.interaction?.mainInteractionId || this.data.interactionId;\n const mainMediaResource =\n this.data.interaction?.media?.[mainInteractionId]?.mediaResourceId ||\n this.data.mediaResourceId;\n const mediaHoldState =\n this.data.interaction?.media?.[mainInteractionId]?.isHold ??\n this.data.interaction.media?.[mainMediaResource]?.isHold;\n let shouldHold = !(mediaHoldState ?? false);\n if (snapshotState === TaskState.HELD || snapshotState === TaskState.RESUME_INITIATING) {\n shouldHold = false;\n } else if (snapshotState === TaskState.CONNECTED && mediaHoldState !== true) {\n // CONNECTED with isHold:true can happen after consult RONA/decline when event ordering\n // leaves the machine in CONNECTED while main media is still on hold — resume on first click.\n shouldHold = true;\n }\n\n // Validate operation is allowed in current state\n const state = snapshot;\n if (state) {\n const currentState = state.value as TaskState;\n if (shouldHold) {\n if (!state.matches(TaskState.CONNECTED)) {\n const error = new Error(`Cannot hold call in current state: ${currentState}`);\n LoggerProxy.error('Hold operation not allowed', {\n module: CC_FILE,\n method: METHODS.HOLD_RESUME,\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n } else if (\n !state.matches(TaskState.HELD) &&\n !(state.matches(TaskState.CONFERENCING) && mediaHoldState === true) &&\n !(state.matches(TaskState.CONNECTED) && mediaHoldState === true)\n ) {\n const error = new Error(`Cannot resume call in current state: ${currentState}`);\n LoggerProxy.error('Resume operation not allowed', {\n module: CC_FILE,\n method: METHODS.HOLD_RESUME,\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n }\n\n // Send initiating event to transition to intermediate state\n if (this.stateMachineService) {\n const initiatingEvent = shouldHold ? TaskEvent.HOLD_INITIATED : TaskEvent.UNHOLD_INITIATED;\n this.stateMachineService.send({\n type: initiatingEvent,\n mediaResourceId: mainMediaResource,\n });\n }\n\n LoggerProxy.info(`${shouldHold ? 'Holding' : 'Resuming'} task`, {\n module: CC_FILE,\n method: METHODS.HOLD_RESUME,\n interactionId: this.data.interactionId,\n });\n const [successEvt, failedEvt] = shouldHold\n ? [METRIC_EVENT_NAMES.TASK_HOLD_SUCCESS, METRIC_EVENT_NAMES.TASK_HOLD_FAILED]\n : [METRIC_EVENT_NAMES.TASK_RESUME_SUCCESS, METRIC_EVENT_NAMES.TASK_RESUME_FAILED];\n\n this.metricsManager.timeEvent([successEvt, failedEvt]);\n\n try {\n let response: TaskResponse;\n if (shouldHold) {\n response = await this.contact.hold({\n interactionId: this.data.interactionId,\n data: {mediaResourceId: mainMediaResource},\n });\n\n // Send success event to complete the transition\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.HOLD_SUCCESS,\n mediaResourceId: mainMediaResource,\n });\n }\n\n this.metricsManager.trackEvent(\n successEvt,\n {\n taskId: this.data.interactionId,\n mediaResourceId: mainMediaResource,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral']\n );\n LoggerProxy.log(`Task placed on hold successfully`, {\n module: CC_FILE,\n method: METHODS.HOLD_RESUME,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n } else {\n response = await this.contact.unHold({\n interactionId: this.data.interactionId,\n data: {mediaResourceId: mainMediaResource},\n });\n\n // Send success event to complete the transition\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.UNHOLD_SUCCESS,\n mediaResourceId: mainMediaResource,\n });\n }\n\n this.metricsManager.trackEvent(\n successEvt,\n {\n taskId: this.data.interactionId,\n mainInteractionId,\n mediaResourceId: mainMediaResource,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral']\n );\n LoggerProxy.log(`Task resumed successfully`, {\n module: CC_FILE,\n method: METHODS.HOLD_RESUME,\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n }\n\n return response;\n } catch (error) {\n const failureEvent = shouldHold ? TaskEvent.HOLD_FAILED : TaskEvent.UNHOLD_FAILED;\n this.stateMachineService.send({\n type: failureEvent,\n reason: error.toString(),\n mediaResourceId: this.data.mediaResourceId,\n });\n\n const {error: detailedError} = getErrorDetails(error, 'holdResume', CC_FILE);\n this.metricsManager.trackEvent(\n failedEvt,\n shouldHold\n ? {\n taskId: this.data.interactionId,\n mediaResourceId: this.data.mediaResourceId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n }\n : {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to pause the call recording\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.pauseRecording().then(()=>{}).catch(()=>{});\n * ```\n */\n public async pauseRecording(): Promise<TaskResponse> {\n // Validate recording is active\n const state = this.getStateMachineSnapshot();\n if (state) {\n const {recordingControlsAvailable, recordingInProgress} = state.context as {\n recordingControlsAvailable?: boolean;\n recordingInProgress?: boolean;\n };\n const recordingActive = Boolean(recordingControlsAvailable && recordingInProgress);\n if (!recordingActive) {\n const error = new Error('Recording is not active or already paused');\n LoggerProxy.error('Pause recording operation not allowed', {\n module: CC_FILE,\n method: 'pauseRecording',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n }\n\n try {\n LoggerProxy.info(`Pausing recording`, {\n module: CC_FILE,\n method: 'pauseRecording',\n interactionId: this.data.interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_SUCCESS,\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_FAILED,\n ]);\n const result = await this.contact.pauseRecording({interactionId: this.data.interactionId});\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n LoggerProxy.log(`Recording paused successfully`, {\n module: CC_FILE,\n method: 'pauseRecording',\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'pauseRecording', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_PAUSE_RECORDING_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to pause the call recording\n * @param resumeRecordingPayload\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.resumeRecording(resumeRecordingPayload).then(()=>{}).catch(()=>{});\n * ```\n */\n public async resumeRecording(\n resumeRecordingPayload?: ResumeRecordingPayload\n ): Promise<TaskResponse> {\n // Validate recording is paused\n const state = this.getStateMachineSnapshot();\n if (state) {\n const {recordingControlsAvailable, recordingInProgress} = state.context as {\n recordingControlsAvailable?: boolean;\n recordingInProgress?: boolean;\n };\n const recordingPaused = Boolean(recordingControlsAvailable && !recordingInProgress);\n if (!recordingPaused) {\n const error = new Error('Recording is not paused');\n LoggerProxy.error('Resume recording operation not allowed', {\n module: CC_FILE,\n method: 'resumeRecording',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n }\n\n try {\n LoggerProxy.info(`Resuming recording`, {\n module: CC_FILE,\n method: 'resumeRecording',\n interactionId: this.data.interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_SUCCESS,\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_FAILED,\n ]);\n resumeRecordingPayload ??= {autoResumed: false};\n\n const result = await this.contact.resumeRecording({\n interactionId: this.data.interactionId,\n data: resumeRecordingPayload,\n });\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n LoggerProxy.log(`Recording resumed successfully`, {\n module: CC_FILE,\n method: 'resumeRecording',\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'resumeRecording', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_RESUME_RECORDING_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to consult the task\n * @param consultPayload\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * const consultPayload = {\n * destination: 'myBuddyAgentId',\n * destinationType: DESTINATION_TYPE.AGENT,\n * }\n * task.consult(consultPayload).then(()=>{}).catch(()=>{});\n * ```\n * */\n public async consult(consultPayload?: ConsultPayload): Promise<TaskResponse> {\n // Validate consult is allowed\n const state = this.getStateMachineSnapshot();\n const canConsult =\n state &&\n (state.matches(TaskState.CONNECTED) ||\n state.matches(TaskState.HELD) ||\n state.matches(TaskState.CONFERENCING));\n\n if (!canConsult) {\n const currentState = state?.value as TaskState;\n const error = new Error(`Cannot initiate consult in ${currentState} state`);\n LoggerProxy.error('Consult operation not allowed', {\n module: CC_FILE,\n method: 'consult',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n\n // Send initiating event to transition to CONSULT_INITIATING state\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.CONSULT,\n destination: consultPayload.to,\n destinationType: consultPayload.destinationType,\n });\n }\n\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n\n try {\n LoggerProxy.info(`Starting consult`, {\n module: CC_FILE,\n method: 'consult',\n interactionId: requestInteractionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONSULT_START_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONSULT_START_FAILED,\n ]);\n const result = await this.contact.consult({\n interactionId: requestInteractionId,\n data: consultPayload,\n });\n\n // Send success event to transition to CONSULTING state\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.CONSULT_SUCCESS,\n taskData: result.data,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_START_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n destination: consultPayload.to,\n destinationType: consultPayload.destinationType,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n LoggerProxy.log(`Consult successfully initiated to ${consultPayload.to}`, {\n module: CC_FILE,\n method: 'consult',\n trackingId: result.trackingId,\n interactionId: requestInteractionId,\n });\n\n return result;\n } catch (error) {\n this.stateMachineService.send({\n type: TaskEvent.CONSULT_FAILED,\n reason: error.toString(),\n });\n\n const {error: detailedError} = getErrorDetails(error, 'consult', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_START_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n destination: consultPayload.to,\n destinationType: consultPayload.destinationType,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to end the consult session on the task.\n * @param consultEndPayload - Payload indicating consult end flags and identifiers\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.endConsult({\n * isConsult: true,\n * queueId: 'myQueueId',\n * taskId: 'taskId',\n * });\n * ```\n */\n public async endConsult(consultEndPayload?: ConsultEndPayload): Promise<TaskResponse> {\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n\n try {\n LoggerProxy.info(`Ending consult`, {\n module: CC_FILE,\n method: 'endConsult',\n interactionId: requestInteractionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONSULT_END_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONSULT_END_FAILED,\n ]);\n const result = await this.contact.consultEnd({\n interactionId: requestInteractionId,\n data: consultEndPayload,\n });\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_END_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n LoggerProxy.log(`Consult ended successfully`, {\n module: CC_FILE,\n method: 'endConsult',\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'endConsult', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONSULT_END_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to transfer the task.\n * @param payload - Transfer payload\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.transfer({\n * to: 'destinationId',\n * destinationType: DESTINATION_TYPE.AGENT,\n * consult: true, // Optional, if true will perform a consult transfer else blind transfer\n * });\n * ```\n */\n public async transfer(payload: TransferPayLoad): Promise<TaskResponse> {\n try {\n LoggerProxy.info(`Transferring task to ${payload.to}`, {\n module: CC_FILE,\n method: METHODS.TRANSFER_CALL,\n interactionId: this.data.interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n ]);\n\n // consult transfer path\n if (this.data.interaction.state === 'consulting') {\n const normalizedDestinationType =\n payload.destinationType === 'Agent' || payload.destinationType === 'Queue'\n ? (payload.destinationType.toLowerCase() as ConsultTransferPayLoad['destinationType'])\n : payload.destinationType;\n let consultPayload: ConsultTransferPayLoad = {\n to: payload.to,\n destinationType: normalizedDestinationType,\n };\n\n if (normalizedDestinationType === CONSULT_TRANSFER_DESTINATION_TYPE.QUEUE) {\n const consultContext = this.getStateMachineSnapshot()?.context;\n const destAgent = consultContext?.consultDestinationAgentId || this.data.destAgentId;\n if (!destAgent) {\n throw new Error('No agent has accepted this queue consult yet');\n }\n consultPayload = {\n to: destAgent,\n destinationType: CONSULT_TRANSFER_DESTINATION_TYPE.AGENT,\n };\n }\n\n const result = await this.contact.consultTransfer({\n interactionId: this.data.interactionId,\n data: consultPayload,\n });\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: consultPayload.to,\n destinationType: consultPayload.destinationType,\n isConsultTransfer: true,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n LoggerProxy.log(`Consult transfer completed successfully to ${consultPayload.to}`, {\n module: CC_FILE,\n method: METHODS.TRANSFER_CALL,\n trackingId: result.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return result;\n }\n\n // standard blind transfer\n return await super.transfer({\n to: payload.to,\n destinationType: payload.destinationType,\n });\n } catch (err) {\n const {error: detailedError} = getErrorDetails(err, METHODS.TRANSFER_CALL, CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n {\n taskId: this.data.interactionId,\n destination: payload.to,\n destinationType: payload.destinationType,\n isConsultTransfer: this.data.interaction.state === 'consulting',\n error: err.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(err.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * Start a consult conference, merging main and consult calls.\n */\n public async consultConference(): Promise<TaskResponse> {\n const derivedDestAgentId =\n this.data.interaction && this.data.agentId\n ? calculateDestAgentId(this.data.interaction, this.data.agentId)\n : '';\n const derivedDestType =\n this.data.interaction && this.data.agentId\n ? calculateDestType(this.data.interaction, this.data.agentId)\n : '';\n\n // derivedDestType is most reliable as it inspects live interaction participants\n const resolvedDestinationType =\n derivedDestType ||\n this.getStateMachineSnapshot()?.context?.consultDestinationType ||\n this.data.destinationType ||\n 'agent';\n\n const consultationData: consultConferencePayloadData = {\n agentId: this.data.agentId,\n destinationType: resolvedDestinationType,\n // derivedDestAgentId is most reliable as it resolves epId for EP_DN\n // and agent ID for regular agents from live interaction data\n destAgentId:\n derivedDestAgentId ||\n this.getStateMachineSnapshot()?.context?.consultDestinationAgentId ||\n this.data.destAgentId,\n };\n\n // Send state machine event to transition to CONF_INITIATING\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.MERGE_TO_CONFERENCE,\n });\n }\n\n try {\n if (!consultationData.destAgentId) {\n throw new Error('Unable to determine consult destination for conference');\n }\n\n LoggerProxy.info(`Initiating consult conference to ${consultationData.destAgentId}`, {\n module: CC_FILE,\n method: METHODS.CONSULT_CONFERENCE,\n interactionId: this.data.interactionId,\n });\n\n const paramsDataForConferenceV2 = buildConsultConferenceParamData(\n consultationData,\n this.data.interactionId\n );\n\n const response = await this.contact.consultConference({\n interactionId: paramsDataForConferenceV2.interactionId,\n data: paramsDataForConferenceV2.data,\n });\n\n // Send success event to transition to CONFERENCING\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.CONFERENCE_START,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_START_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: paramsDataForConferenceV2.data.to,\n destinationType: paramsDataForConferenceV2.data.destinationType,\n agentId: paramsDataForConferenceV2.data.agentId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Consult conference started successfully`, {\n module: CC_FILE,\n method: METHODS.CONSULT_CONFERENCE,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n // Send failure event to revert state\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.CONFERENCE_FAILED,\n reason: error.toString(),\n });\n }\n\n const {error: detailedError} = getErrorDetails(error, METHODS.CONSULT_CONFERENCE, CC_FILE);\n\n const failedParamsData = buildConsultConferenceParamData(\n consultationData,\n this.data.interactionId\n );\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_START_FAILED,\n {\n taskId: this.data.interactionId,\n destination: failedParamsData.data.to,\n destinationType: failedParamsData.data.destinationType,\n agentId: failedParamsData.data.agentId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.error(`Failed to start consult conference`, {\n module: CC_FILE,\n method: METHODS.CONSULT_CONFERENCE,\n interactionId: this.data.interactionId,\n });\n\n throw detailedError;\n }\n }\n\n /**\n * Exit from a conference call.\n * Per conference-spec.md:\n * - Primary agent exits to wrapup\n * - Non-primary agent exits to available/connected\n * - Other participants continue the call\n *\n * @returns Promise<TaskResponse>\n * @throws Error if not in conference or exit fails\n * @example\n * ```typescript\n * task.exitConference().then(() => {}).catch(() => {});\n * ```\n */\n public async exitConference(): Promise<TaskResponse> {\n // Validate we're in conference state OR conference is in progress per task data\n // This handles cases where:\n // 1. State machine is in CONFERENCING state\n // 2. State machine is in CONNECTED but conference is active (e.g., ownership transferred)\n const state = this.getStateMachineSnapshot();\n const isConferencingState = state?.matches(TaskState.CONFERENCING);\n\n const isConferenceInProgressFromData = this.data ? getIsConferenceInProgress(this.data) : false;\n\n if (!state || (!isConferencingState && !isConferenceInProgressFromData)) {\n const currentState = state?.value as TaskState;\n const error = new Error(`Cannot exit conference in ${currentState} state`);\n LoggerProxy.error('Exit conference operation not allowed', {\n module: CC_FILE,\n method: 'exitConference',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n\n // Send state machine event\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.EXIT_CONFERENCE,\n agentId: this.data.agentId,\n });\n }\n\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n\n try {\n LoggerProxy.info(`Exiting conference`, {\n module: CC_FILE,\n method: 'exitConference',\n interactionId: requestInteractionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_FAILED,\n ]);\n\n const response = await this.contact.exitConference({\n interactionId: requestInteractionId,\n });\n\n // Send success event to transition state\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.EXIT_CONFERENCE_SUCCESS,\n taskData: response.data,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n agentId: this.data.agentId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Successfully exited conference`, {\n module: CC_FILE,\n method: 'exitConference',\n trackingId: response.trackingId,\n interactionId: requestInteractionId,\n });\n\n return response;\n } catch (error) {\n // Send failure event\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.EXIT_CONFERENCE_FAILED,\n reason: error.toString(),\n });\n }\n\n const {error: detailedError} = getErrorDetails(error, 'exitConference', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_EXIT_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n agentId: this.data.agentId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.error(`Failed to exit conference`, {\n module: CC_FILE,\n method: 'exitConference',\n interactionId: requestInteractionId,\n });\n\n throw detailedError;\n }\n }\n\n /**\n * Transfer the conference to another participant.\n * Per conference-spec.md: Only primary agent can transfer conference.\n * After transfer, the transferring agent exits to wrapup.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if not in conference or transfer fails\n * @example\n * ```typescript\n * task.transferConference().then(() => {}).catch(() => {});\n * ```\n */\n public async transferConference(): Promise<TaskResponse> {\n // Validate we're in conference or consulting state\n // CONSULTING is allowed because agent can transfer conference while consulting\n // (transfers ownership to the consulted agent)\n const state = this.getStateMachineSnapshot();\n const isValidState =\n state && (state.matches(TaskState.CONFERENCING) || state.matches(TaskState.CONSULTING));\n if (!isValidState) {\n const currentState = state?.value as TaskState;\n const error = new Error(`Cannot transfer conference in ${currentState} state`);\n LoggerProxy.error('Transfer conference operation not allowed', {\n module: CC_FILE,\n method: 'transferConference',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n\n // Send state machine event\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.TRANSFER_CONFERENCE,\n agentId: this.data.agentId,\n });\n }\n\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n\n try {\n LoggerProxy.info(`Transferring conference`, {\n module: CC_FILE,\n method: 'transferConference',\n interactionId: requestInteractionId,\n });\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONFERENCE_TRANSFER_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONFERENCE_TRANSFER_FAILED,\n ]);\n\n const response = await this.contact.conferenceTransfer({\n interactionId: requestInteractionId,\n });\n\n // Send success event to transition state\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.TRANSFER_CONFERENCE_SUCCESS,\n taskData: response.data,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_TRANSFER_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n agentId: this.data.agentId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log(`Successfully transferred conference`, {\n module: CC_FILE,\n method: 'transferConference',\n trackingId: response.trackingId,\n interactionId: requestInteractionId,\n });\n\n return response;\n } catch (error) {\n // Send failure event\n if (this.stateMachineService) {\n this.stateMachineService.send({\n type: TaskEvent.TRANSFER_CONFERENCE_FAILED,\n reason: error.toString(),\n });\n }\n\n const {error: detailedError} = getErrorDetails(error, 'transferConference', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_TRANSFER_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n agentId: this.data.agentId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.error(`Failed to transfer conference`, {\n module: CC_FILE,\n method: 'transferConference',\n interactionId: requestInteractionId,\n });\n\n throw detailedError;\n }\n }\n\n /**\n * Toggle between consult call and main call during consulting.\n * If on consult leg (consultCallHeld = false), switches to main call by holding consult.\n * If on main call (consultCallHeld = true), switches to consult by resuming consult.\n *\n * @returns Promise<TaskResponse>\n * @throws Error if not in CONSULTING state or no consult media resource\n * @example\n * ```typescript\n * await task.switchCall();\n * ```\n */\n public async switchCall(): Promise<TaskResponse> {\n // Validate we're in CONSULTING state\n const state = this.getStateMachineSnapshot();\n if (!state?.matches(TaskState.CONSULTING)) {\n const currentState = state?.value as TaskState;\n const error = new Error(`Cannot switch call in ${currentState} state`);\n LoggerProxy.error('Switch call operation not allowed', {\n module: CC_FILE,\n method: 'switchCall',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n\n // Validate we have a consult media resource\n const consultMediaResourceId = getConsultMediaResourceId(\n this.data.interaction,\n this.data.consultMediaResourceId,\n this.data.agentId\n );\n if (!consultMediaResourceId) {\n const error = new Error('No consult media resource available');\n LoggerProxy.error('Switch call failed - no consult media resource', {\n module: CC_FILE,\n method: 'switchCall',\n interactionId: this.data.interactionId,\n });\n throw error;\n }\n\n const context = state.context;\n const isOnConsultLeg = !context.consultCallHeld;\n\n // Determine direction and send appropriate state machine event\n const targetEvent = isOnConsultLeg\n ? TaskEvent.SWITCH_TO_MAIN_CALL\n : TaskEvent.SWITCH_TO_CONSULT;\n const revertEvent = isOnConsultLeg\n ? TaskEvent.SWITCH_TO_CONSULT\n : TaskEvent.SWITCH_TO_MAIN_CALL;\n\n if (this.stateMachineService) {\n this.stateMachineService.send({type: targetEvent});\n }\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_SWITCH_CALL_SUCCESS,\n METRIC_EVENT_NAMES.TASK_SWITCH_CALL_FAILED,\n ]);\n\n try {\n if (isOnConsultLeg) {\n const response = await this.contact.unHold({\n interactionId: this.data.interactionId,\n data: {mediaResourceId: this.data.mediaResourceId},\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_SWITCH_CALL_SUCCESS,\n {\n taskId: this.data.interactionId,\n direction: 'toMainCall',\n mediaResourceId: consultMediaResourceId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral']\n );\n\n LoggerProxy.log(`Switched to main call successfully`, {\n module: CC_FILE,\n method: 'switchCall',\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n }\n\n const response = await this.contact.hold({\n interactionId: this.data.interactionId,\n data: {mediaResourceId: this.data.mediaResourceId},\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_SWITCH_CALL_SUCCESS,\n {\n taskId: this.data.interactionId,\n direction: 'toConsultCall',\n mediaResourceId: consultMediaResourceId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral']\n );\n\n LoggerProxy.log(`Switched to consult call successfully`, {\n module: CC_FILE,\n method: 'switchCall',\n trackingId: response.trackingId,\n interactionId: this.data.interactionId,\n });\n\n return response;\n } catch (error) {\n if (this.stateMachineService) {\n this.stateMachineService.send({type: revertEvent});\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_SWITCH_CALL_FAILED,\n {\n taskId: this.data.interactionId,\n direction: isOnConsultLeg ? 'toMainCall' : 'toConsultCall',\n mediaResourceId: consultMediaResourceId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(error.details || {}),\n },\n ['operational', 'behavioral']\n );\n\n const {error: detailedError} = getErrorDetails(error, 'switchCall', CC_FILE);\n LoggerProxy.error(`Failed to switch call`, {\n module: CC_FILE,\n method: 'switchCall',\n interactionId: this.data.interactionId,\n });\n throw detailedError;\n }\n }\n\n protected override getChannelSpecificActionOverrides() {\n const baseOverrides = super.getChannelSpecificActionOverrides();\n\n return {\n ...baseOverrides,\n emitTaskHold: this.createEmitSelfAction(TASK_EVENTS.TASK_HOLD, {updateTaskData: true}),\n emitTaskResume: this.createEmitSelfAction(TASK_EVENTS.TASK_RESUME, {updateTaskData: true}),\n emitTaskRecordingStarted: this.createEmitSelfAction(TASK_EVENTS.TASK_RECORDING_STARTED, {\n updateTaskData: true,\n }),\n emitTaskRecordingPaused: this.createEmitSelfAction(TASK_EVENTS.TASK_RECORDING_PAUSED, {\n updateTaskData: true,\n }),\n emitTaskRecordingPauseFailed: this.createEmitSelfAction(\n TASK_EVENTS.TASK_RECORDING_PAUSE_FAILED,\n {updateTaskData: true}\n ),\n emitTaskRecordingResumed: this.createEmitSelfAction(TASK_EVENTS.TASK_RECORDING_RESUMED, {\n updateTaskData: true,\n }),\n emitTaskRecordingResumeFailed: this.createEmitSelfAction(\n TASK_EVENTS.TASK_RECORDING_RESUME_FAILED,\n {updateTaskData: true}\n ),\n // Conference event emitters\n emitTaskParticipantJoined: this.createEmitSelfAction(TASK_EVENTS.TASK_PARTICIPANT_JOINED, {\n updateTaskData: true,\n }),\n emitTaskParticipantLeft: this.createEmitSelfAction(TASK_EVENTS.TASK_PARTICIPANT_LEFT, {\n updateTaskData: true,\n }),\n emitTaskConferenceStarted: this.createEmitSelfAction(TASK_EVENTS.TASK_CONFERENCE_STARTED, {\n updateTaskData: true,\n }),\n emitTaskConferenceEnded: this.createEmitSelfAction(TASK_EVENTS.TASK_CONFERENCE_ENDED, {\n updateTaskData: true,\n }),\n emitTaskConferenceFailed: this.createEmitSelfAction(TASK_EVENTS.TASK_CONFERENCE_FAILED, {\n updateTaskData: true,\n }),\n emitTaskExitConference: this.createEmitSelfAction(TASK_EVENTS.TASK_EXIT_CONFERENCE, {\n updateTaskData: false,\n }),\n emitTaskTransferConference: this.createEmitSelfAction(TASK_EVENTS.TASK_TRANSFER_CONFERENCE, {\n updateTaskData: false,\n }),\n emitTaskSwitchCall: this.createEmitSelfAction(TASK_EVENTS.TASK_SWITCH_CALL, {\n updateTaskData: false,\n }),\n emitTaskTransferConferenceFailed: this.createEmitSelfAction(\n TASK_EVENTS.TASK_CONFERENCE_TRANSFER_FAILED,\n {updateTaskData: true}\n ),\n emitTaskOutdialFailed: ({event}: TaskActionArgs) => {\n if (event && 'taskData' in event && event.taskData) {\n this.updateTaskData(event.taskData as TaskData);\n }\n const reason = (event as {reason?: string})?.reason || 'Outdial failed';\n this.emit(TASK_EVENTS.TASK_OUTDIAL_FAILED, reason);\n },\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _calling = require("@webex/calling");
|
|
8
|
+
var _constants = require("../../../constants");
|
|
9
|
+
var _Utils = require("../../core/Utils");
|
|
10
|
+
var _types = require("../types");
|
|
11
|
+
var _Voice = _interopRequireDefault(require("./Voice"));
|
|
12
|
+
var _MetricsManager = _interopRequireDefault(require("../../../metrics/MetricsManager"));
|
|
13
|
+
var _constants2 = require("../../../metrics/constants");
|
|
14
|
+
var _loggerProxy = _interopRequireDefault(require("../../../logger-proxy"));
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
class WebRTC extends _Voice.default {
|
|
17
|
+
constructor(contact, webCallingService, data, callOptions, wrapupData, agentId) {
|
|
18
|
+
const mergedCallOptions = {
|
|
19
|
+
...callOptions,
|
|
20
|
+
voiceVariant: _types.VOICE_VARIANT.WEBRTC
|
|
21
|
+
};
|
|
22
|
+
super(contact, data, mergedCallOptions, wrapupData, agentId);
|
|
23
|
+
this.webCallingService = webCallingService;
|
|
24
|
+
this.registerWebCallListeners();
|
|
25
|
+
}
|
|
26
|
+
registerWebCallListeners() {
|
|
27
|
+
this.webCallingService.on(_calling.CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);
|
|
28
|
+
}
|
|
29
|
+
handleRemoteMedia = track => {
|
|
30
|
+
this.emit(_types.TASK_EVENTS.TASK_MEDIA, track);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* This method is used to unregister the web call listeners.
|
|
35
|
+
* @returns void
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* task.unregisterWebCallListeners();
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
unregisterWebCallListeners() {
|
|
42
|
+
this.webCallingService.off(_calling.CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* This is used for incoming task accept by agent.
|
|
47
|
+
*
|
|
48
|
+
* @returns Promise<TaskResponse>
|
|
49
|
+
* @throws Error
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* task.accept().then(()=>{}).catch(()=>{})
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
async accept() {
|
|
56
|
+
_loggerProxy.default.log(`Accepting WebRTC task for taskId:${this.data.interactionId}`, {
|
|
57
|
+
module: 'WebRTC',
|
|
58
|
+
method: 'accept'
|
|
59
|
+
});
|
|
60
|
+
try {
|
|
61
|
+
this.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS, _constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED]);
|
|
62
|
+
const constraints = {
|
|
63
|
+
audio: true
|
|
64
|
+
};
|
|
65
|
+
const localStream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
66
|
+
const audioTrack = localStream.getAudioTracks()[0];
|
|
67
|
+
this.localAudioStream = new _calling.LocalMicrophoneStream(new MediaStream([audioTrack]));
|
|
68
|
+
this.webCallingService.answerCall(this.localAudioStream, this.data.interactionId);
|
|
69
|
+
this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS, {
|
|
70
|
+
taskId: this.data.interactionId,
|
|
71
|
+
..._MetricsManager.default.getCommonTrackingFieldForAQMResponse(this.data)
|
|
72
|
+
}, ['operational', 'behavioral', 'business']);
|
|
73
|
+
return Promise.resolve();
|
|
74
|
+
} catch (error) {
|
|
75
|
+
this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED, {
|
|
76
|
+
taskId: this.data.interactionId,
|
|
77
|
+
error: error.toString(),
|
|
78
|
+
..._MetricsManager.default.getCommonTrackingFieldForAQMResponseFailed(error.details || {})
|
|
79
|
+
}, ['operational', 'behavioral', 'business']);
|
|
80
|
+
const {
|
|
81
|
+
error: detailedError
|
|
82
|
+
} = (0, _Utils.getErrorDetails)(error, 'accept', _constants.CC_FILE);
|
|
83
|
+
throw detailedError;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* This is used for the incoming task decline by agent.
|
|
89
|
+
*
|
|
90
|
+
* @returns Promise<TaskResponse>
|
|
91
|
+
* @throws Error
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* task.decline().then(()=>{}).catch(()=>{})
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
async decline() {
|
|
98
|
+
_loggerProxy.default.log(`Declining WebRTC task for taskId:${this.data.interactionId}`, {
|
|
99
|
+
module: 'WebRTC',
|
|
100
|
+
method: 'decline'
|
|
101
|
+
});
|
|
102
|
+
try {
|
|
103
|
+
this.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.TASK_DECLINE_SUCCESS, _constants2.METRIC_EVENT_NAMES.TASK_DECLINE_FAILED]);
|
|
104
|
+
this.webCallingService.declineCall(this.data.interactionId);
|
|
105
|
+
this.unregisterWebCallListeners();
|
|
106
|
+
this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_DECLINE_SUCCESS, {
|
|
107
|
+
taskId: this.data.interactionId
|
|
108
|
+
}, ['operational', 'behavioral']);
|
|
109
|
+
return Promise.resolve();
|
|
110
|
+
} catch (error) {
|
|
111
|
+
this.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.TASK_DECLINE_FAILED, {
|
|
112
|
+
taskId: this.data.interactionId,
|
|
113
|
+
error: error.toString(),
|
|
114
|
+
..._MetricsManager.default.getCommonTrackingFieldForAQMResponseFailed(error.details || {})
|
|
115
|
+
}, ['operational', 'behavioral']);
|
|
116
|
+
const {
|
|
117
|
+
error: detailedError
|
|
118
|
+
} = (0, _Utils.getErrorDetails)(error, 'decline', _constants.CC_FILE);
|
|
119
|
+
throw detailedError;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* This is used for the placing the call in mute or unmute by the agent.
|
|
125
|
+
*
|
|
126
|
+
* @throws Error
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* task.toggleMute().then(()=>{}).catch(()=>{})
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
async toggleMute() {
|
|
133
|
+
_loggerProxy.default.log(`Toggling mute WebRTC task for taskId:${this.data.interactionId}`, {
|
|
134
|
+
module: 'WebRTC',
|
|
135
|
+
method: 'toggleMute'
|
|
136
|
+
});
|
|
137
|
+
try {
|
|
138
|
+
this.webCallingService.muteUnmuteCall(this.localAudioStream);
|
|
139
|
+
return Promise.resolve();
|
|
140
|
+
} catch (error) {
|
|
141
|
+
const {
|
|
142
|
+
error: detailedError
|
|
143
|
+
} = (0, _Utils.getErrorDetails)(error, 'mute', _constants.CC_FILE);
|
|
144
|
+
throw detailedError;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.default = WebRTC;
|
|
149
|
+
//# sourceMappingURL=WebRTC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_calling","require","_constants","_Utils","_types","_Voice","_interopRequireDefault","_MetricsManager","_constants2","_loggerProxy","e","__esModule","default","WebRTC","Voice","constructor","contact","webCallingService","data","callOptions","wrapupData","agentId","mergedCallOptions","voiceVariant","VOICE_VARIANT","WEBRTC","registerWebCallListeners","on","CALL_EVENT_KEYS","REMOTE_MEDIA","handleRemoteMedia","track","emit","TASK_EVENTS","TASK_MEDIA","unregisterWebCallListeners","off","accept","LoggerProxy","log","interactionId","module","method","metricsManager","timeEvent","METRIC_EVENT_NAMES","TASK_ACCEPT_SUCCESS","TASK_ACCEPT_FAILED","constraints","audio","localStream","navigator","mediaDevices","getUserMedia","audioTrack","getAudioTracks","localAudioStream","LocalMicrophoneStream","MediaStream","answerCall","trackEvent","taskId","MetricsManager","getCommonTrackingFieldForAQMResponse","Promise","resolve","error","toString","getCommonTrackingFieldForAQMResponseFailed","details","detailedError","getErrorDetails","CC_FILE","decline","TASK_DECLINE_SUCCESS","TASK_DECLINE_FAILED","declineCall","toggleMute","muteUnmuteCall","exports"],"sources":["WebRTC.ts"],"sourcesContent":["import {LocalMicrophoneStream, CALL_EVENT_KEYS} from '@webex/calling';\nimport {CC_FILE} from '../../../constants';\nimport {getErrorDetails} from '../../core/Utils';\nimport routingContact from '../contact';\nimport {\n TaskData,\n TaskResponse,\n TASK_EVENTS,\n IWebRTC,\n VoiceUIControlOptions,\n VOICE_VARIANT,\n} from '../types';\nimport Voice from './Voice';\nimport WebCallingService from '../../WebCallingService';\nimport {WrapupData} from '../../config/types';\nimport MetricsManager from '../../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../../metrics/constants';\nimport LoggerProxy from '../../../logger-proxy';\n\nexport default class WebRTC extends Voice implements IWebRTC {\n private localAudioStream: LocalMicrophoneStream;\n private webCallingService: WebCallingService;\n\n constructor(\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n data: TaskData,\n callOptions?: VoiceUIControlOptions,\n wrapupData?: WrapupData,\n agentId?: string\n ) {\n const mergedCallOptions: VoiceUIControlOptions = {\n ...callOptions,\n voiceVariant: VOICE_VARIANT.WEBRTC,\n };\n\n super(contact, data, mergedCallOptions, wrapupData, agentId);\n this.webCallingService = webCallingService;\n this.registerWebCallListeners();\n }\n\n private registerWebCallListeners() {\n this.webCallingService.on(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);\n }\n\n private handleRemoteMedia = (track: MediaStreamTrack) => {\n this.emit(TASK_EVENTS.TASK_MEDIA, track);\n };\n\n /**\n * This method is used to unregister the web call listeners.\n * @returns void\n * @example\n * ```typescript\n * task.unregisterWebCallListeners();\n * ```\n */\n public unregisterWebCallListeners() {\n this.webCallingService.off(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleRemoteMedia);\n }\n\n /**\n * This is used for incoming task accept by agent.\n *\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.accept().then(()=>{}).catch(()=>{})\n * ```\n */\n public async accept(): Promise<TaskResponse> {\n LoggerProxy.log(`Accepting WebRTC task for taskId:${this.data.interactionId}`, {\n module: 'WebRTC',\n method: 'accept',\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n ]);\n\n const constraints = {audio: true};\n const localStream = await navigator.mediaDevices.getUserMedia(constraints);\n const audioTrack = localStream.getAudioTracks()[0];\n this.localAudioStream = new LocalMicrophoneStream(new MediaStream([audioTrack]));\n this.webCallingService.answerCall(this.localAudioStream, this.data.interactionId);\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_SUCCESS,\n {\n taskId: this.data.interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(this.data),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return Promise.resolve();\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_ACCEPT_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral', 'business']\n );\n const {error: detailedError} = getErrorDetails(error, 'accept', CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * This is used for the incoming task decline by agent.\n *\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.decline().then(()=>{}).catch(()=>{})\n * ```\n */\n public async decline(): Promise<TaskResponse> {\n LoggerProxy.log(`Declining WebRTC task for taskId:${this.data.interactionId}`, {\n module: 'WebRTC',\n method: 'decline',\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_DECLINE_SUCCESS,\n METRIC_EVENT_NAMES.TASK_DECLINE_FAILED,\n ]);\n\n this.webCallingService.declineCall(this.data.interactionId);\n this.unregisterWebCallListeners();\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_DECLINE_SUCCESS,\n {taskId: this.data.interactionId},\n ['operational', 'behavioral']\n );\n\n return Promise.resolve();\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_DECLINE_FAILED,\n {\n taskId: this.data.interactionId,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral']\n );\n const {error: detailedError} = getErrorDetails(error, 'decline', CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * This is used for the placing the call in mute or unmute by the agent.\n *\n * @throws Error\n * @example\n * ```typescript\n * task.toggleMute().then(()=>{}).catch(()=>{})\n * ```\n */\n public async toggleMute() {\n LoggerProxy.log(`Toggling mute WebRTC task for taskId:${this.data.interactionId}`, {\n module: 'WebRTC',\n method: 'toggleMute',\n });\n try {\n this.webCallingService.muteUnmuteCall(this.localAudioStream);\n\n return Promise.resolve();\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'mute', CC_FILE);\n throw detailedError;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|