@webex/contact-center 3.12.0-task-refactor.4 → 3.12.0-task-refactor.6

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.
Files changed (35) hide show
  1. package/dist/services/task/TaskManager.js +1 -0
  2. package/dist/services/task/TaskManager.js.map +1 -1
  3. package/dist/services/task/TaskUtils.js +8 -6
  4. package/dist/services/task/TaskUtils.js.map +1 -1
  5. package/dist/services/task/state-machine/TaskStateMachine.js +77 -14
  6. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -1
  7. package/dist/services/task/state-machine/actions.js +85 -13
  8. package/dist/services/task/state-machine/actions.js.map +1 -1
  9. package/dist/services/task/state-machine/guards.js +35 -0
  10. package/dist/services/task/state-machine/guards.js.map +1 -1
  11. package/dist/services/task/state-machine/uiControlsComputer.js +76 -10
  12. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -1
  13. package/dist/services/task/voice/Voice.js +10 -4
  14. package/dist/services/task/voice/Voice.js.map +1 -1
  15. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +68 -8
  16. package/dist/types/services/task/state-machine/guards.d.ts +5 -0
  17. package/dist/types/services/task/voice/Voice.d.ts +18 -17
  18. package/dist/webex.js +1 -1
  19. package/package.json +1 -1
  20. package/src/services/task/TaskManager.ts +1 -1
  21. package/src/services/task/TaskUtils.ts +8 -6
  22. package/src/services/task/state-machine/TaskStateMachine.ts +101 -16
  23. package/src/services/task/state-machine/actions.ts +148 -24
  24. package/src/services/task/state-machine/guards.ts +46 -0
  25. package/src/services/task/state-machine/uiControlsComputer.ts +158 -15
  26. package/src/services/task/voice/Voice.ts +12 -5
  27. package/test/unit/spec/services/WebCallingService.ts +7 -1
  28. package/test/unit/spec/services/task/TaskManager.ts +26 -0
  29. package/test/unit/spec/services/task/TaskUtils.ts +16 -0
  30. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +573 -0
  31. package/test/unit/spec/services/task/state-machine/guards.ts +88 -0
  32. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +1023 -46
  33. package/test/unit/spec/services/task/voice/Voice.ts +44 -0
  34. package/umd/contact-center.min.js +2 -2
  35. package/umd/contact-center.min.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["_xstate","require","_constants","_actions","_guards","_TaskUtils","taskStateMachineSetup","setup","actors","types","context","events","getTaskStateMachineConfig","uiControlConfig","id","initial","TaskState","IDLE","createInitialContext","on","TaskEvent","RECORDING_STARTED","actions","CONTACT_UPDATED","CONTACT_OWNER_CHANGED","HYDRATE","states","guard","guards","isInteractionTerminated","target","WRAPPING_UP","isInteractionConsulting","CONSULTING","isInteractionHeld","HELD","isInteractionConnected","CONNECTED","isConferencingByParticipants","CONFERENCING","TASK_INCOMING","OFFERED","CONSULTING_ACTIVE","TASK_OFFERED","ASSIGN","isConsultingAssignment","RONA","TERMINATED","TASK_WRAPUP","CONTACT_ENDED","ASSIGN_FAILED","INVITE_FAILED","OUTBOUND_FAILED","shouldWrapUp","OFFER_CONSULT","CONSULT_FAILED","CONSULT_END","HOLD_INITIATED","HOLD_INITIATING","HOLD_SUCCESS","CONSULT","CONSULT_INITIATING","TRANSFER_SUCCESS","shouldWrapUpOrIsInitiator","TRANSFER_FAILED","conferenceInProgressFromEvent","PAUSE_RECORDING","RESUME_RECORDING","HOLD_FAILED","UNHOLD_INITIATED","RESUME_INITIATING","UNHOLD_SUCCESS","UNHOLD_FAILED","CONSULT_SUCCESS","consultFromConference","isPrimaryMediaOnHold","CTQ_CANCEL","event","consultInitiator","consultCallHeld","taskData","getTaskDataFromEvent","cpd","interaction","callProcessingDetails","hasCustomerLeft","shouldWrapUpForThisAgent","SWITCH_TO_MAIN_CALL","SWITCH_TO_CONSULT","TRANSFER_CONFERENCE","TRANSFER_CONFERENCE_SUCCESS","transferConferenceRequested","TRANSFER_CONFERENCE_FAILED","MERGE_TO_CONFERENCE","CONF_INITIATING","CONFERENCE_START","CONFERENCE_FAILED","isTerminated","EXIT_CONFERENCE_SUCCESS","PARTICIPANT_LEAVE","params","didCurrentAgentLeaveConference","shouldDowngradeConferenceToConnected","CONFERENCE_END","exitingConference","mainCallId","mainInteractionId","interactionId","getIsCustomerInCall","entry","WRAPUP_COMPLETE","COMPLETED","type","createTaskStateMachine","options","createMachine","provide"],"sources":["TaskStateMachine.ts"],"sourcesContent":["/**\n * Task State Machine Configuration\n *\n * This file defines the XState state machine configuration for contact center tasks.\n * It orchestrates state transitions, guards, and actions for task lifecycle management.\n *\n * GUARD FUNCTIONS: All guard logic is centralized in guards.ts for reusability and testing.\n * This file imports and uses those guards via the `guards` object.\n */\n\nimport {setup} from 'xstate';\nimport {TaskContext, TaskEventPayload, UIControlConfig, TaskActionsMap} from './types';\nimport {TaskState, TaskEvent} from './constants';\nimport {actions, createInitialContext} from './actions';\nimport {guards, shouldWrapUpForThisAgent, getTaskDataFromEvent} from './guards';\nimport {getIsCustomerInCall} from '../TaskUtils';\n\ntype TaskActionConfigMap = {[K in keyof typeof actions]: undefined};\n\nconst taskStateMachineSetup = setup<\n TaskContext,\n TaskEventPayload,\n Record<string, never>,\n Record<string, never>,\n TaskActionConfigMap\n>({\n actors: {},\n types: {\n context: {} as TaskContext,\n events: {} as TaskEventPayload,\n },\n});\n\n/**\n * Get task state machine configuration with UI control config\n * Defines all states, transitions, guards, and actions for task management\n *\n * @param uiControlConfig - UI control configuration\n * @returns State machine configuration object\n */\nexport function getTaskStateMachineConfig(uiControlConfig: UIControlConfig) {\n /**\n * Event mapping reference (CC WebSocket -> TaskEvent)\n *\n * AgentContactReserved -> TaskEvent.TASK_INCOMING\n * AgentOfferContact -> TaskEvent.TASK_OFFERED\n * AgentOfferConsult -> TaskEvent.OFFER_CONSULT\n * AgentConsulting -> TaskEvent.CONSULTING_ACTIVE\n * AgentConsultCreated -> TaskEvent.CONSULT_CREATED\n * AgentConsultTransferred -> TaskEvent.TRANSFER_SUCCESS\n * AgentContactAssigned -> TaskEvent.ASSIGN\n * AgentContactHeld -> TaskEvent.HOLD_SUCCESS\n * AgentContactUnheld -> TaskEvent.UNHOLD_SUCCESS\n * AgentConsultEnded -> TaskEvent.CONSULT_END\n * AgentContactEnded -> TaskEvent.CONTACT_ENDED\n * AgentWrapup -> TaskEvent.TASK_WRAPUP (wrapUpRequired)\n * AgentWrappedup -> TaskEvent.WRAPUP_COMPLETE\n *\n * (See TaskManager.mapEventToTaskStateMachineEvent for the full mapping table.)\n */\n return {\n id: 'taskStateMachine',\n initial: TaskState.IDLE,\n context: createInitialContext(uiControlConfig, TaskState.IDLE),\n on: {\n [TaskEvent.RECORDING_STARTED]: {\n actions: ['updateTaskData', 'emitTaskRecordingStarted'],\n },\n [TaskEvent.CONTACT_UPDATED]: {\n actions: ['updateTaskData', 'syncTaskDataFromEvent'],\n },\n [TaskEvent.CONTACT_OWNER_CHANGED]: {\n actions: ['updateTaskData', 'syncTaskDataFromEvent'],\n },\n // HYDRATE: Update task data from AgentContact event\n // Note: State restoration with transitions is handled in IDLE state.\n // This root-level handler is for when task is already in another state (just updates data).\n [TaskEvent.HYDRATE]: {\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n },\n states: {\n [TaskState.IDLE]: {\n on: {\n // HYDRATE: Restore state machine to correct state based on hydrated task data\n // This handles page refresh/reconnection scenarios where task needs to be restored\n // IMPORTANT: This MUST be in IDLE state (not root) because root-level events cannot\n // transition to child states in XState\n [TaskEvent.HYDRATE]: [\n {\n guard: guards.isInteractionTerminated,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskHydrate'],\n },\n {\n guard: guards.isInteractionConsulting,\n target: TaskState.CONSULTING,\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n {\n guard: guards.isInteractionHeld,\n target: TaskState.HELD,\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n {\n guard: guards.isInteractionConnected,\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n {\n guard: guards.isConferencingByParticipants,\n target: TaskState.CONFERENCING,\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n {\n // Default: just update data, stay in IDLE\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n ],\n // AgentContactReserved (applicable for direct incoming/consult/transfer/outdial)\n [TaskEvent.TASK_INCOMING]: {\n target: TaskState.OFFERED,\n actions: ['initializeTask', 'emitTaskIncoming'],\n },\n\n // EP-DN split-leg ordering can deliver AgentConsulting before HYDRATE/TASK_INCOMING.\n // Do not drop it in IDLE; bootstrap to CONSULTING using event taskData.\n [TaskEvent.CONSULTING_ACTIVE]: {\n target: TaskState.CONSULTING,\n actions: [\n 'updateTaskData',\n 'setConsultInitiator',\n 'setConsultDestination',\n 'setConsultFromConference',\n 'setConsultAgentJoined',\n 'emitTaskConsultAccepted',\n 'emitTaskConsulting',\n ],\n },\n },\n },\n\n [TaskState.OFFERED]: {\n on: {\n // AgentContactOffer\n [TaskEvent.TASK_OFFERED]: {\n actions: ['updateTaskData', 'emitTaskOfferContact', 'requestAutoAnswer'],\n },\n // AgentContactAssigned\n [TaskEvent.ASSIGN]: [\n {\n guard: guards.isConsultingAssignment,\n target: TaskState.CONSULTING,\n actions: ['updateTaskData', 'emitTaskConsultAccepted', 'emitTaskConsulting'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'emitTaskAssigned'],\n },\n ],\n // AgentOfferContactRONA\n [TaskEvent.RONA]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskReject'],\n },\n [TaskEvent.TASK_WRAPUP]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskEnd'],\n },\n [TaskEvent.CONTACT_ENDED]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskEnd'],\n },\n // This needs to be handled for all assign failed scenarios (contact, buddy)\n // [AgentContactAssignFailed, AgentCtqFailed, AgentBlindTransferFailed,\n // AgentVTeamTransferFailed, AgentConsultTransferFailed]\n [TaskEvent.ASSIGN_FAILED]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskReject'],\n },\n [TaskEvent.INVITE_FAILED]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskReject'],\n },\n [TaskEvent.OUTBOUND_FAILED]: [\n {\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskOutdialFailed', 'emitTaskWrapup'],\n },\n {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskOutdialFailed', 'emitTaskReject'],\n },\n ],\n // AgentConsulting comes for received after the initial consult is accepted\n [TaskEvent.CONSULTING_ACTIVE]: [\n {\n target: TaskState.CONSULTING,\n actions: [\n 'updateTaskData',\n 'setConsultAgentJoined',\n 'emitTaskConsultAccepted',\n 'emitTaskConsulting',\n ],\n },\n ],\n // agentOfferConsult happens only on the receiver side of consult\n [TaskEvent.OFFER_CONSULT]: {\n actions: ['updateTaskData', 'emitTaskOfferConsult', 'requestAutoAnswer'],\n },\n // AgentConsultFailed - when consulted agent (Agent 2) doesn't answer (RONA or decline)\n // Clears the incoming consult notification by transitioning to TERMINATED\n [TaskEvent.CONSULT_FAILED]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskReject'],\n },\n // AgentConsultEnded - when consult initiator (Agent 1) ends the consult before\n // the consulted agent (Agent 2) accepts. Clears the incoming notification.\n [TaskEvent.CONSULT_END]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskReject'],\n },\n },\n },\n\n [TaskState.CONNECTED]: {\n on: {\n // AgentConsulting may arrive while machine is CONNECTED (EP-DN/event ordering).\n // Derive consultInitiator from payload so controls are set correctly.\n [TaskEvent.CONSULTING_ACTIVE]: {\n target: TaskState.CONSULTING,\n actions: [\n 'updateTaskData',\n 'setConsultInitiator',\n 'setConsultDestination',\n 'setConsultAgentJoined',\n 'emitTaskConsultAccepted',\n 'emitTaskConsulting',\n ],\n },\n // AgentContactAssigned can be resent after consult transfers; keep context in sync\n [TaskEvent.ASSIGN]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'emitTaskAssigned'],\n },\n // Click of hold button\n [TaskEvent.HOLD_INITIATED]: {\n target: TaskState.HOLD_INITIATING,\n },\n // Remote hold from another login session (multi-login)\n [TaskEvent.HOLD_SUCCESS]: {\n target: TaskState.HELD,\n actions: ['updateTaskData', 'setHoldState', 'emitTaskHold'],\n },\n // Click of the consult button\n [TaskEvent.CONSULT]: {\n target: TaskState.CONSULT_INITIATING,\n actions: ['setConsultInitiator', 'setConsultDestination'],\n },\n // AgentConsultTransferred / AgentVTeamTransferred / AgentBlindTransferred\n [TaskEvent.TRANSFER_SUCCESS]: [\n {\n guard: guards.shouldWrapUpOrIsInitiator,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n // Receiver goes to connected as he receives transferSuccess event\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n [TaskEvent.TRANSFER_FAILED]: {\n actions: ['updateTaskData'],\n },\n // AgentContactEnded Event\n [TaskEvent.CONTACT_ENDED]: [\n {\n // Conference still active → CONFERENCING\n guard: guards.conferenceInProgressFromEvent,\n target: TaskState.CONFERENCING,\n actions: ['updateTaskData', 'emitTaskConferenceStarted', 'requestCleanup'],\n },\n {\n // Agent should wrap up → WRAPPING_UP\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskWrapup', 'requestCleanup'],\n },\n {\n // Consulted agent → TERMINATED\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskEnd'],\n },\n ],\n [TaskEvent.TASK_WRAPUP]: {\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskWrapup'],\n },\n [TaskEvent.PAUSE_RECORDING]: {\n actions: ['updateTaskData', 'setRecordingState', 'emitTaskRecordingPaused'],\n },\n [TaskEvent.RESUME_RECORDING]: {\n actions: ['updateTaskData', 'setRecordingState', 'emitTaskRecordingResumed'],\n },\n },\n },\n\n [TaskState.HOLD_INITIATING]: {\n on: {\n // AgentContactHeld Event\n [TaskEvent.HOLD_SUCCESS]: {\n target: TaskState.HELD,\n actions: ['updateTaskData', 'setHoldState', 'emitTaskHold'],\n },\n // AgentContactHoldFailed Event\n [TaskEvent.HOLD_FAILED]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData'],\n },\n },\n },\n\n [TaskState.HELD]: {\n on: {\n // Click of the unhold button\n [TaskEvent.UNHOLD_INITIATED]: {\n target: TaskState.RESUME_INITIATING,\n },\n // Remote resume from another login session (multi-login)\n [TaskEvent.UNHOLD_SUCCESS]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'setHoldState', 'emitTaskResume'],\n },\n // Click of the consult button\n [TaskEvent.CONSULT]: {\n target: TaskState.CONSULT_INITIATING,\n actions: ['setConsultInitiator', 'setConsultDestination'],\n },\n // TODO: This may not be a valid transition, need to be removed\n // AgentConsultTransferred / AgentVTeamTransferred / AgentBlindTransferred\n [TaskEvent.TRANSFER_SUCCESS]: [\n {\n guard: guards.shouldWrapUpOrIsInitiator,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskWrapup'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n [TaskEvent.TRANSFER_FAILED]: {\n actions: ['updateTaskData'],\n },\n [TaskEvent.CONTACT_ENDED]: [\n {\n guard: guards.conferenceInProgressFromEvent,\n target: TaskState.CONFERENCING,\n actions: ['updateTaskData', 'emitTaskConferenceStarted', 'requestCleanup'],\n },\n {\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskWrapup', 'requestCleanup'],\n },\n {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskEnd'],\n },\n ],\n // TODO: This may not be a valid transition, this needs to be checked as well\n [TaskEvent.TASK_WRAPUP]: {\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskWrapup'],\n },\n },\n },\n\n [TaskState.RESUME_INITIATING]: {\n on: {\n [TaskEvent.UNHOLD_SUCCESS]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'setHoldState', 'emitTaskResume'],\n },\n [TaskEvent.UNHOLD_FAILED]: {\n target: TaskState.HELD,\n },\n },\n },\n\n [TaskState.CONSULT_INITIATING]: {\n on: {\n [TaskEvent.HOLD_SUCCESS]: {\n actions: ['updateTaskData'],\n },\n [TaskEvent.HOLD_FAILED]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'handleConsultFailed'],\n },\n // AgentConsulting\n // NOTE: Don't set consultDestinationAgentJoined here - wait for CONSULTING_ACTIVE\n [TaskEvent.CONSULT_SUCCESS]: {\n target: TaskState.CONSULTING,\n actions: ['updateTaskData', 'setConsultInitiator'],\n },\n // AgentConsultFailed, API Failures, AgentCtqFailed\n [TaskEvent.CONSULT_FAILED]: [\n {\n // Consult from conference → back to CONFERENCING\n guard: ({context}) => context.consultFromConference === true,\n target: TaskState.CONFERENCING,\n actions: ['updateTaskData', 'handleConsultFailed'],\n },\n {\n guard: guards.isPrimaryMediaOnHold,\n target: TaskState.HELD,\n actions: ['updateTaskData', 'handleConsultFailed'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'handleConsultFailed'],\n },\n ],\n // AgentCtqCancelled Event\n [TaskEvent.CTQ_CANCEL]: [\n {\n guard: guards.isPrimaryMediaOnHold,\n target: TaskState.HELD,\n actions: ['updateTaskData', 'clearConsultState'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n },\n },\n\n [TaskState.CONSULTING]: {\n on: {\n // AgentConsulting updates consulted agent arrival\n [TaskEvent.CONSULTING_ACTIVE]: {\n actions: [\n 'updateTaskData',\n 'setConsultAgentJoined',\n 'setConsultDestination',\n 'emitTaskConsulting',\n ],\n },\n\n // AgentConsultEnded\n [TaskEvent.CONSULT_END]: [\n {\n // Initiator returning to conference (flag set OR backend still shows conference)\n guard: ({context, event}) =>\n context.consultInitiator === true &&\n (context.consultFromConference === true ||\n guards.conferenceInProgressFromEvent({context, event})),\n target: TaskState.CONFERENCING,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n // Initiator already switched back to the main/customer leg\n guard: ({context}) =>\n context.consultInitiator === true && context.consultCallHeld === true,\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n // Customer left during consult → WRAPPING_UP\n guard: ({context, event}) => {\n const taskData = getTaskDataFromEvent(event);\n const cpd = taskData?.interaction?.callProcessingDetails;\n if (cpd?.hasCustomerLeft !== 'true') return false;\n\n return shouldWrapUpForThisAgent(context, taskData);\n },\n target: TaskState.WRAPPING_UP,\n actions: [\n 'updateTaskData',\n 'markEnded',\n 'clearConsultState',\n 'emitTaskWrapup',\n 'requestCleanup',\n ],\n },\n {\n // Initiator (no conference) → HELD\n guard: ({context}) => context.consultInitiator === true,\n target: TaskState.HELD,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n // Consulted agent → TERMINATED\n target: TaskState.TERMINATED,\n actions: ['updateTaskData'],\n },\n ],\n\n // Switch between consult and main call (UI-driven toggle)\n [TaskEvent.SWITCH_TO_MAIN_CALL]: {\n actions: ['handleSwitchToMainCall', 'emitTaskSwitchCall'],\n },\n [TaskEvent.SWITCH_TO_CONSULT]: {\n actions: ['handleSwitchToConsult', 'emitTaskSwitchCall'],\n },\n [TaskEvent.HOLD_SUCCESS]: {\n actions: ['updateTaskData', 'setHoldState', 'emitTaskHold'],\n },\n [TaskEvent.UNHOLD_SUCCESS]: {\n actions: ['updateTaskData', 'setHoldState', 'emitTaskResume'],\n },\n\n [TaskEvent.TRANSFER_SUCCESS]: [\n {\n guard: guards.shouldWrapUpOrIsInitiator,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n [TaskEvent.TRANSFER_FAILED]: {\n actions: ['updateTaskData'],\n },\n [TaskEvent.TRANSFER_CONFERENCE]: {\n // Track that this agent initiated the conference transfer so we can\n // apply the correct lifecycle transition when success arrives.\n actions: ['setTransferConferenceRequested', 'emitTaskTransferConference'],\n },\n [TaskEvent.TRANSFER_CONFERENCE_SUCCESS]: [\n {\n guard: ({context}) => context.transferConferenceRequested !== true,\n actions: [\n 'updateTaskData',\n 'handleTransferConferenceSuccess',\n 'clearTransferConferenceRequested',\n ],\n },\n {\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: [\n 'updateTaskData',\n 'markEnded',\n 'clearConsultState',\n 'handleTransferConferenceSuccess',\n 'clearTransferConferenceRequested',\n 'emitTaskWrapup',\n ],\n },\n {\n // Non-initiator (consulted agent) stays in CONFERENCING\n guard: ({context}) => !context.consultInitiator,\n target: TaskState.CONFERENCING,\n actions: [\n 'updateTaskData',\n 'clearConsultState',\n 'handleTransferConferenceSuccess',\n 'clearTransferConferenceRequested',\n ],\n },\n {\n target: TaskState.TERMINATED,\n actions: [\n 'updateTaskData',\n 'markEnded',\n 'clearConsultState',\n 'handleTransferConferenceSuccess',\n 'clearTransferConferenceRequested',\n 'emitTaskEnd',\n ],\n },\n ],\n [TaskEvent.TRANSFER_CONFERENCE_FAILED]: {\n actions: ['clearTransferConferenceRequested', 'emitTaskTransferConferenceFailed'],\n },\n\n // AgentContactAssigned - receiver side becomes connected to customer\n [TaskEvent.ASSIGN]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'emitTaskAssigned'],\n },\n // AgentContactEnded\n [TaskEvent.CONTACT_ENDED]: {\n target: TaskState.WRAPPING_UP,\n actions: [\n 'updateTaskData',\n 'markEnded',\n 'clearConsultState',\n 'emitTaskWrapup',\n 'requestCleanup',\n ],\n },\n [TaskEvent.TASK_WRAPUP]: {\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n [TaskEvent.MERGE_TO_CONFERENCE]: {\n target: TaskState.CONF_INITIATING,\n },\n // AgentConsultConferenced, ParticipantJoinedConference\n [TaskEvent.CONFERENCE_START]: {\n target: TaskState.CONFERENCING,\n actions: [\n 'updateTaskData',\n 'syncTaskDataFromEvent',\n 'handleConferenceStarted',\n 'clearConsultState',\n ],\n },\n },\n },\n\n [TaskState.CONF_INITIATING]: {\n on: {\n // AgentConsultConferenced, AgentConsultConferencing, ParticipantJoinedConference\n [TaskEvent.CONFERENCE_START]: {\n target: TaskState.CONFERENCING,\n actions: [\n 'updateTaskData',\n 'syncTaskDataFromEvent',\n 'handleConferenceStarted',\n 'clearConsultState',\n ],\n },\n // AgentConsultConferenceFailed\n [TaskEvent.CONFERENCE_FAILED]: {\n target: TaskState.CONSULTING,\n actions: ['handleConferenceFailed', 'emitTaskConferenceFailed'],\n },\n // AgentConsultEnded while conference is initiating (end call before conference completes)\n [TaskEvent.CONSULT_END]: [\n {\n guard: ({event}) => {\n const taskData = getTaskDataFromEvent(event);\n\n return taskData?.interaction?.isTerminated === true;\n },\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n },\n },\n\n [TaskState.CONFERENCING]: {\n on: {\n [TaskEvent.CONFERENCE_START]: {\n actions: [\n 'updateTaskData',\n 'syncTaskDataFromEvent',\n 'clearConsultState',\n 'emitTaskConferenceStarted',\n ],\n },\n [TaskEvent.EXIT_CONFERENCE_SUCCESS]: [\n {\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskEnd'],\n },\n ],\n\n // Needed as all agents in conference get this event, hence we need to clear the consult state\n [TaskEvent.CONSULT_END]: [\n {\n guard: ({context, event}) => {\n const taskData = getTaskDataFromEvent(event);\n\n return (\n taskData?.interaction?.isTerminated === true &&\n shouldWrapUpForThisAgent(context, taskData)\n );\n },\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n\n [TaskEvent.HOLD_SUCCESS]: {\n actions: ['updateTaskData', 'setHoldState', 'emitTaskHold'],\n },\n [TaskEvent.UNHOLD_SUCCESS]: {\n actions: ['updateTaskData', 'syncTaskDataFromEvent', 'setHoldState', 'emitTaskResume'],\n },\n\n // Start a new consult from within an active conference\n [TaskEvent.CONSULT]: {\n target: TaskState.CONSULT_INITIATING,\n actions: ['setConsultInitiator', 'setConsultDestination', 'setConsultFromConference'],\n },\n\n // Participant leaves - handle conference downgrade scenarios\n [TaskEvent.PARTICIPANT_LEAVE]: [\n {\n // Only the leaving agent should wrap up → WRAPPING_UP\n guard: (params) =>\n guards.didCurrentAgentLeaveConference(params) && guards.shouldWrapUp(params),\n target: TaskState.WRAPPING_UP,\n actions: [\n 'updateTaskData',\n 'handleParticipantLeft',\n 'markEnded',\n 'clearConsultState',\n 'emitTaskParticipantLeft',\n 'emitTaskWrapup',\n ],\n },\n {\n // Only the leaving agent (no wrapup) → TERMINATED\n guard: guards.didCurrentAgentLeaveConference,\n target: TaskState.TERMINATED,\n actions: [\n 'updateTaskData',\n 'handleParticipantLeft',\n 'markEnded',\n 'clearConsultState',\n 'emitTaskParticipantLeft',\n 'emitTaskEnd',\n ],\n },\n {\n // Conference downgraded, customer present → CONNECTED\n guard: (params) =>\n !guards.didCurrentAgentLeaveConference(params) &&\n guards.shouldDowngradeConferenceToConnected(params),\n target: TaskState.CONNECTED,\n actions: [\n 'updateTaskData',\n 'handleParticipantLeft',\n 'clearConsultState',\n 'emitTaskParticipantLeft',\n 'emitTaskConferenceEnded',\n ],\n },\n {actions: ['updateTaskData', 'handleParticipantLeft', 'emitTaskParticipantLeft']},\n ],\n\n [TaskEvent.TRANSFER_CONFERENCE]: {\n actions: ['setTransferConferenceRequested', 'emitTaskTransferConference'],\n },\n [TaskEvent.TRANSFER_CONFERENCE_SUCCESS]: [\n {\n // Not initiated by this agent → just refresh backend state.\n guard: ({context}) => context.transferConferenceRequested !== true,\n actions: [\n 'updateTaskData',\n 'handleTransferConferenceSuccess',\n 'clearTransferConferenceRequested',\n ],\n },\n ],\n [TaskEvent.TRANSFER_CONFERENCE_FAILED]: {\n actions: ['clearTransferConferenceRequested', 'emitTaskTransferConferenceFailed'],\n },\n\n // Conference ends explicitly\n [TaskEvent.CONFERENCE_END]: [\n {\n // Agent who should wrap up → WRAPPING_UP\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n // Customer still in call → CONNECTED\n guard: ({context, event}) => {\n if (context.exitingConference === true) return false;\n const taskData = (event as any)?.taskData ?? context.taskData;\n if (!taskData?.interaction) return false;\n const mainCallId = taskData.interaction.mainInteractionId || taskData.interactionId;\n if (!mainCallId) return false;\n\n return getIsCustomerInCall(taskData.interaction, mainCallId);\n },\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConferenceEnded'],\n },\n {\n // Otherwise → TERMINATED\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskEnd'],\n },\n ],\n\n // CONTACT_ENDED in conference\n [TaskEvent.CONTACT_ENDED]: [\n {\n // Conference still active → stay\n actions: ['updateTaskData', 'requestCleanup'],\n },\n ],\n },\n },\n\n [TaskState.WRAPPING_UP]: {\n // Only emit wrapup event on entry - task:end should only be emitted when COMPLETED\n entry: ['emitTaskWrapup'],\n on: {\n // AgentWrappedup Event\n [TaskEvent.WRAPUP_COMPLETE]: {\n target: TaskState.COMPLETED,\n actions: ['updateTaskData'],\n },\n },\n },\n\n [TaskState.COMPLETED]: {\n type: 'final' as const,\n entry: ['emitTaskWrappedup', 'cleanupResources'],\n },\n\n [TaskState.TERMINATED]: {\n type: 'final' as const,\n entry: ['cleanupResources'],\n },\n },\n };\n}\n\n/**\n * Create a task state machine instance using only the built-in actions.\n * The resulting machine is ready for most consumers that rely on the default\n * context mutators declared in actions.ts.\n *\n * @param uiControlConfig - UI control configuration\n * @returns StateMachine instance for task management\n */\nexport function createTaskStateMachine(\n uiControlConfig: UIControlConfig,\n options?: {actions?: Partial<TaskActionsMap>}\n) {\n return taskStateMachineSetup.createMachine(getTaskStateMachineConfig(uiControlConfig)).provide({\n actions: {\n ...actions,\n ...(options?.actions ?? {}),\n },\n });\n}\n\nexport type TaskStateMachine = ReturnType<typeof createTaskStateMachine>;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_xstate","require","_constants","_actions","_guards","_TaskUtils","taskStateMachineSetup","setup","actors","types","context","events","getTaskStateMachineConfig","uiControlConfig","id","initial","TaskState","IDLE","createInitialContext","on","TaskEvent","RECORDING_STARTED","actions","CONTACT_UPDATED","CONTACT_OWNER_CHANGED","HYDRATE","states","guard","guards","isInteractionTerminated","target","WRAPPING_UP","isInteractionConsulting","CONSULTING","isInteractionHeld","HELD","isInteractionConnected","CONNECTED","isConferencingByParticipants","CONFERENCING","TASK_INCOMING","OFFERED","OUTBOUND_FAILED","TERMINATED","CONSULTING_ACTIVE","TASK_OFFERED","ASSIGN","isConsultingAssignment","RONA","TASK_WRAPUP","CONTACT_ENDED","ASSIGN_FAILED","INVITE_FAILED","shouldWrapUp","OFFER_CONSULT","CONSULT_FAILED","CONSULT_END","CONFERENCE_START","HOLD_INITIATED","HOLD_INITIATING","HOLD_SUCCESS","CONSULT","CONSULT_INITIATING","TRANSFER_SUCCESS","shouldWrapUpOrIsInitiator","TRANSFER_FAILED","conferenceInProgressFromEvent","PAUSE_RECORDING","RESUME_RECORDING","HOLD_FAILED","UNHOLD_INITIATED","RESUME_INITIATING","UNHOLD_SUCCESS","UNHOLD_FAILED","CONSULT_SUCCESS","consultFromConference","isPrimaryMediaOnHold","CTQ_CANCEL","event","consultInitiator","isConferenceHoldParticipantFromEvent","consultCallHeld","taskData","getTaskDataFromEvent","cpd","interaction","callProcessingDetails","hasCustomerLeft","isTerminated","shouldWrapUpForThisAgent","SWITCH_TO_MAIN_CALL","SWITCH_TO_CONSULT","TRANSFER_CONFERENCE","TRANSFER_CONFERENCE_SUCCESS","transferConferenceRequested","TRANSFER_CONFERENCE_FAILED","MERGE_TO_CONFERENCE","CONF_INITIATING","CONFERENCE_FAILED","EXIT_CONFERENCE_SUCCESS","shouldDowngradeConferenceToConnected","PARTICIPANT_LEAVE","params","didCurrentAgentLeaveConference","CONFERENCE_END","exitingConference","mainCallId","mainInteractionId","interactionId","getIsCustomerInCall","entry","WRAPUP_COMPLETE","COMPLETED","type","createTaskStateMachine","options","createMachine","provide"],"sources":["TaskStateMachine.ts"],"sourcesContent":["/**\n * Task State Machine Configuration\n *\n * This file defines the XState state machine configuration for contact center tasks.\n * It orchestrates state transitions, guards, and actions for task lifecycle management.\n *\n * GUARD FUNCTIONS: All guard logic is centralized in guards.ts for reusability and testing.\n * This file imports and uses those guards via the `guards` object.\n */\n\nimport {setup} from 'xstate';\nimport {TaskContext, TaskEventPayload, UIControlConfig, TaskActionsMap} from './types';\nimport {TaskState, TaskEvent} from './constants';\nimport {actions, createInitialContext} from './actions';\nimport {guards, shouldWrapUpForThisAgent, getTaskDataFromEvent} from './guards';\nimport {getIsCustomerInCall} from '../TaskUtils';\n\ntype TaskActionConfigMap = {[K in keyof typeof actions]: undefined};\n\nconst taskStateMachineSetup = setup<\n TaskContext,\n TaskEventPayload,\n Record<string, never>,\n Record<string, never>,\n TaskActionConfigMap\n>({\n actors: {},\n types: {\n context: {} as TaskContext,\n events: {} as TaskEventPayload,\n },\n});\n\n/**\n * Get task state machine configuration with UI control config\n * Defines all states, transitions, guards, and actions for task management\n *\n * @param uiControlConfig - UI control configuration\n * @returns State machine configuration object\n */\nexport function getTaskStateMachineConfig(uiControlConfig: UIControlConfig) {\n /**\n * Event mapping reference (CC WebSocket -> TaskEvent)\n *\n * AgentContactReserved -> TaskEvent.TASK_INCOMING\n * AgentOfferContact -> TaskEvent.TASK_OFFERED\n * AgentOfferConsult -> TaskEvent.OFFER_CONSULT\n * AgentConsulting -> TaskEvent.CONSULTING_ACTIVE\n * AgentConsultCreated -> TaskEvent.CONSULT_CREATED\n * AgentConsultTransferred -> TaskEvent.TRANSFER_SUCCESS\n * AgentContactAssigned -> TaskEvent.ASSIGN\n * AgentContactHeld -> TaskEvent.HOLD_SUCCESS\n * AgentContactUnheld -> TaskEvent.UNHOLD_SUCCESS\n * AgentConsultEnded -> TaskEvent.CONSULT_END\n * AgentContactEnded -> TaskEvent.CONTACT_ENDED\n * AgentWrapup -> TaskEvent.TASK_WRAPUP (wrapUpRequired)\n * AgentWrappedup -> TaskEvent.WRAPUP_COMPLETE\n *\n * (See TaskManager.mapEventToTaskStateMachineEvent for the full mapping table.)\n */\n return {\n id: 'taskStateMachine',\n initial: TaskState.IDLE,\n context: createInitialContext(uiControlConfig, TaskState.IDLE),\n on: {\n [TaskEvent.RECORDING_STARTED]: {\n actions: ['updateTaskData', 'emitTaskRecordingStarted'],\n },\n [TaskEvent.CONTACT_UPDATED]: {\n actions: ['updateTaskData', 'syncTaskDataFromEvent'],\n },\n [TaskEvent.CONTACT_OWNER_CHANGED]: {\n actions: ['updateTaskData', 'syncTaskDataFromEvent'],\n },\n // HYDRATE: Update task data from AgentContact event\n // Note: State restoration with transitions is handled in IDLE state.\n // This root-level handler is for when task is already in another state (just updates data).\n [TaskEvent.HYDRATE]: {\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n },\n states: {\n [TaskState.IDLE]: {\n on: {\n // HYDRATE: Restore state machine to correct state based on hydrated task data\n // This handles page refresh/reconnection scenarios where task needs to be restored\n // IMPORTANT: This MUST be in IDLE state (not root) because root-level events cannot\n // transition to child states in XState\n [TaskEvent.HYDRATE]: [\n {\n guard: guards.isInteractionTerminated,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskHydrate'],\n },\n {\n guard: guards.isInteractionConsulting,\n target: TaskState.CONSULTING,\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n {\n guard: guards.isInteractionHeld,\n target: TaskState.HELD,\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n {\n guard: guards.isInteractionConnected,\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n {\n guard: guards.isConferencingByParticipants,\n target: TaskState.CONFERENCING,\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n {\n // Default: just update data, stay in IDLE\n actions: ['updateTaskData', 'emitTaskHydrate'],\n },\n ],\n // AgentContactReserved (applicable for direct incoming/consult/transfer/outdial)\n [TaskEvent.TASK_INCOMING]: {\n target: TaskState.OFFERED,\n actions: ['initializeTask', 'emitTaskIncoming'],\n },\n\n // AgentOutboundFailed can arrive before TASK_INCOMING due to race conditions\n [TaskEvent.OUTBOUND_FAILED]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskOutdialFailed', 'emitTaskEnd'],\n },\n\n // EP-DN split-leg ordering can deliver AgentConsulting before HYDRATE/TASK_INCOMING.\n // Do not drop it in IDLE; bootstrap to CONSULTING using event taskData.\n [TaskEvent.CONSULTING_ACTIVE]: {\n target: TaskState.CONSULTING,\n actions: [\n 'setConsultInitiator',\n 'setConsultDestination',\n 'setConsultFromConference',\n 'setConsultAgentJoined',\n 'updateTaskData',\n 'emitTaskConsultAccepted',\n 'emitTaskConsulting',\n ],\n },\n },\n },\n\n [TaskState.OFFERED]: {\n on: {\n // AgentContactOffer\n [TaskEvent.TASK_OFFERED]: {\n actions: ['updateTaskData', 'emitTaskOfferContact', 'requestAutoAnswer'],\n },\n // AgentContactAssigned\n [TaskEvent.ASSIGN]: [\n {\n guard: guards.isConsultingAssignment,\n target: TaskState.CONSULTING,\n actions: ['updateTaskData', 'emitTaskConsultAccepted', 'emitTaskConsulting'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'emitTaskAssigned'],\n },\n ],\n // AgentOfferContactRONA\n [TaskEvent.RONA]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskReject'],\n },\n [TaskEvent.TASK_WRAPUP]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskEnd'],\n },\n [TaskEvent.CONTACT_ENDED]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskEnd'],\n },\n // This needs to be handled for all assign failed scenarios (contact, buddy)\n // [AgentContactAssignFailed, AgentCtqFailed, AgentBlindTransferFailed,\n // AgentVTeamTransferFailed, AgentConsultTransferFailed]\n [TaskEvent.ASSIGN_FAILED]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskReject'],\n },\n [TaskEvent.INVITE_FAILED]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskReject'],\n },\n [TaskEvent.OUTBOUND_FAILED]: [\n {\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskOutdialFailed', 'emitTaskWrapup'],\n },\n {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskOutdialFailed', 'emitTaskEnd'],\n },\n ],\n // AgentConsulting comes for received after the initial consult is accepted\n [TaskEvent.CONSULTING_ACTIVE]: [\n {\n target: TaskState.CONSULTING,\n actions: [\n 'setConsultAgentJoined',\n 'setConsultDestination',\n 'updateTaskData',\n 'emitTaskConsultAccepted',\n 'emitTaskConsulting',\n ],\n },\n ],\n // agentOfferConsult happens only on the receiver side of consult\n [TaskEvent.OFFER_CONSULT]: {\n actions: ['updateTaskData', 'emitTaskOfferConsult', 'requestAutoAnswer'],\n },\n // AgentConsultFailed - when consulted agent (Agent 2) doesn't answer (RONA or decline)\n // Clears the incoming consult notification by transitioning to TERMINATED\n [TaskEvent.CONSULT_FAILED]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskReject'],\n },\n // AgentConsultEnded - when consult initiator (Agent 1) ends the consult before\n // the consulted agent (Agent 2) accepts. Clears the incoming notification.\n [TaskEvent.CONSULT_END]: {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskReject'],\n },\n },\n },\n\n [TaskState.CONNECTED]: {\n on: {\n // AgentConsultConferenced / ParticipantJoinedConference can arrive while connected.\n [TaskEvent.CONFERENCE_START]: {\n target: TaskState.CONFERENCING,\n actions: [\n 'updateTaskData',\n 'syncTaskDataFromEvent',\n 'clearConsultState',\n 'emitTaskConferenceStarted',\n ],\n },\n // AgentConsulting may arrive while machine is CONNECTED (EP-DN/event ordering).\n // Derive consultInitiator from payload so controls are set correctly.\n [TaskEvent.CONSULTING_ACTIVE]: {\n target: TaskState.CONSULTING,\n actions: [\n 'setConsultInitiator',\n 'setConsultDestination',\n 'setConsultAgentJoined',\n 'updateTaskData',\n 'emitTaskConsultAccepted',\n 'emitTaskConsulting',\n ],\n },\n // AgentContactAssigned can be resent after consult transfers; keep context in sync\n [TaskEvent.ASSIGN]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'emitTaskAssigned'],\n },\n // Click of hold button\n [TaskEvent.HOLD_INITIATED]: {\n target: TaskState.HOLD_INITIATING,\n },\n // Remote hold from another login session (multi-login)\n [TaskEvent.HOLD_SUCCESS]: {\n target: TaskState.HELD,\n actions: ['updateTaskData', 'setHoldState', 'emitTaskHold'],\n },\n // Click of the consult button\n [TaskEvent.CONSULT]: {\n target: TaskState.CONSULT_INITIATING,\n actions: ['setConsultInitiator', 'setConsultDestination'],\n },\n // AgentConsultTransferred / AgentVTeamTransferred / AgentBlindTransferred\n [TaskEvent.TRANSFER_SUCCESS]: [\n {\n guard: guards.shouldWrapUpOrIsInitiator,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n // Receiver goes to connected as he receives transferSuccess event\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n [TaskEvent.TRANSFER_FAILED]: {\n actions: ['updateTaskData'],\n },\n // AgentContactEnded Event\n [TaskEvent.CONTACT_ENDED]: [\n {\n // Conference still active → CONFERENCING\n guard: guards.conferenceInProgressFromEvent,\n target: TaskState.CONFERENCING,\n actions: ['updateTaskData', 'emitTaskConferenceStarted', 'requestCleanup'],\n },\n {\n // Agent should wrap up → WRAPPING_UP\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskWrapup', 'requestCleanup'],\n },\n {\n // Consulted agent → TERMINATED\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskEnd'],\n },\n ],\n [TaskEvent.TASK_WRAPUP]: {\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskWrapup'],\n },\n [TaskEvent.PAUSE_RECORDING]: {\n actions: ['updateTaskData', 'setRecordingState', 'emitTaskRecordingPaused'],\n },\n [TaskEvent.RESUME_RECORDING]: {\n actions: ['updateTaskData', 'setRecordingState', 'emitTaskRecordingResumed'],\n },\n },\n },\n\n [TaskState.HOLD_INITIATING]: {\n on: {\n // AgentContactHeld Event\n [TaskEvent.HOLD_SUCCESS]: {\n target: TaskState.HELD,\n actions: ['updateTaskData', 'setHoldState', 'emitTaskHold'],\n },\n // AgentContactHoldFailed Event\n [TaskEvent.HOLD_FAILED]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData'],\n },\n },\n },\n\n [TaskState.HELD]: {\n on: {\n // Conference can be merged while this agent is in held state after refresh/recovery.\n [TaskEvent.CONFERENCE_START]: {\n target: TaskState.CONFERENCING,\n actions: [\n 'updateTaskData',\n 'syncTaskDataFromEvent',\n 'clearConsultState',\n 'emitTaskConferenceStarted',\n ],\n },\n [TaskEvent.PAUSE_RECORDING]: {\n actions: ['updateTaskData', 'setRecordingState', 'emitTaskRecordingPaused'],\n },\n [TaskEvent.RESUME_RECORDING]: {\n actions: ['updateTaskData', 'setRecordingState', 'emitTaskRecordingResumed'],\n },\n // Click of the unhold button\n [TaskEvent.UNHOLD_INITIATED]: {\n target: TaskState.RESUME_INITIATING,\n },\n // Remote resume from another login session (multi-login)\n [TaskEvent.UNHOLD_SUCCESS]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'setHoldState', 'emitTaskResume'],\n },\n // Click of the consult button\n [TaskEvent.CONSULT]: {\n target: TaskState.CONSULT_INITIATING,\n actions: ['setConsultInitiator', 'setConsultDestination'],\n },\n // TODO: This may not be a valid transition, need to be removed\n // AgentConsultTransferred / AgentVTeamTransferred / AgentBlindTransferred\n [TaskEvent.TRANSFER_SUCCESS]: [\n {\n guard: guards.shouldWrapUpOrIsInitiator,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskWrapup'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n [TaskEvent.TRANSFER_FAILED]: {\n actions: ['updateTaskData'],\n },\n [TaskEvent.CONTACT_ENDED]: [\n {\n guard: guards.conferenceInProgressFromEvent,\n target: TaskState.CONFERENCING,\n actions: ['updateTaskData', 'emitTaskConferenceStarted', 'requestCleanup'],\n },\n {\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskWrapup', 'requestCleanup'],\n },\n {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskEnd'],\n },\n ],\n // TODO: This may not be a valid transition, this needs to be checked as well\n [TaskEvent.TASK_WRAPUP]: {\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'emitTaskWrapup'],\n },\n },\n },\n\n [TaskState.RESUME_INITIATING]: {\n on: {\n [TaskEvent.UNHOLD_SUCCESS]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'setHoldState', 'emitTaskResume'],\n },\n [TaskEvent.UNHOLD_FAILED]: {\n target: TaskState.HELD,\n },\n },\n },\n\n [TaskState.CONSULT_INITIATING]: {\n on: {\n [TaskEvent.HOLD_SUCCESS]: {\n actions: ['updateTaskData'],\n },\n [TaskEvent.HOLD_FAILED]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'handleConsultFailed'],\n },\n // AgentConsulting\n // NOTE: Don't set consultDestinationAgentJoined here - wait for CONSULTING_ACTIVE\n [TaskEvent.CONSULT_SUCCESS]: {\n target: TaskState.CONSULTING,\n actions: ['updateTaskData', 'setConsultInitiator'],\n },\n // AgentConsultFailed, API Failures, AgentCtqFailed\n [TaskEvent.CONSULT_FAILED]: [\n {\n // Consult from conference → back to CONFERENCING\n guard: ({context}) => context.consultFromConference === true,\n target: TaskState.CONFERENCING,\n actions: ['updateTaskData', 'handleConsultFailed'],\n },\n {\n guard: guards.isPrimaryMediaOnHold,\n target: TaskState.HELD,\n actions: ['updateTaskData', 'handleConsultFailed'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'handleConsultFailed'],\n },\n ],\n // AgentCtqCancelled Event\n [TaskEvent.CTQ_CANCEL]: [\n {\n guard: guards.isPrimaryMediaOnHold,\n target: TaskState.HELD,\n actions: ['updateTaskData', 'clearConsultState'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n },\n },\n\n [TaskState.CONSULTING]: {\n on: {\n // AgentConsulting updates consulted agent arrival\n [TaskEvent.CONSULTING_ACTIVE]: {\n actions: [\n 'setConsultAgentJoined',\n 'setConsultDestination',\n 'updateTaskData',\n 'emitTaskConsulting',\n ],\n },\n\n // AgentConsultEnded\n [TaskEvent.CONSULT_END]: [\n {\n // Initiator returning to conference only while conference is still active.\n guard: ({context, event}) =>\n context.consultInitiator === true &&\n guards.conferenceInProgressFromEvent({context, event}),\n target: TaskState.CONFERENCING,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n // Conference consult ended after conference downgrade while main leg is held.\n guard: ({context, event}) =>\n context.consultInitiator === true &&\n context.consultFromConference === true &&\n !guards.conferenceInProgressFromEvent({context, event}) &&\n guards.isConferenceHoldParticipantFromEvent({context, event}),\n target: TaskState.HELD,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n // Conference consult ended after conference downgrade while main leg is connected.\n guard: ({context, event}) =>\n context.consultInitiator === true &&\n context.consultFromConference === true &&\n !guards.conferenceInProgressFromEvent({context, event}) &&\n !guards.isConferenceHoldParticipantFromEvent({context, event}),\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n // Initiator already switched back to the main/customer leg\n guard: ({context}) =>\n context.consultInitiator === true && context.consultCallHeld === true,\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n // Interaction terminated during consult (customer left) → WRAPPING_UP\n guard: ({context, event}) => {\n // if (context.consultInitiator !== true) return false;\n // const taskData = getTaskDataFromEvent(event);\n const taskData = getTaskDataFromEvent(event);\n const cpd = taskData?.interaction?.callProcessingDetails;\n if (cpd?.hasCustomerLeft !== 'true') return false;\n\n return (\n taskData?.interaction?.isTerminated === true &&\n shouldWrapUpForThisAgent(context, taskData)\n );\n },\n target: TaskState.WRAPPING_UP,\n actions: [\n 'updateTaskData',\n 'markEnded',\n 'clearConsultState',\n 'emitTaskWrapup',\n 'requestCleanup',\n ],\n },\n {\n // Initiator (no conference) → HELD\n guard: ({context}) => context.consultInitiator === true,\n target: TaskState.HELD,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n // Consulted agent → TERMINATED\n target: TaskState.TERMINATED,\n actions: ['updateTaskData'],\n },\n ],\n\n // Switch between consult and main call (UI-driven toggle)\n [TaskEvent.SWITCH_TO_MAIN_CALL]: {\n actions: ['handleSwitchToMainCall', 'emitTaskSwitchCall'],\n },\n [TaskEvent.SWITCH_TO_CONSULT]: {\n actions: ['handleSwitchToConsult', 'emitTaskSwitchCall'],\n },\n [TaskEvent.HOLD_SUCCESS]: {\n actions: ['updateTaskData', 'setHoldState', 'emitTaskHold'],\n },\n [TaskEvent.UNHOLD_SUCCESS]: {\n actions: ['updateTaskData', 'setHoldState', 'emitTaskResume'],\n },\n\n [TaskEvent.TRANSFER_SUCCESS]: [\n {\n guard: guards.shouldWrapUpOrIsInitiator,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n [TaskEvent.TRANSFER_FAILED]: {\n actions: ['updateTaskData'],\n },\n [TaskEvent.TRANSFER_CONFERENCE]: {\n // Track that this agent initiated the conference transfer so we can\n // apply the correct lifecycle transition when success arrives.\n actions: ['setTransferConferenceRequested', 'emitTaskTransferConference'],\n },\n [TaskEvent.TRANSFER_CONFERENCE_SUCCESS]: [\n {\n guard: ({context}) => context.transferConferenceRequested !== true,\n actions: [\n 'updateTaskData',\n 'handleTransferConferenceSuccess',\n 'clearTransferConferenceRequested',\n ],\n },\n {\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: [\n 'updateTaskData',\n 'markEnded',\n 'clearConsultState',\n 'handleTransferConferenceSuccess',\n 'clearTransferConferenceRequested',\n 'emitTaskWrapup',\n ],\n },\n {\n // Non-initiator (consulted agent) stays in CONFERENCING\n guard: ({context}) => !context.consultInitiator,\n target: TaskState.CONFERENCING,\n actions: [\n 'updateTaskData',\n 'clearConsultState',\n 'handleTransferConferenceSuccess',\n 'clearTransferConferenceRequested',\n ],\n },\n {\n target: TaskState.TERMINATED,\n actions: [\n 'updateTaskData',\n 'markEnded',\n 'clearConsultState',\n 'handleTransferConferenceSuccess',\n 'clearTransferConferenceRequested',\n 'emitTaskEnd',\n ],\n },\n ],\n [TaskEvent.TRANSFER_CONFERENCE_FAILED]: {\n actions: ['clearTransferConferenceRequested', 'emitTaskTransferConferenceFailed'],\n },\n\n // AgentContactAssigned - receiver side becomes connected to customer\n [TaskEvent.ASSIGN]: {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'emitTaskAssigned'],\n },\n // AgentContactEnded\n [TaskEvent.CONTACT_ENDED]: {\n target: TaskState.WRAPPING_UP,\n actions: [\n 'updateTaskData',\n 'markEnded',\n 'clearConsultState',\n 'emitTaskWrapup',\n 'requestCleanup',\n ],\n },\n [TaskEvent.TASK_WRAPUP]: {\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n [TaskEvent.MERGE_TO_CONFERENCE]: {\n target: TaskState.CONF_INITIATING,\n },\n // AgentConsultConferenced, ParticipantJoinedConference\n [TaskEvent.CONFERENCE_START]: {\n target: TaskState.CONFERENCING,\n actions: [\n 'updateTaskData',\n 'syncTaskDataFromEvent',\n 'handleConferenceStarted',\n 'clearConsultState',\n ],\n },\n },\n },\n\n [TaskState.CONF_INITIATING]: {\n on: {\n // AgentConsultConferenced, AgentConsultConferencing, ParticipantJoinedConference\n [TaskEvent.CONFERENCE_START]: {\n target: TaskState.CONFERENCING,\n actions: [\n 'updateTaskData',\n 'syncTaskDataFromEvent',\n 'handleConferenceStarted',\n 'clearConsultState',\n ],\n },\n // AgentConsultConferenceFailed\n [TaskEvent.CONFERENCE_FAILED]: {\n target: TaskState.CONSULTING,\n actions: ['handleConferenceFailed', 'emitTaskConferenceFailed'],\n },\n // AgentConsultEnded while conference is initiating (end call before conference completes)\n [TaskEvent.CONSULT_END]: [\n {\n guard: ({event}) => {\n const taskData = getTaskDataFromEvent(event);\n\n return taskData?.interaction?.isTerminated === true;\n },\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n },\n },\n\n [TaskState.CONFERENCING]: {\n on: {\n [TaskEvent.CONFERENCE_START]: {\n actions: [\n 'updateTaskData',\n 'syncTaskDataFromEvent',\n 'clearConsultState',\n 'emitTaskConferenceStarted',\n ],\n },\n [TaskEvent.EXIT_CONFERENCE_SUCCESS]: [\n {\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskEnd'],\n },\n ],\n\n // Needed as all agents in conference get this event, hence we need to clear the consult state\n [TaskEvent.CONSULT_END]: [\n {\n guard: ({context, event}) => {\n const taskData = getTaskDataFromEvent(event);\n\n return (\n taskData?.interaction?.isTerminated === true &&\n shouldWrapUpForThisAgent(context, taskData)\n );\n },\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n actions: ['updateTaskData', 'clearConsultState'],\n },\n ],\n\n [TaskEvent.HOLD_SUCCESS]: [\n {\n // Conference already downgraded (no other agents) and backend hold arrives.\n // Move to HELD so the UI renders resume action.\n guard: guards.shouldDowngradeConferenceToConnected,\n target: TaskState.HELD,\n actions: ['updateTaskData', 'setHoldState', 'emitTaskHold'],\n },\n {\n actions: ['updateTaskData', 'setHoldState', 'emitTaskHold'],\n },\n ],\n [TaskEvent.UNHOLD_SUCCESS]: [\n {\n // Conference already downgraded (no other agents) and backend unhold arrives.\n // Move to CONNECTED so hold action is available again.\n guard: guards.shouldDowngradeConferenceToConnected,\n target: TaskState.CONNECTED,\n actions: [\n 'updateTaskData',\n 'syncTaskDataFromEvent',\n 'setHoldState',\n 'emitTaskResume',\n ],\n },\n {\n actions: [\n 'updateTaskData',\n 'syncTaskDataFromEvent',\n 'setHoldState',\n 'emitTaskResume',\n ],\n },\n ],\n\n // Start a new consult from within an active conference\n [TaskEvent.CONSULT]: {\n target: TaskState.CONSULT_INITIATING,\n actions: ['setConsultInitiator', 'setConsultDestination', 'setConsultFromConference'],\n },\n\n // Participant leaves - handle conference downgrade scenarios\n [TaskEvent.PARTICIPANT_LEAVE]: [\n {\n // Only the leaving agent should wrap up → WRAPPING_UP\n guard: (params) =>\n guards.didCurrentAgentLeaveConference(params) && guards.shouldWrapUp(params),\n target: TaskState.WRAPPING_UP,\n actions: [\n 'updateTaskData',\n 'handleParticipantLeft',\n 'markEnded',\n 'clearConsultState',\n 'emitTaskParticipantLeft',\n 'emitTaskWrapup',\n ],\n },\n {\n // Only the leaving agent (no wrapup) → TERMINATED\n guard: guards.didCurrentAgentLeaveConference,\n target: TaskState.TERMINATED,\n actions: [\n 'updateTaskData',\n 'handleParticipantLeft',\n 'markEnded',\n 'clearConsultState',\n 'emitTaskParticipantLeft',\n 'emitTaskEnd',\n ],\n },\n {\n // Conference downgraded, customer present → CONNECTED\n guard: (params) =>\n !guards.didCurrentAgentLeaveConference(params) &&\n guards.shouldDowngradeConferenceToConnected(params),\n target: TaskState.CONNECTED,\n actions: [\n 'updateTaskData',\n 'handleParticipantLeft',\n 'clearConsultState',\n 'emitTaskParticipantLeft',\n 'emitTaskConferenceEnded',\n ],\n },\n {actions: ['updateTaskData', 'handleParticipantLeft', 'emitTaskParticipantLeft']},\n ],\n\n [TaskEvent.TRANSFER_CONFERENCE]: {\n actions: ['setTransferConferenceRequested', 'emitTaskTransferConference'],\n },\n [TaskEvent.TRANSFER_CONFERENCE_SUCCESS]: [\n {\n // Not initiated by this agent → just refresh backend state.\n guard: ({context}) => context.transferConferenceRequested !== true,\n actions: [\n 'updateTaskData',\n 'handleTransferConferenceSuccess',\n 'clearTransferConferenceRequested',\n ],\n },\n ],\n [TaskEvent.TRANSFER_CONFERENCE_FAILED]: {\n actions: ['clearTransferConferenceRequested', 'emitTaskTransferConferenceFailed'],\n },\n\n // Conference ends explicitly\n [TaskEvent.CONFERENCE_END]: [\n {\n // Agent who should wrap up → WRAPPING_UP\n guard: guards.shouldWrapUp,\n target: TaskState.WRAPPING_UP,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskWrapup'],\n },\n {\n // Customer still in call → CONNECTED\n guard: ({context, event}) => {\n if (context.exitingConference === true) return false;\n const taskData = (event as any)?.taskData ?? context.taskData;\n if (!taskData?.interaction) return false;\n const mainCallId = taskData.interaction.mainInteractionId || taskData.interactionId;\n if (!mainCallId) return false;\n\n return getIsCustomerInCall(taskData.interaction, mainCallId);\n },\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConferenceEnded'],\n },\n {\n // Otherwise → TERMINATED\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'clearConsultState', 'emitTaskEnd'],\n },\n ],\n\n // CONTACT_ENDED in conference\n [TaskEvent.CONTACT_ENDED]: [\n {\n // Conference still active → stay\n actions: ['updateTaskData', 'requestCleanup'],\n },\n ],\n },\n },\n\n [TaskState.WRAPPING_UP]: {\n // Only emit wrapup event on entry - task:end should only be emitted when COMPLETED\n entry: ['emitTaskWrapup'],\n on: {\n // AgentWrappedup Event\n [TaskEvent.WRAPUP_COMPLETE]: {\n target: TaskState.COMPLETED,\n actions: ['updateTaskData'],\n },\n },\n },\n\n [TaskState.COMPLETED]: {\n type: 'final' as const,\n entry: ['emitTaskWrappedup', 'cleanupResources'],\n },\n\n [TaskState.TERMINATED]: {\n type: 'final' as const,\n entry: ['cleanupResources'],\n },\n },\n };\n}\n\n/**\n * Create a task state machine instance using only the built-in actions.\n * The resulting machine is ready for most consumers that rely on the default\n * context mutators declared in actions.ts.\n *\n * @param uiControlConfig - UI control configuration\n * @returns StateMachine instance for task management\n */\nexport function createTaskStateMachine(\n uiControlConfig: UIControlConfig,\n options?: {actions?: Partial<TaskActionsMap>}\n) {\n return taskStateMachineSetup.createMachine(getTaskStateMachineConfig(uiControlConfig)).provide({\n actions: {\n ...actions,\n ...(options?.actions ?? {}),\n },\n });\n}\n\nexport type TaskStateMachine = ReturnType<typeof createTaskStateMachine>;\n"],"mappings":"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","ignoreList":[]}
