@webex/contact-center 3.12.0-task-refactor.10 → 3.12.0-task-refactor.12

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 (110) hide show
  1. package/dist/cc.js +345 -82
  2. package/dist/cc.js.map +1 -1
  3. package/dist/config.js +6 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/constants.js +3 -0
  6. package/dist/constants.js.map +1 -1
  7. package/dist/metrics/behavioral-events.js +39 -0
  8. package/dist/metrics/behavioral-events.js.map +1 -1
  9. package/dist/metrics/constants.js +8 -1
  10. package/dist/metrics/constants.js.map +1 -1
  11. package/dist/services/ApiAiAssistant.js +3 -0
  12. package/dist/services/ApiAiAssistant.js.map +1 -1
  13. package/dist/services/config/Util.js +1 -1
  14. package/dist/services/config/Util.js.map +1 -1
  15. package/dist/services/config/types.js +10 -0
  16. package/dist/services/config/types.js.map +1 -1
  17. package/dist/services/constants.js +1 -0
  18. package/dist/services/constants.js.map +1 -1
  19. package/dist/services/core/Err.js.map +1 -1
  20. package/dist/services/core/Utils.js +57 -6
  21. package/dist/services/core/Utils.js.map +1 -1
  22. package/dist/services/core/aqm-reqs.js +92 -17
  23. package/dist/services/core/aqm-reqs.js.map +1 -1
  24. package/dist/services/core/websocket/WebSocketManager.js +24 -3
  25. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  26. package/dist/services/index.js +1 -0
  27. package/dist/services/index.js.map +1 -1
  28. package/dist/services/task/Task.js +16 -4
  29. package/dist/services/task/Task.js.map +1 -1
  30. package/dist/services/task/TaskManager.js +158 -6
  31. package/dist/services/task/TaskManager.js.map +1 -1
  32. package/dist/services/task/TaskUtils.js +39 -11
  33. package/dist/services/task/TaskUtils.js.map +1 -1
  34. package/dist/services/task/constants.js +7 -1
  35. package/dist/services/task/constants.js.map +1 -1
  36. package/dist/services/task/dialer.js +129 -0
  37. package/dist/services/task/dialer.js.map +1 -1
  38. package/dist/services/task/state-machine/TaskStateMachine.js +30 -3
  39. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -1
  40. package/dist/services/task/state-machine/actions.js +4 -0
  41. package/dist/services/task/state-machine/actions.js.map +1 -1
  42. package/dist/services/task/state-machine/constants.js +3 -0
  43. package/dist/services/task/state-machine/constants.js.map +1 -1
  44. package/dist/services/task/state-machine/guards.js +23 -0
  45. package/dist/services/task/state-machine/guards.js.map +1 -1
  46. package/dist/services/task/state-machine/types.js.map +1 -1
  47. package/dist/services/task/state-machine/uiControlsComputer.js +1 -1
  48. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -1
  49. package/dist/services/task/types.js +69 -0
  50. package/dist/services/task/types.js.map +1 -1
  51. package/dist/types/cc.d.ts +93 -2
  52. package/dist/types/config.d.ts +6 -0
  53. package/dist/types/constants.d.ts +3 -0
  54. package/dist/types/metrics/constants.d.ts +6 -0
  55. package/dist/types/services/config/types.d.ts +22 -1
  56. package/dist/types/services/core/Err.d.ts +6 -0
  57. package/dist/types/services/core/Utils.d.ts +20 -2
  58. package/dist/types/services/core/aqm-reqs.d.ts +49 -0
  59. package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
  60. package/dist/types/services/core/websocket/connection-service.d.ts +1 -0
  61. package/dist/types/services/task/Task.d.ts +1 -0
  62. package/dist/types/services/task/TaskUtils.d.ts +13 -0
  63. package/dist/types/services/task/constants.d.ts +6 -0
  64. package/dist/types/services/task/dialer.d.ts +45 -0
  65. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +36 -8
  66. package/dist/types/services/task/state-machine/constants.d.ts +3 -0
  67. package/dist/types/services/task/state-machine/guards.d.ts +2 -0
  68. package/dist/types/services/task/state-machine/types.d.ts +11 -0
  69. package/dist/types/services/task/types.d.ts +85 -1
  70. package/dist/types/types.d.ts +2 -0
  71. package/dist/types.js.map +1 -1
  72. package/dist/webex.js +1 -1
  73. package/package.json +2 -2
  74. package/src/cc.ts +452 -102
  75. package/src/config.ts +6 -0
  76. package/src/constants.ts +3 -0
  77. package/src/metrics/behavioral-events.ts +42 -0
  78. package/src/metrics/constants.ts +9 -1
  79. package/src/services/ApiAiAssistant.ts +3 -0
  80. package/src/services/config/Util.ts +1 -1
  81. package/src/services/config/types.ts +12 -1
  82. package/src/services/constants.ts +1 -0
  83. package/src/services/core/Err.ts +3 -0
  84. package/src/services/core/Utils.ts +68 -5
  85. package/src/services/core/aqm-reqs.ts +100 -22
  86. package/src/services/core/websocket/WebSocketManager.ts +23 -2
  87. package/src/services/index.ts +1 -0
  88. package/src/services/task/Task.ts +22 -4
  89. package/src/services/task/TaskManager.ts +175 -7
  90. package/src/services/task/TaskUtils.ts +33 -1
  91. package/src/services/task/constants.ts +6 -0
  92. package/src/services/task/dialer.ts +136 -1
  93. package/src/services/task/state-machine/TaskStateMachine.ts +37 -5
  94. package/src/services/task/state-machine/actions.ts +4 -0
  95. package/src/services/task/state-machine/constants.ts +3 -0
  96. package/src/services/task/state-machine/guards.ts +30 -0
  97. package/src/services/task/state-machine/types.ts +14 -1
  98. package/src/services/task/state-machine/uiControlsComputer.ts +1 -1
  99. package/src/services/task/types.ts +91 -0
  100. package/src/types.ts +6 -1
  101. package/test/unit/spec/cc.ts +432 -26
  102. package/test/unit/spec/services/config/index.ts +30 -2
  103. package/test/unit/spec/services/core/Utils.ts +367 -1
  104. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +90 -1
  105. package/test/unit/spec/services/core/websocket/connection-service.ts +4 -5
  106. package/test/unit/spec/services/task/TaskManager.ts +2334 -145
  107. package/test/unit/spec/services/task/dialer.ts +372 -96
  108. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +47 -0
  109. package/umd/contact-center.min.js +2 -2
  110. package/umd/contact-center.min.js.map +1 -1
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = aqmDialer;
7
7
  var _types = require("../config/types");
