@webex/contact-center 3.12.0-next.13 → 3.12.0-next.130
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 +884 -0
- package/AGENTS.md +94 -0
- package/ai-docs/ARCHITECTURE.md +168 -0
- package/ai-docs/CONTRACTS.md +53 -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 +52 -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 +382 -0
- package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
- package/ai-docs/features/contact-owner-change-refactor.md +78 -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 +971 -42
- package/dist/cc.js.map +1 -1
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +31 -3
- package/dist/constants.js.map +1 -1
- package/dist/index.js +45 -15
- package/dist/index.js.map +1 -1
- package/dist/metrics/MetricsManager.js +16 -0
- package/dist/metrics/MetricsManager.js.map +1 -1
- package/dist/metrics/behavioral-events.js +205 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +48 -4
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/AddressBook.js +18 -15
- package/dist/services/AddressBook.js.map +1 -1
- package/dist/services/AnswerCallOnWebexService.js +202 -0
- package/dist/services/AnswerCallOnWebexService.js.map +1 -0
- package/dist/services/ApiAiAssistant.js +269 -9
- package/dist/services/ApiAiAssistant.js.map +1 -1
- package/dist/services/EntryPoint.js +46 -68
- package/dist/services/EntryPoint.js.map +1 -1
- package/dist/services/Queue.js +27 -22
- package/dist/services/Queue.js.map +1 -1
- package/dist/services/UserPreference.js +427 -0
- package/dist/services/UserPreference.js.map +1 -0
- package/dist/services/WebexCrossClientService.js +222 -0
- package/dist/services/WebexCrossClientService.js.map +1 -0
- package/dist/services/WxAppTelephonyMercurySync.js +108 -0
- package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
- package/dist/services/config/Util.js +11 -4
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +41 -7
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +51 -0
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +57 -12
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +111 -32
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/WebexRequest.js +6 -2
- package/dist/services/core/WebexRequest.js.map +1 -1
- package/dist/services/core/aqm-reqs.js +28 -14
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/types.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +2 -1
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/core/websocket/types.js.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/task/Task.js +754 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +49 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +1172 -521
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +211 -27
- package/dist/services/task/TaskUtils.js.map +1 -1
- package/dist/services/task/WebexCallingUtils.js +70 -0
- package/dist/services/task/WebexCallingUtils.js.map +1 -0
- package/dist/services/task/constants.js +12 -2
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/contact.js +29 -0
- package/dist/services/task/contact.js.map +1 -1
- package/dist/services/task/dialer.js +78 -0
- package/dist/services/task/dialer.js.map +1 -1
- package/dist/services/task/digital/Digital.js +78 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +982 -0
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
- package/dist/services/task/state-machine/actions.js +572 -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 +379 -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 +703 -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 +228 -5
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1485 -0
- package/dist/services/task/voice/Voice.js.map +1 -0
- package/dist/services/task/voice/WebRTC.js +152 -0
- package/dist/services/task/voice/WebRTC.js.map +1 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js +354 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
- package/dist/services/wxAppDiagnosticLogging.js +122 -0
- package/dist/services/wxAppDiagnosticLogging.js.map +1 -0
- package/dist/services/wxAppTelephonyUtils.js +19 -0
- package/dist/services/wxAppTelephonyUtils.js.map +1 -0
- package/dist/types/cc.d.ts +193 -6
- package/dist/types/config.d.ts +13 -0
- package/dist/types/constants.d.ts +29 -1
- package/dist/types/index.d.ts +35 -8
- package/dist/types/metrics/MetricsManager.d.ts +6 -0
- package/dist/types/metrics/constants.d.ts +43 -1
- package/dist/types/services/AddressBook.d.ts +2 -1
- package/dist/types/services/AnswerCallOnWebexService.d.ts +38 -0
- package/dist/types/services/ApiAiAssistant.d.ts +56 -5
- package/dist/types/services/EntryPoint.d.ts +7 -5
- package/dist/types/services/Queue.d.ts +5 -3
- package/dist/types/services/UserPreference.d.ts +118 -0
- package/dist/types/services/WebexCrossClientService.d.ts +32 -0
- package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
- package/dist/types/services/config/constants.d.ts +34 -5
- package/dist/types/services/config/types.d.ts +197 -12
- package/dist/types/services/core/Err.d.ts +6 -0
- package/dist/types/services/core/Utils.d.ts +35 -13
- package/dist/types/services/core/WebexRequest.d.ts +1 -0
- package/dist/types/services/core/types.d.ts +2 -0
- package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
- package/dist/types/services/core/websocket/types.d.ts +1 -1
- package/dist/types/services/index.d.ts +1 -1
- package/dist/types/services/task/Task.d.ts +175 -0
- package/dist/types/services/task/TaskFactory.d.ts +13 -0
- package/dist/types/services/task/TaskUtils.d.ts +48 -2
- package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
- package/dist/types/services/task/constants.d.ts +10 -0
- package/dist/types/services/task/contact.d.ts +4 -0
- package/dist/types/services/task/dialer.d.ts +30 -0
- package/dist/types/services/task/digital/Digital.d.ts +22 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1442 -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 +103 -0
- package/dist/types/services/task/state-machine/index.d.ts +13 -0
- package/dist/types/services/task/state-machine/types.d.ts +277 -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 +680 -66
- package/dist/types/services/task/voice/Voice.d.ts +227 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
- package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +55 -0
- package/dist/types/services/wxAppDiagnosticLogging.d.ts +51 -0
- package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
- package/dist/types/types.d.ts +205 -9
- package/dist/types/utils/PageCache.d.ts +20 -3
- package/dist/types/webex.d.ts +1 -0
- package/dist/types.js +162 -4
- package/dist/types.js.map +1 -1
- package/dist/utils/PageCache.js +19 -5
- package/dist/utils/PageCache.js.map +1 -1
- package/dist/webex.js +22 -2
- package/dist/webex.js.map +1 -1
- package/package.json +16 -12
- package/src/cc.ts +1289 -112
- package/src/config.ts +13 -0
- package/src/constants.ts +29 -1
- package/src/index.ts +36 -5
- package/src/metrics/MetricsManager.ts +16 -0
- 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 +921 -0
- package/src/metrics/behavioral-events.ts +212 -0
- package/src/metrics/constants.ts +52 -4
- package/src/services/AddressBook.ts +17 -6
- package/src/services/AnswerCallOnWebexService.ts +239 -0
- package/src/services/ApiAiAssistant.ts +356 -9
- package/src/services/EntryPoint.ts +59 -60
- package/src/services/Queue.ts +29 -12
- package/src/services/UserPreference.ts +509 -0
- package/src/services/WebexCrossClientService.ts +293 -0
- package/src/services/WxAppTelephonyMercurySync.ts +142 -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 +505 -0
- package/src/services/ai-docs/AGENTS.md +386 -0
- package/src/services/ai-docs/services-spec.md +505 -0
- package/src/services/config/Util.ts +12 -3
- 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 +686 -0
- package/src/services/config/constants.ts +46 -6
- package/src/services/config/index.ts +65 -0
- package/src/services/config/types.ts +197 -13
- package/src/services/core/Err.ts +3 -0
- package/src/services/core/Utils.ts +127 -37
- package/src/services/core/WebexRequest.ts +3 -1
- 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 +787 -0
- package/src/services/core/aqm-reqs.ts +30 -15
- package/src/services/core/types.ts +2 -0
- package/src/services/core/websocket/WebSocketManager.ts +2 -0
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +1 -1
- package/src/services/task/Task.ts +908 -0
- package/src/services/task/TaskFactory.ts +60 -0
- package/src/services/task/TaskManager.ts +1419 -608
- package/src/services/task/TaskUtils.ts +303 -25
- package/src/services/task/WebexCallingUtils.ts +136 -0
- package/src/services/task/ai-docs/AGENTS.md +457 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
- package/src/services/task/ai-docs/task-spec.md +1474 -0
- package/src/services/task/constants.ts +10 -0
- package/src/services/task/contact.ts +30 -0
- package/src/services/task/dialer.ts +80 -0
- package/src/services/task/digital/Digital.ts +97 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1320 -0
- package/src/services/task/state-machine/actions.ts +741 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +460 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1156 -0
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2247 -0
- package/src/services/task/state-machine/constants.ts +172 -0
- package/src/services/task/state-machine/guards.ts +442 -0
- package/src/services/task/state-machine/index.ts +28 -0
- package/src/services/task/state-machine/types.ts +258 -0
- package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
- package/src/services/task/taskDataNormalizer.ts +137 -0
- package/src/services/task/types.ts +819 -70
- package/src/services/task/voice/Voice.ts +1851 -0
- package/src/services/task/voice/WebRTC.ts +191 -0
- package/src/services/task/voice/wxAppVoiceMethods.ts +516 -0
- package/src/services/wxAppDiagnosticLogging.ts +174 -0
- package/src/services/wxAppTelephonyUtils.ts +14 -0
- package/src/types.ts +262 -11
- package/src/utils/AGENTS.md +289 -0
- package/src/utils/PageCache.ts +38 -5
- package/src/utils/ai-docs/utils-spec.md +391 -0
- package/src/webex.js +10 -0
- package/test/unit/spec/cc.ts +2210 -119
- package/test/unit/spec/logger-proxy.ts +70 -0
- package/test/unit/spec/metrics/MetricsManager.ts +25 -0
- package/test/unit/spec/metrics/behavioral-events.ts +60 -0
- package/test/unit/spec/services/AddressBook.ts +37 -6
- package/test/unit/spec/services/AnswerCallOnWebexService.ts +264 -0
- package/test/unit/spec/services/ApiAiAssistant.ts +311 -21
- package/test/unit/spec/services/EntryPoint.ts +87 -40
- package/test/unit/spec/services/Queue.ts +123 -12
- package/test/unit/spec/services/UserPreference.ts +401 -0
- package/test/unit/spec/services/WebCallingService.ts +7 -1
- package/test/unit/spec/services/WebexCrossClientService.ts +467 -0
- package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +136 -0
- package/test/unit/spec/services/config/Util.ts +129 -0
- package/test/unit/spec/services/config/index.ts +97 -29
- package/test/unit/spec/services/core/Utils.ts +425 -8
- package/test/unit/spec/services/core/WebexRequest.ts +3 -1
- package/test/unit/spec/services/core/aqm-reqs.ts +113 -1
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +745 -0
- package/test/unit/spec/services/task/TaskFactory.ts +99 -0
- package/test/unit/spec/services/task/TaskManager.ts +2518 -1494
- package/test/unit/spec/services/task/TaskUtils.ts +235 -0
- package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
- package/test/unit/spec/services/task/contact.ts +33 -0
- package/test/unit/spec/services/task/dialer.ts +190 -0
- package/test/unit/spec/services/task/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +4060 -0
- package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
- package/test/unit/spec/services/task/state-machine/types.ts +18 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
- package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
- package/test/unit/spec/services/task/voice/Voice.ts +2061 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
- package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +603 -0
- package/test/unit/spec/services/wxAppDiagnosticLogging.ts +143 -0
- package/test/unit/spec/wellnessSampleUtils.ts +288 -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/dist/types/services/task/index.d.ts +0 -650
- 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","_guards","_TaskUtils","_wxAppTelephonyUtils","_wxAppVoiceMethods","_wxAppDiagnosticLogging","e","__esModule","default","hasNonemptyPendingWrapUp","taskData","Array","isArray","agentsPendingWrapUp","length","isConsultedNonOwner","fallback","isConsulted","owner","interaction","selfAgentId","agentId","Boolean","Voice","Task","WXAPP_MUTE_SYNC_RETRY_DELAY_MS","WXAPP_MUTE_SYNC_MAX_RETRIES","enableWxBetterTogether","wxAppMuted","wxAppAnswerPending","wxAppAcceptInFlight","wxAppMuteToggleTail","Promise","resolve","wxAppDtmfTail","constructor","contact","data","callOptions","wrapupData","resolvedOptions","isEndTaskEnabled","isEndConsultEnabled","voiceVariant","VOICE_VARIANT","PSTN","isRecordingEnabled","consultTransferConfig","answerCallOnWebexService","getWxAppVoiceDependencies","metricsManager","getTaskData","getTaskState","stateMachineService","getSnapshot","value","getWxAppMuted","setWxAppMuted","muted","getWxAppVoiceDeps","isWebexAppCallingOffer","wxIsWebexAppCallingOffer","isWebexAppInboundCallingOffer","wxIsWebexAppInboundCallingOffer","setWxAppAnswerPending","pending","uiControlConfig","updateUiControls","setWxAppAcceptInFlight","inFlight","setEnableWxBetterTogether","enabled","forceEmit","logWxAppOfferDecisionIfNeeded","state","TaskState","OFFERED","accept","currentUiControls","main","isVisible","deps","isOutdial","outboundType","isWxAppInboundOffer","isWxAppOutdialOffer","deviceDetails","getCallingDeviceDetails","acceptReason","deriveWxAppAcceptReason","isWebrtc","WEBRTC","hasDeviceCallId","deviceCallId","lastLoggedWxAppAcceptReason","logWxAppOfferDecision","interactionId","acceptVisible","acceptEnabled","isEnabled","wxAppParticipantDeviceType","deviceType","applyWxAppMuteStateFromSync","incomingCallId","activeCallId","getWebexCallingCallId","incomingSuffix","callIdSuffix","activeSuffix","endsWith","logWxAppMercuryMuteSync","phase","dropReason","emit","TASK_EVENTS","TASK_WXAPP_MUTE_STATE_UPDATED","delay","ms","setTimeout","canRetryWxAppMuteSync","shouldSkipWxAppMuteSync","isTerminated","applyWxAppMuteFromBackfill","callId","syncWxAppMuteFromCallDetails","retryAttempt","undefined","wxAppMuteSyncInFlight","syncPromise","performWxAppMuteSync","finally","catch","lineOwnerId","resolveWxAppLineOwnerId","details","getCallDetails","error","isWxAppCallNotFoundError","LoggerProxy","module","CC_FILE","method","METHODS","GET_CALL_DETAILS_ON_WEBEX","onTaskAssigned","queueMicrotask","onTaskHydrated","answerStillPending","createWxAppLifecycle","resetWxAppMuted","mapWxAppVoiceError","getStateMachineSnapshot","runWxAppAccept","unsupportedMethodError","ACCEPT","decline","runWxAppReject","REJECT","log","timeEvent","METRIC_EVENT_NAMES","TASK_DECLINE_SUCCESS","TASK_DECLINE_FAILED","response","runWxAppOutdialDecline","cancelTask","trackEvent","taskId","MetricsManager","getCommonTrackingFieldForAQMResponse","toString","getCommonTrackingFieldForAQMResponseFailed","detailedError","getErrorDetails","toggleMute","options","togglePromise","then","runWxAppToggleMute","TOGGLE_MUTE","transmitDtmf","dtmfPromise","runWxAppTransmitDtmf","TRANSMIT_DTMF","hold","holdResume","resume","snapshot","snapshotState","mainInteractionId","mainMediaResource","media","mediaResourceId","mediaHoldState","isHold","shouldHold","HELD","RESUME_INITIATING","CONNECTED","currentState","matches","Error","HOLD_RESUME","CONFERENCING","initiatingEvent","TaskEvent","HOLD_INITIATED","UNHOLD_INITIATED","send","type","info","successEvt","failedEvt","TASK_HOLD_SUCCESS","TASK_HOLD_FAILED","TASK_RESUME_SUCCESS","TASK_RESUME_FAILED","HOLD_SUCCESS","trackingId","unHold","UNHOLD_SUCCESS","failureEvent","HOLD_FAILED","UNHOLD_FAILED","reason","pauseRecording","recordingControlsAvailable","recordingInProgress","context","recordingActive","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","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","dropConferenceParticipant","participantId","trim","DROP_CONFERENCE_PARTICIPANT","TASK_CONFERENCE_PARTICIPANT_DROP_SUCCESS","TASK_CONFERENCE_PARTICIPANT_DROP_FAILED","failureTrackingFields","notifTrackingId","orgId","failureType","reasonCode","exitConference","isConferencingState","isConferenceInProgressFromData","getIsConferenceInProgress","EXIT_CONFERENCE","TASK_CONFERENCE_EXIT_SUCCESS","TASK_CONFERENCE_EXIT_FAILED","responseTaskData","wrapUpContext","mergedTaskData","Object","prototype","hasOwnProperty","call","wrapUpRequired","shouldWrapUpForThisAgent","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_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","suppressOutdialFailedPopup","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 DropConferenceParticipantPayload,\n IVoice,\n VoiceUIControlOptions,\n TaskToggleMuteOptions,\n TaskTransmitDtmfOptions,\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, type TaskContext} from '../state-machine';\nimport {shouldWrapUpForThisAgent} from '../state-machine/guards';\nimport {WrapupData} from '../../config/types';\nimport {getConsultMediaResourceId, getIsConferenceInProgress} from '../TaskUtils';\nimport AnswerCallOnWebexService from '../../AnswerCallOnWebexService';\nimport {isWxAppCallNotFoundError} from '../../wxAppTelephonyUtils';\nimport {\n getCallingDeviceDetails,\n getWebexCallingCallId,\n resolveWxAppLineOwnerId,\n isWebexAppCallingOffer as wxIsWebexAppCallingOffer,\n isWebexAppInboundCallingOffer as wxIsWebexAppInboundCallingOffer,\n mapWxAppVoiceError,\n runWxAppAccept,\n runWxAppOutdialDecline,\n runWxAppReject,\n runWxAppToggleMute,\n runWxAppTransmitDtmf,\n WxAppVoiceDependencies,\n WxAppVoiceLifecycle,\n} from './wxAppVoiceMethods';\nimport {\n deriveWxAppAcceptReason,\n logWxAppMercuryMuteSync,\n logWxAppOfferDecision,\n callIdSuffix,\n WxAppAcceptReason,\n} from '../../wxAppDiagnosticLogging';\n\nconst hasNonemptyPendingWrapUp = (taskData?: TaskData): boolean =>\n Array.isArray(taskData?.agentsPendingWrapUp) && taskData.agentsPendingWrapUp.length > 0;\n\n/**\n * Same consulted-non-owner rule as TaskManager leave stamp. Used only for the\n * HTTP exitConference self-exit fallback (shouldWrapUpForThisAgent stays unchanged).\n */\nconst isConsultedNonOwner = (taskData: TaskData, fallback?: TaskData): boolean => {\n const isConsulted = taskData.isConsulted ?? fallback?.isConsulted;\n if (isConsulted !== true) {\n return false;\n }\n const owner = taskData.interaction?.owner ?? fallback?.interaction?.owner;\n const selfAgentId = taskData.agentId ?? fallback?.agentId;\n\n return Boolean(selfAgentId && owner && owner !== selfAgentId);\n};\n\nexport default class Voice extends Task implements IVoice {\n private static readonly WXAPP_MUTE_SYNC_RETRY_DELAY_MS = 50;\n private static readonly WXAPP_MUTE_SYNC_MAX_RETRIES = 3;\n\n private answerCallOnWebexService?: AnswerCallOnWebexService;\n private enableWxBetterTogether = false;\n private wxAppMuted = false;\n private wxAppAnswerPending = false;\n private wxAppAcceptInFlight = false;\n private wxAppMuteSyncInFlight?: Promise<boolean | undefined>;\n private wxAppMuteToggleTail: Promise<void> = Promise.resolve();\n private wxAppDtmfTail: Promise<void> = Promise.resolve();\n private lastLoggedWxAppAcceptReason?: WxAppAcceptReason;\n\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 enableWxBetterTogether: callOptions?.enableWxBetterTogether ?? false,\n };\n\n super(\n contact,\n data,\n {\n ...resolvedOptions,\n consultTransferConfig: callOptions?.consultTransferConfig,\n },\n wrapupData,\n agentId\n );\n\n this.enableWxBetterTogether = resolvedOptions.enableWxBetterTogether;\n this.answerCallOnWebexService = callOptions?.answerCallOnWebexService;\n }\n\n private getWxAppVoiceDependencies(): WxAppVoiceDependencies {\n return {\n enableWxBetterTogether: this.enableWxBetterTogether,\n answerCallOnWebexService: this.answerCallOnWebexService,\n agentId: this.agentId,\n metricsManager: this.metricsManager,\n getTaskData: () => this.data,\n getTaskState: () => this.stateMachineService?.getSnapshot?.()?.value as TaskState | undefined,\n getWxAppMuted: () => this.wxAppMuted,\n setWxAppMuted: (muted: boolean) => {\n this.wxAppMuted = muted;\n },\n };\n }\n\n /** @deprecated Use {@link Voice.getWxAppVoiceDependencies} */\n private getWxAppVoiceDeps(): WxAppVoiceDependencies {\n return this.getWxAppVoiceDependencies();\n }\n\n public isWebexAppCallingOffer(): boolean {\n return wxIsWebexAppCallingOffer(this.getWxAppVoiceDeps());\n }\n\n public isWebexAppInboundCallingOffer(): boolean {\n return wxIsWebexAppInboundCallingOffer(this.getWxAppVoiceDeps());\n }\n\n private setWxAppAnswerPending(pending: boolean): void {\n this.wxAppAnswerPending = pending;\n this.uiControlConfig = {...this.uiControlConfig, wxAppAnswerPending: pending};\n this.updateUiControls(true);\n }\n\n private setWxAppAcceptInFlight(inFlight: boolean): void {\n this.wxAppAcceptInFlight = inFlight;\n this.uiControlConfig = {...this.uiControlConfig, wxAppAcceptInFlight: inFlight};\n this.updateUiControls(true);\n }\n\n public setEnableWxBetterTogether(enabled: boolean): void {\n this.enableWxBetterTogether = enabled;\n this.uiControlConfig = {...this.uiControlConfig, enableWxBetterTogether: enabled};\n this.updateUiControls(true);\n }\n\n protected updateUiControls(forceEmit = false): void {\n super.updateUiControls(forceEmit);\n this.logWxAppOfferDecisionIfNeeded();\n }\n\n private logWxAppOfferDecisionIfNeeded(): void {\n if (!this.enableWxBetterTogether) {\n return;\n }\n\n const state = this.stateMachineService?.getSnapshot?.()?.value as TaskState | undefined;\n if (state !== TaskState.OFFERED) {\n return;\n }\n\n const accept = this.currentUiControls?.main?.accept;\n if (!accept?.isVisible) {\n return;\n }\n\n const deps = this.getWxAppVoiceDependencies();\n const isOutdial = this.data?.interaction?.outboundType === 'OUTDIAL';\n const isWxAppInboundOffer = this.isWebexAppInboundCallingOffer();\n const isWxAppOutdialOffer = this.isWebexAppCallingOffer() && isOutdial;\n const deviceDetails = getCallingDeviceDetails(deps);\n const acceptReason = deriveWxAppAcceptReason({\n isWxAppInboundOffer,\n isWxAppOutdialOffer,\n isWebrtc: this.uiControlConfig.voiceVariant === VOICE_VARIANT.WEBRTC,\n isOutdial,\n wxAppAcceptInFlight: this.wxAppAcceptInFlight,\n wxAppAnswerPending: this.wxAppAnswerPending,\n enableWxBetterTogether: this.enableWxBetterTogether,\n hasDeviceCallId: Boolean(deviceDetails?.deviceCallId),\n });\n\n if (acceptReason === this.lastLoggedWxAppAcceptReason) {\n return;\n }\n\n this.lastLoggedWxAppAcceptReason = acceptReason;\n\n logWxAppOfferDecision({\n interactionId: this.data.interactionId,\n acceptVisible: accept.isVisible,\n acceptEnabled: accept.isEnabled,\n acceptReason,\n wxAppParticipantDeviceType: deviceDetails?.deviceType,\n hasDeviceCallId: Boolean(deviceDetails?.deviceCallId),\n });\n }\n\n public applyWxAppMuteStateFromSync(incomingCallId: string, muted: boolean): void {\n if (!this.enableWxBetterTogether) {\n return;\n }\n\n const activeCallId = this.getWebexCallingCallId();\n const incomingSuffix = callIdSuffix(incomingCallId);\n const activeSuffix = callIdSuffix(activeCallId);\n\n if (!activeCallId || !incomingCallId.endsWith(activeCallId)) {\n logWxAppMercuryMuteSync({\n phase: 'dropped',\n muted,\n callIdSuffix: incomingSuffix,\n interactionId: this.data.interactionId,\n dropReason: !activeCallId ? 'no_active_wxApp_call' : 'call_id_mismatch',\n });\n\n return;\n }\n\n if (this.wxAppMuted === muted) {\n logWxAppMercuryMuteSync({\n phase: 'dropped',\n muted,\n callIdSuffix: incomingSuffix,\n interactionId: this.data.interactionId,\n dropReason: 'mute_state_unchanged',\n });\n\n return;\n }\n\n this.wxAppMuted = muted;\n logWxAppMercuryMuteSync({\n phase: 'applied',\n muted,\n callIdSuffix: activeSuffix,\n interactionId: this.data.interactionId,\n });\n this.emit(TASK_EVENTS.TASK_WXAPP_MUTE_STATE_UPDATED, {muted});\n }\n\n public getWxAppMuted(): boolean {\n return this.wxAppMuted;\n }\n\n private static delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n }\n\n private canRetryWxAppMuteSync(): boolean {\n if (!this.enableWxBetterTogether) {\n return false;\n }\n\n return (\n Boolean(getCallingDeviceDetails(this.getWxAppVoiceDeps())?.deviceCallId) &&\n !this.getWebexCallingCallId()\n );\n }\n\n private shouldSkipWxAppMuteSync(): boolean {\n if (this.data?.interaction?.isTerminated) {\n return true;\n }\n\n return this.isWebexAppCallingOffer() && !this.uiControlConfig?.wxAppAnswerPending;\n }\n\n private applyWxAppMuteFromBackfill(callId: string, muted: boolean): void {\n if (!this.enableWxBetterTogether || this.wxAppMuted === muted) {\n return;\n }\n\n const activeCallId = this.getWebexCallingCallId();\n if (activeCallId && !callId.endsWith(activeCallId) && !activeCallId.endsWith(callId)) {\n return;\n }\n\n this.wxAppMuted = muted;\n this.emit(TASK_EVENTS.TASK_WXAPP_MUTE_STATE_UPDATED, {muted});\n }\n\n public async syncWxAppMuteFromCallDetails(retryAttempt = 0): Promise<boolean | undefined> {\n if (!this.enableWxBetterTogether || !this.answerCallOnWebexService) {\n return undefined;\n }\n\n if (retryAttempt === 0 && this.shouldSkipWxAppMuteSync()) {\n return undefined;\n }\n\n if (retryAttempt === 0 && this.wxAppMuteSyncInFlight) {\n return this.wxAppMuteSyncInFlight;\n }\n\n const syncPromise = this.performWxAppMuteSync(retryAttempt);\n\n if (retryAttempt === 0) {\n this.wxAppMuteSyncInFlight = syncPromise;\n syncPromise\n .finally(() => {\n if (this.wxAppMuteSyncInFlight === syncPromise) {\n this.wxAppMuteSyncInFlight = undefined;\n }\n })\n .catch(() => undefined);\n\n return syncPromise;\n }\n\n return syncPromise;\n }\n\n private async performWxAppMuteSync(retryAttempt: number): Promise<boolean | undefined> {\n if (this.shouldSkipWxAppMuteSync()) {\n return undefined;\n }\n\n let callId = this.getWebexCallingCallId();\n if (!callId) {\n if (retryAttempt < Voice.WXAPP_MUTE_SYNC_MAX_RETRIES && this.canRetryWxAppMuteSync()) {\n await Voice.delay(Voice.WXAPP_MUTE_SYNC_RETRY_DELAY_MS);\n\n return this.performWxAppMuteSync(retryAttempt + 1);\n }\n\n callId = getCallingDeviceDetails(this.getWxAppVoiceDeps())?.deviceCallId ?? null;\n if (!callId) {\n return undefined;\n }\n }\n\n try {\n const lineOwnerId = resolveWxAppLineOwnerId(this.getWxAppVoiceDeps());\n const details = await this.answerCallOnWebexService.getCallDetails({callId, lineOwnerId});\n if (details.muted !== undefined) {\n this.applyWxAppMuteStateFromSync(callId, details.muted);\n if (this.wxAppMuted !== details.muted) {\n this.applyWxAppMuteFromBackfill(callId, details.muted);\n }\n\n return details.muted;\n }\n\n return this.wxAppMuted;\n } catch (error) {\n if (!isWxAppCallNotFoundError(error)) {\n LoggerProxy.error(`Failed to sync wxApp mute from call details: ${error}`, {\n module: CC_FILE,\n method: METHODS.GET_CALL_DETAILS_ON_WEBEX,\n interactionId: this.data?.interactionId,\n });\n }\n\n return undefined;\n }\n }\n\n protected onTaskAssigned(): void {\n this.setWxAppAnswerPending(false);\n queueMicrotask(() => {\n this.syncWxAppMuteFromCallDetails().catch(() => undefined);\n });\n }\n\n protected onTaskHydrated(): void {\n const state = this.stateMachineService?.getSnapshot?.()?.value as TaskState | undefined;\n const answerStillPending =\n state === TaskState.OFFERED &&\n (this.uiControlConfig?.wxAppAcceptInFlight || this.uiControlConfig?.wxAppAnswerPending);\n\n if (!answerStillPending) {\n this.setWxAppAnswerPending(false);\n }\n\n this.syncWxAppMuteFromCallDetails().catch(() => undefined);\n }\n\n public getCallingDeviceDetails() {\n return getCallingDeviceDetails(this.getWxAppVoiceDeps());\n }\n\n public getWebexCallingCallId(): string | null {\n return getWebexCallingCallId(this.getWxAppVoiceDeps());\n }\n\n private createWxAppLifecycle(): WxAppVoiceLifecycle {\n return {\n setWxAppAcceptInFlight: (inFlight) => this.setWxAppAcceptInFlight(inFlight),\n setWxAppAnswerPending: (pending) => this.setWxAppAnswerPending(pending),\n resetWxAppMuted: () => {\n this.wxAppMuted = false;\n },\n syncWxAppMuteFromCallDetails: () => this.syncWxAppMuteFromCallDetails(),\n mapWxAppVoiceError: (error, method) => mapWxAppVoiceError(error, method, CC_FILE),\n };\n }\n\n private getStateMachineSnapshot() {\n return this.stateMachineService?.getSnapshot?.();\n }\n\n /**\n * Accepts the task. Routes to wxApp telephony answer when `enableWxBetterTogether` and wxApp offer.\n */\n public async accept(): Promise<TaskResponse> {\n if (this.enableWxBetterTogether && this.isWebexAppCallingOffer()) {\n await runWxAppAccept(this.getWxAppVoiceDependencies(), this.createWxAppLifecycle());\n\n return Promise.resolve();\n }\n\n return super.unsupportedMethodError(METHODS.ACCEPT);\n }\n\n /**\n * Declines the task. Routes wxApp inbound to telephony reject; wxApp outdial offer to cancelTask.\n */\n public async decline(): Promise<TaskResponse> {\n if (this.enableWxBetterTogether && this.isWebexAppInboundCallingOffer()) {\n await runWxAppReject(this.getWxAppVoiceDependencies(), this.createWxAppLifecycle());\n\n return Promise.resolve();\n }\n\n const isOutdial = this.data?.interaction?.outboundType === 'OUTDIAL';\n if (!this.enableWxBetterTogether || !isOutdial || !this.isWebexAppCallingOffer()) {\n return super.unsupportedMethodError(METHODS.REJECT);\n }\n\n const interactionId = this.data.interactionId;\n LoggerProxy.log(`Declining wxApp outdial task for taskId:${interactionId}`, {\n module: CC_FILE,\n method: METHODS.REJECT,\n interactionId,\n });\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.setWxAppAnswerPending(false);\n const response = await runWxAppOutdialDecline(this.getWxAppVoiceDependencies(), () =>\n this.contact.cancelTask({interactionId})\n );\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_DECLINE_SUCCESS,\n {\n taskId: interactionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral']\n );\n\n return response;\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_DECLINE_FAILED,\n {\n taskId: 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, METHODS.REJECT, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Toggles mute for wxApp engaged telephony when `enableWxBetterTogether` is active.\n */\n public async toggleMute(options?: TaskToggleMuteOptions): Promise<void> {\n if (this.enableWxBetterTogether && this.getWebexCallingCallId()) {\n const togglePromise = this.wxAppMuteToggleTail\n .catch(() => undefined)\n .then(() =>\n runWxAppToggleMute(this.getWxAppVoiceDependencies(), this.createWxAppLifecycle(), options)\n );\n\n this.wxAppMuteToggleTail = togglePromise.catch(() => undefined);\n await togglePromise;\n\n return;\n }\n\n super.unsupportedMethodError(METHODS.TOGGLE_MUTE);\n }\n\n /**\n * Sends in-call DTMF for wxApp engaged telephony when `enableWxBetterTogether` is active.\n */\n public async transmitDtmf(options: TaskTransmitDtmfOptions): Promise<void> {\n if (this.enableWxBetterTogether && this.getWebexCallingCallId()) {\n const dtmfPromise = this.wxAppDtmfTail\n .catch(() => undefined)\n .then(() =>\n runWxAppTransmitDtmf(\n this.getWxAppVoiceDependencies(),\n this.createWxAppLifecycle(),\n options\n )\n );\n\n this.wxAppDtmfTail = dtmfPromise.catch(() => undefined);\n await dtmfPromise;\n\n return;\n }\n\n super.unsupportedMethodError(METHODS.TRANSMIT_DTMF);\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 * Removes another participant from an active conference.\n * Completion is correlated with ParticipantLeftConference by the AQM request layer.\n * @param payload - Participant identifier to remove\n * @returns Promise<TaskResponse>\n */\n public async dropConferenceParticipant(\n payload: DropConferenceParticipantPayload\n ): Promise<TaskResponse> {\n // The TypeScript contract requires payload, but the published SDK is also callable from\n // untyped JavaScript. Keep an explicit runtime boundary check before direct property access.\n if (!payload) {\n throw new Error('participantId must be a non-empty string');\n }\n\n const {participantId} = payload;\n\n if (typeof participantId !== 'string' || participantId.trim().length === 0) {\n throw new Error('participantId must be a non-empty string');\n }\n\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n // taskId identifies the SDK task instance, which can remain child-interaction keyed after\n // consult/EP-DN flows. requestInteractionId identifies the main interaction sent to AQM.\n\n LoggerProxy.info('Dropping conference participant', {\n module: CC_FILE,\n method: METHODS.DROP_CONFERENCE_PARTICIPANT,\n interactionId: requestInteractionId,\n });\n\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_CONFERENCE_PARTICIPANT_DROP_SUCCESS,\n METRIC_EVENT_NAMES.TASK_CONFERENCE_PARTICIPANT_DROP_FAILED,\n ]);\n\n const response = await this.contact.dropConferenceParticipant({\n interactionId: requestInteractionId,\n participantId,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_PARTICIPANT_DROP_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n agentId: this.agentId,\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.log('Successfully dropped conference participant', {\n module: CC_FILE,\n method: METHODS.DROP_CONFERENCE_PARTICIPANT,\n trackingId: response?.trackingId,\n interactionId: requestInteractionId,\n });\n\n return response;\n } catch (error) {\n const failureTrackingFields = MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n error?.details || {}\n );\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_CONFERENCE_PARTICIPANT_DROP_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n agentId: this.agentId,\n trackingId: failureTrackingFields.trackingId,\n notifTrackingId: failureTrackingFields.notifTrackingId,\n orgId: failureTrackingFields.orgId,\n failureType: failureTrackingFields.failureType,\n reasonCode: failureTrackingFields.reasonCode,\n },\n ['operational', 'behavioral', 'business']\n );\n\n LoggerProxy.error('Failed to drop conference participant', {\n module: CC_FILE,\n method: METHODS.DROP_CONFERENCE_PARTICIPANT,\n trackingId: failureTrackingFields.trackingId,\n interactionId: requestInteractionId,\n });\n\n throw error;\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 const responseTaskData = (response?.data ?? {}) as TaskData;\n const snapshot = this.stateMachineService.getSnapshot();\n const wrapUpContext = (snapshot?.context ?? {\n uiControlConfig: this.uiControlConfig,\n taskData: this.data,\n }) as TaskContext;\n const mergedTaskData = {\n ...this.data,\n ...responseTaskData,\n };\n // Pending-list precedence is response-only; do not keep a cached snapshot list.\n if (!Object.prototype.hasOwnProperty.call(responseTaskData, 'agentsPendingWrapUp')) {\n delete mergedTaskData.agentsPendingWrapUp;\n }\n let wrapUpRequired = shouldWrapUpForThisAgent(wrapUpContext, mergedTaskData);\n // Confirmed self-exit: empty/absent response pending matches TaskManager leave stamp.\n if (!wrapUpRequired && !hasNonemptyPendingWrapUp(responseTaskData)) {\n wrapUpRequired = !isConsultedNonOwner(mergedTaskData, this.data);\n }\n\n this.stateMachineService.send({\n type: TaskEvent.EXIT_CONFERENCE_SUCCESS,\n taskData: {\n ...responseTaskData,\n wrapUpRequired,\n },\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 const taskData = (event as {taskData?: TaskData})?.taskData;\n if (taskData) {\n this.updateTaskData(taskData);\n }\n if (taskData?.suppressOutdialFailedPopup) {\n return;\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,152 @@
|
|
|
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(options) {
|
|
133
|
+
if (options) {
|
|
134
|
+
// parameter intentionally unused — WebRTC toggles from local stream state
|
|
135
|
+
}
|
|
136
|
+
_loggerProxy.default.log(`Toggling mute WebRTC task for taskId:${this.data.interactionId}`, {
|
|
137
|
+
module: 'WebRTC',
|
|
138
|
+
method: 'toggleMute'
|
|
139
|
+
});
|
|
140
|
+
try {
|
|
141
|
+
this.webCallingService.muteUnmuteCall(this.localAudioStream);
|
|
142
|
+
return Promise.resolve();
|
|
143
|
+
} catch (error) {
|
|
144
|
+
const {
|
|
145
|
+
error: detailedError
|
|
146
|
+
} = (0, _Utils.getErrorDetails)(error, 'mute', _constants.CC_FILE);
|
|
147
|
+
throw detailedError;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.default = WebRTC;
|
|
152
|
+
//# 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","options","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 TaskToggleMuteOptions,\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(options?: TaskToggleMuteOptions) {\n if (options) {\n // parameter intentionally unused — WebRTC toggles from local stream state\n }\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":[]}
|