@@ -9,6 +9,7 @@ exports.updateUIControls = updateUIControls;
9
9
  var _xstate = require("xstate");
10
10
  var _constants = require("./constants");
11
11
  var _uiControlsComputer = require("./uiControlsComputer");
12
+ var _TaskUtils = require("../TaskUtils");
12
13
  var _guards = require("./guards");
13
14
  /**
14
15
  * Task State Machine Actions - Action implementations executed during state transitions
@@ -53,13 +54,80 @@ const deriveRecordingState = taskData => {
53
54
  }
54
55
  return update;
55
56
  };
57
+ const isActiveConsultState = (taskData, selfAgentId) => {
58
+ if (taskData?.interaction?.state === _constants.INTERACTION_STATE.CONSULTING) return true;
59
+ if (selfAgentId) {
60
+ const selfParticipant = taskData?.interaction?.participants?.[selfAgentId];
61
+ const hasConsultMedia = Object.values(taskData?.interaction?.media ?? {}).some(media => media?.mType === _constants.MEDIA_TYPE_CONSULT);
62
+ const isPendingOrActiveSelfConsult = selfParticipant?.consultState === _constants.CONSULT_STATE.CONSULTING || selfParticipant?.consultState === 'consultInitiated';
63
+ if (isPendingOrActiveSelfConsult && hasConsultMedia && taskData?.isConsulted === false) {
64
+ return true;
65
+ }
66
+ }
67
+ if (taskData?.interaction?.state === _constants.INTERACTION_STATE.POST_CALL && selfAgentId) {
68
+ const selfParticipant = taskData.interaction?.participants?.[selfAgentId];
69
+ const hasConsultMedia = Object.values(taskData.interaction?.media ?? {}).some(media => media?.mType === _constants.MEDIA_TYPE_CONSULT);
70
+ if (selfParticipant?.consultState === _constants.CONSULT_STATE.CONSULTING && hasConsultMedia) return true;
71
+ }
72
+ return false;
73
+ };
74
+ const isSelfConsultingOrPending = (taskData, selfAgentId) => {
75
+ if (!taskData || !selfAgentId) return false;
76
+ const selfParticipant = taskData?.interaction?.participants?.[selfAgentId];
77
+ return selfParticipant?.consultState === _constants.CONSULT_STATE.CONSULTING || selfParticipant?.consultState === 'consultInitiated';
78
+ };
79
+ const hasJoinedConsultDestination = taskData => {
80
+ if (!taskData?.interaction) return false;
81
+ const participants = taskData.interaction.participants;
82
+ const cpd = taskData.interaction.callProcessingDetails;
83
+ const backendSaysJoined = cpd?.consultDestinationAgentJoined === 'true';
84
+ if (backendSaysJoined) return true;
85
+ if (!participants) return false;
86
+ return Object.values(participants).some(p => {
87
+ if (!p || p.isConsulted !== true || p.hasLeft) return false;
88
+ return p.hasJoined === true || p.consultState === _constants.CONSULT_STATE.CONSULTING;
89
+ });
90
+ };
91
+ const deriveConsultCallHeldFromTaskData = taskData => {
92
+ if (!taskData?.interaction) return undefined;
93
+ const eventType = taskData.type;
94
+ if (eventType === 'AgentContactHeld') return true;
95
+ if (eventType === 'AgentContactUnheld') return false;
96
+ const consultMediaId = taskData.consultMediaResourceId;
97
+ const consultMedia = consultMediaId ? taskData.interaction.media?.[consultMediaId] : Object.values(taskData.interaction.media ?? {}).find(m => m?.mType === _constants.MEDIA_TYPE_CONSULT);
98
+ if (!consultMedia) return undefined;
99
+ return Boolean(consultMedia.isHold);
100
+ };
101
+ const getTaskStateForUiControls = (taskData, selfAgentId) => {
102
+ if (!taskData?.interaction) {
103
+ return _constants.TaskState.IDLE;
104
+ }
105
+ if (taskData.interaction.isTerminated === true) {
106
+ return _constants.TaskState.WRAPPING_UP;
107
+ }
108
+ if (isActiveConsultState(taskData, selfAgentId)) {
109
+ return _constants.TaskState.CONSULTING;
110
+ }
111
+ if (taskData.interaction.state === _constants.INTERACTION_STATE.CONFERENCE || (0, _TaskUtils.getIsConferenceInProgress)(taskData)) {
112
+ return _constants.TaskState.CONFERENCING;
113
+ }
114
+ const mainMediaId = taskData.interaction.mainInteractionId || taskData.interactionId;
115
+ const isMainHeld = Boolean(mainMediaId && taskData.interaction.media?.[mainMediaId]?.isHold === true);
116
+ if (taskData.interaction.state === 'hold' || isMainHeld) {
117
+ return _constants.TaskState.HELD;
118
+ }
119
+ return _constants.TaskState.CONNECTED;
120
+ };
56
121
  const deriveTaskDataUpdates = (context, taskData) => taskData ? (() => {
57
122
  const updates = {
58
123
  taskData,
59
124
  ...deriveRecordingState(taskData)
60
125
  };
61
126
  const selfAgentId = context.uiControlConfig.agentId ?? taskData?.agentId;
62
- const consultingActive = taskData?.interaction?.state === _constants.INTERACTION_STATE.CONSULTING || (0, _guards.hasActiveConsultInPostCall)(taskData, selfAgentId);
127
+ const consultingActive = isActiveConsultState(taskData, selfAgentId) || (0, _guards.hasActiveConsultInPostCall)(taskData, selfAgentId);
128
+ const conferenceFromPayload = taskData?.interaction?.state === _constants.INTERACTION_STATE.CONFERENCE || (0, _TaskUtils.getIsConferenceInProgress)(taskData);
129
+ const selfConsultingOrPending = isSelfConsultingOrPending(taskData, selfAgentId);
130
+ const inferredConsultingInitiator = selfConsultingOrPending && taskData?.isConsulted === false;
63
131
  if (taskData.destAgentId) {
64
132
  const isEpDnWithStoredId = context.consultDestinationType === 'entryPoint' && context.consultDestinationAgentId;
65
133
  if (!isEpDnWithStoredId) {
@@ -73,30 +141,34 @@ const deriveTaskDataUpdates = (context, taskData) => taskData ? (() => {
73
141
  const consultInitiator = determineConsultInitiator(taskData, selfAgentId);
74
142
  if (consultInitiator !== undefined) {
75
143
  updates.consultInitiator = consultInitiator;
76
- } else if (consultingActive && taskData.isConsulted === false) {
144
+ } else if (inferredConsultingInitiator || consultingActive && taskData.isConsulted === false) {
77
145
  updates.consultInitiator = true;
78
146
  }
79
147
  }
148
+ const effectiveConsultInitiator = updates.consultInitiator ?? context.consultInitiator;
149
+ if (effectiveConsultInitiator && conferenceFromPayload && (consultingActive || selfConsultingOrPending || Boolean(taskData?.consultMediaResourceId))) {
150
+ updates.consultFromConference = true;
151
+ }
80
152
  if (consultingActive && taskData.interaction) {
81
- if (!context.consultDestinationAgentJoined) {
82
- const hasJoinedConsultee = Boolean(taskData.interaction.participants && Object.values(taskData.interaction.participants).some(p => p?.isConsulted === true && !p?.hasLeft));
83
- const cpd = taskData.interaction?.callProcessingDetails;
84
- const backendSaysJoined = cpd?.consultDestinationAgentJoined === 'true';
85
- if (hasJoinedConsultee || backendSaysJoined) updates.consultDestinationAgentJoined = true;
86
- }
153
+ const joinedConsultee = hasJoinedConsultDestination(taskData);
154
+ if (joinedConsultee) updates.consultDestinationAgentJoined = true;
87
155
  if (!context.consultDestinationType && !updates.consultDestinationType) {
88
156
  const hasEpDnParticipant = Boolean(taskData.interaction.participants && Object.values(taskData.interaction.participants).some(p => p?.pType === 'EP-DN' && !p?.hasLeft));
89
157
  if (hasEpDnParticipant) updates.consultDestinationType = 'entryPoint';
90
158
  }
91
- const effectiveConsultInitiator = updates.consultInitiator ?? context.consultInitiator;
92
159
  if (effectiveConsultInitiator) {
93
- const consultMediaId = taskData.consultMediaResourceId;
94
- const consultMedia = consultMediaId ? taskData.interaction.media?.[consultMediaId] : Object.values(taskData.interaction.media ?? {}).find(m => m?.mType === 'consult');
95
- if (consultMedia) {
96
- updates.consultCallHeld = Boolean(consultMedia.isHold);
160
+ const consultCallHeld = deriveConsultCallHeldFromTaskData(taskData);
161
+ if (consultCallHeld !== undefined) {
162
+ updates.consultCallHeld = consultCallHeld;
97
163
  }
98
164
  }
99
165
  }
166
+ const nextContext = {
167
+ ...context,
168
+ ...updates
169
+ };
170
+ const inferredState = getTaskStateForUiControls(taskData, selfAgentId);
171
+ updates.uiControls = (0, _uiControlsComputer.computeUIControls)(inferredState, nextContext, taskData);
100
172
  return updates;
101
173
  })() : {};
102
174
  const getTaskDataFromEvent = event => event && typeof event === 'object' ? event.taskData : undefined;
@@ -1 +1 @@
1
- {"version":3,"names":["_xstate","require","_constants","_uiControlsComputer","_guards","determineConsultInitiator","taskData","selfAgentId","undefined","consultingAgentId","isConsulted","deriveRecordingState","callProcessingDetails","interaction","update","recordingStarted","recordInProgress","isPaused","recordingControlsAvailable","recordingInProgress","deriveTaskDataUpdates","context","updates","uiControlConfig","agentId","consultingActive","state","INTERACTION_STATE","CONSULTING","hasActiveConsultInPostCall","destAgentId","isEpDnWithStoredId","consultDestinationType","consultDestinationAgentId","destinationType","consultInitiator","consultDestinationAgentJoined","hasJoinedConsultee","Boolean","participants","Object","values","some","p","hasLeft","cpd","backendSaysJoined","hasEpDnParticipant","pType","effectiveConsultInitiator","consultMediaId","consultMediaResourceId","consultMedia","media","find","m","mType","consultCallHeld","isHold","getTaskDataFromEvent","event","createInitialContext","initialState","TaskState","IDLE","baseContext","exitingConference","consultFromConference","transferConferenceRequested","uiControls","getDefaultUIControls","computeUIControls","updateUIControls","currentState","assign","actions","exports","initializeTask","updateTaskData","setConsultInitiator","type","TaskEvent","CONSULT","handleConsultFailed","handleConferenceStarted","setConsultDestination","destination","setConsultFromConference","forceConsultInitiator","setConsultAgentJoined","CONSULTING_ACTIVE","eventValue","setRecordingState","PAUSE_RECORDING","RESUME_RECORDING","clearConsultState","setTransferConferenceRequested","clearTransferConferenceRequested","setConsultCallHeld","clearConsultCallHeld","handleSwitchToMainCall","handleSwitchToConsult","handleConferenceFailed","handleParticipantLeft","setExitingConference","handleTransferConferenceSuccess","setHoldState","HOLD_SUCCESS","UNHOLD_SUCCESS","mediaResourceId","mediaEntry","updatedMedia","isConsultMedia","markEnded","requestAutoAnswer","requestCleanup","cleanupResources","emitTaskIncoming","emitTaskHydrate","emitTaskOfferContact","emitTaskAssigned","emitTaskHold","emitTaskResume","emitTaskEnd","emitTaskOfferConsult","emitTaskConsultCreated","emitTaskConsulting","emitTaskConsultAccepted","emitTaskConsultEnd","emitTaskReject","emitTaskWrapup","emitTaskRecordingStarted","emitTaskRecordingPaused","emitTaskRecordingResumed","emitTaskWrappedup","emitTaskParticipantLeft","emitTaskConferenceStarted","emitTaskConferenceEnded","emitTaskExitConference","emitTaskTransferConference","emitTaskSwitchCall","emitTaskConferenceFailed","emitTaskTransferConferenceFailed","emitTaskOutdialFailed"],"sources":["actions.ts"],"sourcesContent":["/**\n * Task State Machine Actions - Action implementations executed during state transitions\n */\n\nimport {assign} from 'xstate';\nimport {\n TaskContext,\n TaskEventPayload,\n UIControlConfig,\n TaskActionsMap,\n TaskActionArgs,\n RecordingStateUpdate,\n} from './types';\nimport {TaskEvent, TaskState, INTERACTION_STATE} from './constants';\nimport {DestinationType, TaskData} from '../types';\nimport {computeUIControls, getDefaultUIControls} from './uiControlsComputer';\nimport {hasActiveConsultInPostCall} from './guards';\n\nconst determineConsultInitiator = (\n taskData: TaskData | undefined,\n selfAgentId: string | undefined\n): boolean | undefined => {\n if (!selfAgentId) return undefined;\n\n if (taskData?.consultingAgentId) {\n return taskData.consultingAgentId === selfAgentId;\n }\n\n if (taskData?.isConsulted === true) return false;\n\n return undefined;\n};\n\nconst deriveRecordingState = (taskData?: TaskData | null): RecordingStateUpdate => {\n const callProcessingDetails = taskData?.interaction?.callProcessingDetails;\n\n if (!callProcessingDetails) {\n return {};\n }\n\n const update: RecordingStateUpdate = {};\n const {recordingStarted, recordInProgress, isPaused} = callProcessingDetails as {\n recordingStarted?: boolean;\n recordInProgress?: boolean;\n isPaused?: boolean;\n };\n\n if (recordingStarted !== undefined) {\n update.recordingControlsAvailable = recordingStarted;\n if (!recordingStarted) {\n update.recordingInProgress = false;\n }\n }\n\n if (recordInProgress !== undefined) {\n update.recordingControlsAvailable = recordInProgress || recordingStarted || false;\n update.recordingInProgress = recordInProgress;\n }\n\n if (\n update.recordingControlsAvailable === undefined &&\n update.recordingInProgress === undefined &&\n recordingStarted\n ) {\n update.recordingControlsAvailable = true;\n update.recordingInProgress = true;\n }\n\n if (isPaused !== undefined) {\n update.recordingControlsAvailable = true;\n update.recordingInProgress = !isPaused;\n }\n\n return update;\n};\n\nconst deriveTaskDataUpdates = (context: TaskContext, taskData: TaskData | undefined) =>\n taskData\n ? (() => {\n const updates: Partial<TaskContext> = {\n taskData,\n ...deriveRecordingState(taskData),\n };\n\n const selfAgentId = context.uiControlConfig.agentId ?? taskData?.agentId;\n const consultingActive =\n taskData?.interaction?.state === INTERACTION_STATE.CONSULTING ||\n hasActiveConsultInPostCall(taskData, selfAgentId);\n\n if (taskData.destAgentId) {\n const isEpDnWithStoredId =\n context.consultDestinationType === 'entryPoint' && context.consultDestinationAgentId;\n if (!isEpDnWithStoredId) {\n updates.consultDestinationAgentId = taskData.destAgentId;\n }\n }\n if (consultingActive && taskData.destinationType) {\n updates.consultDestinationType = taskData.destinationType as DestinationType;\n }\n\n if (!context.consultInitiator) {\n const consultInitiator = determineConsultInitiator(taskData, selfAgentId);\n if (consultInitiator !== undefined) {\n updates.consultInitiator = consultInitiator;\n } else if (consultingActive && taskData.isConsulted === false) {\n updates.consultInitiator = true;\n }\n }\n\n if (consultingActive && taskData.interaction) {\n if (!context.consultDestinationAgentJoined) {\n const hasJoinedConsultee = Boolean(\n taskData.interaction.participants &&\n Object.values(taskData.interaction.participants).some(\n (p: any) => p?.isConsulted === true && !p?.hasLeft\n )\n );\n const cpd = taskData.interaction?.callProcessingDetails;\n const backendSaysJoined = cpd?.consultDestinationAgentJoined === 'true';\n if (hasJoinedConsultee || backendSaysJoined)\n updates.consultDestinationAgentJoined = true;\n }\n\n if (!context.consultDestinationType && !updates.consultDestinationType) {\n const hasEpDnParticipant = Boolean(\n taskData.interaction.participants &&\n Object.values(taskData.interaction.participants).some(\n (p: any) => p?.pType === 'EP-DN' && !p?.hasLeft\n )\n );\n if (hasEpDnParticipant) updates.consultDestinationType = 'entryPoint' as any;\n }\n\n const effectiveConsultInitiator = updates.consultInitiator ?? context.consultInitiator;\n if (effectiveConsultInitiator) {\n const consultMediaId = taskData.consultMediaResourceId;\n const consultMedia: any = consultMediaId\n ? taskData.interaction.media?.[consultMediaId]\n : Object.values(taskData.interaction.media ?? {}).find(\n (m: any) => m?.mType === 'consult'\n );\n if (consultMedia) {\n updates.consultCallHeld = Boolean(consultMedia.isHold);\n }\n }\n }\n\n return updates;\n })()\n : {};\n\nconst getTaskDataFromEvent = (event?: TaskEventPayload): TaskData | undefined =>\n event && typeof event === 'object' ? (event as any).taskData : undefined;\n\nexport function createInitialContext(\n uiControlConfig: UIControlConfig,\n initialState: TaskState = TaskState.IDLE\n): TaskContext {\n const baseContext: TaskContext = {\n taskData: null,\n consultInitiator: false,\n exitingConference: false,\n consultFromConference: false,\n transferConferenceRequested: false,\n consultDestinationType: null,\n consultDestinationAgentId: null,\n consultDestinationAgentJoined: false,\n consultCallHeld: false,\n recordingControlsAvailable: false,\n recordingInProgress: false,\n uiControlConfig,\n uiControls: getDefaultUIControls(),\n };\n\n baseContext.uiControls = computeUIControls(initialState, baseContext);\n\n return baseContext;\n}\n\nexport function updateUIControls(currentState: TaskState) {\n return assign(({context}: TaskActionArgs) => ({\n uiControls: computeUIControls(currentState, context),\n }));\n}\n\nexport const actions: TaskActionsMap = {\n initializeTask: assign(({context, event}: {context: TaskContext; event: TaskEventPayload}) => {\n return {\n consultInitiator: false,\n exitingConference: false,\n consultDestinationType: null,\n consultDestinationAgentJoined: false,\n ...deriveTaskDataUpdates(context, getTaskDataFromEvent(event)),\n };\n }),\n\n /**\n * Update task data from ASSIGN event\n */\n updateTaskData: assign(({context, event}: TaskActionArgs) => {\n return deriveTaskDataUpdates(context, getTaskDataFromEvent(event));\n }),\n\n /**\n * Set consult initiator flag\n *\n * IMPORTANT: This action is called for CONSULT (user action) and CONSULT_CREATED (backend event).\n * For CONSULT (user action): The user explicitly clicked Consult, so they ARE the initiator.\n * For CONSULT_CREATED (backend event): Check taskData.isConsulted to determine if this agent\n * is the initiator. If isConsulted === true, this is Agent B (the consulted party), NOT the initiator.\n *\n * This prevents all agents in a conference from becoming consultInitiator when one agent\n * starts a new consult.\n */\n setConsultInitiator: assign(({event}: TaskActionArgs) => {\n const taskData = getTaskDataFromEvent(event);\n\n if (event.type === TaskEvent.CONSULT) return {consultInitiator: true};\n\n const selfAgentId = taskData?.agentId;\n const consultInitiator = determineConsultInitiator(taskData, selfAgentId);\n if (consultInitiator === true) return {consultInitiator: true};\n if (consultInitiator === false) return {consultInitiator: false};\n\n return {};\n }),\n\n handleConsultFailed: assign({consultDestinationAgentJoined: false, consultInitiator: false}),\n handleConferenceStarted: assign({consultInitiator: false}),\n\n setConsultDestination: assign(({event}: TaskActionArgs) => {\n if (!event || event.type !== TaskEvent.CONSULT) {\n return {};\n }\n\n const taskData = getTaskDataFromEvent(event);\n const consultDestinationType =\n 'destinationType' in event ? event.destinationType ?? null : null;\n const consultDestinationAgentId =\n ('destAgentId' in event ? event.destAgentId : null) ??\n ('destination' in event ? (event as any).destination : null) ??\n null;\n\n return {\n consultDestinationType,\n consultDestinationAgentId,\n consultDestinationAgentJoined: false,\n consultFromConference: false,\n taskData: {\n ...taskData,\n destAgentId: consultDestinationAgentId,\n },\n };\n }),\n\n setConsultFromConference: assign({consultFromConference: true}),\n\n forceConsultInitiator: assign({consultInitiator: true}),\n\n setConsultAgentJoined: assign(\n ({context, event}: {context: TaskContext; event: TaskEventPayload}) => {\n if (context.consultDestinationAgentJoined) {\n return {};\n }\n\n if (\n !event ||\n event.type !== TaskEvent.CONSULTING_ACTIVE ||\n !('consultDestinationAgentJoined' in event)\n ) {\n return {};\n }\n\n const eventValue = (event as {consultDestinationAgentJoined: boolean})\n .consultDestinationAgentJoined;\n\n return eventValue ? {consultDestinationAgentJoined: true} : {};\n }\n ),\n\n setRecordingState: assign(({event}: TaskActionArgs) => {\n if (!event || !('type' in event)) {\n return {};\n }\n\n if (event.type === TaskEvent.PAUSE_RECORDING) {\n return {\n recordingControlsAvailable: true,\n recordingInProgress: false,\n };\n }\n if (event.type === TaskEvent.RESUME_RECORDING) {\n return {\n recordingControlsAvailable: true,\n recordingInProgress: true,\n };\n }\n\n return {};\n }),\n\n clearConsultState: assign({\n consultDestinationType: null,\n consultDestinationAgentId: null,\n consultDestinationAgentJoined: false,\n consultInitiator: false,\n exitingConference: false,\n consultCallHeld: false,\n consultFromConference: false,\n transferConferenceRequested: false,\n }),\n\n setTransferConferenceRequested: assign({transferConferenceRequested: true}),\n clearTransferConferenceRequested: assign({transferConferenceRequested: false}),\n\n setConsultCallHeld: assign({consultCallHeld: true}),\n clearConsultCallHeld: assign({consultCallHeld: false}),\n handleSwitchToMainCall: assign({consultCallHeld: true}),\n handleSwitchToConsult: assign({consultCallHeld: false}),\n\n handleConferenceFailed: assign(({event}: TaskActionArgs) => {\n const taskData = getTaskDataFromEvent(event);\n\n return taskData ? {taskData} : {};\n }),\n handleParticipantLeft: assign(({event}: TaskActionArgs) => {\n const taskData = getTaskDataFromEvent(event);\n\n return taskData ? {taskData} : {};\n }),\n\n setExitingConference: assign({exitingConference: true}),\n\n handleTransferConferenceSuccess: assign(({event}: TaskActionArgs) => {\n const taskData = getTaskDataFromEvent(event);\n\n return taskData ? {taskData} : {};\n }),\n\n setHoldState: assign(({context, event}: TaskActionArgs) => {\n if (\n !event ||\n (event.type !== TaskEvent.HOLD_SUCCESS && event.type !== TaskEvent.UNHOLD_SUCCESS)\n ) {\n return {};\n }\n\n const mediaResourceId =\n 'mediaResourceId' in event\n ? (event as {mediaResourceId?: string}).mediaResourceId\n : undefined;\n\n if (!mediaResourceId) {\n return {};\n }\n\n const interaction = context.taskData?.interaction;\n const mediaEntry = interaction?.media?.[mediaResourceId];\n\n if (!interaction || !mediaEntry) {\n return {};\n }\n\n const updatedMedia = {\n ...interaction.media,\n [mediaResourceId]: {\n ...mediaEntry,\n isHold: event.type === TaskEvent.HOLD_SUCCESS,\n },\n };\n\n const updates: Partial<TaskContext> = {\n taskData: {\n ...(context.taskData as TaskData),\n interaction: {\n ...interaction,\n media: updatedMedia,\n },\n },\n };\n\n const consultMediaId = context.taskData?.consultMediaResourceId;\n const isConsultMedia = consultMediaId\n ? mediaResourceId === consultMediaId\n : mediaEntry?.mType === 'consult';\n\n if (isConsultMedia && context.consultInitiator) {\n updates.consultCallHeld = event.type === TaskEvent.HOLD_SUCCESS;\n }\n\n return updates;\n }),\n\n markEnded: assign(() => ({\n recordingControlsAvailable: false,\n recordingInProgress: false,\n })),\n\n requestAutoAnswer: () => undefined,\n requestCleanup: () => undefined,\n cleanupResources: () => undefined,\n\n // Event emitters - placeholders overridden by consumers\n emitTaskIncoming: () => undefined,\n emitTaskHydrate: () => undefined,\n emitTaskOfferContact: () => undefined,\n emitTaskAssigned: () => undefined,\n emitTaskHold: () => undefined,\n emitTaskResume: () => undefined,\n emitTaskEnd: () => undefined,\n emitTaskOfferConsult: () => undefined,\n emitTaskConsultCreated: () => undefined,\n emitTaskConsulting: () => undefined,\n emitTaskConsultAccepted: () => undefined,\n emitTaskConsultEnd: () => undefined,\n emitTaskReject: () => undefined,\n emitTaskWrapup: () => undefined,\n emitTaskRecordingStarted: () => undefined,\n emitTaskRecordingPaused: () => undefined,\n emitTaskRecordingResumed: () => undefined,\n emitTaskWrappedup: () => undefined,\n emitTaskParticipantLeft: () => undefined,\n emitTaskConferenceStarted: () => undefined,\n emitTaskConferenceEnded: () => undefined,\n emitTaskExitConference: () => undefined,\n emitTaskTransferConference: () => undefined,\n emitTaskSwitchCall: () => undefined,\n emitTaskConferenceFailed: () => undefined,\n emitTaskTransferConferenceFailed: () => undefined,\n emitTaskOutdialFailed: () => undefined,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_xstate","require","_constants","_uiControlsComputer","_TaskUtils","_guards","determineConsultInitiator","taskData","selfAgentId","undefined","consultingAgentId","isConsulted","deriveRecordingState","callProcessingDetails","interaction","update","recordingStarted","recordInProgress","isPaused","recordingControlsAvailable","recordingInProgress","isActiveConsultState","state","INTERACTION_STATE","CONSULTING","selfParticipant","participants","hasConsultMedia","Object","values","media","some","mType","MEDIA_TYPE_CONSULT","isPendingOrActiveSelfConsult","consultState","CONSULT_STATE","POST_CALL","isSelfConsultingOrPending","hasJoinedConsultDestination","cpd","backendSaysJoined","consultDestinationAgentJoined","p","hasLeft","hasJoined","deriveConsultCallHeldFromTaskData","eventType","type","consultMediaId","consultMediaResourceId","consultMedia","find","m","Boolean","isHold","getTaskStateForUiControls","TaskState","IDLE","isTerminated","WRAPPING_UP","CONFERENCE","getIsConferenceInProgress","CONFERENCING","mainMediaId","mainInteractionId","interactionId","isMainHeld","HELD","CONNECTED","deriveTaskDataUpdates","context","updates","uiControlConfig","agentId","consultingActive","hasActiveConsultInPostCall","conferenceFromPayload","selfConsultingOrPending","inferredConsultingInitiator","destAgentId","isEpDnWithStoredId","consultDestinationType","consultDestinationAgentId","destinationType","consultInitiator","effectiveConsultInitiator","consultFromConference","joinedConsultee","hasEpDnParticipant","pType","consultCallHeld","nextContext","inferredState","uiControls","computeUIControls","getTaskDataFromEvent","event","createInitialContext","initialState","baseContext","exitingConference","transferConferenceRequested","getDefaultUIControls","updateUIControls","currentState","assign","actions","exports","initializeTask","updateTaskData","setConsultInitiator","TaskEvent","CONSULT","handleConsultFailed","handleConferenceStarted","setConsultDestination","destination","setConsultFromConference","forceConsultInitiator","setConsultAgentJoined","CONSULTING_ACTIVE","eventValue","setRecordingState","PAUSE_RECORDING","RESUME_RECORDING","clearConsultState","setTransferConferenceRequested","clearTransferConferenceRequested","setConsultCallHeld","clearConsultCallHeld","handleSwitchToMainCall","handleSwitchToConsult","handleConferenceFailed","handleParticipantLeft","setExitingConference","handleTransferConferenceSuccess","setHoldState","HOLD_SUCCESS","UNHOLD_SUCCESS","mediaResourceId","mediaEntry","updatedMedia","isConsultMedia","markEnded","requestAutoAnswer","requestCleanup","cleanupResources","emitTaskIncoming","emitTaskHydrate","emitTaskOfferContact","emitTaskAssigned","emitTaskHold","emitTaskResume","emitTaskEnd","emitTaskOfferConsult","emitTaskConsultCreated","emitTaskConsulting","emitTaskConsultAccepted","emitTaskConsultEnd","emitTaskReject","emitTaskWrapup","emitTaskRecordingStarted","emitTaskRecordingPaused","emitTaskRecordingResumed","emitTaskWrappedup","emitTaskParticipantLeft","emitTaskConferenceStarted","emitTaskConferenceEnded","emitTaskExitConference","emitTaskTransferConference","emitTaskSwitchCall","emitTaskConferenceFailed","emitTaskTransferConferenceFailed","emitTaskOutdialFailed"],"sources":["actions.ts"],"sourcesContent":["/**\n * Task State Machine Actions - Action implementations executed during state transitions\n */\n\nimport {assign} from 'xstate';\nimport {\n TaskContext,\n TaskEventPayload,\n UIControlConfig,\n TaskActionsMap,\n TaskActionArgs,\n RecordingStateUpdate,\n} from './types';\nimport {\n TaskEvent,\n TaskState,\n INTERACTION_STATE,\n CONSULT_STATE,\n MEDIA_TYPE_CONSULT,\n} from './constants';\nimport {DestinationType, TaskData} from '../types';\nimport {computeUIControls, getDefaultUIControls} from './uiControlsComputer';\nimport {getIsConferenceInProgress} from '../TaskUtils';\nimport {hasActiveConsultInPostCall} from './guards';\n\nconst determineConsultInitiator = (\n taskData: TaskData | undefined,\n selfAgentId: string | undefined\n): boolean | undefined => {\n if (!selfAgentId) return undefined;\n\n if (taskData?.consultingAgentId) {\n return taskData.consultingAgentId === selfAgentId;\n }\n\n if (taskData?.isConsulted === true) return false;\n\n return undefined;\n};\n\nconst deriveRecordingState = (taskData?: TaskData | null): RecordingStateUpdate => {\n const callProcessingDetails = taskData?.interaction?.callProcessingDetails;\n\n if (!callProcessingDetails) {\n return {};\n }\n\n const update: RecordingStateUpdate = {};\n const {recordingStarted, recordInProgress, isPaused} = callProcessingDetails as {\n recordingStarted?: boolean;\n recordInProgress?: boolean;\n isPaused?: boolean;\n };\n\n if (recordingStarted !== undefined) {\n update.recordingControlsAvailable = recordingStarted;\n if (!recordingStarted) {\n update.recordingInProgress = false;\n }\n }\n\n if (recordInProgress !== undefined) {\n update.recordingControlsAvailable = recordInProgress || recordingStarted || false;\n update.recordingInProgress = recordInProgress;\n }\n\n if (\n update.recordingControlsAvailable === undefined &&\n update.recordingInProgress === undefined &&\n recordingStarted\n ) {\n update.recordingControlsAvailable = true;\n update.recordingInProgress = true;\n }\n\n if (isPaused !== undefined) {\n update.recordingControlsAvailable = true;\n update.recordingInProgress = !isPaused;\n }\n\n return update;\n};\n\nconst isActiveConsultState = (taskData: TaskData | undefined, selfAgentId?: string): boolean => {\n if (taskData?.interaction?.state === INTERACTION_STATE.CONSULTING) return true;\n if (selfAgentId) {\n const selfParticipant = taskData?.interaction?.participants?.[selfAgentId] as any;\n const hasConsultMedia = Object.values(taskData?.interaction?.media ?? {}).some(\n (media: any) => media?.mType === MEDIA_TYPE_CONSULT\n );\n const isPendingOrActiveSelfConsult =\n selfParticipant?.consultState === CONSULT_STATE.CONSULTING ||\n selfParticipant?.consultState === 'consultInitiated';\n if (isPendingOrActiveSelfConsult && hasConsultMedia && taskData?.isConsulted === false) {\n return true;\n }\n }\n if (taskData?.interaction?.state === INTERACTION_STATE.POST_CALL && selfAgentId) {\n const selfParticipant = taskData.interaction?.participants?.[selfAgentId] as any;\n const hasConsultMedia = Object.values(taskData.interaction?.media ?? {}).some(\n (media: any) => media?.mType === MEDIA_TYPE_CONSULT\n );\n if (selfParticipant?.consultState === CONSULT_STATE.CONSULTING && hasConsultMedia) return true;\n }\n\n return false;\n};\n\nconst isSelfConsultingOrPending = (\n taskData: TaskData | undefined,\n selfAgentId?: string\n): boolean => {\n if (!taskData || !selfAgentId) return false;\n const selfParticipant = taskData?.interaction?.participants?.[selfAgentId] as any;\n\n return (\n selfParticipant?.consultState === CONSULT_STATE.CONSULTING ||\n selfParticipant?.consultState === 'consultInitiated'\n );\n};\n\nconst hasJoinedConsultDestination = (taskData: TaskData | undefined): boolean => {\n if (!taskData?.interaction) return false;\n const participants = taskData.interaction.participants as any;\n const cpd = taskData.interaction.callProcessingDetails as any;\n const backendSaysJoined = cpd?.consultDestinationAgentJoined === 'true';\n if (backendSaysJoined) return true;\n if (!participants) return false;\n\n return Object.values(participants).some((p: any) => {\n if (!p || p.isConsulted !== true || p.hasLeft) return false;\n\n return p.hasJoined === true || p.consultState === CONSULT_STATE.CONSULTING;\n });\n};\n\nconst deriveConsultCallHeldFromTaskData = (taskData: TaskData | undefined): boolean | undefined => {\n if (!taskData?.interaction) return undefined;\n\n const eventType = taskData.type;\n if (eventType === 'AgentContactHeld') return true;\n if (eventType === 'AgentContactUnheld') return false;\n\n const consultMediaId = taskData.consultMediaResourceId;\n\n const consultMedia: any = consultMediaId\n ? taskData.interaction.media?.[consultMediaId]\n : Object.values(taskData.interaction.media ?? {}).find(\n (m: any) => m?.mType === MEDIA_TYPE_CONSULT\n );\n\n if (!consultMedia) return undefined;\n\n return Boolean(consultMedia.isHold);\n};\n\nconst getTaskStateForUiControls = (\n taskData: TaskData | undefined,\n selfAgentId: string | undefined\n): TaskState => {\n if (!taskData?.interaction) {\n return TaskState.IDLE;\n }\n\n if (taskData.interaction.isTerminated === true) {\n return TaskState.WRAPPING_UP;\n }\n\n if (isActiveConsultState(taskData, selfAgentId)) {\n return TaskState.CONSULTING;\n }\n\n if (\n taskData.interaction.state === INTERACTION_STATE.CONFERENCE ||\n getIsConferenceInProgress(taskData)\n ) {\n return TaskState.CONFERENCING;\n }\n\n const mainMediaId = taskData.interaction.mainInteractionId || taskData.interactionId;\n const isMainHeld = Boolean(\n mainMediaId && taskData.interaction.media?.[mainMediaId]?.isHold === true\n );\n if (taskData.interaction.state === 'hold' || isMainHeld) {\n return TaskState.HELD;\n }\n\n return TaskState.CONNECTED;\n};\n\nconst deriveTaskDataUpdates = (context: TaskContext, taskData: TaskData | undefined) =>\n taskData\n ? (() => {\n const updates: Partial<TaskContext> = {\n taskData,\n ...deriveRecordingState(taskData),\n };\n\n const selfAgentId = context.uiControlConfig.agentId ?? taskData?.agentId;\n const consultingActive =\n isActiveConsultState(taskData, selfAgentId) ||\n hasActiveConsultInPostCall(taskData, selfAgentId);\n const conferenceFromPayload =\n taskData?.interaction?.state === INTERACTION_STATE.CONFERENCE ||\n getIsConferenceInProgress(taskData);\n const selfConsultingOrPending = isSelfConsultingOrPending(taskData, selfAgentId);\n const inferredConsultingInitiator =\n selfConsultingOrPending && taskData?.isConsulted === false;\n\n if (taskData.destAgentId) {\n const isEpDnWithStoredId =\n context.consultDestinationType === 'entryPoint' && context.consultDestinationAgentId;\n if (!isEpDnWithStoredId) {\n updates.consultDestinationAgentId = taskData.destAgentId;\n }\n }\n if (consultingActive && taskData.destinationType) {\n updates.consultDestinationType = taskData.destinationType as DestinationType;\n }\n\n if (!context.consultInitiator) {\n const consultInitiator = determineConsultInitiator(taskData, selfAgentId);\n if (consultInitiator !== undefined) {\n updates.consultInitiator = consultInitiator;\n } else if (\n inferredConsultingInitiator ||\n (consultingActive && taskData.isConsulted === false)\n ) {\n updates.consultInitiator = true;\n }\n }\n\n const effectiveConsultInitiator = updates.consultInitiator ?? context.consultInitiator;\n if (\n effectiveConsultInitiator &&\n conferenceFromPayload &&\n (consultingActive || selfConsultingOrPending || Boolean(taskData?.consultMediaResourceId))\n ) {\n updates.consultFromConference = true;\n }\n\n if (consultingActive && taskData.interaction) {\n const joinedConsultee = hasJoinedConsultDestination(taskData);\n if (joinedConsultee) updates.consultDestinationAgentJoined = true;\n\n if (!context.consultDestinationType && !updates.consultDestinationType) {\n const hasEpDnParticipant = Boolean(\n taskData.interaction.participants &&\n Object.values(taskData.interaction.participants).some(\n (p: any) => p?.pType === 'EP-DN' && !p?.hasLeft\n )\n );\n if (hasEpDnParticipant) updates.consultDestinationType = 'entryPoint' as any;\n }\n\n if (effectiveConsultInitiator) {\n const consultCallHeld = deriveConsultCallHeldFromTaskData(taskData);\n if (consultCallHeld !== undefined) {\n updates.consultCallHeld = consultCallHeld;\n }\n }\n }\n\n const nextContext = {\n ...context,\n ...updates,\n } as TaskContext;\n const inferredState = getTaskStateForUiControls(taskData, selfAgentId);\n\n updates.uiControls = computeUIControls(inferredState, nextContext, taskData);\n\n return updates;\n })()\n : {};\n\nconst getTaskDataFromEvent = (event?: TaskEventPayload): TaskData | undefined =>\n event && typeof event === 'object' ? (event as any).taskData : undefined;\n\nexport function createInitialContext(\n uiControlConfig: UIControlConfig,\n initialState: TaskState = TaskState.IDLE\n): TaskContext {\n const baseContext: TaskContext = {\n taskData: null,\n consultInitiator: false,\n exitingConference: false,\n consultFromConference: false,\n transferConferenceRequested: false,\n consultDestinationType: null,\n consultDestinationAgentId: null,\n consultDestinationAgentJoined: false,\n consultCallHeld: false,\n recordingControlsAvailable: false,\n recordingInProgress: false,\n uiControlConfig,\n uiControls: getDefaultUIControls(),\n };\n\n baseContext.uiControls = computeUIControls(initialState, baseContext);\n\n return baseContext;\n}\n\nexport function updateUIControls(currentState: TaskState) {\n return assign(({context}: TaskActionArgs) => ({\n uiControls: computeUIControls(currentState, context),\n }));\n}\n\nexport const actions: TaskActionsMap = {\n initializeTask: assign(({context, event}: {context: TaskContext; event: TaskEventPayload}) => {\n return {\n consultInitiator: false,\n exitingConference: false,\n consultDestinationType: null,\n consultDestinationAgentJoined: false,\n ...deriveTaskDataUpdates(context, getTaskDataFromEvent(event)),\n };\n }),\n\n /**\n * Update task data from ASSIGN event\n */\n updateTaskData: assign(({context, event}: TaskActionArgs) => {\n return deriveTaskDataUpdates(context, getTaskDataFromEvent(event));\n }),\n\n /**\n * Set consult initiator flag\n *\n * IMPORTANT: This action is called for CONSULT (user action) and CONSULT_CREATED (backend event).\n * For CONSULT (user action): The user explicitly clicked Consult, so they ARE the initiator.\n * For CONSULT_CREATED (backend event): Check taskData.isConsulted to determine if this agent\n * is the initiator. If isConsulted === true, this is Agent B (the consulted party), NOT the initiator.\n *\n * This prevents all agents in a conference from becoming consultInitiator when one agent\n * starts a new consult.\n */\n setConsultInitiator: assign(({event}: TaskActionArgs) => {\n const taskData = getTaskDataFromEvent(event);\n\n if (event.type === TaskEvent.CONSULT) return {consultInitiator: true};\n\n const selfAgentId = taskData?.agentId;\n const consultInitiator = determineConsultInitiator(taskData, selfAgentId);\n if (consultInitiator === true) return {consultInitiator: true};\n if (consultInitiator === false) return {consultInitiator: false};\n\n return {};\n }),\n\n handleConsultFailed: assign({consultDestinationAgentJoined: false, consultInitiator: false}),\n handleConferenceStarted: assign({consultInitiator: false}),\n\n setConsultDestination: assign(({event}: TaskActionArgs) => {\n if (!event || event.type !== TaskEvent.CONSULT) {\n return {};\n }\n\n const taskData = getTaskDataFromEvent(event);\n const consultDestinationType =\n 'destinationType' in event ? event.destinationType ?? null : null;\n const consultDestinationAgentId =\n ('destAgentId' in event ? event.destAgentId : null) ??\n ('destination' in event ? (event as any).destination : null) ??\n null;\n\n return {\n consultDestinationType,\n consultDestinationAgentId,\n consultDestinationAgentJoined: false,\n consultFromConference: false,\n taskData: {\n ...taskData,\n destAgentId: consultDestinationAgentId,\n },\n };\n }),\n\n setConsultFromConference: assign({consultFromConference: true}),\n\n forceConsultInitiator: assign({consultInitiator: true}),\n\n setConsultAgentJoined: assign(\n ({context, event}: {context: TaskContext; event: TaskEventPayload}) => {\n if (context.consultDestinationAgentJoined) {\n return {};\n }\n\n if (\n !event ||\n event.type !== TaskEvent.CONSULTING_ACTIVE ||\n !('consultDestinationAgentJoined' in event)\n ) {\n return {};\n }\n\n const eventValue = (event as {consultDestinationAgentJoined: boolean})\n .consultDestinationAgentJoined;\n\n return eventValue ? {consultDestinationAgentJoined: true} : {};\n }\n ),\n\n setRecordingState: assign(({event}: TaskActionArgs) => {\n if (!event || !('type' in event)) {\n return {};\n }\n\n if (event.type === TaskEvent.PAUSE_RECORDING) {\n return {\n recordingControlsAvailable: true,\n recordingInProgress: false,\n };\n }\n if (event.type === TaskEvent.RESUME_RECORDING) {\n return {\n recordingControlsAvailable: true,\n recordingInProgress: true,\n };\n }\n\n return {};\n }),\n\n clearConsultState: assign({\n consultDestinationType: null,\n consultDestinationAgentId: null,\n consultDestinationAgentJoined: false,\n consultInitiator: false,\n exitingConference: false,\n consultCallHeld: false,\n consultFromConference: false,\n transferConferenceRequested: false,\n }),\n\n setTransferConferenceRequested: assign({transferConferenceRequested: true}),\n clearTransferConferenceRequested: assign({transferConferenceRequested: false}),\n\n setConsultCallHeld: assign({consultCallHeld: true}),\n clearConsultCallHeld: assign({consultCallHeld: false}),\n handleSwitchToMainCall: assign({consultCallHeld: true}),\n handleSwitchToConsult: assign({consultCallHeld: false}),\n\n handleConferenceFailed: assign(({event}: TaskActionArgs) => {\n const taskData = getTaskDataFromEvent(event);\n\n return taskData ? {taskData} : {};\n }),\n handleParticipantLeft: assign(({event}: TaskActionArgs) => {\n const taskData = getTaskDataFromEvent(event);\n\n return taskData ? {taskData} : {};\n }),\n\n setExitingConference: assign({exitingConference: true}),\n\n handleTransferConferenceSuccess: assign(({event}: TaskActionArgs) => {\n const taskData = getTaskDataFromEvent(event);\n\n return taskData ? {taskData} : {};\n }),\n\n setHoldState: assign(({context, event}: TaskActionArgs) => {\n if (\n !event ||\n (event.type !== TaskEvent.HOLD_SUCCESS && event.type !== TaskEvent.UNHOLD_SUCCESS)\n ) {\n return {};\n }\n\n const mediaResourceId =\n 'mediaResourceId' in event\n ? (event as {mediaResourceId?: string}).mediaResourceId\n : undefined;\n\n if (!mediaResourceId) {\n return {};\n }\n\n const interaction = context.taskData?.interaction;\n const mediaEntry = interaction?.media?.[mediaResourceId];\n\n if (!interaction || !mediaEntry) {\n return {};\n }\n\n const updatedMedia = {\n ...interaction.media,\n [mediaResourceId]: {\n ...mediaEntry,\n isHold: event.type === TaskEvent.HOLD_SUCCESS,\n },\n };\n\n const updates: Partial<TaskContext> = {\n taskData: {\n ...(context.taskData as TaskData),\n interaction: {\n ...interaction,\n media: updatedMedia,\n },\n },\n };\n\n const consultMediaId = context.taskData?.consultMediaResourceId;\n const isConsultMedia = consultMediaId\n ? mediaResourceId === consultMediaId\n : mediaEntry?.mType === 'consult';\n\n if (isConsultMedia && context.consultInitiator) {\n updates.consultCallHeld = event.type === TaskEvent.HOLD_SUCCESS;\n }\n\n return updates;\n }),\n\n markEnded: assign(() => ({\n recordingControlsAvailable: false,\n recordingInProgress: false,\n })),\n\n requestAutoAnswer: () => undefined,\n requestCleanup: () => undefined,\n cleanupResources: () => undefined,\n\n // Event emitters - placeholders overridden by consumers\n emitTaskIncoming: () => undefined,\n emitTaskHydrate: () => undefined,\n emitTaskOfferContact: () => undefined,\n emitTaskAssigned: () => undefined,\n emitTaskHold: () => undefined,\n emitTaskResume: () => undefined,\n emitTaskEnd: () => undefined,\n emitTaskOfferConsult: () => undefined,\n emitTaskConsultCreated: () => undefined,\n emitTaskConsulting: () => undefined,\n emitTaskConsultAccepted: () => undefined,\n emitTaskConsultEnd: () => undefined,\n emitTaskReject: () => undefined,\n emitTaskWrapup: () => undefined,\n emitTaskRecordingStarted: () => undefined,\n emitTaskRecordingPaused: () => undefined,\n emitTaskRecordingResumed: () => undefined,\n emitTaskWrappedup: () => undefined,\n emitTaskParticipantLeft: () => undefined,\n emitTaskConferenceStarted: () => undefined,\n emitTaskConferenceEnded: () => undefined,\n emitTaskExitConference: () => undefined,\n emitTaskTransferConference: () => undefined,\n emitTaskSwitchCall: () => undefined,\n emitTaskConferenceFailed: () => undefined,\n emitTaskTransferConferenceFailed: () => undefined,\n emitTaskOutdialFailed: () => undefined,\n};\n"],"mappings":"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","ignoreList":[]}