8
8
  var _constants = require("../constants");
9
+ var _types2 = require("../../types");
9
10
  var _Utils = require("../core/Utils");
10
11
  var _constants2 = require("./constants");
11
12
  /**
@@ -54,6 +55,134 @@ function aqmDialer(aqm) {
54
55
  },
55
56
  errId: 'Service.aqm.dialer.startOutdial'
56
57
  }
58
+ })),
59
+ /**
60
+ * Accepts a campaign preview contact, initiating the outbound call.
61
+ *
62
+ * @param {Object} p - Parameters object.
63
+ * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.
64
+ * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.
65
+ *
66
+ * Emits:
67
+ * - `CC_EVENTS.AGENT_CONTACT_ASSIGNED` on success
68
+ * - `CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED` on failure
69
+ * @ignore
70
+ */
71
+ acceptPreviewContact: aqm.req(p => ({
72
+ url: `${_constants2.DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${p.data.interactionId}${_constants2.CAMPAIGN_PREVIEW_ACCEPT}`,
73
+ host: _constants.WCC_API_GATEWAY,
74
+ data: {},
75
+ method: _types2.HTTP_METHODS.POST,
76
+ timeout: _constants2.TIMEOUT_PREVIEW_ACCEPT,
77
+ err: _Utils.createErrDetailsObject,
78
+ notifSuccess: {
79
+ bind: {
80
+ type: _constants2.TASK_MESSAGE_TYPE,
81
+ data: {
82
+ type: [_types.CC_EVENTS.AGENT_CONTACT_ASSIGNED, _types.CC_EVENTS.CONTACT_ENDED],
83
+ __typeMap: {
84
+ typeField: 'type',
85
+ conditions: {
86
+ [_types.CC_EVENTS.AGENT_CONTACT_ASSIGNED]: {
87
+ reservationInteractionId: p.data.interactionId
88
+ },
89
+ [_types.CC_EVENTS.CONTACT_ENDED]: {
90
+ interactionId: p.data.interactionId
91
+ }
92
+ }
93
+ }
94
+ }
95
+ },
96
+ msg: {}
97
+ },
98
+ notifFail: {
99
+ bind: {
100
+ type: _constants2.TASK_MESSAGE_TYPE,
101
+ data: {
102
+ type: _types.CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED,
103
+ campaignId: p.data.campaignId
104
+ }
105
+ },
106
+ errId: 'Service.aqm.dialer.acceptPreviewContact'
107
+ }
108
+ })),
109
+ /**
110
+ * Skips a campaign preview contact, requesting the next contact from the campaign.
111
+ *
112
+ * @param {Object} p - Parameters object.
113
+ * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.
114
+ * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.
115
+ *
116
+ * Emits:
117
+ * - `CC_EVENTS.CAMPAIGN_CONTACT_UPDATED` or `CC_EVENTS.CONTACT_ENDED` on success
118
+ * - `CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED` on failure
119
+ * @ignore
120
+ */
121
+ skipPreviewContact: aqm.req(p => ({
122
+ url: `${_constants2.DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${p.data.interactionId}${_constants2.CAMPAIGN_PREVIEW_SKIP}`,
123
+ host: _constants.WCC_API_GATEWAY,
124
+ data: {},
125
+ method: _types2.HTTP_METHODS.POST,
126
+ err: _Utils.createErrDetailsObject,
127
+ notifSuccess: {
128
+ bind: {
129
+ type: _constants2.TASK_MESSAGE_TYPE,
130
+ data: {
131
+ type: [_types.CC_EVENTS.CAMPAIGN_CONTACT_UPDATED, _types.CC_EVENTS.CONTACT_ENDED],
132
+ interactionId: p.data.interactionId
133
+ }
134
+ },
135
+ msg: {}
136
+ },
137
+ notifFail: {
138
+ bind: {
139
+ type: _constants2.TASK_MESSAGE_TYPE,
140
+ data: {
141
+ type: _types.CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED,
142
+ campaignId: p.data.campaignId
143
+ }
144
+ },
145
+ errId: 'Service.aqm.dialer.skipPreviewContact'
146
+ }
147
+ })),
148
+ /**
149
+ * Removes a campaign preview contact from the campaign list entirely.
150
+ *
151
+ * @param {Object} p - Parameters object.
152
+ * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.
153
+ * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.
154
+ *
155
+ * Emits:
156
+ * - `CC_EVENTS.CAMPAIGN_CONTACT_UPDATED` or `CC_EVENTS.CONTACT_ENDED` on success
157
+ * - `CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED` on failure
158
+ * @ignore
159
+ */
160
+ removePreviewContact: aqm.req(p => ({
161
+ url: `${_constants2.DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${p.data.interactionId}${_constants2.CAMPAIGN_PREVIEW_REMOVE}`,
162
+ host: _constants.WCC_API_GATEWAY,
163
+ data: {},
164
+ method: _types2.HTTP_METHODS.POST,
165
+ err: _Utils.createErrDetailsObject,
166
+ notifSuccess: {
167
+ bind: {
168
+ type: _constants2.TASK_MESSAGE_TYPE,
169
+ data: {
170
+ type: [_types.CC_EVENTS.CAMPAIGN_CONTACT_UPDATED, _types.CC_EVENTS.CONTACT_ENDED],
171
+ interactionId: p.data.interactionId
172
+ }
173
+ },
174
+ msg: {}
175
+ },
176
+ notifFail: {
177
+ bind: {
178
+ type: _constants2.TASK_MESSAGE_TYPE,
179
+ data: {
180
+ type: _types.CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED,
181
+ campaignId: p.data.campaignId
182
+ }
183
+ },
184
+ errId: 'Service.aqm.dialer.removePreviewContact'
185
+ }
57
186
  }))
