@webex/contact-center 3.11.0-next.21 → 3.11.0-next.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cc.js +71 -0
- package/dist/cc.js.map +1 -1
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/metrics/behavioral-events.js +13 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +4 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/config/types.js +7 -1
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/aqm-reqs.js +92 -17
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/task/TaskManager.js +60 -3
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +16 -3
- package/dist/services/task/TaskUtils.js.map +1 -1
- package/dist/services/task/constants.js +5 -1
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/dialer.js +51 -0
- package/dist/services/task/dialer.js.map +1 -1
- package/dist/services/task/types.js +15 -0
- package/dist/services/task/types.js.map +1 -1
- package/dist/types/cc.d.ts +31 -1
- package/dist/types/constants.d.ts +1 -0
- package/dist/types/metrics/constants.d.ts +2 -0
- package/dist/types/services/config/types.d.ts +12 -0
- package/dist/types/services/core/Err.d.ts +2 -0
- package/dist/types/services/core/aqm-reqs.d.ts +49 -0
- package/dist/types/services/task/TaskUtils.d.ts +8 -0
- package/dist/types/services/task/constants.d.ts +4 -0
- package/dist/types/services/task/dialer.d.ts +15 -0
- package/dist/types/services/task/types.d.ts +23 -1
- package/dist/types.js.map +1 -1
- package/dist/webex.js +1 -1
- package/package.json +2 -2
- package/src/cc.ts +99 -1
- package/src/constants.ts +1 -0
- package/src/metrics/behavioral-events.ts +14 -0
- package/src/metrics/constants.ts +4 -0
- package/src/services/config/types.ts +6 -0
- package/src/services/core/Err.ts +1 -0
- package/src/services/core/aqm-reqs.ts +100 -22
- package/src/services/task/TaskManager.ts +75 -3
- package/src/services/task/TaskUtils.ts +12 -0
- package/src/services/task/constants.ts +4 -0
- package/src/services/task/dialer.ts +56 -1
- package/src/services/task/types.ts +24 -0
- package/src/types.ts +2 -1
- package/test/unit/spec/cc.ts +65 -0
- package/test/unit/spec/services/task/TaskManager.ts +281 -105
- package/test/unit/spec/services/task/dialer.ts +198 -112
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
|
@@ -20,15 +20,41 @@ class AqmReqs {
|
|
|
20
20
|
this.webSocketManager = webSocketManager;
|
|
21
21
|
this.webSocketManager.on('message', this.onMessage.bind(this));
|
|
22
22
|
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Creates a request function for an API call with parameters
|
|
26
|
+
* @param c - The configuration for the request
|
|
27
|
+
* @returns A function that makes the API request
|
|
28
|
+
*/
|
|
23
29
|
req(c) {
|
|
24
30
|
return (p, cbRes) => this.makeAPIRequest(c(p), cbRes);
|
|
25
31
|
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Creates a request function for an API call with no parameters
|
|
35
|
+
* @param c - The configuration for the request
|
|
36
|
+
* @returns A function that makes the API request
|
|
37
|
+
*/
|
|
26
38
|
reqEmpty(c) {
|
|
27
39
|
return cbRes => this.makeAPIRequest(c(), cbRes);
|
|
28
40
|
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Makes an API request
|
|
44
|
+
* @param c - The request configuration
|
|
45
|
+
* @param cbRes - The callback for the response
|
|
46
|
+
* @returns A promise that resolves with the response or rejects with an error
|
|
47
|
+
*/
|
|
29
48
|
async makeAPIRequest(c, cbRes) {
|
|
30
49
|
return this.createPromise(c, cbRes);
|
|
31
50
|
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Creates a promise for an API request
|
|
54
|
+
* @param c - The request configuration
|
|
55
|
+
* @param cbRes - The callback for the response
|
|
56
|
+
* @returns A promise that resolves with the response or rejects with an error
|
|
57
|
+
*/
|
|
32
58
|
createPromise(c, cbRes) {
|
|
33
59
|
return new Promise((resolve, reject) => {
|
|
34
60
|
const keySuccess = this.bindPrint(c.notifSuccess.bind);
|
|
@@ -139,7 +165,7 @@ class AqmReqs {
|
|
|
139
165
|
if (response?.headers) {
|
|
140
166
|
response.headers.Authorization = '*';
|
|
141
167
|
}
|
|
142
|
-
_loggerProxy.default.error(`Routing request timeout${keySuccess}${response}${c.url}`, {
|
|
168
|
+
_loggerProxy.default.error(`Routing request timeout${keySuccess}${JSON.stringify(response)}${c.url}`, {
|
|
143
169
|
module: _constants2.AQM_REQS_FILE,
|
|
144
170
|
method: _constants.METHODS.CREATE_PROMISE
|
|
145
171
|
});
|
|
@@ -151,44 +177,93 @@ class AqmReqs {
|
|
|
151
177
|
}
|
|
152
178
|
});
|
|
153
179
|
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Converts a bind object to a string representation
|
|
183
|
+
* @param bind - The bind object to convert
|
|
184
|
+
* @returns A string representation of the bind object
|
|
185
|
+
*/
|
|
154
186
|
bindPrint(bind) {
|
|
155
187
|
let result = '';
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if (Array.isArray(
|
|
159
|
-
result += `${
|
|
160
|
-
} else if (typeof
|
|
161
|
-
result += `${
|
|
188
|
+
for (const key of Object.keys(bind).filter(prop => prop !== '__typeMap')) {
|
|
189
|
+
const value = bind[key];
|
|
190
|
+
if (Array.isArray(value)) {
|
|
191
|
+
result += `${key}=[${value.join(',')}],`;
|
|
192
|
+
} else if (typeof value === 'object' && value !== null) {
|
|
193
|
+
result += `${key}=(${this.bindPrint(value)}),`;
|
|
162
194
|
} else {
|
|
163
|
-
result += `${
|
|
195
|
+
result += `${key}=${value},`;
|
|
164
196
|
}
|
|
165
197
|
}
|
|
166
198
|
return result ? result.slice(0, -1) : result;
|
|
167
199
|
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Checks if a message matches a bind object
|
|
203
|
+
* @param bind - The bind object to check against
|
|
204
|
+
* @param msg - The message to check
|
|
205
|
+
* @returns True if the message matches the bind object, false otherwise
|
|
206
|
+
*/
|
|
168
207
|
bindCheck(bind, msg) {
|
|
169
|
-
//
|
|
170
|
-
|
|
171
|
-
if (
|
|
208
|
+
// Handle type-dependent field matching if __typeMap is present
|
|
209
|
+
if (bind.__typeMap && typeof bind.__typeMap === 'object') {
|
|
210
|
+
if (!AqmReqs.typeMapCheck(bind.__typeMap, msg)) {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
for (const key of Object.keys(bind).filter(prop => prop !== '__typeMap')) {
|
|
215
|
+
const bindValue = bind[key];
|
|
216
|
+
const msgValue = msg[key];
|
|
217
|
+
if (Array.isArray(bindValue)) {
|
|
172
218
|
// Check if the message value matches any of the values in the array
|
|
173
|
-
if (!
|
|
219
|
+
if (!bindValue.includes(msgValue)) {
|
|
174
220
|
return false;
|
|
175
221
|
}
|
|
176
|
-
} else if (typeof
|
|
177
|
-
if (typeof
|
|
178
|
-
if (!this.bindCheck(
|
|
222
|
+
} else if (typeof bindValue === 'object' && bindValue !== null) {
|
|
223
|
+
if (typeof msgValue === 'object' && msgValue !== null) {
|
|
224
|
+
if (!this.bindCheck(bindValue, msgValue)) {
|
|
179
225
|
return false;
|
|
180
226
|
}
|
|
181
227
|
} else {
|
|
182
228
|
return false;
|
|
183
229
|
}
|
|
184
|
-
} else if (!
|
|
230
|
+
} else if (!msgValue || msgValue !== bindValue) {
|
|
185
231
|
return false;
|
|
186
232
|
}
|
|
187
233
|
}
|
|
188
234
|
return true;
|
|
189
235
|
}
|
|
190
236
|
|
|
191
|
-
|
|
237
|
+
/**
|
|
238
|
+
* Checks type-dependent field conditions defined in __typeMap.
|
|
239
|
+
* @param typeMap - The type map to check against
|
|
240
|
+
* @param msg - The message to check
|
|
241
|
+
* @returns True if the message matches the type map, false otherwise
|
|
242
|
+
* The typeMap has the shape:
|
|
243
|
+
* { typeField: "type", conditions: { EventA: { field: value }, EventB: { field: value } } }
|
|
244
|
+
* It reads msg[typeField] to determine which condition set to apply,
|
|
245
|
+
* then verifies all fields in that condition match the message.
|
|
246
|
+
*/
|
|
247
|
+
static typeMapCheck(typeMap, msg) {
|
|
248
|
+
const typeField = typeMap.typeField || 'type';
|
|
249
|
+
const msgType = msg[typeField];
|
|
250
|
+
if (typeMap.conditions && typeMap.conditions[msgType]) {
|
|
251
|
+
const condition = typeMap.conditions[msgType];
|
|
252
|
+
for (const field of Object.keys(condition)) {
|
|
253
|
+
if (!msg[field] || msg[field] !== condition[field]) {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Handles incoming messages from the WebSocket (must be a lambda fn)
|
|
264
|
+
* @param msg - The message to handle
|
|
265
|
+
* @returns
|
|
266
|
+
*/
|
|
192
267
|
onMessage = msg => {
|
|
193
268
|
const event = JSON.parse(msg);
|
|
194
269
|
if (event.type === 'Welcome') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Err","_interopRequireWildcard","require","_types","_loggerProxy","_interopRequireDefault","_constants","_constants2","_WebexRequest","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","AqmReqs","pendingRequests","pendingNotifCancelrequest","constructor","webSocketManager","webexRequest","WebexRequest","getInstance","on","onMessage","bind","req","c","p","cbRes","makeAPIRequest","reqEmpty","createPromise","Promise","resolve","reject","keySuccess","bindPrint","notifSuccess","keyFail","notifFail","keyCancel","notifCancel","k","timeout","Details","key","msg","isClear","clear","check","bindCheck","handle","alternateBind","alternateBindKey","LoggerProxy","log","JSON","stringify","module","AQM_REQS_FILE","method","METHODS","CREATE_PROMISE","eerr","errId","err","response","request","service","host","resource","url","data","HTTP_METHODS","POST","GET","body","then","res","catch","error","headers","Authorization","Message","window","setTimeout","TIMEOUT_REQ","result","Array","isArray","join","slice","includes","event","parse","type","info","ON_MESSAGE","keepalive","isHandled","kReq","keys","thisReq","kReqAlt","exports"],"sources":["aqm-reqs.ts"],"sourcesContent":["import {Msg} from './GlobalTypes';\nimport * as Err from './Err';\nimport {HTTP_METHODS, WebexRequestPayload} from '../../types';\nimport LoggerProxy from '../../logger-proxy';\nimport {CbRes, Conf, ConfEmpty, Pending, Req, Res, ResEmpty} from './types';\nimport {TIMEOUT_REQ, METHODS} from './constants';\nimport {AQM_REQS_FILE} from '../../constants';\nimport WebexRequest from './WebexRequest';\nimport {WebSocketManager} from './websocket/WebSocketManager';\n\nexport default class AqmReqs {\n private pendingRequests: Record<string, Pending> = {};\n private pendingNotifCancelrequest: Record<string, Pending> = {};\n private webexRequest: WebexRequest;\n private webSocketManager: WebSocketManager;\n\n constructor(webSocketManager: WebSocketManager) {\n this.webexRequest = WebexRequest.getInstance();\n this.webSocketManager = webSocketManager;\n this.webSocketManager.on('message', this.onMessage.bind(this));\n }\n\n req<TRes, TErr, TReq>(c: Conf<TRes, TErr, TReq>): Res<TRes, TReq> {\n return (p: TReq, cbRes?: CbRes<TRes>) => this.makeAPIRequest(c(p), cbRes);\n }\n\n reqEmpty<TRes, TErr>(c: ConfEmpty<TRes, TErr>): ResEmpty<TRes> {\n return (cbRes?: CbRes<TRes>) => this.makeAPIRequest(c(), cbRes);\n }\n\n private async makeAPIRequest<TRes, TErr>(c: Req<TRes, TErr>, cbRes?: CbRes<TRes>): Promise<TRes> {\n return this.createPromise(c, cbRes);\n }\n\n private createPromise<TRes, TErr>(c: Req<TRes, TErr>, cbRes?: CbRes<TRes>) {\n return new Promise<TRes>((resolve, reject) => {\n const keySuccess = this.bindPrint(c.notifSuccess.bind);\n const keyFail = c.notifFail ? this.bindPrint(c.notifFail.bind) : null;\n const keyCancel = c.notifCancel?.bind ? this.bindPrint(c.notifCancel.bind) : null;\n let k = '';\n if (this.pendingRequests[keySuccess]) {\n k = keySuccess;\n }\n if (keyFail && this.pendingRequests[keyFail]) {\n k += keyFail;\n }\n if (k && c.timeout !== 'disabled') {\n reject(\n new Err.Details('Service.aqm.reqs.Pending', {\n key: k,\n msg: 'The request has been already created, multiple requests are not allowed.',\n })\n );\n\n return;\n }\n\n let isClear = false;\n const clear = () => {\n delete this.pendingRequests[keySuccess];\n if (keyFail) {\n delete this.pendingRequests[keyFail];\n }\n if (keyCancel) {\n delete this.pendingNotifCancelrequest[keyCancel];\n }\n isClear = true;\n };\n\n this.pendingRequests[keySuccess] = {\n check: (msg: Msg) => this.bindCheck(c.notifSuccess.bind, msg),\n handle: (msg: Msg) => {\n clear();\n resolve(msg as any);\n },\n };\n if (keyCancel) {\n this.pendingRequests[keySuccess].alternateBind = keyCancel;\n this.pendingNotifCancelrequest[keyCancel] = {\n check: (msg: Msg) => this.bindCheck(c.notifCancel?.bind, msg),\n handle: (msg: Msg) => {\n const alternateBindKey = this.pendingNotifCancelrequest[keyCancel].alternateBind;\n if (alternateBindKey) {\n this.pendingRequests[alternateBindKey].handle(msg);\n }\n },\n alternateBind: keySuccess,\n };\n }\n\n if (keyFail) {\n this.pendingRequests[keyFail] = {\n check: (msg: Msg) => this.bindCheck(c.notifFail!.bind, msg),\n handle: (msg: Msg) => {\n clear();\n const notifFail = c.notifFail!;\n if ('errId' in notifFail) {\n LoggerProxy.log(`Routing request failed: ${JSON.stringify(msg)}`, {\n module: AQM_REQS_FILE,\n method: METHODS.CREATE_PROMISE,\n });\n const eerr = new Err.Details(notifFail.errId, msg as any);\n LoggerProxy.log(`Routing request failed: ${eerr}`, {\n module: AQM_REQS_FILE,\n method: METHODS.CREATE_PROMISE,\n });\n reject(eerr);\n } else {\n reject(notifFail.err(msg as any));\n }\n },\n };\n }\n let response: WebexRequestPayload | null = null;\n this.webexRequest\n .request({\n service: c.host ?? '',\n resource: c.url,\n // eslint-disable-next-line no-nested-ternary\n method: c.method ? c.method : c.data ? HTTP_METHODS.POST : HTTP_METHODS.GET,\n\n body: c.data,\n })\n .then((res: any) => {\n response = res;\n if (cbRes) {\n cbRes(res);\n }\n })\n .catch((error: WebexRequestPayload) => {\n clear();\n if (error?.headers) {\n error.headers.Authorization = '*';\n }\n if (error?.headers) {\n error.headers.Authorization = '*';\n }\n if (typeof c.err === 'function') {\n reject(c.err(error));\n } else if (typeof c.err === 'string') {\n reject(new Err.Message(c.err));\n } else {\n reject(new Err.Message('Service.aqm.reqs.GenericRequestError'));\n }\n });\n\n if (c.timeout !== 'disabled') {\n window.setTimeout(\n () => {\n if (isClear) {\n return;\n }\n clear();\n if (response?.headers) {\n response.headers.Authorization = '*';\n }\n LoggerProxy.error(`Routing request timeout${keySuccess}${response!}${c.url}`, {\n module: AQM_REQS_FILE,\n method: METHODS.CREATE_PROMISE,\n });\n reject(\n new Err.Details('Service.aqm.reqs.Timeout', {\n key: keySuccess,\n response: response!,\n })\n );\n },\n c.timeout && c.timeout > 0 ? c.timeout : TIMEOUT_REQ\n );\n }\n });\n }\n\n private bindPrint(bind: any) {\n let result = '';\n // eslint-disable-next-line no-restricted-syntax\n for (const k in bind) {\n if (Array.isArray(bind[k])) {\n result += `${k}=[${bind[k].join(',')}],`;\n } else if (typeof bind[k] === 'object' && bind[k] !== null) {\n result += `${k}=(${this.bindPrint(bind[k])}),`;\n } else {\n result += `${k}=${bind[k]},`;\n }\n }\n\n return result ? result.slice(0, -1) : result;\n }\n\n private bindCheck(bind: any, msg: any) {\n // eslint-disable-next-line no-restricted-syntax\n for (const k in bind) {\n if (Array.isArray(bind[k])) {\n // Check if the message value matches any of the values in the array\n if (!bind[k].includes(msg[k])) {\n return false;\n }\n } else if (typeof bind[k] === 'object' && bind[k] !== null) {\n if (typeof msg[k] === 'object' && msg[k] !== null) {\n if (!this.bindCheck(bind[k], msg[k])) {\n return false;\n }\n } else {\n return false;\n }\n } else if (!msg[k] || msg[k] !== bind[k]) {\n return false;\n }\n }\n\n return true;\n }\n\n // must be lambda\n private readonly onMessage = (msg: any) => {\n const event = JSON.parse(msg);\n if (event.type === 'Welcome') {\n LoggerProxy.info(`Welcome message from Notifs Websocket`, {\n module: AQM_REQS_FILE,\n method: METHODS.ON_MESSAGE,\n });\n\n return;\n }\n\n if (event.keepalive === 'true') {\n return;\n }\n\n if (event.type === 'AgentReloginFailed') {\n LoggerProxy.info('Silently handling the agent relogin fail', {\n module: AQM_REQS_FILE,\n method: METHODS.ON_MESSAGE,\n });\n }\n\n let isHandled = false;\n\n const kReq = Object.keys(this.pendingRequests);\n for (const thisReq of kReq) {\n const req = this.pendingRequests[thisReq];\n if (req.check(event)) {\n req.handle(event);\n isHandled = true;\n break;\n }\n }\n // pendingNotifCancelrequest stores the secondary bind key, checks for the secondary bind key and handles the event\n const kReqAlt = Object.keys(this.pendingNotifCancelrequest);\n for (const thisReq of kReqAlt) {\n const req = this.pendingNotifCancelrequest[thisReq];\n if (req.check(event)) {\n req.handle(event);\n isHandled = true;\n }\n }\n\n // TODO: add event emitter for unhandled events to replicate event.listen or .on\n\n if (!isHandled) {\n LoggerProxy.info(`event=missingEventHandler | [AqmReqs] missing routing message handler`, {\n module: AQM_REQS_FILE,\n method: METHODS.ON_MESSAGE,\n });\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Err","_interopRequireWildcard","require","_types","_loggerProxy","_interopRequireDefault","_constants","_constants2","_WebexRequest","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","AqmReqs","pendingRequests","pendingNotifCancelrequest","constructor","webSocketManager","webexRequest","WebexRequest","getInstance","on","onMessage","bind","req","c","p","cbRes","makeAPIRequest","reqEmpty","createPromise","Promise","resolve","reject","keySuccess","bindPrint","notifSuccess","keyFail","notifFail","keyCancel","notifCancel","k","timeout","Details","key","msg","isClear","clear","check","bindCheck","handle","alternateBind","alternateBindKey","LoggerProxy","log","JSON","stringify","module","AQM_REQS_FILE","method","METHODS","CREATE_PROMISE","eerr","errId","err","response","request","service","host","resource","url","data","HTTP_METHODS","POST","GET","body","then","res","catch","error","headers","Authorization","Message","window","setTimeout","TIMEOUT_REQ","result","keys","filter","prop","value","Array","isArray","join","slice","__typeMap","typeMapCheck","bindValue","msgValue","includes","typeMap","typeField","msgType","conditions","condition","field","event","parse","type","info","ON_MESSAGE","keepalive","isHandled","kReq","thisReq","kReqAlt","exports"],"sources":["aqm-reqs.ts"],"sourcesContent":["import {Msg} from './GlobalTypes';\nimport * as Err from './Err';\nimport {HTTP_METHODS, WebexRequestPayload} from '../../types';\nimport LoggerProxy from '../../logger-proxy';\nimport {CbRes, Conf, ConfEmpty, Pending, Req, Res, ResEmpty} from './types';\nimport {TIMEOUT_REQ, METHODS} from './constants';\nimport {AQM_REQS_FILE} from '../../constants';\nimport WebexRequest from './WebexRequest';\nimport {WebSocketManager} from './websocket/WebSocketManager';\n\nexport default class AqmReqs {\n private pendingRequests: Record<string, Pending> = {};\n private pendingNotifCancelrequest: Record<string, Pending> = {};\n private webexRequest: WebexRequest;\n private webSocketManager: WebSocketManager;\n\n constructor(webSocketManager: WebSocketManager) {\n this.webexRequest = WebexRequest.getInstance();\n this.webSocketManager = webSocketManager;\n this.webSocketManager.on('message', this.onMessage.bind(this));\n }\n\n /**\n * Creates a request function for an API call with parameters\n * @param c - The configuration for the request\n * @returns A function that makes the API request\n */\n req<TRes, TErr, TReq>(c: Conf<TRes, TErr, TReq>): Res<TRes, TReq> {\n return (p: TReq, cbRes?: CbRes<TRes>) => this.makeAPIRequest(c(p), cbRes);\n }\n\n /**\n * Creates a request function for an API call with no parameters\n * @param c - The configuration for the request\n * @returns A function that makes the API request\n */\n reqEmpty<TRes, TErr>(c: ConfEmpty<TRes, TErr>): ResEmpty<TRes> {\n return (cbRes?: CbRes<TRes>) => this.makeAPIRequest(c(), cbRes);\n }\n\n /**\n * Makes an API request\n * @param c - The request configuration\n * @param cbRes - The callback for the response\n * @returns A promise that resolves with the response or rejects with an error\n */\n private async makeAPIRequest<TRes, TErr>(c: Req<TRes, TErr>, cbRes?: CbRes<TRes>): Promise<TRes> {\n return this.createPromise(c, cbRes);\n }\n\n /**\n * Creates a promise for an API request\n * @param c - The request configuration\n * @param cbRes - The callback for the response\n * @returns A promise that resolves with the response or rejects with an error\n */\n private createPromise<TRes, TErr>(c: Req<TRes, TErr>, cbRes?: CbRes<TRes>) {\n return new Promise<TRes>((resolve, reject) => {\n const keySuccess = this.bindPrint(c.notifSuccess.bind);\n const keyFail = c.notifFail ? this.bindPrint(c.notifFail.bind) : null;\n const keyCancel = c.notifCancel?.bind ? this.bindPrint(c.notifCancel.bind) : null;\n let k = '';\n if (this.pendingRequests[keySuccess]) {\n k = keySuccess;\n }\n if (keyFail && this.pendingRequests[keyFail]) {\n k += keyFail;\n }\n if (k && c.timeout !== 'disabled') {\n reject(\n new Err.Details('Service.aqm.reqs.Pending', {\n key: k,\n msg: 'The request has been already created, multiple requests are not allowed.',\n })\n );\n\n return;\n }\n\n let isClear = false;\n const clear = () => {\n delete this.pendingRequests[keySuccess];\n if (keyFail) {\n delete this.pendingRequests[keyFail];\n }\n if (keyCancel) {\n delete this.pendingNotifCancelrequest[keyCancel];\n }\n isClear = true;\n };\n\n this.pendingRequests[keySuccess] = {\n check: (msg: Msg) => this.bindCheck(c.notifSuccess.bind, msg),\n handle: (msg: Msg) => {\n clear();\n resolve(msg as any);\n },\n };\n if (keyCancel) {\n this.pendingRequests[keySuccess].alternateBind = keyCancel;\n this.pendingNotifCancelrequest[keyCancel] = {\n check: (msg: Msg) => this.bindCheck(c.notifCancel?.bind, msg),\n handle: (msg: Msg) => {\n const alternateBindKey = this.pendingNotifCancelrequest[keyCancel].alternateBind;\n if (alternateBindKey) {\n this.pendingRequests[alternateBindKey].handle(msg);\n }\n },\n alternateBind: keySuccess,\n };\n }\n\n if (keyFail) {\n this.pendingRequests[keyFail] = {\n check: (msg: Msg) => this.bindCheck(c.notifFail!.bind, msg),\n handle: (msg: Msg) => {\n clear();\n const notifFail = c.notifFail!;\n if ('errId' in notifFail) {\n LoggerProxy.log(`Routing request failed: ${JSON.stringify(msg)}`, {\n module: AQM_REQS_FILE,\n method: METHODS.CREATE_PROMISE,\n });\n const eerr = new Err.Details(notifFail.errId, msg as any);\n LoggerProxy.log(`Routing request failed: ${eerr}`, {\n module: AQM_REQS_FILE,\n method: METHODS.CREATE_PROMISE,\n });\n reject(eerr);\n } else {\n reject(notifFail.err(msg as any));\n }\n },\n };\n }\n let response: WebexRequestPayload | null = null;\n this.webexRequest\n .request({\n service: c.host ?? '',\n resource: c.url,\n // eslint-disable-next-line no-nested-ternary\n method: c.method ? c.method : c.data ? HTTP_METHODS.POST : HTTP_METHODS.GET,\n\n body: c.data,\n })\n .then((res: any) => {\n response = res;\n if (cbRes) {\n cbRes(res);\n }\n })\n .catch((error: WebexRequestPayload) => {\n clear();\n if (error?.headers) {\n error.headers.Authorization = '*';\n }\n if (error?.headers) {\n error.headers.Authorization = '*';\n }\n if (typeof c.err === 'function') {\n reject(c.err(error));\n } else if (typeof c.err === 'string') {\n reject(new Err.Message(c.err));\n } else {\n reject(new Err.Message('Service.aqm.reqs.GenericRequestError'));\n }\n });\n\n if (c.timeout !== 'disabled') {\n window.setTimeout(\n () => {\n if (isClear) {\n return;\n }\n clear();\n if (response?.headers) {\n response.headers.Authorization = '*';\n }\n LoggerProxy.error(\n `Routing request timeout${keySuccess}${JSON.stringify(response)}${c.url}`,\n {\n module: AQM_REQS_FILE,\n method: METHODS.CREATE_PROMISE,\n }\n );\n reject(\n new Err.Details('Service.aqm.reqs.Timeout', {\n key: keySuccess,\n response: response!,\n })\n );\n },\n c.timeout && c.timeout > 0 ? c.timeout : TIMEOUT_REQ\n );\n }\n });\n }\n\n /**\n * Converts a bind object to a string representation\n * @param bind - The bind object to convert\n * @returns A string representation of the bind object\n */\n private bindPrint(bind: any): string {\n let result = '';\n for (const key of Object.keys(bind).filter((prop) => prop !== '__typeMap')) {\n const value = bind[key];\n\n if (Array.isArray(value)) {\n result += `${key}=[${value.join(',')}],`;\n } else if (typeof value === 'object' && value !== null) {\n result += `${key}=(${this.bindPrint(value)}),`;\n } else {\n result += `${key}=${value},`;\n }\n }\n\n return result ? result.slice(0, -1) : result;\n }\n\n /**\n * Checks if a message matches a bind object\n * @param bind - The bind object to check against\n * @param msg - The message to check\n * @returns True if the message matches the bind object, false otherwise\n */\n private bindCheck(bind: any, msg: any): boolean {\n // Handle type-dependent field matching if __typeMap is present\n if (bind.__typeMap && typeof bind.__typeMap === 'object') {\n if (!AqmReqs.typeMapCheck(bind.__typeMap, msg)) {\n return false;\n }\n }\n\n for (const key of Object.keys(bind).filter((prop) => prop !== '__typeMap')) {\n const bindValue = bind[key];\n const msgValue = msg[key];\n\n if (Array.isArray(bindValue)) {\n // Check if the message value matches any of the values in the array\n if (!bindValue.includes(msgValue)) {\n return false;\n }\n } else if (typeof bindValue === 'object' && bindValue !== null) {\n if (typeof msgValue === 'object' && msgValue !== null) {\n if (!this.bindCheck(bindValue, msgValue)) {\n return false;\n }\n } else {\n return false;\n }\n } else if (!msgValue || msgValue !== bindValue) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Checks type-dependent field conditions defined in __typeMap.\n * @param typeMap - The type map to check against\n * @param msg - The message to check\n * @returns True if the message matches the type map, false otherwise\n * The typeMap has the shape:\n * { typeField: \"type\", conditions: { EventA: { field: value }, EventB: { field: value } } }\n * It reads msg[typeField] to determine which condition set to apply,\n * then verifies all fields in that condition match the message.\n */\n private static typeMapCheck(typeMap: any, msg: any): boolean {\n const typeField = typeMap.typeField || 'type';\n const msgType = msg[typeField];\n\n if (typeMap.conditions && typeMap.conditions[msgType]) {\n const condition = typeMap.conditions[msgType];\n for (const field of Object.keys(condition)) {\n if (!msg[field] || msg[field] !== condition[field]) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Handles incoming messages from the WebSocket (must be a lambda fn)\n * @param msg - The message to handle\n * @returns\n */\n private readonly onMessage = (msg: any) => {\n const event = JSON.parse(msg);\n if (event.type === 'Welcome') {\n LoggerProxy.info(`Welcome message from Notifs Websocket`, {\n module: AQM_REQS_FILE,\n method: METHODS.ON_MESSAGE,\n });\n\n return;\n }\n\n if (event.keepalive === 'true') {\n return;\n }\n\n if (event.type === 'AgentReloginFailed') {\n LoggerProxy.info('Silently handling the agent relogin fail', {\n module: AQM_REQS_FILE,\n method: METHODS.ON_MESSAGE,\n });\n }\n\n let isHandled = false;\n\n const kReq = Object.keys(this.pendingRequests);\n for (const thisReq of kReq) {\n const req = this.pendingRequests[thisReq];\n if (req.check(event)) {\n req.handle(event);\n isHandled = true;\n break;\n }\n }\n // pendingNotifCancelrequest stores the secondary bind key, checks for the secondary bind key and handles the event\n const kReqAlt = Object.keys(this.pendingNotifCancelrequest);\n for (const thisReq of kReqAlt) {\n const req = this.pendingNotifCancelrequest[thisReq];\n if (req.check(event)) {\n req.handle(event);\n isHandled = true;\n }\n }\n\n // TODO: add event emitter for unhandled events to replicate event.listen or .on\n\n if (!isHandled) {\n LoggerProxy.info(`event=missingEventHandler | [AqmReqs] missing routing message handler`, {\n module: AQM_REQS_FILE,\n method: METHODS.ON_MESSAGE,\n });\n }\n };\n}\n"],"mappings":";;;;;;AACA,IAAAA,GAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAH,sBAAA,CAAAH,OAAA;AAA0C,SAAAG,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAR,wBAAAQ,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAZ,uBAAA,YAAAA,CAAAQ,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAG3B,MAAMgB,OAAO,CAAC;EACnBC,eAAe,GAA4B,CAAC,CAAC;EAC7CC,yBAAyB,GAA4B,CAAC,CAAC;EAI/DC,WAAWA,CAACC,gBAAkC,EAAE;IAC9C,IAAI,CAACC,YAAY,GAAGC,qBAAY,CAACC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAACH,gBAAgB,GAAGA,gBAAgB;IACxC,IAAI,CAACA,gBAAgB,CAACI,EAAE,CAAC,SAAS,EAAE,IAAI,CAACC,SAAS,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;EAChE;;EAEA;AACF;AACA;AACA;AACA;EACEC,GAAGA,CAAmBC,CAAyB,EAAmB;IAChE,OAAO,CAACC,CAAO,EAAEC,KAAmB,KAAK,IAAI,CAACC,cAAc,CAACH,CAAC,CAACC,CAAC,CAAC,EAAEC,KAAK,CAAC;EAC3E;;EAEA;AACF;AACA;AACA;AACA;EACEE,QAAQA,CAAaJ,CAAwB,EAAkB;IAC7D,OAAQE,KAAmB,IAAK,IAAI,CAACC,cAAc,CAACH,CAAC,CAAC,CAAC,EAAEE,KAAK,CAAC;EACjE;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAcC,cAAcA,CAAaH,CAAkB,EAAEE,KAAmB,EAAiB;IAC/F,OAAO,IAAI,CAACG,aAAa,CAACL,CAAC,EAAEE,KAAK,CAAC;EACrC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACUG,aAAaA,CAAaL,CAAkB,EAAEE,KAAmB,EAAE;IACzE,OAAO,IAAII,OAAO,CAAO,CAACC,OAAO,EAAEC,MAAM,KAAK;MAC5C,MAAMC,UAAU,GAAG,IAAI,CAACC,SAAS,CAACV,CAAC,CAACW,YAAY,CAACb,IAAI,CAAC;MACtD,MAAMc,OAAO,GAAGZ,CAAC,CAACa,SAAS,GAAG,IAAI,CAACH,SAAS,CAACV,CAAC,CAACa,SAAS,CAACf,IAAI,CAAC,GAAG,IAAI;MACrE,MAAMgB,SAAS,GAAGd,CAAC,CAACe,WAAW,EAAEjB,IAAI,GAAG,IAAI,CAACY,SAAS,CAACV,CAAC,CAACe,WAAW,CAACjB,IAAI,CAAC,GAAG,IAAI;MACjF,IAAIkB,CAAC,GAAG,EAAE;MACV,IAAI,IAAI,CAAC3B,eAAe,CAACoB,UAAU,CAAC,EAAE;QACpCO,CAAC,GAAGP,UAAU;MAChB;MACA,IAAIG,OAAO,IAAI,IAAI,CAACvB,eAAe,CAACuB,OAAO,CAAC,EAAE;QAC5CI,CAAC,IAAIJ,OAAO;MACd;MACA,IAAII,CAAC,IAAIhB,CAAC,CAACiB,OAAO,KAAK,UAAU,EAAE;QACjCT,MAAM,CACJ,IAAIhD,GAAG,CAAC0D,OAAO,CAAC,0BAA0B,EAAE;UAC1CC,GAAG,EAAEH,CAAC;UACNI,GAAG,EAAE;QACP,CAAC,CACH,CAAC;QAED;MACF;MAEA,IAAIC,OAAO,GAAG,KAAK;MACnB,MAAMC,KAAK,GAAGA,CAAA,KAAM;QAClB,OAAO,IAAI,CAACjC,eAAe,CAACoB,UAAU,CAAC;QACvC,IAAIG,OAAO,EAAE;UACX,OAAO,IAAI,CAACvB,eAAe,CAACuB,OAAO,CAAC;QACtC;QACA,IAAIE,SAAS,EAAE;UACb,OAAO,IAAI,CAACxB,yBAAyB,CAACwB,SAAS,CAAC;QAClD;QACAO,OAAO,GAAG,IAAI;MAChB,CAAC;MAED,IAAI,CAAChC,eAAe,CAACoB,UAAU,CAAC,GAAG;QACjCc,KAAK,EAAGH,GAAQ,IAAK,IAAI,CAACI,SAAS,CAACxB,CAAC,CAACW,YAAY,CAACb,IAAI,EAAEsB,GAAG,CAAC;QAC7DK,MAAM,EAAGL,GAAQ,IAAK;UACpBE,KAAK,CAAC,CAAC;UACPf,OAAO,CAACa,GAAU,CAAC;QACrB;MACF,CAAC;MACD,IAAIN,SAAS,EAAE;QACb,IAAI,CAACzB,eAAe,CAACoB,UAAU,CAAC,CAACiB,aAAa,GAAGZ,SAAS;QAC1D,IAAI,CAACxB,yBAAyB,CAACwB,SAAS,CAAC,GAAG;UAC1CS,KAAK,EAAGH,GAAQ,IAAK,IAAI,CAACI,SAAS,CAACxB,CAAC,CAACe,WAAW,EAAEjB,IAAI,EAAEsB,GAAG,CAAC;UAC7DK,MAAM,EAAGL,GAAQ,IAAK;YACpB,MAAMO,gBAAgB,GAAG,IAAI,CAACrC,yBAAyB,CAACwB,SAAS,CAAC,CAACY,aAAa;YAChF,IAAIC,gBAAgB,EAAE;cACpB,IAAI,CAACtC,eAAe,CAACsC,gBAAgB,CAAC,CAACF,MAAM,CAACL,GAAG,CAAC;YACpD;UACF,CAAC;UACDM,aAAa,EAAEjB;QACjB,CAAC;MACH;MAEA,IAAIG,OAAO,EAAE;QACX,IAAI,CAACvB,eAAe,CAACuB,OAAO,CAAC,GAAG;UAC9BW,KAAK,EAAGH,GAAQ,IAAK,IAAI,CAACI,SAAS,CAACxB,CAAC,CAACa,SAAS,CAAEf,IAAI,EAAEsB,GAAG,CAAC;UAC3DK,MAAM,EAAGL,GAAQ,IAAK;YACpBE,KAAK,CAAC,CAAC;YACP,MAAMT,SAAS,GAAGb,CAAC,CAACa,SAAU;YAC9B,IAAI,OAAO,IAAIA,SAAS,EAAE;cACxBe,oBAAW,CAACC,GAAG,CAAC,2BAA2BC,IAAI,CAACC,SAAS,CAACX,GAAG,CAAC,EAAE,EAAE;gBAChEY,MAAM,EAAEC,yBAAa;gBACrBC,MAAM,EAAEC,kBAAO,CAACC;cAClB,CAAC,CAAC;cACF,MAAMC,IAAI,GAAG,IAAI7E,GAAG,CAAC0D,OAAO,CAACL,SAAS,CAACyB,KAAK,EAAElB,GAAU,CAAC;cACzDQ,oBAAW,CAACC,GAAG,CAAC,2BAA2BQ,IAAI,EAAE,EAAE;gBACjDL,MAAM,EAAEC,yBAAa;gBACrBC,MAAM,EAAEC,kBAAO,CAACC;cAClB,CAAC,CAAC;cACF5B,MAAM,CAAC6B,IAAI,CAAC;YACd,CAAC,MAAM;cACL7B,MAAM,CAACK,SAAS,CAAC0B,GAAG,CAACnB,GAAU,CAAC,CAAC;YACnC;UACF;QACF,CAAC;MACH;MACA,IAAIoB,QAAoC,GAAG,IAAI;MAC/C,IAAI,CAAC/C,YAAY,CACdgD,OAAO,CAAC;QACPC,OAAO,EAAE1C,CAAC,CAAC2C,IAAI,IAAI,EAAE;QACrBC,QAAQ,EAAE5C,CAAC,CAAC6C,GAAG;QACf;QACAX,MAAM,EAAElC,CAAC,CAACkC,MAAM,GAAGlC,CAAC,CAACkC,MAAM,GAAGlC,CAAC,CAAC8C,IAAI,GAAGC,mBAAY,CAACC,IAAI,GAAGD,mBAAY,CAACE,GAAG;QAE3EC,IAAI,EAAElD,CAAC,CAAC8C;MACV,CAAC,CAAC,CACDK,IAAI,CAAEC,GAAQ,IAAK;QAClBZ,QAAQ,GAAGY,GAAG;QACd,IAAIlD,KAAK,EAAE;UACTA,KAAK,CAACkD,GAAG,CAAC;QACZ;MACF,CAAC,CAAC,CACDC,KAAK,CAAEC,KAA0B,IAAK;QACrChC,KAAK,CAAC,CAAC;QACP,IAAIgC,KAAK,EAAEC,OAAO,EAAE;UAClBD,KAAK,CAACC,OAAO,CAACC,aAAa,GAAG,GAAG;QACnC;QACA,IAAIF,KAAK,EAAEC,OAAO,EAAE;UAClBD,KAAK,CAACC,OAAO,CAACC,aAAa,GAAG,GAAG;QACnC;QACA,IAAI,OAAOxD,CAAC,CAACuC,GAAG,KAAK,UAAU,EAAE;UAC/B/B,MAAM,CAACR,CAAC,CAACuC,GAAG,CAACe,KAAK,CAAC,CAAC;QACtB,CAAC,MAAM,IAAI,OAAOtD,CAAC,CAACuC,GAAG,KAAK,QAAQ,EAAE;UACpC/B,MAAM,CAAC,IAAIhD,GAAG,CAACiG,OAAO,CAACzD,CAAC,CAACuC,GAAG,CAAC,CAAC;QAChC,CAAC,MAAM;UACL/B,MAAM,CAAC,IAAIhD,GAAG,CAACiG,OAAO,CAAC,sCAAsC,CAAC,CAAC;QACjE;MACF,CAAC,CAAC;MAEJ,IAAIzD,CAAC,CAACiB,OAAO,KAAK,UAAU,EAAE;QAC5ByC,MAAM,CAACC,UAAU,CACf,MAAM;UACJ,IAAItC,OAAO,EAAE;YACX;UACF;UACAC,KAAK,CAAC,CAAC;UACP,IAAIkB,QAAQ,EAAEe,OAAO,EAAE;YACrBf,QAAQ,CAACe,OAAO,CAACC,aAAa,GAAG,GAAG;UACtC;UACA5B,oBAAW,CAAC0B,KAAK,CACf,0BAA0B7C,UAAU,GAAGqB,IAAI,CAACC,SAAS,CAACS,QAAQ,CAAC,GAAGxC,CAAC,CAAC6C,GAAG,EAAE,EACzE;YACEb,MAAM,EAAEC,yBAAa;YACrBC,MAAM,EAAEC,kBAAO,CAACC;UAClB,CACF,CAAC;UACD5B,MAAM,CACJ,IAAIhD,GAAG,CAAC0D,OAAO,CAAC,0BAA0B,EAAE;YAC1CC,GAAG,EAAEV,UAAU;YACf+B,QAAQ,EAAEA;UACZ,CAAC,CACH,CAAC;QACH,CAAC,EACDxC,CAAC,CAACiB,OAAO,IAAIjB,CAAC,CAACiB,OAAO,GAAG,CAAC,GAAGjB,CAAC,CAACiB,OAAO,GAAG2C,sBAC3C,CAAC;MACH;IACF,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACUlD,SAASA,CAACZ,IAAS,EAAU;IACnC,IAAI+D,MAAM,GAAG,EAAE;IACf,KAAK,MAAM1C,GAAG,IAAIlC,MAAM,CAAC6E,IAAI,CAAChE,IAAI,CAAC,CAACiE,MAAM,CAAEC,IAAI,IAAKA,IAAI,KAAK,WAAW,CAAC,EAAE;MAC1E,MAAMC,KAAK,GAAGnE,IAAI,CAACqB,GAAG,CAAC;MAEvB,IAAI+C,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,EAAE;QACxBJ,MAAM,IAAI,GAAG1C,GAAG,KAAK8C,KAAK,CAACG,IAAI,CAAC,GAAG,CAAC,IAAI;MAC1C,CAAC,MAAM,IAAI,OAAOH,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE;QACtDJ,MAAM,IAAI,GAAG1C,GAAG,KAAK,IAAI,CAACT,SAAS,CAACuD,KAAK,CAAC,IAAI;MAChD,CAAC,MAAM;QACLJ,MAAM,IAAI,GAAG1C,GAAG,IAAI8C,KAAK,GAAG;MAC9B;IACF;IAEA,OAAOJ,MAAM,GAAGA,MAAM,CAACQ,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAGR,MAAM;EAC9C;;EAEA;AACF;AACA;AACA;AACA;AACA;EACUrC,SAASA,CAAC1B,IAAS,EAAEsB,GAAQ,EAAW;IAC9C;IACA,IAAItB,IAAI,CAACwE,SAAS,IAAI,OAAOxE,IAAI,CAACwE,SAAS,KAAK,QAAQ,EAAE;MACxD,IAAI,CAAClF,OAAO,CAACmF,YAAY,CAACzE,IAAI,CAACwE,SAAS,EAAElD,GAAG,CAAC,EAAE;QAC9C,OAAO,KAAK;MACd;IACF;IAEA,KAAK,MAAMD,GAAG,IAAIlC,MAAM,CAAC6E,IAAI,CAAChE,IAAI,CAAC,CAACiE,MAAM,CAAEC,IAAI,IAAKA,IAAI,KAAK,WAAW,CAAC,EAAE;MAC1E,MAAMQ,SAAS,GAAG1E,IAAI,CAACqB,GAAG,CAAC;MAC3B,MAAMsD,QAAQ,GAAGrD,GAAG,CAACD,GAAG,CAAC;MAEzB,IAAI+C,KAAK,CAACC,OAAO,CAACK,SAAS,CAAC,EAAE;QAC5B;QACA,IAAI,CAACA,SAAS,CAACE,QAAQ,CAACD,QAAQ,CAAC,EAAE;UACjC,OAAO,KAAK;QACd;MACF,CAAC,MAAM,IAAI,OAAOD,SAAS,KAAK,QAAQ,IAAIA,SAAS,KAAK,IAAI,EAAE;QAC9D,IAAI,OAAOC,QAAQ,KAAK,QAAQ,IAAIA,QAAQ,KAAK,IAAI,EAAE;UACrD,IAAI,CAAC,IAAI,CAACjD,SAAS,CAACgD,SAAS,EAAEC,QAAQ,CAAC,EAAE;YACxC,OAAO,KAAK;UACd;QACF,CAAC,MAAM;UACL,OAAO,KAAK;QACd;MACF,CAAC,MAAM,IAAI,CAACA,QAAQ,IAAIA,QAAQ,KAAKD,SAAS,EAAE;QAC9C,OAAO,KAAK;MACd;IACF;IAEA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAeD,YAAYA,CAACI,OAAY,EAAEvD,GAAQ,EAAW;IAC3D,MAAMwD,SAAS,GAAGD,OAAO,CAACC,SAAS,IAAI,MAAM;IAC7C,MAAMC,OAAO,GAAGzD,GAAG,CAACwD,SAAS,CAAC;IAE9B,IAAID,OAAO,CAACG,UAAU,IAAIH,OAAO,CAACG,UAAU,CAACD,OAAO,CAAC,EAAE;MACrD,MAAME,SAAS,GAAGJ,OAAO,CAACG,UAAU,CAACD,OAAO,CAAC;MAC7C,KAAK,MAAMG,KAAK,IAAI/F,MAAM,CAAC6E,IAAI,CAACiB,SAAS,CAAC,EAAE;QAC1C,IAAI,CAAC3D,GAAG,CAAC4D,KAAK,CAAC,IAAI5D,GAAG,CAAC4D,KAAK,CAAC,KAAKD,SAAS,CAACC,KAAK,CAAC,EAAE;UAClD,OAAO,KAAK;QACd;MACF;MAEA,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;;EAEA;AACF;AACA;AACA;AACA;EACmBnF,SAAS,GAAIuB,GAAQ,IAAK;IACzC,MAAM6D,KAAK,GAAGnD,IAAI,CAACoD,KAAK,CAAC9D,GAAG,CAAC;IAC7B,IAAI6D,KAAK,CAACE,IAAI,KAAK,SAAS,EAAE;MAC5BvD,oBAAW,CAACwD,IAAI,CAAC,uCAAuC,EAAE;QACxDpD,MAAM,EAAEC,yBAAa;QACrBC,MAAM,EAAEC,kBAAO,CAACkD;MAClB,CAAC,CAAC;MAEF;IACF;IAEA,IAAIJ,KAAK,CAACK,SAAS,KAAK,MAAM,EAAE;MAC9B;IACF;IAEA,IAAIL,KAAK,CAACE,IAAI,KAAK,oBAAoB,EAAE;MACvCvD,oBAAW,CAACwD,IAAI,CAAC,0CAA0C,EAAE;QAC3DpD,MAAM,EAAEC,yBAAa;QACrBC,MAAM,EAAEC,kBAAO,CAACkD;MAClB,CAAC,CAAC;IACJ;IAEA,IAAIE,SAAS,GAAG,KAAK;IAErB,MAAMC,IAAI,GAAGvG,MAAM,CAAC6E,IAAI,CAAC,IAAI,CAACzE,eAAe,CAAC;IAC9C,KAAK,MAAMoG,OAAO,IAAID,IAAI,EAAE;MAC1B,MAAMzF,GAAG,GAAG,IAAI,CAACV,eAAe,CAACoG,OAAO,CAAC;MACzC,IAAI1F,GAAG,CAACwB,KAAK,CAAC0D,KAAK,CAAC,EAAE;QACpBlF,GAAG,CAAC0B,MAAM,CAACwD,KAAK,CAAC;QACjBM,SAAS,GAAG,IAAI;QAChB;MACF;IACF;IACA;IACA,MAAMG,OAAO,GAAGzG,MAAM,CAAC6E,IAAI,CAAC,IAAI,CAACxE,yBAAyB,CAAC;IAC3D,KAAK,MAAMmG,OAAO,IAAIC,OAAO,EAAE;MAC7B,MAAM3F,GAAG,GAAG,IAAI,CAACT,yBAAyB,CAACmG,OAAO,CAAC;MACnD,IAAI1F,GAAG,CAACwB,KAAK,CAAC0D,KAAK,CAAC,EAAE;QACpBlF,GAAG,CAAC0B,MAAM,CAACwD,KAAK,CAAC;QACjBM,SAAS,GAAG,IAAI;MAClB;IACF;;IAEA;;IAEA,IAAI,CAACA,SAAS,EAAE;MACd3D,oBAAW,CAACwD,IAAI,CAAC,uEAAuE,EAAE;QACxFpD,MAAM,EAAEC,yBAAa;QACrBC,MAAM,EAAEC,kBAAO,CAACkD;MAClB,CAAC,CAAC;IACJ;EACF,CAAC;AACH;AAACM,OAAA,CAAAxH,OAAA,GAAAiB,OAAA","ignoreList":[]}
|
|
@@ -59,7 +59,7 @@ class TaskManager extends _events.default {
|
|
|
59
59
|
this.webRtcEnabled = webRtcEnabled;
|
|
60
60
|
}
|
|
61
61
|
handleIncomingWebCall = call => {
|
|
62
|
-
const currentTask = Object.values(this.taskCollection).find(task => task.data.interaction.mediaType === 'telephony');
|
|
62
|
+
const currentTask = Object.values(this.taskCollection).find(task => task.data.interaction.mediaType === 'telephony' && !(0, _TaskUtils.isCampaignPreviewReservation)(task));
|
|
63
63
|
if (currentTask) {
|
|
64
64
|
this.webCallingService.mapCallToTask(call.getCallId(), currentTask.data.interactionId);
|
|
65
65
|
_loggerProxy.default.log(`Call mapped to task`, {
|
|
@@ -185,8 +185,21 @@ class TaskManager extends _events.default {
|
|
|
185
185
|
}
|
|
186
186
|
break;
|
|
187
187
|
case _types2.CC_EVENTS.AGENT_CONTACT_ASSIGNED:
|
|
188
|
-
|
|
189
|
-
task
|
|
188
|
+
// When a campaign preview contact is accepted, the assigned event may arrive
|
|
189
|
+
// with a new interactionId while the task is stored under the original
|
|
190
|
+
// reservationInteractionId. Fall back to that key so the task is found.
|
|
191
|
+
if (!task && payload.data.reservationInteractionId) {
|
|
192
|
+
task = this.taskCollection[payload.data.reservationInteractionId];
|
|
193
|
+
if (task) {
|
|
194
|
+
// Re-key the task under the new interaction ID and remove the old entry
|
|
195
|
+
delete this.taskCollection[payload.data.reservationInteractionId];
|
|
196
|
+
this.taskCollection[payload.data.interactionId] = task;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (task) {
|
|
200
|
+
task = this.updateTaskData(task, payload.data);
|
|
201
|
+
task.emit(_types.TASK_EVENTS.TASK_ASSIGNED, task);
|
|
202
|
+
}
|
|
190
203
|
break;
|
|
191
204
|
case _types2.CC_EVENTS.AGENT_CONTACT_UNASSIGNED:
|
|
192
205
|
task = this.updateTaskData(task, {
|
|
@@ -199,6 +212,11 @@ class TaskManager extends _events.default {
|
|
|
199
212
|
case _types2.CC_EVENTS.AGENT_CONTACT_ASSIGN_FAILED:
|
|
200
213
|
case _types2.CC_EVENTS.AGENT_INVITE_FAILED:
|
|
201
214
|
{
|
|
215
|
+
_loggerProxy.default.warn(`[DEBUG-CAMPAIGN-CLEAR] Task removal triggered by ${payload.data.type}, interactionId=${payload.data.interactionId}, taskType=${task?.data?.type}`, {
|
|
216
|
+
module: _constants.TASK_MANAGER_FILE,
|
|
217
|
+
method: _constants2.METHODS.REGISTER_TASK_LISTENERS,
|
|
218
|
+
interactionId: payload.data.interactionId
|
|
219
|
+
});
|
|
202
220
|
task = this.updateTaskData(task, payload.data);
|
|
203
221
|
const eventTypeToMetricMap = {
|
|
204
222
|
[_types2.CC_EVENTS.AGENT_CONTACT_ASSIGN_FAILED]: 'AGENT_CONTACT_ASSIGN_FAILED',
|
|
@@ -217,6 +235,11 @@ class TaskManager extends _events.default {
|
|
|
217
235
|
case _types2.CC_EVENTS.CONTACT_ENDED:
|
|
218
236
|
// Update task data
|
|
219
237
|
if (task) {
|
|
238
|
+
_loggerProxy.default.warn(`[DEBUG-CAMPAIGN-CLEAR] CONTACT_ENDED, interactionId=${payload.data.interactionId}, taskType=${task?.data?.type}, state=${task?.data?.interaction?.state}`, {
|
|
239
|
+
module: _constants.TASK_MANAGER_FILE,
|
|
240
|
+
method: _constants2.METHODS.REGISTER_TASK_LISTENERS,
|
|
241
|
+
interactionId: payload.data.interactionId
|
|
242
|
+
});
|
|
220
243
|
task = this.updateTaskData(task, {
|
|
221
244
|
...payload.data,
|
|
222
245
|
wrapUpRequired: payload.data.agentsPendingWrapUp?.includes(this.agentId) || false
|
|
@@ -227,6 +250,14 @@ class TaskManager extends _events.default {
|
|
|
227
250
|
task?.emit(_types.TASK_EVENTS.TASK_END, task);
|
|
228
251
|
}
|
|
229
252
|
break;
|
|
253
|
+
case _types2.CC_EVENTS.CAMPAIGN_CONTACT_UPDATED:
|
|
254
|
+
// CampaignContactUpdated is a non-terminal event (intermediate update during accept).
|
|
255
|
+
// Only update the task data — do NOT remove the task or emit TASK_END.
|
|
256
|
+
// Task cleanup is handled by CONTACT_ENDED or other terminal events.
|
|
257
|
+
if (task) {
|
|
258
|
+
task = this.updateTaskData(task, payload.data);
|
|
259
|
+
}
|
|
260
|
+
break;
|
|
230
261
|
case _types2.CC_EVENTS.CONTACT_MERGED:
|
|
231
262
|
task = this.handleContactMerged(task, payload.data);
|
|
232
263
|
break;
|
|
@@ -407,6 +438,32 @@ class TaskManager extends _events.default {
|
|
|
407
438
|
task = this.updateTaskData(task, payload.data);
|
|
408
439
|
task.emit(_types.TASK_EVENTS.TASK_POST_CALL_ACTIVITY, task);
|
|
409
440
|
break;
|
|
441
|
+
case _types2.CC_EVENTS.AGENT_OFFER_CAMPAIGN_RESERVATION:
|
|
442
|
+
{
|
|
443
|
+
// Campaign preview contact offered to agent
|
|
444
|
+
// Create a task in the collection so subsequent events (e.g. AGENT_CONTACT_ASSIGNED
|
|
445
|
+
// after acceptPreviewContact) can find and update it.
|
|
446
|
+
// Emit TASK_CAMPAIGN_PREVIEW_RESERVATION instead of TASK_INCOMING so the call
|
|
447
|
+
// does not ring out to the customer before the agent explicitly accepts the preview contact.
|
|
448
|
+
_loggerProxy.default.log('Campaign preview reservation received', {
|
|
449
|
+
module: _constants.TASK_MANAGER_FILE,
|
|
450
|
+
method: _constants2.METHODS.REGISTER_TASK_LISTENERS,
|
|
451
|
+
interactionId: payload.data.interactionId
|
|
452
|
+
});
|
|
453
|
+
if (!this.taskCollection[payload.data.interactionId]) {
|
|
454
|
+
task = new _.default(this.contact, this.webCallingService, {
|
|
455
|
+
...payload.data,
|
|
456
|
+
wrapUpRequired: false,
|
|
457
|
+
isConferenceInProgress: false,
|
|
458
|
+
isAutoAnswering: false
|
|
459
|
+
}, this.wrapupData, this.agentId);
|
|
460
|
+
this.taskCollection[payload.data.interactionId] = task;
|
|
461
|
+
} else {
|
|
462
|
+
task = this.updateTaskData(task, payload.data);
|
|
463
|
+
}
|
|
464
|
+
this.emit(_types.TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_RESERVATION, task);
|
|
465
|
+
break;
|
|
466
|
+
}
|
|
410
467
|
default:
|
|
411
468
|
break;
|
|
412
469
|
}
|