58
187
  };
59
188
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_types","require","_constants","_Utils","_constants2","aqmDialer","aqm","startOutdial","req","p","url","TASK_API","host","WCC_API_GATEWAY","data","err","notifSuccess","bind","type","TASK_MESSAGE_TYPE","CC_EVENTS","AGENT_OFFER_CONTACT","msg","notifFail","AGENT_OUTBOUND_FAILED","errId"],"sources":["dialer.ts"],"sourcesContent":["import {CC_EVENTS} from '../config/types';\nimport {WCC_API_GATEWAY} from '../constants';\nimport {createErrDetailsObject as err} from '../core/Utils';\nimport {TASK_MESSAGE_TYPE, TASK_API} from './constants';\nimport * as Contact from './types';\nimport AqmReqs from '../core/aqm-reqs';\n\n/**\n * Returns an object with AQM dialer functions used for outbound contact handling.\n *\n * @param {AqmReqs} aqm - An instance of AQM request handler.\n * @returns {{\n * startOutdial: (params: {data: Contact.DialerPayload}) => Promise<any>\n * }} Object containing methods for outbound dialing.\n * @ignore\n */\nexport default function aqmDialer(aqm: AqmReqs) {\n return {\n /**\n * Initiates an outbound contact (outdial) request.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.DialerPayload} p.data - Payload for the outbound call.\n * @returns {Promise<any>} A promise that resolves or rejects based on the outbound call response.\n *\n * Emits:\n * - `CC_EVENTS.AGENT_OFFER_CONTACT` on success\n * - `CC_EVENTS.AGENT_OUTBOUND_FAILED` on failure\n * @ignore\n */\n startOutdial: aqm.req((p: {data: Contact.DialerPayload}) => ({\n url: `${TASK_API}`,\n host: WCC_API_GATEWAY,\n data: p.data,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.AGENT_OFFER_CONTACT},\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.AGENT_OUTBOUND_FAILED},\n },\n errId: 'Service.aqm.dialer.startOutdial',\n },\n })),\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASI,SAASA,CAACC,GAAY,EAAE;EAC9C,OAAO;IACL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAED,GAAG,CAACE,GAAG,CAAEC,CAAgC,KAAM;MAC3DC,GAAG,EAAE,GAAGC,oBAAQ,EAAE;MAClBC,IAAI,EAAEC,0BAAe;MACrBC,IAAI,EAAEL,CAAC,CAACK,IAAI;MACZC,GAAG,EAAHA,6BAAG;MACHC,YAAY,EAAE;QACZC,IAAI,EAAE;UACJC,IAAI,EAAEC,6BAAiB;UACvBL,IAAI,EAAE;YAACI,IAAI,EAAEE,gBAAS,CAACC;UAAmB;QAC5C,CAAC;QACDC,GAAG,EAAE,CAAC;MACR,CAAC;MACDC,SAAS,EAAE;QACTN,IAAI,EAAE;UACJC,IAAI,EAAEC,6BAAiB;UACvBL,IAAI,EAAE;YAACI,IAAI,EAAEE,gBAAS,CAACI;UAAqB;QAC9C,CAAC;QACDC,KAAK,EAAE;MACT;IACF,CAAC,CAAC;EACJ,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["_types","require","_constants","_types2","_Utils","_constants2","aqmDialer","aqm","startOutdial","req","p","url","TASK_API","host","WCC_API_GATEWAY","data","err","notifSuccess","bind","type","TASK_MESSAGE_TYPE","CC_EVENTS","AGENT_OFFER_CONTACT","msg","notifFail","AGENT_OUTBOUND_FAILED","errId","acceptPreviewContact","DIALER_API","encodeURIComponent","campaignId","interactionId","CAMPAIGN_PREVIEW_ACCEPT","method","HTTP_METHODS","POST","timeout","TIMEOUT_PREVIEW_ACCEPT","AGENT_CONTACT_ASSIGNED","CONTACT_ENDED","__typeMap","typeField","conditions","reservationInteractionId","CAMPAIGN_PREVIEW_ACCEPT_FAILED","skipPreviewContact","CAMPAIGN_PREVIEW_SKIP","CAMPAIGN_CONTACT_UPDATED","CAMPAIGN_PREVIEW_SKIP_FAILED","removePreviewContact","CAMPAIGN_PREVIEW_REMOVE","CAMPAIGN_PREVIEW_REMOVE_FAILED"],"sources":["dialer.ts"],"sourcesContent":["import {CC_EVENTS} from '../config/types';\nimport {WCC_API_GATEWAY} from '../constants';\nimport {HTTP_METHODS} from '../../types';\nimport {createErrDetailsObject as err} from '../core/Utils';\nimport {\n TASK_MESSAGE_TYPE,\n TASK_API,\n DIALER_API,\n CAMPAIGN_PREVIEW_ACCEPT,\n CAMPAIGN_PREVIEW_SKIP,\n CAMPAIGN_PREVIEW_REMOVE,\n TIMEOUT_PREVIEW_ACCEPT,\n} from './constants';\nimport * as Contact from './types';\nimport AqmReqs from '../core/aqm-reqs';\n\n/**\n * Returns an object with AQM dialer functions used for outbound contact handling.\n *\n * @param {AqmReqs} aqm - An instance of AQM request handler.\n * @returns {{\n * startOutdial: (params: {data: Contact.DialerPayload}) => Promise<any>\n * }} Object containing methods for outbound dialing.\n * @ignore\n */\nexport default function aqmDialer(aqm: AqmReqs) {\n return {\n /**\n * Initiates an outbound contact (outdial) request.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.DialerPayload} p.data - Payload for the outbound call.\n * @returns {Promise<any>} A promise that resolves or rejects based on the outbound call response.\n *\n * Emits:\n * - `CC_EVENTS.AGENT_OFFER_CONTACT` on success\n * - `CC_EVENTS.AGENT_OUTBOUND_FAILED` on failure\n * @ignore\n */\n startOutdial: aqm.req((p: {data: Contact.DialerPayload}) => ({\n url: `${TASK_API}`,\n host: WCC_API_GATEWAY,\n data: p.data,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.AGENT_OFFER_CONTACT},\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.AGENT_OUTBOUND_FAILED},\n },\n errId: 'Service.aqm.dialer.startOutdial',\n },\n })),\n\n /**\n * Accepts a campaign preview contact, initiating the outbound call.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.\n * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.\n *\n * Emits:\n * - `CC_EVENTS.AGENT_CONTACT_ASSIGNED` on success\n * - `CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED` on failure\n * @ignore\n */\n acceptPreviewContact: aqm.req((p: {data: Contact.PreviewContactPayload}) => ({\n url: `${DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${\n p.data.interactionId\n }${CAMPAIGN_PREVIEW_ACCEPT}`,\n host: WCC_API_GATEWAY,\n data: {},\n method: HTTP_METHODS.POST,\n timeout: TIMEOUT_PREVIEW_ACCEPT,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {\n type: [CC_EVENTS.AGENT_CONTACT_ASSIGNED, CC_EVENTS.CONTACT_ENDED],\n __typeMap: {\n typeField: 'type',\n conditions: {\n [CC_EVENTS.AGENT_CONTACT_ASSIGNED]: {\n reservationInteractionId: p.data.interactionId,\n },\n [CC_EVENTS.CONTACT_ENDED]: {interactionId: p.data.interactionId},\n },\n },\n },\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.CAMPAIGN_PREVIEW_ACCEPT_FAILED, campaignId: p.data.campaignId},\n },\n errId: 'Service.aqm.dialer.acceptPreviewContact',\n },\n })),\n\n /**\n * Skips a campaign preview contact, requesting the next contact from the campaign.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.\n * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.\n *\n * Emits:\n * - `CC_EVENTS.CAMPAIGN_CONTACT_UPDATED` or `CC_EVENTS.CONTACT_ENDED` on success\n * - `CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED` on failure\n * @ignore\n */\n skipPreviewContact: aqm.req((p: {data: Contact.PreviewContactPayload}) => ({\n url: `${DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${\n p.data.interactionId\n }${CAMPAIGN_PREVIEW_SKIP}`,\n host: WCC_API_GATEWAY,\n data: {},\n method: HTTP_METHODS.POST,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {\n type: [CC_EVENTS.CAMPAIGN_CONTACT_UPDATED, CC_EVENTS.CONTACT_ENDED],\n interactionId: p.data.interactionId,\n },\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.CAMPAIGN_PREVIEW_SKIP_FAILED, campaignId: p.data.campaignId},\n },\n errId: 'Service.aqm.dialer.skipPreviewContact',\n },\n })),\n\n /**\n * Removes a campaign preview contact from the campaign list entirely.\n *\n * @param {Object} p - Parameters object.\n * @param {Contact.PreviewContactPayload} p.data - Payload containing interactionId and campaignId.\n * @returns {Promise<Contact.AgentContact>} A promise that resolves with agent contact on success.\n *\n * Emits:\n * - `CC_EVENTS.CAMPAIGN_CONTACT_UPDATED` or `CC_EVENTS.CONTACT_ENDED` on success\n * - `CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED` on failure\n * @ignore\n */\n removePreviewContact: aqm.req((p: {data: Contact.PreviewContactPayload}) => ({\n url: `${DIALER_API}/campaign/${encodeURIComponent(p.data.campaignId)}/preview-task/${\n p.data.interactionId\n }${CAMPAIGN_PREVIEW_REMOVE}`,\n host: WCC_API_GATEWAY,\n data: {},\n method: HTTP_METHODS.POST,\n err,\n notifSuccess: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {\n type: [CC_EVENTS.CAMPAIGN_CONTACT_UPDATED, CC_EVENTS.CONTACT_ENDED],\n interactionId: p.data.interactionId,\n },\n },\n msg: {} as Contact.AgentContact,\n },\n notifFail: {\n bind: {\n type: TASK_MESSAGE_TYPE,\n data: {type: CC_EVENTS.CAMPAIGN_PREVIEW_REMOVE_FAILED, campaignId: p.data.campaignId},\n },\n errId: 'Service.aqm.dialer.removePreviewContact',\n },\n })),\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -116,11 +116,15 @@ function getTaskStateMachineConfig(uiControlConfig) {
116
116
  // Default: just update data, stay in IDLE
117
117
  actions: ['updateTaskData', 'emitTaskHydrate']
118
118
  }],
119
- // AgentContactReserved (applicable for direct incoming/consult/transfer/outdial)
120
- [_constants.TaskEvent.TASK_INCOMING]: {
119
+ // AgentContactReserved (direct incoming/consult/transfer/outdial, or campaign preview accept)
120
+ [_constants.TaskEvent.TASK_INCOMING]: [{
121
+ guard: _guards.guards.isCampaignReservationAccept,
122
+ target: _constants.TaskState.OFFERED,
123
+ actions: ['initializeTask', 'emitTaskCampaignPreviewReservation']
124
+ }, {
121
125
  target: _constants.TaskState.OFFERED,
122
126
  actions: ['initializeTask', 'emitTaskIncoming']
123
- },
127
+ }],
124
128
  // AgentOutboundFailed can arrive before TASK_INCOMING due to race conditions
125
129
  [_constants.TaskEvent.OUTBOUND_FAILED]: {
126
130
  target: _constants.TaskState.TERMINATED,
@@ -181,6 +185,15 @@ function getTaskStateMachineConfig(uiControlConfig) {
181
185
  target: _constants.TaskState.TERMINATED,
182
186
  actions: ['updateTaskData', 'markEnded', 'emitTaskOutdialFailed', 'emitTaskEnd']
183
187
  }],
188
+ [_constants.TaskEvent.CAMPAIGN_PREVIEW_ACCEPT_FAILED]: {
189
+ actions: ['updateTaskData', 'emitTaskCampaignPreviewAcceptFailed']
190
+ },
191
+ [_constants.TaskEvent.CAMPAIGN_PREVIEW_SKIP_FAILED]: {
192
+ actions: ['updateTaskData', 'emitTaskCampaignPreviewSkipFailed']
193
+ },
194
+ [_constants.TaskEvent.CAMPAIGN_PREVIEW_REMOVE_FAILED]: {
195
+ actions: ['updateTaskData', 'emitTaskCampaignPreviewRemoveFailed']
196
+ },
184
197
  // AgentConsulting comes for received after the initial consult is accepted
185
198
  [_constants.TaskEvent.CONSULTING_ACTIVE]: [{
186
199
  target: _constants.TaskState.CONSULTING,
@@ -218,6 +231,10 @@ function getTaskStateMachineConfig(uiControlConfig) {
218
231
  actions: ['setConsultInitiator', 'setConsultDestination', 'setConsultAgentJoined', 'updateTaskData', 'emitTaskConsultAccepted', 'emitTaskConsulting']
219
232
  },
220
233
  // AgentContactAssigned can be resent after consult transfers; keep context in sync
234
+ /* TODO: This transition needs to be checked if this is even needed as receiver will
235
+ * be in Consult Accept state which can be consulting state and ASSIGNED will be only
236
+ * for the receiver. So receuving ASSIGNED in Connected state is highly unlikely.
237
+ */
221
238
  [_constants.TaskEvent.ASSIGN]: {
222
239
  target: _constants.TaskState.CONNECTED,
223
240
  actions: ['updateTaskData', 'emitTaskAssigned']
@@ -269,6 +286,11 @@ function getTaskStateMachineConfig(uiControlConfig) {
269
286
  }],
270
287
  // AgentContactEnded Event
271
288
  [_constants.TaskEvent.CONTACT_ENDED]: [{
289
+ // Campaign preview ContactEnded is terminal cleanup; never enter wrapup.
290
+ guard: _guards.guards.isCampaignPreviewContactEnded,
291
+ target: _constants.TaskState.TERMINATED,
292
+ actions: ['updateTaskData', 'markEnded', 'emitTaskEnd']
293
+ }, {
272
294
  // Conference still active → CONFERENCING
273
295
  guard: _guards.guards.conferenceInProgressFromEvent,
274
296
  target: _constants.TaskState.CONFERENCING,
@@ -355,6 +377,11 @@ function getTaskStateMachineConfig(uiControlConfig) {
355
377
  actions: ['updateTaskData']
356
378
  },
357
379
  [_constants.TaskEvent.CONTACT_ENDED]: [{
380
+ // Campaign preview ContactEnded is terminal cleanup; never enter wrapup.
381
+ guard: _guards.guards.isCampaignPreviewContactEnded,
382
+ target: _constants.TaskState.TERMINATED,
383
+ actions: ['updateTaskData', 'markEnded', 'emitTaskEnd']
384
+ }, {
358
385
  guard: _guards.guards.conferenceInProgressFromEvent,
359
386
  target: _constants.TaskState.CONFERENCING,
360
387
  actions: ['updateTaskData', 'emitTaskConferenceStarted', 'requestCleanup']
@@ -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","CONSULT_CREATED","CONSULT_FAILED","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_END","CONFERENCE_START","HOLD_INITIATED","HOLD_INITIATING","HOLD_SUCCESS","CONSULT","CONSULT_INITIATING","TRANSFER_SUCCESS","shouldWrapUpOrIsInitiator","TRANSFER_FAILED","event","consultInitiator","taskData","getTaskDataFromEvent","mainId","interaction","mainInteractionId","interactionId","Boolean","media","isHold","conferenceInProgressFromEvent","PAUSE_RECORDING","RESUME_RECORDING","HOLD_FAILED","UNHOLD_INITIATED","RESUME_INITIATING","UNHOLD_SUCCESS","UNHOLD_FAILED","CONSULT_SUCCESS","consultFromConference","isPrimaryMediaOnHold","CTQ_CANCEL","isConferenceHoldParticipantFromEvent","consultCallHeld","cpd","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","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 // AgentConsultCreated from Stable Prod while already HELD/CONNECTED (external consult).\n // Child states do not handle CONSULT_CREATED; wire here so updateTaskData + setConsultInitiator run.\n [TaskEvent.CONSULT_CREATED]: {\n actions: ['updateTaskData', 'setConsultInitiator'],\n },\n // AgentConsultFailed (RONA) while HELD/CONNECTED without passing through CONSULT_INITIATING.\n [TaskEvent.CONSULT_FAILED]: {\n actions: ['updateTaskData', 'handleConsultFailed'],\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', 'emitTaskConsultEnd'],\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 // AgentConsultEnded from Stable Prod while on connected leg (external end consult).\n [TaskEvent.CONSULT_END]: [\n {\n guard: ({context, event}) => {\n if (context.consultInitiator !== true) return false;\n const taskData = getTaskDataFromEvent(event);\n const mainId = taskData?.interaction?.mainInteractionId || taskData?.interactionId;\n\n return Boolean(mainId && taskData?.interaction?.media?.[mainId]?.isHold === true);\n },\n target: TaskState.HELD,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n guard: ({context}) => context.consultInitiator === true,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\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 // AgentConsulting while main leg is held (Task Refactor / Stable Prod consult accept).\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 // 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 // AgentConsultEnded from Stable Prod while main leg is held (external end consult).\n [TaskEvent.CONSULT_END]: {\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\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 // AgentConsulting (Task Refactor: AgentConsulting event, not CONSULT_SUCCESS)\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 // 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 // AgentConsultEnded from Stable Prod during consult initiation (external end consult).\n [TaskEvent.CONSULT_END]: [\n {\n guard: guards.isPrimaryMediaOnHold,\n target: TaskState.HELD,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\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 // AgentConsultFailed (RONA / consultee declined) while the initiator is already in\n // CONSULTING (AgentConsulting arrived during ringing). Mirror CONSULT_INITIATING so the\n // initiator returns to their own leg (HELD when main is on hold, else CONNECTED) instead\n // of staying in CONSULTING. Without this, handleConsultFailed clears consultInitiator but\n // the machine stays in CONSULTING, so the trailing AgentConsultEnded falls through the\n // CONSULT_END \"consulted agent\" branch to TERMINATED and wrongly clears the task.\n [TaskEvent.CONSULT_FAILED]: [\n {\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\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 // AgentConsulting while still in conference (EP-DN/external ordering).\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 // 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","CONSULT_CREATED","CONSULT_FAILED","states","guard","guards","isInteractionTerminated","target","WRAPPING_UP","isInteractionConsulting","CONSULTING","isInteractionHeld","HELD","isInteractionConnected","CONNECTED","isConferencingByParticipants","CONFERENCING","TASK_INCOMING","isCampaignReservationAccept","OFFERED","OUTBOUND_FAILED","TERMINATED","CONSULTING_ACTIVE","TASK_OFFERED","ASSIGN","isConsultingAssignment","RONA","TASK_WRAPUP","CONTACT_ENDED","ASSIGN_FAILED","INVITE_FAILED","shouldWrapUp","CAMPAIGN_PREVIEW_ACCEPT_FAILED","CAMPAIGN_PREVIEW_SKIP_FAILED","CAMPAIGN_PREVIEW_REMOVE_FAILED","OFFER_CONSULT","CONSULT_END","CONFERENCE_START","HOLD_INITIATED","HOLD_INITIATING","HOLD_SUCCESS","CONSULT","CONSULT_INITIATING","TRANSFER_SUCCESS","shouldWrapUpOrIsInitiator","TRANSFER_FAILED","event","consultInitiator","taskData","getTaskDataFromEvent","mainId","interaction","mainInteractionId","interactionId","Boolean","media","isHold","isCampaignPreviewContactEnded","conferenceInProgressFromEvent","PAUSE_RECORDING","RESUME_RECORDING","HOLD_FAILED","UNHOLD_INITIATED","RESUME_INITIATING","UNHOLD_SUCCESS","UNHOLD_FAILED","CONSULT_SUCCESS","consultFromConference","isPrimaryMediaOnHold","CTQ_CANCEL","isConferenceHoldParticipantFromEvent","consultCallHeld","cpd","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","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 // AgentConsultCreated from Stable Prod while already HELD/CONNECTED (external consult).\n // Child states do not handle CONSULT_CREATED; wire here so updateTaskData + setConsultInitiator run.\n [TaskEvent.CONSULT_CREATED]: {\n actions: ['updateTaskData', 'setConsultInitiator'],\n },\n // AgentConsultFailed (RONA) while HELD/CONNECTED without passing through CONSULT_INITIATING.\n [TaskEvent.CONSULT_FAILED]: {\n actions: ['updateTaskData', 'handleConsultFailed'],\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 (direct incoming/consult/transfer/outdial, or campaign preview accept)\n [TaskEvent.TASK_INCOMING]: [\n {\n guard: guards.isCampaignReservationAccept,\n target: TaskState.OFFERED,\n actions: ['initializeTask', 'emitTaskCampaignPreviewReservation'],\n },\n {\n target: TaskState.OFFERED,\n actions: ['initializeTask', 'emitTaskIncoming'],\n },\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 [TaskEvent.CAMPAIGN_PREVIEW_ACCEPT_FAILED]: {\n actions: ['updateTaskData', 'emitTaskCampaignPreviewAcceptFailed'],\n },\n [TaskEvent.CAMPAIGN_PREVIEW_SKIP_FAILED]: {\n actions: ['updateTaskData', 'emitTaskCampaignPreviewSkipFailed'],\n },\n [TaskEvent.CAMPAIGN_PREVIEW_REMOVE_FAILED]: {\n actions: ['updateTaskData', 'emitTaskCampaignPreviewRemoveFailed'],\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', 'emitTaskConsultEnd'],\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 /* TODO: This transition needs to be checked if this is even needed as receiver will\n * be in Consult Accept state which can be consulting state and ASSIGNED will be only\n * for the receiver. So receuving ASSIGNED in Connected state is highly unlikely.\n */\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 // AgentConsultEnded from Stable Prod while on connected leg (external end consult).\n [TaskEvent.CONSULT_END]: [\n {\n guard: ({context, event}) => {\n if (context.consultInitiator !== true) return false;\n const taskData = getTaskDataFromEvent(event);\n const mainId = taskData?.interaction?.mainInteractionId || taskData?.interactionId;\n\n return Boolean(mainId && taskData?.interaction?.media?.[mainId]?.isHold === true);\n },\n target: TaskState.HELD,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n guard: ({context}) => context.consultInitiator === true,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n ],\n // AgentContactEnded Event\n [TaskEvent.CONTACT_ENDED]: [\n {\n // Campaign preview ContactEnded is terminal cleanup; never enter wrapup.\n guard: guards.isCampaignPreviewContactEnded,\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskEnd'],\n },\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 // AgentConsulting while main leg is held (Task Refactor / Stable Prod consult accept).\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 // 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 // Campaign preview ContactEnded is terminal cleanup; never enter wrapup.\n guard: guards.isCampaignPreviewContactEnded,\n target: TaskState.TERMINATED,\n actions: ['updateTaskData', 'markEnded', 'emitTaskEnd'],\n },\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 // AgentConsultEnded from Stable Prod while main leg is held (external end consult).\n [TaskEvent.CONSULT_END]: {\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\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 // AgentConsulting (Task Refactor: AgentConsulting event, not CONSULT_SUCCESS)\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 // 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 // AgentConsultEnded from Stable Prod during consult initiation (external end consult).\n [TaskEvent.CONSULT_END]: [\n {\n guard: guards.isPrimaryMediaOnHold,\n target: TaskState.HELD,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\n },\n {\n target: TaskState.CONNECTED,\n actions: ['updateTaskData', 'clearConsultState', 'emitTaskConsultEnd'],\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 // AgentConsultFailed (RONA / consultee declined) while the initiator is already in\n // CONSULTING (AgentConsulting arrived during ringing). Mirror CONSULT_INITIATING so the\n // initiator returns to their own leg (HELD when main is on hold, else CONNECTED) instead\n // of staying in CONSULTING. Without this, handleConsultFailed clears consultInitiator but\n // the machine stays in CONSULTING, so the trailing AgentConsultEnded falls through the\n // CONSULT_END \"consulted agent\" branch to TERMINATED and wrongly clears the task.\n [TaskEvent.CONSULT_FAILED]: [\n {\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\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 // AgentConsulting while still in conference (EP-DN/external ordering).\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 // 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":[]}
@@ -508,6 +508,10 @@ const actions = exports.actions = {
508
508
  requestCleanup: () => undefined,
509
509
  cleanupResources: () => undefined,
510
510
  // Event emitters - placeholders overridden by consumers
511
+ emitTaskCampaignPreviewReservation: () => undefined,
512
+ emitTaskCampaignPreviewAcceptFailed: () => undefined,
513
+ emitTaskCampaignPreviewSkipFailed: () => undefined,
514
+ emitTaskCampaignPreviewRemoveFailed: () => undefined,
511
515
  emitTaskIncoming: () => undefined,
512
516
  emitTaskHydrate: () => undefined,
513
517
  emitTaskOfferContact: () => undefined,