@webex/contact-center 3.12.0-next.13 → 3.12.0-next.130
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.sdd/manifest.json +884 -0
- package/AGENTS.md +94 -0
- package/ai-docs/ARCHITECTURE.md +168 -0
- package/ai-docs/CONTRACTS.md +53 -0
- package/ai-docs/GETTING_STARTED.md +168 -0
- package/ai-docs/GLOSSARY.md +43 -0
- package/ai-docs/README.md +138 -0
- package/ai-docs/REVIEW_CHECKLIST.md +41 -0
- package/ai-docs/RULES.md +444 -0
- package/ai-docs/SECURITY.md +52 -0
- package/ai-docs/SERVICE_STATE.md +52 -0
- package/ai-docs/SPEC_INDEX.md +65 -0
- package/ai-docs/adr/0001-spec-source-policy.md +55 -0
- package/ai-docs/adr/README.md +8 -0
- package/ai-docs/adr/_adr-template.md +31 -0
- package/ai-docs/contact-center-spec.md +382 -0
- package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
- package/ai-docs/features/contact-owner-change-refactor.md +78 -0
- package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
- package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
- package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
- package/ai-docs/patterns/event-driven-patterns.md +485 -0
- package/ai-docs/patterns/testing-patterns.md +480 -0
- package/ai-docs/patterns/typescript-patterns.md +365 -0
- package/ai-docs/templates/README.md +102 -0
- package/ai-docs/templates/documentation/create-agents-md.md +240 -0
- package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
- package/ai-docs/templates/existing-service/bug-fix.md +254 -0
- package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
- package/ai-docs/templates/new-method/00-master.md +80 -0
- package/ai-docs/templates/new-method/01-requirements.md +232 -0
- package/ai-docs/templates/new-method/02-implementation.md +295 -0
- package/ai-docs/templates/new-method/03-tests.md +201 -0
- package/ai-docs/templates/new-method/04-validation.md +141 -0
- package/ai-docs/templates/new-service/00-master.md +109 -0
- package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
- package/ai-docs/templates/new-service/02-code-generation.md +346 -0
- package/ai-docs/templates/new-service/03-integration.md +178 -0
- package/ai-docs/templates/new-service/04-test-generation.md +205 -0
- package/ai-docs/templates/new-service/05-validation.md +145 -0
- package/dist/cc.js +971 -42
- package/dist/cc.js.map +1 -1
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +31 -3
- package/dist/constants.js.map +1 -1
- package/dist/index.js +45 -15
- package/dist/index.js.map +1 -1
- package/dist/metrics/MetricsManager.js +16 -0
- package/dist/metrics/MetricsManager.js.map +1 -1
- package/dist/metrics/behavioral-events.js +205 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +48 -4
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/AddressBook.js +18 -15
- package/dist/services/AddressBook.js.map +1 -1
- package/dist/services/AnswerCallOnWebexService.js +202 -0
- package/dist/services/AnswerCallOnWebexService.js.map +1 -0
- package/dist/services/ApiAiAssistant.js +269 -9
- package/dist/services/ApiAiAssistant.js.map +1 -1
- package/dist/services/EntryPoint.js +46 -68
- package/dist/services/EntryPoint.js.map +1 -1
- package/dist/services/Queue.js +27 -22
- package/dist/services/Queue.js.map +1 -1
- package/dist/services/UserPreference.js +427 -0
- package/dist/services/UserPreference.js.map +1 -0
- package/dist/services/WebexCrossClientService.js +222 -0
- package/dist/services/WebexCrossClientService.js.map +1 -0
- package/dist/services/WxAppTelephonyMercurySync.js +108 -0
- package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
- package/dist/services/config/Util.js +11 -4
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +41 -7
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +51 -0
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +57 -12
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +111 -32
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/WebexRequest.js +6 -2
- package/dist/services/core/WebexRequest.js.map +1 -1
- package/dist/services/core/aqm-reqs.js +28 -14
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/types.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +2 -1
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/core/websocket/types.js.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/task/Task.js +754 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +49 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +1172 -521
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +211 -27
- package/dist/services/task/TaskUtils.js.map +1 -1
- package/dist/services/task/WebexCallingUtils.js +70 -0
- package/dist/services/task/WebexCallingUtils.js.map +1 -0
- package/dist/services/task/constants.js +12 -2
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/contact.js +29 -0
- package/dist/services/task/contact.js.map +1 -1
- package/dist/services/task/dialer.js +78 -0
- package/dist/services/task/dialer.js.map +1 -1
- package/dist/services/task/digital/Digital.js +78 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +982 -0
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
- package/dist/services/task/state-machine/actions.js +572 -0
- package/dist/services/task/state-machine/actions.js.map +1 -0
- package/dist/services/task/state-machine/constants.js +161 -0
- package/dist/services/task/state-machine/constants.js.map +1 -0
- package/dist/services/task/state-machine/guards.js +379 -0
- package/dist/services/task/state-machine/guards.js.map +1 -0
- package/dist/services/task/state-machine/index.js +53 -0
- package/dist/services/task/state-machine/index.js.map +1 -0
- package/dist/services/task/state-machine/types.js +54 -0
- package/dist/services/task/state-machine/types.js.map +1 -0
- package/dist/services/task/state-machine/uiControlsComputer.js +703 -0
- package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
- package/dist/services/task/taskDataNormalizer.js +99 -0
- package/dist/services/task/taskDataNormalizer.js.map +1 -0
- package/dist/services/task/types.js +228 -5
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1485 -0
- package/dist/services/task/voice/Voice.js.map +1 -0
- package/dist/services/task/voice/WebRTC.js +152 -0
- package/dist/services/task/voice/WebRTC.js.map +1 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js +354 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
- package/dist/services/wxAppDiagnosticLogging.js +122 -0
- package/dist/services/wxAppDiagnosticLogging.js.map +1 -0
- package/dist/services/wxAppTelephonyUtils.js +19 -0
- package/dist/services/wxAppTelephonyUtils.js.map +1 -0
- package/dist/types/cc.d.ts +193 -6
- package/dist/types/config.d.ts +13 -0
- package/dist/types/constants.d.ts +29 -1
- package/dist/types/index.d.ts +35 -8
- package/dist/types/metrics/MetricsManager.d.ts +6 -0
- package/dist/types/metrics/constants.d.ts +43 -1
- package/dist/types/services/AddressBook.d.ts +2 -1
- package/dist/types/services/AnswerCallOnWebexService.d.ts +38 -0
- package/dist/types/services/ApiAiAssistant.d.ts +56 -5
- package/dist/types/services/EntryPoint.d.ts +7 -5
- package/dist/types/services/Queue.d.ts +5 -3
- package/dist/types/services/UserPreference.d.ts +118 -0
- package/dist/types/services/WebexCrossClientService.d.ts +32 -0
- package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
- package/dist/types/services/config/constants.d.ts +34 -5
- package/dist/types/services/config/types.d.ts +197 -12
- package/dist/types/services/core/Err.d.ts +6 -0
- package/dist/types/services/core/Utils.d.ts +35 -13
- package/dist/types/services/core/WebexRequest.d.ts +1 -0
- package/dist/types/services/core/types.d.ts +2 -0
- package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
- package/dist/types/services/core/websocket/types.d.ts +1 -1
- package/dist/types/services/index.d.ts +1 -1
- package/dist/types/services/task/Task.d.ts +175 -0
- package/dist/types/services/task/TaskFactory.d.ts +13 -0
- package/dist/types/services/task/TaskUtils.d.ts +48 -2
- package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
- package/dist/types/services/task/constants.d.ts +10 -0
- package/dist/types/services/task/contact.d.ts +4 -0
- package/dist/types/services/task/dialer.d.ts +30 -0
- package/dist/types/services/task/digital/Digital.d.ts +22 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1442 -0
- package/dist/types/services/task/state-machine/actions.d.ts +10 -0
- package/dist/types/services/task/state-machine/constants.d.ts +107 -0
- package/dist/types/services/task/state-machine/guards.d.ts +103 -0
- package/dist/types/services/task/state-machine/index.d.ts +13 -0
- package/dist/types/services/task/state-machine/types.d.ts +277 -0
- package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
- package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
- package/dist/types/services/task/types.d.ts +680 -66
- package/dist/types/services/task/voice/Voice.d.ts +227 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
- package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +55 -0
- package/dist/types/services/wxAppDiagnosticLogging.d.ts +51 -0
- package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
- package/dist/types/types.d.ts +205 -9
- package/dist/types/utils/PageCache.d.ts +20 -3
- package/dist/types/webex.d.ts +1 -0
- package/dist/types.js +162 -4
- package/dist/types.js.map +1 -1
- package/dist/utils/PageCache.js +19 -5
- package/dist/utils/PageCache.js.map +1 -1
- package/dist/webex.js +22 -2
- package/dist/webex.js.map +1 -1
- package/package.json +16 -12
- package/src/cc.ts +1289 -112
- package/src/config.ts +13 -0
- package/src/constants.ts +29 -1
- package/src/index.ts +36 -5
- package/src/metrics/MetricsManager.ts +16 -0
- package/src/metrics/ai-docs/AGENTS.md +350 -0
- package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
- package/src/metrics/ai-docs/metrics-spec.md +921 -0
- package/src/metrics/behavioral-events.ts +212 -0
- package/src/metrics/constants.ts +52 -4
- package/src/services/AddressBook.ts +17 -6
- package/src/services/AnswerCallOnWebexService.ts +239 -0
- package/src/services/ApiAiAssistant.ts +356 -9
- package/src/services/EntryPoint.ts +59 -60
- package/src/services/Queue.ts +29 -12
- package/src/services/UserPreference.ts +509 -0
- package/src/services/WebexCrossClientService.ts +293 -0
- package/src/services/WxAppTelephonyMercurySync.ts +142 -0
- package/src/services/agent/ai-docs/AGENTS.md +240 -0
- package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
- package/src/services/agent/ai-docs/agent-spec.md +505 -0
- package/src/services/ai-docs/AGENTS.md +386 -0
- package/src/services/ai-docs/services-spec.md +505 -0
- package/src/services/config/Util.ts +12 -3
- package/src/services/config/ai-docs/AGENTS.md +255 -0
- package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
- package/src/services/config/ai-docs/config-spec.md +686 -0
- package/src/services/config/constants.ts +46 -6
- package/src/services/config/index.ts +65 -0
- package/src/services/config/types.ts +197 -13
- package/src/services/core/Err.ts +3 -0
- package/src/services/core/Utils.ts +127 -37
- package/src/services/core/WebexRequest.ts +3 -1
- package/src/services/core/ai-docs/AGENTS.md +381 -0
- package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
- package/src/services/core/ai-docs/core-spec.md +787 -0
- package/src/services/core/aqm-reqs.ts +30 -15
- package/src/services/core/types.ts +2 -0
- package/src/services/core/websocket/WebSocketManager.ts +2 -0
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +1 -1
- package/src/services/task/Task.ts +908 -0
- package/src/services/task/TaskFactory.ts +60 -0
- package/src/services/task/TaskManager.ts +1419 -608
- package/src/services/task/TaskUtils.ts +303 -25
- package/src/services/task/WebexCallingUtils.ts +136 -0
- package/src/services/task/ai-docs/AGENTS.md +457 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
- package/src/services/task/ai-docs/task-spec.md +1474 -0
- package/src/services/task/constants.ts +10 -0
- package/src/services/task/contact.ts +30 -0
- package/src/services/task/dialer.ts +80 -0
- package/src/services/task/digital/Digital.ts +97 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1320 -0
- package/src/services/task/state-machine/actions.ts +741 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +460 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1156 -0
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2247 -0
- package/src/services/task/state-machine/constants.ts +172 -0
- package/src/services/task/state-machine/guards.ts +442 -0
- package/src/services/task/state-machine/index.ts +28 -0
- package/src/services/task/state-machine/types.ts +258 -0
- package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
- package/src/services/task/taskDataNormalizer.ts +137 -0
- package/src/services/task/types.ts +819 -70
- package/src/services/task/voice/Voice.ts +1851 -0
- package/src/services/task/voice/WebRTC.ts +191 -0
- package/src/services/task/voice/wxAppVoiceMethods.ts +516 -0
- package/src/services/wxAppDiagnosticLogging.ts +174 -0
- package/src/services/wxAppTelephonyUtils.ts +14 -0
- package/src/types.ts +262 -11
- package/src/utils/AGENTS.md +289 -0
- package/src/utils/PageCache.ts +38 -5
- package/src/utils/ai-docs/utils-spec.md +391 -0
- package/src/webex.js +10 -0
- package/test/unit/spec/cc.ts +2210 -119
- package/test/unit/spec/logger-proxy.ts +70 -0
- package/test/unit/spec/metrics/MetricsManager.ts +25 -0
- package/test/unit/spec/metrics/behavioral-events.ts +60 -0
- package/test/unit/spec/services/AddressBook.ts +37 -6
- package/test/unit/spec/services/AnswerCallOnWebexService.ts +264 -0
- package/test/unit/spec/services/ApiAiAssistant.ts +311 -21
- package/test/unit/spec/services/EntryPoint.ts +87 -40
- package/test/unit/spec/services/Queue.ts +123 -12
- package/test/unit/spec/services/UserPreference.ts +401 -0
- package/test/unit/spec/services/WebCallingService.ts +7 -1
- package/test/unit/spec/services/WebexCrossClientService.ts +467 -0
- package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +136 -0
- package/test/unit/spec/services/config/Util.ts +129 -0
- package/test/unit/spec/services/config/index.ts +97 -29
- package/test/unit/spec/services/core/Utils.ts +425 -8
- package/test/unit/spec/services/core/WebexRequest.ts +3 -1
- package/test/unit/spec/services/core/aqm-reqs.ts +113 -1
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +745 -0
- package/test/unit/spec/services/task/TaskFactory.ts +99 -0
- package/test/unit/spec/services/task/TaskManager.ts +2518 -1494
- package/test/unit/spec/services/task/TaskUtils.ts +235 -0
- package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
- package/test/unit/spec/services/task/contact.ts +33 -0
- package/test/unit/spec/services/task/dialer.ts +190 -0
- package/test/unit/spec/services/task/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +4060 -0
- package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
- package/test/unit/spec/services/task/state-machine/types.ts +18 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
- package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
- package/test/unit/spec/services/task/voice/Voice.ts +2061 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
- package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +603 -0
- package/test/unit/spec/services/wxAppDiagnosticLogging.ts +143 -0
- package/test/unit/spec/wellnessSampleUtils.ts +288 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
- package/dist/services/task/index.js +0 -1525
- package/dist/services/task/index.js.map +0 -1
- package/dist/types/services/task/index.d.ts +0 -650
- package/src/services/task/index.ts +0 -1801
- package/test/unit/spec/services/task/index.ts +0 -2184
|
@@ -28,13 +28,17 @@ class WebexRequest {
|
|
|
28
28
|
service,
|
|
29
29
|
resource,
|
|
30
30
|
method,
|
|
31
|
-
body
|
|
31
|
+
body,
|
|
32
|
+
headers
|
|
32
33
|
} = options;
|
|
33
34
|
return this.webex.request({
|
|
34
35
|
service,
|
|
35
36
|
resource,
|
|
36
37
|
method,
|
|
37
|
-
body
|
|
38
|
+
body,
|
|
39
|
+
...(headers ? {
|
|
40
|
+
headers
|
|
41
|
+
} : {})
|
|
38
42
|
});
|
|
39
43
|
}
|
|
40
44
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_constants","require","_loggerProxy","_interopRequireDefault","_constants2","_constants3","_MetricsManager","e","__esModule","default","WebexRequest","getInstance","options","instance","webex","constructor","request","service","resource","method","body","uploadLogs","metaData","feedbackId","crypto","randomUUID","response","internal","support","submitLogs","undefined","type","LoggerProxy","info","module","WEBEX_REQUEST_FILE","METHODS","UPLOAD_LOGS","MetricsManager","trackEvent","METRIC_EVENT_NAMES","UPLOAD_LOGS_SUCCESS","trackingId","trackingid","correlationId","url","userId","error","UPLOAD_LOGS_FAILED","stack","_default","exports"],"sources":["WebexRequest.ts"],"sourcesContent":["import {WEBEX_REQUEST_FILE} from '../../constants';\nimport LoggerProxy from '../../logger-proxy';\nimport {METHODS} from './constants';\nimport {METRIC_EVENT_NAMES} from '../../metrics/constants';\nimport MetricsManager from '../../metrics/MetricsManager';\nimport {\n WebexSDK,\n HTTP_METHODS,\n IHttpResponse,\n RequestBody,\n UploadLogsResponse,\n LogsMetaData,\n} from '../../types';\n\nclass WebexRequest {\n private webex: WebexSDK;\n private static instance: WebexRequest;\n\n public static getInstance(options?: {webex: WebexSDK}): WebexRequest {\n if (!WebexRequest.instance && options && options.webex) {\n WebexRequest.instance = new WebexRequest(options);\n }\n\n return WebexRequest.instance;\n }\n\n private constructor(options: {webex: WebexSDK}) {\n const {webex} = options;\n this.webex = webex;\n }\n\n public async request(options: {\n service: string;\n resource: string;\n method: HTTP_METHODS;\n body?: RequestBody;\n }): Promise<IHttpResponse> {\n const {service, resource, method, body} = options;\n\n return this.webex.request({\n service,\n resource,\n method,\n body,\n });\n }\n\n /**\n * This is used for uploading the logs to backend/mats.\n *\n * @param metaData - meta data to be uploaded.\n */\n public async uploadLogs(metaData: LogsMetaData = {}): Promise<UploadLogsResponse> {\n const feedbackId = crypto.randomUUID();\n try {\n const response = await this.webex.internal.support.submitLogs(\n {...metaData, feedbackId},\n undefined, // we dont send logs but take from webex logger\n {type: 'diff'} // this is to take the diff logs from previous upload\n );\n LoggerProxy.info(`Logs uploaded successfully with feedbackId: ${feedbackId}`, {\n module: WEBEX_REQUEST_FILE,\n method: METHODS.UPLOAD_LOGS,\n });\n\n MetricsManager.getInstance().trackEvent(\n METRIC_EVENT_NAMES.UPLOAD_LOGS_SUCCESS,\n {\n trackingId: response?.trackingid,\n feedbackId,\n correlationId: metaData?.correlationId,\n },\n ['behavioral']\n );\n\n return {\n trackingid: response.trackingid,\n ...(response.url ? {url: response.url} : {}),\n ...(response.userId ? {userId: response.userId} : {}),\n ...(response.correlationId ? {correlationId: response.correlationId} : {}),\n feedbackId,\n };\n } catch (error) {\n LoggerProxy.error(`Error uploading logs: ${error}`, {\n module: WEBEX_REQUEST_FILE,\n method: METHODS.UPLOAD_LOGS,\n });\n\n MetricsManager.getInstance().trackEvent(\n METRIC_EVENT_NAMES.UPLOAD_LOGS_FAILED,\n {\n stack: error?.stack,\n feedbackId,\n correlationId: metaData?.correlationId,\n },\n ['behavioral']\n );\n throw error;\n }\n }\n}\n\nexport default WebexRequest;\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAH,sBAAA,CAAAF,OAAA;AAA0D,SAAAE,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAU1D,MAAMG,YAAY,CAAC;EAIjB,OAAcC,WAAWA,CAACC,OAA2B,EAAgB;IACnE,IAAI,CAACF,YAAY,CAACG,QAAQ,IAAID,OAAO,IAAIA,OAAO,CAACE,KAAK,EAAE;MACtDJ,YAAY,CAACG,QAAQ,GAAG,IAAIH,YAAY,CAACE,OAAO,CAAC;IACnD;IAEA,OAAOF,YAAY,CAACG,QAAQ;EAC9B;EAEQE,WAAWA,CAACH,OAA0B,EAAE;IAC9C,MAAM;MAACE;IAAK,CAAC,GAAGF,OAAO;IACvB,IAAI,CAACE,KAAK,GAAGA,KAAK;EACpB;EAEA,MAAaE,OAAOA,CAACJ,
|
|
1
|
+
{"version":3,"names":["_constants","require","_loggerProxy","_interopRequireDefault","_constants2","_constants3","_MetricsManager","e","__esModule","default","WebexRequest","getInstance","options","instance","webex","constructor","request","service","resource","method","body","headers","uploadLogs","metaData","feedbackId","crypto","randomUUID","response","internal","support","submitLogs","undefined","type","LoggerProxy","info","module","WEBEX_REQUEST_FILE","METHODS","UPLOAD_LOGS","MetricsManager","trackEvent","METRIC_EVENT_NAMES","UPLOAD_LOGS_SUCCESS","trackingId","trackingid","correlationId","url","userId","error","UPLOAD_LOGS_FAILED","stack","_default","exports"],"sources":["WebexRequest.ts"],"sourcesContent":["import {WEBEX_REQUEST_FILE} from '../../constants';\nimport LoggerProxy from '../../logger-proxy';\nimport {METHODS} from './constants';\nimport {METRIC_EVENT_NAMES} from '../../metrics/constants';\nimport MetricsManager from '../../metrics/MetricsManager';\nimport {\n WebexSDK,\n HTTP_METHODS,\n IHttpResponse,\n RequestBody,\n UploadLogsResponse,\n LogsMetaData,\n} from '../../types';\n\nclass WebexRequest {\n private webex: WebexSDK;\n private static instance: WebexRequest;\n\n public static getInstance(options?: {webex: WebexSDK}): WebexRequest {\n if (!WebexRequest.instance && options && options.webex) {\n WebexRequest.instance = new WebexRequest(options);\n }\n\n return WebexRequest.instance;\n }\n\n private constructor(options: {webex: WebexSDK}) {\n const {webex} = options;\n this.webex = webex;\n }\n\n public async request(options: {\n service: string;\n resource: string;\n method: HTTP_METHODS;\n body?: RequestBody;\n headers?: Record<string, string | null>;\n }): Promise<IHttpResponse> {\n const {service, resource, method, body, headers} = options;\n\n return this.webex.request({\n service,\n resource,\n method,\n body,\n ...(headers ? {headers} : {}),\n });\n }\n\n /**\n * This is used for uploading the logs to backend/mats.\n *\n * @param metaData - meta data to be uploaded.\n */\n public async uploadLogs(metaData: LogsMetaData = {}): Promise<UploadLogsResponse> {\n const feedbackId = crypto.randomUUID();\n try {\n const response = await this.webex.internal.support.submitLogs(\n {...metaData, feedbackId},\n undefined, // we dont send logs but take from webex logger\n {type: 'diff'} // this is to take the diff logs from previous upload\n );\n LoggerProxy.info(`Logs uploaded successfully with feedbackId: ${feedbackId}`, {\n module: WEBEX_REQUEST_FILE,\n method: METHODS.UPLOAD_LOGS,\n });\n\n MetricsManager.getInstance().trackEvent(\n METRIC_EVENT_NAMES.UPLOAD_LOGS_SUCCESS,\n {\n trackingId: response?.trackingid,\n feedbackId,\n correlationId: metaData?.correlationId,\n },\n ['behavioral']\n );\n\n return {\n trackingid: response.trackingid,\n ...(response.url ? {url: response.url} : {}),\n ...(response.userId ? {userId: response.userId} : {}),\n ...(response.correlationId ? {correlationId: response.correlationId} : {}),\n feedbackId,\n };\n } catch (error) {\n LoggerProxy.error(`Error uploading logs: ${error}`, {\n module: WEBEX_REQUEST_FILE,\n method: METHODS.UPLOAD_LOGS,\n });\n\n MetricsManager.getInstance().trackEvent(\n METRIC_EVENT_NAMES.UPLOAD_LOGS_FAILED,\n {\n stack: error?.stack,\n feedbackId,\n correlationId: metaData?.correlationId,\n },\n ['behavioral']\n );\n throw error;\n }\n }\n}\n\nexport default WebexRequest;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -112,16 +112,23 @@ class AqmReqs {
|
|
|
112
112
|
clear();
|
|
113
113
|
const notifFail = c.notifFail;
|
|
114
114
|
if ('errId' in notifFail) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
115
|
+
const error = new Err.Details(notifFail.errId, msg);
|
|
116
|
+
if (c.redactSensitiveLogs) {
|
|
117
|
+
_loggerProxy.default.log('Routing request failed (sensitive details redacted)', {
|
|
118
|
+
module: _constants2.AQM_REQS_FILE,
|
|
119
|
+
method: _constants.METHODS.CREATE_PROMISE
|
|
120
|
+
});
|
|
121
|
+
} else {
|
|
122
|
+
_loggerProxy.default.log(`Routing request failed: ${JSON.stringify(msg)}`, {
|
|
123
|
+
module: _constants2.AQM_REQS_FILE,
|
|
124
|
+
method: _constants.METHODS.CREATE_PROMISE
|
|
125
|
+
});
|
|
126
|
+
_loggerProxy.default.log(`Routing request failed: ${error}`, {
|
|
127
|
+
module: _constants2.AQM_REQS_FILE,
|
|
128
|
+
method: _constants.METHODS.CREATE_PROMISE
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
reject(error);
|
|
125
132
|
} else {
|
|
126
133
|
reject(notifFail.err(msg));
|
|
127
134
|
}
|
|
@@ -165,10 +172,17 @@ class AqmReqs {
|
|
|
165
172
|
if (response?.headers) {
|
|
166
173
|
response.headers.Authorization = '*';
|
|
167
174
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
175
|
+
if (c.redactSensitiveLogs) {
|
|
176
|
+
_loggerProxy.default.error('Routing request timeout (sensitive details redacted)', {
|
|
177
|
+
module: _constants2.AQM_REQS_FILE,
|
|
178
|
+
method: _constants.METHODS.CREATE_PROMISE
|
|
179
|
+
});
|
|
180
|
+
} else {
|
|
181
|
+
_loggerProxy.default.error(`Routing request timeout${keySuccess}${JSON.stringify(response)}${c.url}`, {
|
|
182
|
+
module: _constants2.AQM_REQS_FILE,
|
|
183
|
+
method: _constants.METHODS.CREATE_PROMISE
|
|
184
|
+
});
|
|
185
|
+
}
|
|
172
186
|
reject(new Err.Details('Service.aqm.reqs.Timeout', {
|
|
173
187
|
key: keySuccess,
|
|
174
188
|
response: response
|
|
@@ -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","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":"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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","error","errId","redactSensitiveLogs","LoggerProxy","log","module","AQM_REQS_FILE","method","METHODS","CREATE_PROMISE","JSON","stringify","err","response","request","service","host","resource","url","data","HTTP_METHODS","POST","GET","body","then","res","catch","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 const error = new Err.Details(notifFail.errId, msg as any);\n\n if (c.redactSensitiveLogs) {\n LoggerProxy.log('Routing request failed (sensitive details redacted)', {\n module: AQM_REQS_FILE,\n method: METHODS.CREATE_PROMISE,\n });\n } else {\n LoggerProxy.log(`Routing request failed: ${JSON.stringify(msg)}`, {\n module: AQM_REQS_FILE,\n method: METHODS.CREATE_PROMISE,\n });\n LoggerProxy.log(`Routing request failed: ${error}`, {\n module: AQM_REQS_FILE,\n method: METHODS.CREATE_PROMISE,\n });\n }\n reject(error);\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 if (c.redactSensitiveLogs) {\n LoggerProxy.error('Routing request timeout (sensitive details redacted)', {\n module: AQM_REQS_FILE,\n method: METHODS.CREATE_PROMISE,\n });\n } else {\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 }\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":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {HTTP_METHODS, RequestBody, WebexRequestPayload} from '../../types';\nimport * as Err from './Err';\nimport {Msg} from './GlobalTypes';\n\nexport type Pending = {\n check: (msg: Msg) => boolean;\n handle: (msg: Msg) => void;\n alternateBind?: string;\n};\n\nexport type BindType = string | string[] | {[key: string]: BindType};\ninterface Bind {\n type: BindType;\n data?: any;\n}\n\nexport type Timeout = number | 'disabled';\n\nexport type Req<TRes, TErr> = {\n url: string;\n host?: string;\n method?: HTTP_METHODS;\n err?:\n | ((errObj: WebexRequestPayload) => Err.Details<'Service.reqs.generic.failure'>)\n | Err.IdsMessage\n | ((e: WebexRequestPayload) => Err.Message | Err.Details<Err.IdsDetails>);\n notifSuccess: {bind: Bind; msg: TRes};\n notifFail?:\n | {\n bind: Bind;\n errMsg: TErr;\n err: (e: TErr) => Err.Details<Err.IdsDetails>;\n }\n | {\n bind: Bind;\n errId: Err.IdsDetails;\n };\n data?: RequestBody;\n headers?: Record<string, string>;\n timeout?: Timeout;\n notifCancel?: {bind: Bind; msg: TRes};\n};\n\nexport type Conf<TRes, TErr, TReq> = (p: TReq) => Req<TRes, TErr>;\nexport type ConfEmpty<TRes, TErr> = () => Req<TRes, TErr>;\nexport type Res<TRes, TReq> = (p: TReq, cbRes?: CbRes<TRes>) => Promise<TRes>;\nexport type ResEmpty<TRes> = (cbRes?: CbRes<TRes>) => Promise<TRes>;\nexport type CbRes<TRes> = (res: any) => void | TRes;\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {HTTP_METHODS, RequestBody, WebexRequestPayload} from '../../types';\nimport * as Err from './Err';\nimport {Msg} from './GlobalTypes';\n\nexport type Pending = {\n check: (msg: Msg) => boolean;\n handle: (msg: Msg) => void;\n alternateBind?: string;\n};\n\nexport type BindType = string | string[] | {[key: string]: BindType};\ninterface Bind {\n type: BindType;\n data?: any;\n}\n\nexport type Timeout = number | 'disabled';\n\nexport type Req<TRes, TErr> = {\n url: string;\n host?: string;\n method?: HTTP_METHODS;\n /** Suppress request URLs and routing payloads from AQM logs for sensitive operations. */\n redactSensitiveLogs?: boolean;\n err?:\n | ((errObj: WebexRequestPayload) => Err.Details<'Service.reqs.generic.failure'>)\n | Err.IdsMessage\n | ((e: WebexRequestPayload) => Err.Message | Err.Details<Err.IdsDetails>);\n notifSuccess: {bind: Bind; msg: TRes};\n notifFail?:\n | {\n bind: Bind;\n errMsg: TErr;\n err: (e: TErr) => Err.Details<Err.IdsDetails>;\n }\n | {\n bind: Bind;\n errId: Err.IdsDetails;\n };\n data?: RequestBody;\n headers?: Record<string, string>;\n timeout?: Timeout;\n notifCancel?: {bind: Bind; msg: TRes};\n};\n\nexport type Conf<TRes, TErr, TReq> = (p: TReq) => Req<TRes, TErr>;\nexport type ConfEmpty<TRes, TErr> = () => Req<TRes, TErr>;\nexport type Res<TRes, TReq> = (p: TReq, cbRes?: CbRes<TRes>) => Promise<TRes>;\nexport type ResEmpty<TRes> = (cbRes?: CbRes<TRes>) => Promise<TRes>;\nexport type CbRes<TRes> = (res: any) => void | TRes;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.WebSocketManager = void 0;
|
|
6
|
+
exports.default = exports.WebSocketManager = void 0;
|
|
7
7
|
var _events = _interopRequireDefault(require("events"));
|
|
8
8
|
var _types = require("../../../types");
|
|
9
9
|
var _constants = require("../../constants");
|
|
@@ -203,4 +203,5 @@ class WebSocketManager extends _events.default {
|
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
exports.WebSocketManager = WebSocketManager;
|
|
206
|
+
var _default = exports.default = WebSocketManager;
|
|
206
207
|
//# sourceMappingURL=WebSocketManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","_interopRequireDefault","require","_types","_constants","_types2","_loggerProxy","_keepalive","_constants2","_constants3","e","__esModule","default","WebSocketManager","EventEmitter","url","welcomePromiseResolve","constructor","options","webex","shouldReconnect","websocket","isSocketClosed","isWelcomeReceived","forceCloseWebSocketOnTimeout","isConnectionLost","workerScriptBlob","Blob","workerScript","type","keepaliveWorker","Worker","URL","createObjectURL","initWebSocket","body","connectionConfig","resource","register","error","LoggerProxy","module","WEB_SOCKET_MANAGER_FILE","method","METHODS","INIT_WEB_SOCKET","Promise","resolve","reject","connect","catch","close","reason","postMessage","log","CLOSE","handleConnectionLost","event","isIntEnv","internal","services","isIntegrationEnvironment","orgId","credentials","getOrgId","REGISTER","subscribeResponse","request","service","WCC_API_GATEWAY","HTTP_METHODS","POST","headers","undefined","webSocketUrl","CONNECT","WebSocket","onopen","send","JSON","stringify","keepalive","onmessage","keepAliveEvent","data","intervalDuration","KEEPALIVE_WORKER_INTERVAL","closeSocketTimeout","CLOSE_SOCKET_TIMEOUT","onerror","onclose","webSocketOnCloseHandler","emit","eventData","parse","CC_EVENTS","WELCOME","issueReason","onlineStatus","navigator","onLine","WEB_SOCKET_ON_CLOSE_HANDLER","exports"],"sources":["WebSocketManager.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {WebexSDK, SubscribeRequest, HTTP_METHODS} from '../../../types';\nimport {WCC_API_GATEWAY} from '../../constants';\nimport {ConnectionLostDetails} from './types';\nimport {CC_EVENTS, SubscribeResponse, WelcomeResponse} from '../../config/types';\nimport LoggerProxy from '../../../logger-proxy';\nimport workerScript from './keepalive.worker';\nimport {KEEPALIVE_WORKER_INTERVAL, CLOSE_SOCKET_TIMEOUT, METHODS} from '../constants';\nimport {WEB_SOCKET_MANAGER_FILE} from '../../../constants';\n\n/**\n * WebSocketManager handles the WebSocket connection for Contact Center operations.\n * It manages the connection lifecycle, including registration, reconnection, and message handling.\n * It also utilizes a Web Worker to manage keepalive messages and socket closure.\n * @ignore\n */\nexport class WebSocketManager extends EventEmitter {\n private websocket: WebSocket;\n shouldReconnect: boolean;\n isSocketClosed: boolean;\n private isWelcomeReceived: boolean;\n private url: string | null = null;\n private forceCloseWebSocketOnTimeout: boolean;\n private isConnectionLost: boolean;\n private webex: WebexSDK;\n private welcomePromiseResolve:\n | ((value: WelcomeResponse | PromiseLike<WelcomeResponse>) => void)\n | null = null;\n\n private keepaliveWorker: Worker;\n\n constructor(options: {webex: WebexSDK}) {\n super();\n const {webex} = options;\n this.webex = webex;\n this.shouldReconnect = true;\n this.websocket = {} as WebSocket;\n this.isSocketClosed = false;\n this.isWelcomeReceived = false;\n this.forceCloseWebSocketOnTimeout = false;\n this.isConnectionLost = false;\n\n const workerScriptBlob = new Blob([workerScript], {type: 'application/javascript'});\n this.keepaliveWorker = new Worker(URL.createObjectURL(workerScriptBlob));\n }\n\n async initWebSocket(options: {\n body: SubscribeRequest;\n resource: string;\n }): Promise<WelcomeResponse> {\n const {body: connectionConfig, resource} = options;\n try {\n await this.register(connectionConfig, resource);\n } catch (error) {\n LoggerProxy.error(`[WebSocketStatus] | Error in registering Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n throw error;\n }\n\n return new Promise((resolve, reject) => {\n this.welcomePromiseResolve = resolve;\n this.connect().catch((error) => {\n LoggerProxy.error(`[WebSocketStatus] | Error in connecting Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n reject(error);\n });\n });\n }\n\n close(shouldReconnect: boolean, reason = 'Unknown') {\n if (!this.isSocketClosed && this.shouldReconnect) {\n this.shouldReconnect = shouldReconnect;\n this.websocket.close();\n this.keepaliveWorker.postMessage({type: 'terminate'});\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed manually REASON: ${reason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CLOSE}\n );\n }\n }\n\n handleConnectionLost(event: ConnectionLostDetails) {\n this.isConnectionLost = event.isConnectionLost;\n }\n\n private async register(connectionConfig: SubscribeRequest, resource: string) {\n try {\n // X-ORGANIZATION-ID header is only required for INT environments\n const isIntEnv = this.webex.internal?.services?.isIntegrationEnvironment() || false;\n const orgId = this.webex.credentials.getOrgId();\n\n if (isIntEnv && orgId) {\n LoggerProxy.log(`[WebSocketManager] Adding X-ORGANIZATION-ID header for INT environment`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.REGISTER,\n });\n }\n\n const subscribeResponse: SubscribeResponse = await this.webex.request({\n service: WCC_API_GATEWAY,\n resource,\n method: HTTP_METHODS.POST,\n body: connectionConfig,\n headers: isIntEnv && orgId ? {'X-ORGANIZATION-ID': orgId} : undefined,\n });\n this.url = subscribeResponse.body.webSocketUrl;\n } catch (e) {\n LoggerProxy.error(\n `Register API Failed, Request to RoutingNotifs websocket registration API failed ${e}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.REGISTER}\n );\n throw e;\n }\n }\n\n private async connect() {\n if (!this.url) {\n return undefined;\n }\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketConnecting | Connecting to WebSocket: ${this.url}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n this.websocket = new WebSocket(this.url);\n\n return new Promise((resolve, reject) => {\n this.websocket.onopen = () => {\n this.isSocketClosed = false;\n this.shouldReconnect = true;\n\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n this.keepaliveWorker.onmessage = (keepAliveEvent: {data: any}) => {\n if (keepAliveEvent?.data?.type === 'keepalive') {\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n }\n\n if (keepAliveEvent?.data?.type === 'closeSocket' && this.isConnectionLost) {\n this.forceCloseWebSocketOnTimeout = true;\n this.close(true, 'WebSocket did not auto close within 16 secs');\n LoggerProxy.error(\n '[webSocketTimeout] | event=webSocketTimeout | WebSocket connection closed forcefully',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n\n this.keepaliveWorker.postMessage({\n type: 'start',\n intervalDuration: KEEPALIVE_WORKER_INTERVAL, // Keepalive interval\n isSocketClosed: this.isSocketClosed,\n closeSocketTimeout: CLOSE_SOCKET_TIMEOUT, // Close socket timeout\n });\n };\n\n this.websocket.onerror = (event: any) => {\n LoggerProxy.error(\n `[WebSocketStatus] | event=socketConnectionFailed | WebSocket connection failed ${event}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n reject();\n };\n\n this.websocket.onclose = async (event: any) => {\n this.webSocketOnCloseHandler(event);\n };\n\n this.websocket.onmessage = (e: MessageEvent) => {\n this.emit('message', e.data);\n const eventData = JSON.parse(e.data);\n\n if (eventData.type === CC_EVENTS.WELCOME) {\n this.isWelcomeReceived = true;\n if (this.welcomePromiseResolve) {\n this.welcomePromiseResolve(eventData.data as WelcomeResponse);\n this.welcomePromiseResolve = null;\n }\n }\n\n if (eventData.type === 'AGENT_MULTI_LOGIN') {\n this.close(false, 'multiLogin');\n LoggerProxy.error(\n '[WebSocketStatus] | event=agentMultiLogin | WebSocket connection closed by agent multiLogin',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async webSocketOnCloseHandler(event: any) {\n this.isSocketClosed = true;\n this.keepaliveWorker.postMessage({type: 'terminate'});\n if (this.shouldReconnect) {\n this.emit('socketClose');\n let issueReason;\n if (this.forceCloseWebSocketOnTimeout) {\n issueReason = 'WebSocket auto close timed out. Forcefully closed websocket.';\n } else {\n const onlineStatus = navigator.onLine;\n issueReason = !onlineStatus\n ? 'network issue'\n : 'missing keepalive from either desktop or notif service';\n }\n LoggerProxy.error(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed REASON: ${issueReason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.WEB_SOCKET_ON_CLOSE_HANDLER}\n );\n this.forceCloseWebSocketOnTimeout = false;\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,UAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,WAAA,GAAAP,OAAA;AAA2D,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE3D;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,gBAAgB,SAASC,eAAY,CAAC;EAKzCC,GAAG,GAAkB,IAAI;EAIzBC,qBAAqB,GAElB,IAAI;EAIfC,WAAWA,CAACC,OAA0B,EAAE;IACtC,KAAK,CAAC,CAAC;IACP,MAAM;MAACC;IAAK,CAAC,GAAGD,OAAO;IACvB,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,eAAe,GAAG,IAAI;IAC3B,IAAI,CAACC,SAAS,GAAG,CAAC,CAAc;IAChC,IAAI,CAACC,cAAc,GAAG,KAAK;IAC3B,IAAI,CAACC,iBAAiB,GAAG,KAAK;IAC9B,IAAI,CAACC,4BAA4B,GAAG,KAAK;IACzC,IAAI,CAACC,gBAAgB,GAAG,KAAK;IAE7B,MAAMC,gBAAgB,GAAG,IAAIC,IAAI,CAAC,CAACC,kBAAY,CAAC,EAAE;MAACC,IAAI,EAAE;IAAwB,CAAC,CAAC;IACnF,IAAI,CAACC,eAAe,GAAG,IAAIC,MAAM,CAACC,GAAG,CAACC,eAAe,CAACP,gBAAgB,CAAC,CAAC;EAC1E;EAEA,MAAMQ,aAAaA,CAAChB,OAGnB,EAA4B;IAC3B,MAAM;MAACiB,IAAI,EAAEC,gBAAgB;MAAEC;IAAQ,CAAC,GAAGnB,OAAO;IAClD,IAAI;MACF,MAAM,IAAI,CAACoB,QAAQ,CAACF,gBAAgB,EAAEC,QAAQ,CAAC;IACjD,CAAC,CAAC,OAAOE,KAAK,EAAE;MACdC,oBAAW,CAACD,KAAK,CAAC,sDAAsDA,KAAK,EAAE,EAAE;QAC/EE,MAAM,EAAEC,mCAAuB;QAC/BC,MAAM,EAAEC,mBAAO,CAACC;MAClB,CAAC,CAAC;MACF,MAAMN,KAAK;IACb;IAEA,OAAO,IAAIO,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtC,IAAI,CAAChC,qBAAqB,GAAG+B,OAAO;MACpC,IAAI,CAACE,OAAO,CAAC,CAAC,CAACC,KAAK,CAAEX,KAAK,IAAK;QAC9BC,oBAAW,CAACD,KAAK,CAAC,qDAAqDA,KAAK,EAAE,EAAE;UAC9EE,MAAM,EAAEC,mCAAuB;UAC/BC,MAAM,EAAEC,mBAAO,CAACC;QAClB,CAAC,CAAC;QACFG,MAAM,CAACT,KAAK,CAAC;MACf,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EAEAY,KAAKA,CAAC/B,eAAwB,EAAEgC,MAAM,GAAG,SAAS,EAAE;IAClD,IAAI,CAAC,IAAI,CAAC9B,cAAc,IAAI,IAAI,CAACF,eAAe,EAAE;MAChD,IAAI,CAACA,eAAe,GAAGA,eAAe;MACtC,IAAI,CAACC,SAAS,CAAC8B,KAAK,CAAC,CAAC;MACtB,IAAI,CAACrB,eAAe,CAACuB,WAAW,CAAC;QAACxB,IAAI,EAAE;MAAW,CAAC,CAAC;MACrDW,oBAAW,CAACc,GAAG,CACb,2FAA2FF,MAAM,EAAE,EACnG;QAACX,MAAM,EAAEC,mCAAuB;QAAEC,MAAM,EAAEC,mBAAO,CAACW;MAAK,CACzD,CAAC;IACH;EACF;EAEAC,oBAAoBA,CAACC,KAA4B,EAAE;IACjD,IAAI,CAAChC,gBAAgB,GAAGgC,KAAK,CAAChC,gBAAgB;EAChD;EAEA,MAAca,QAAQA,CAACF,gBAAkC,EAAEC,QAAgB,EAAE;IAC3E,IAAI;MACF;MACA,MAAMqB,QAAQ,GAAG,IAAI,CAACvC,KAAK,CAACwC,QAAQ,EAAEC,QAAQ,EAAEC,wBAAwB,CAAC,CAAC,IAAI,KAAK;MACnF,MAAMC,KAAK,GAAG,IAAI,CAAC3C,KAAK,CAAC4C,WAAW,CAACC,QAAQ,CAAC,CAAC;MAE/C,IAAIN,QAAQ,IAAII,KAAK,EAAE;QACrBtB,oBAAW,CAACc,GAAG,CAAC,wEAAwE,EAAE;UACxFb,MAAM,EAAEC,mCAAuB;UAC/BC,MAAM,EAAEC,mBAAO,CAACqB;QAClB,CAAC,CAAC;MACJ;MAEA,MAAMC,iBAAoC,GAAG,MAAM,IAAI,CAAC/C,KAAK,CAACgD,OAAO,CAAC;QACpEC,OAAO,EAAEC,0BAAe;QACxBhC,QAAQ;QACRM,MAAM,EAAE2B,mBAAY,CAACC,IAAI;QACzBpC,IAAI,EAAEC,gBAAgB;QACtBoC,OAAO,EAAEd,QAAQ,IAAII,KAAK,GAAG;UAAC,mBAAmB,EAAEA;QAAK,CAAC,GAAGW;MAC9D,CAAC,CAAC;MACF,IAAI,CAAC1D,GAAG,GAAGmD,iBAAiB,CAAC/B,IAAI,CAACuC,YAAY;IAChD,CAAC,CAAC,OAAOhE,CAAC,EAAE;MACV8B,oBAAW,CAACD,KAAK,CACf,mFAAmF7B,CAAC,EAAE,EACtF;QAAC+B,MAAM,EAAEC,mCAAuB;QAAEC,MAAM,EAAEC,mBAAO,CAACqB;MAAQ,CAC5D,CAAC;MACD,MAAMvD,CAAC;IACT;EACF;EAEA,MAAcuC,OAAOA,CAAA,EAAG;IACtB,IAAI,CAAC,IAAI,CAAClC,GAAG,EAAE;MACb,OAAO0D,SAAS;IAClB;IACAjC,oBAAW,CAACc,GAAG,CACb,4EAA4E,IAAI,CAACvC,GAAG,EAAE,EACtF;MAAC0B,MAAM,EAAEC,mCAAuB;MAAEC,MAAM,EAAEC,mBAAO,CAAC+B;IAAO,CAC3D,CAAC;IACD,IAAI,CAACtD,SAAS,GAAG,IAAIuD,SAAS,CAAC,IAAI,CAAC7D,GAAG,CAAC;IAExC,OAAO,IAAI+B,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtC,IAAI,CAAC3B,SAAS,CAACwD,MAAM,GAAG,MAAM;QAC5B,IAAI,CAACvD,cAAc,GAAG,KAAK;QAC3B,IAAI,CAACF,eAAe,GAAG,IAAI;QAE3B,IAAI,CAACC,SAAS,CAACyD,IAAI,CAACC,IAAI,CAACC,SAAS,CAAC;UAACC,SAAS,EAAE;QAAM,CAAC,CAAC,CAAC;QACxD,IAAI,CAACnD,eAAe,CAACoD,SAAS,GAAIC,cAA2B,IAAK;UAChE,IAAIA,cAAc,EAAEC,IAAI,EAAEvD,IAAI,KAAK,WAAW,EAAE;YAC9C,IAAI,CAACR,SAAS,CAACyD,IAAI,CAACC,IAAI,CAACC,SAAS,CAAC;cAACC,SAAS,EAAE;YAAM,CAAC,CAAC,CAAC;UAC1D;UAEA,IAAIE,cAAc,EAAEC,IAAI,EAAEvD,IAAI,KAAK,aAAa,IAAI,IAAI,CAACJ,gBAAgB,EAAE;YACzE,IAAI,CAACD,4BAA4B,GAAG,IAAI;YACxC,IAAI,CAAC2B,KAAK,CAAC,IAAI,EAAE,6CAA6C,CAAC;YAC/DX,oBAAW,CAACD,KAAK,CACf,sFAAsF,EACtF;cAACE,MAAM,EAAEC,mCAAuB;cAAEC,MAAM,EAAEC,mBAAO,CAAC+B;YAAO,CAC3D,CAAC;UACH;QACF,CAAC;QAED,IAAI,CAAC7C,eAAe,CAACuB,WAAW,CAAC;UAC/BxB,IAAI,EAAE,OAAO;UACbwD,gBAAgB,EAAEC,qCAAyB;UAAE;UAC7ChE,cAAc,EAAE,IAAI,CAACA,cAAc;UACnCiE,kBAAkB,EAAEC,gCAAoB,CAAE;QAC5C,CAAC,CAAC;MACJ,CAAC;MAED,IAAI,CAACnE,SAAS,CAACoE,OAAO,GAAIhC,KAAU,IAAK;QACvCjB,oBAAW,CAACD,KAAK,CACf,kFAAkFkB,KAAK,EAAE,EACzF;UAAChB,MAAM,EAAEC,mCAAuB;UAAEC,MAAM,EAAEC,mBAAO,CAAC+B;QAAO,CAC3D,CAAC;QACD3B,MAAM,CAAC,CAAC;MACV,CAAC;MAED,IAAI,CAAC3B,SAAS,CAACqE,OAAO,GAAG,MAAOjC,KAAU,IAAK;QAC7C,IAAI,CAACkC,uBAAuB,CAAClC,KAAK,CAAC;MACrC,CAAC;MAED,IAAI,CAACpC,SAAS,CAAC6D,SAAS,GAAIxE,CAAe,IAAK;QAC9C,IAAI,CAACkF,IAAI,CAAC,SAAS,EAAElF,CAAC,CAAC0E,IAAI,CAAC;QAC5B,MAAMS,SAAS,GAAGd,IAAI,CAACe,KAAK,CAACpF,CAAC,CAAC0E,IAAI,CAAC;QAEpC,IAAIS,SAAS,CAAChE,IAAI,KAAKkE,iBAAS,CAACC,OAAO,EAAE;UACxC,IAAI,CAACzE,iBAAiB,GAAG,IAAI;UAC7B,IAAI,IAAI,CAACP,qBAAqB,EAAE;YAC9B,IAAI,CAACA,qBAAqB,CAAC6E,SAAS,CAACT,IAAuB,CAAC;YAC7D,IAAI,CAACpE,qBAAqB,GAAG,IAAI;UACnC;QACF;QAEA,IAAI6E,SAAS,CAAChE,IAAI,KAAK,mBAAmB,EAAE;UAC1C,IAAI,CAACsB,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC;UAC/BX,oBAAW,CAACD,KAAK,CACf,6FAA6F,EAC7F;YAACE,MAAM,EAAEC,mCAAuB;YAAEC,MAAM,EAAEC,mBAAO,CAAC+B;UAAO,CAC3D,CAAC;QACH;MACF,CAAC;IACH,CAAC,CAAC;EACJ;;EAEA;EACA,MAAcgB,uBAAuBA,CAAClC,KAAU,EAAE;IAChD,IAAI,CAACnC,cAAc,GAAG,IAAI;IAC1B,IAAI,CAACQ,eAAe,CAACuB,WAAW,CAAC;MAACxB,IAAI,EAAE;IAAW,CAAC,CAAC;IACrD,IAAI,IAAI,CAACT,eAAe,EAAE;MACxB,IAAI,CAACwE,IAAI,CAAC,aAAa,CAAC;MACxB,IAAIK,WAAW;MACf,IAAI,IAAI,CAACzE,4BAA4B,EAAE;QACrCyE,WAAW,GAAG,8DAA8D;MAC9E,CAAC,MAAM;QACL,MAAMC,YAAY,GAAGC,SAAS,CAACC,MAAM;QACrCH,WAAW,GAAG,CAACC,YAAY,GACvB,eAAe,GACf,wDAAwD;MAC9D;MACA1D,oBAAW,CAACD,KAAK,CACf,kFAAkF0D,WAAW,EAAE,EAC/F;QAACxD,MAAM,EAAEC,mCAAuB;QAAEC,MAAM,EAAEC,mBAAO,CAACyD;MAA2B,CAC/E,CAAC;MACD,IAAI,CAAC7E,4BAA4B,GAAG,KAAK;IAC3C;EACF;AACF;AAAC8E,OAAA,CAAAzF,gBAAA,GAAAA,gBAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_events","_interopRequireDefault","require","_types","_constants","_types2","_loggerProxy","_keepalive","_constants2","_constants3","e","__esModule","default","WebSocketManager","EventEmitter","url","welcomePromiseResolve","constructor","options","webex","shouldReconnect","websocket","isSocketClosed","isWelcomeReceived","forceCloseWebSocketOnTimeout","isConnectionLost","workerScriptBlob","Blob","workerScript","type","keepaliveWorker","Worker","URL","createObjectURL","initWebSocket","body","connectionConfig","resource","register","error","LoggerProxy","module","WEB_SOCKET_MANAGER_FILE","method","METHODS","INIT_WEB_SOCKET","Promise","resolve","reject","connect","catch","close","reason","postMessage","log","CLOSE","handleConnectionLost","event","isIntEnv","internal","services","isIntegrationEnvironment","orgId","credentials","getOrgId","REGISTER","subscribeResponse","request","service","WCC_API_GATEWAY","HTTP_METHODS","POST","headers","undefined","webSocketUrl","CONNECT","WebSocket","onopen","send","JSON","stringify","keepalive","onmessage","keepAliveEvent","data","intervalDuration","KEEPALIVE_WORKER_INTERVAL","closeSocketTimeout","CLOSE_SOCKET_TIMEOUT","onerror","onclose","webSocketOnCloseHandler","emit","eventData","parse","CC_EVENTS","WELCOME","issueReason","onlineStatus","navigator","onLine","WEB_SOCKET_ON_CLOSE_HANDLER","exports","_default"],"sources":["WebSocketManager.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {WebexSDK, SubscribeRequest, HTTP_METHODS} from '../../../types';\nimport {WCC_API_GATEWAY} from '../../constants';\nimport {ConnectionLostDetails} from './types';\nimport {CC_EVENTS, SubscribeResponse, WelcomeResponse} from '../../config/types';\nimport LoggerProxy from '../../../logger-proxy';\nimport workerScript from './keepalive.worker';\nimport {KEEPALIVE_WORKER_INTERVAL, CLOSE_SOCKET_TIMEOUT, METHODS} from '../constants';\nimport {WEB_SOCKET_MANAGER_FILE} from '../../../constants';\n\n/**\n * WebSocketManager handles the WebSocket connection for Contact Center operations.\n * It manages the connection lifecycle, including registration, reconnection, and message handling.\n * It also utilizes a Web Worker to manage keepalive messages and socket closure.\n * @ignore\n */\nexport class WebSocketManager extends EventEmitter {\n private websocket: WebSocket;\n shouldReconnect: boolean;\n isSocketClosed: boolean;\n private isWelcomeReceived: boolean;\n private url: string | null = null;\n private forceCloseWebSocketOnTimeout: boolean;\n private isConnectionLost: boolean;\n private webex: WebexSDK;\n private welcomePromiseResolve:\n | ((value: WelcomeResponse | PromiseLike<WelcomeResponse>) => void)\n | null = null;\n\n private keepaliveWorker: Worker;\n\n constructor(options: {webex: WebexSDK}) {\n super();\n const {webex} = options;\n this.webex = webex;\n this.shouldReconnect = true;\n this.websocket = {} as WebSocket;\n this.isSocketClosed = false;\n this.isWelcomeReceived = false;\n this.forceCloseWebSocketOnTimeout = false;\n this.isConnectionLost = false;\n\n const workerScriptBlob = new Blob([workerScript], {type: 'application/javascript'});\n this.keepaliveWorker = new Worker(URL.createObjectURL(workerScriptBlob));\n }\n\n async initWebSocket(options: {\n body: SubscribeRequest;\n resource: string;\n }): Promise<WelcomeResponse> {\n const {body: connectionConfig, resource} = options;\n try {\n await this.register(connectionConfig, resource);\n } catch (error) {\n LoggerProxy.error(`[WebSocketStatus] | Error in registering Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n throw error;\n }\n\n return new Promise((resolve, reject) => {\n this.welcomePromiseResolve = resolve;\n this.connect().catch((error) => {\n LoggerProxy.error(`[WebSocketStatus] | Error in connecting Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n reject(error);\n });\n });\n }\n\n close(shouldReconnect: boolean, reason = 'Unknown') {\n if (!this.isSocketClosed && this.shouldReconnect) {\n this.shouldReconnect = shouldReconnect;\n this.websocket.close();\n this.keepaliveWorker.postMessage({type: 'terminate'});\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed manually REASON: ${reason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CLOSE}\n );\n }\n }\n\n handleConnectionLost(event: ConnectionLostDetails) {\n this.isConnectionLost = event.isConnectionLost;\n }\n\n private async register(connectionConfig: SubscribeRequest, resource: string) {\n try {\n // X-ORGANIZATION-ID header is only required for INT environments\n const isIntEnv = this.webex.internal?.services?.isIntegrationEnvironment() || false;\n const orgId = this.webex.credentials.getOrgId();\n\n if (isIntEnv && orgId) {\n LoggerProxy.log(`[WebSocketManager] Adding X-ORGANIZATION-ID header for INT environment`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.REGISTER,\n });\n }\n\n const subscribeResponse: SubscribeResponse = await this.webex.request({\n service: WCC_API_GATEWAY,\n resource,\n method: HTTP_METHODS.POST,\n body: connectionConfig,\n headers: isIntEnv && orgId ? {'X-ORGANIZATION-ID': orgId} : undefined,\n });\n this.url = subscribeResponse.body.webSocketUrl;\n } catch (e) {\n LoggerProxy.error(\n `Register API Failed, Request to RoutingNotifs websocket registration API failed ${e}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.REGISTER}\n );\n throw e;\n }\n }\n\n private async connect() {\n if (!this.url) {\n return undefined;\n }\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketConnecting | Connecting to WebSocket: ${this.url}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n this.websocket = new WebSocket(this.url);\n\n return new Promise((resolve, reject) => {\n this.websocket.onopen = () => {\n this.isSocketClosed = false;\n this.shouldReconnect = true;\n\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n this.keepaliveWorker.onmessage = (keepAliveEvent: {data: any}) => {\n if (keepAliveEvent?.data?.type === 'keepalive') {\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n }\n\n if (keepAliveEvent?.data?.type === 'closeSocket' && this.isConnectionLost) {\n this.forceCloseWebSocketOnTimeout = true;\n this.close(true, 'WebSocket did not auto close within 16 secs');\n LoggerProxy.error(\n '[webSocketTimeout] | event=webSocketTimeout | WebSocket connection closed forcefully',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n\n this.keepaliveWorker.postMessage({\n type: 'start',\n intervalDuration: KEEPALIVE_WORKER_INTERVAL, // Keepalive interval\n isSocketClosed: this.isSocketClosed,\n closeSocketTimeout: CLOSE_SOCKET_TIMEOUT, // Close socket timeout\n });\n };\n\n this.websocket.onerror = (event: any) => {\n LoggerProxy.error(\n `[WebSocketStatus] | event=socketConnectionFailed | WebSocket connection failed ${event}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n reject();\n };\n\n this.websocket.onclose = async (event: any) => {\n this.webSocketOnCloseHandler(event);\n };\n\n this.websocket.onmessage = (e: MessageEvent) => {\n this.emit('message', e.data);\n const eventData = JSON.parse(e.data);\n\n if (eventData.type === CC_EVENTS.WELCOME) {\n this.isWelcomeReceived = true;\n if (this.welcomePromiseResolve) {\n this.welcomePromiseResolve(eventData.data as WelcomeResponse);\n this.welcomePromiseResolve = null;\n }\n }\n\n if (eventData.type === 'AGENT_MULTI_LOGIN') {\n this.close(false, 'multiLogin');\n LoggerProxy.error(\n '[WebSocketStatus] | event=agentMultiLogin | WebSocket connection closed by agent multiLogin',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async webSocketOnCloseHandler(event: any) {\n this.isSocketClosed = true;\n this.keepaliveWorker.postMessage({type: 'terminate'});\n if (this.shouldReconnect) {\n this.emit('socketClose');\n let issueReason;\n if (this.forceCloseWebSocketOnTimeout) {\n issueReason = 'WebSocket auto close timed out. Forcefully closed websocket.';\n } else {\n const onlineStatus = navigator.onLine;\n issueReason = !onlineStatus\n ? 'network issue'\n : 'missing keepalive from either desktop or notif service';\n }\n LoggerProxy.error(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed REASON: ${issueReason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.WEB_SOCKET_ON_CLOSE_HANDLER}\n );\n this.forceCloseWebSocketOnTimeout = false;\n }\n }\n}\n\nexport default WebSocketManager;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {SubscribeRequest} from '../../../types';\nimport
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {SubscribeRequest} from '../../../types';\nimport type WebSocketManager from './WebSocketManager';\n\n/**\n * Options for initializing a connection service.\n * @typedef ConnectionServiceOptions\n * @property {WebSocketManager} webSocketManager - The WebSocket manager instance.\n * @property {SubscribeRequest} subscribeRequest - The subscribe request payload.\n * @ignore\n */\nexport type ConnectionServiceOptions = {\n webSocketManager: WebSocketManager;\n subscribeRequest: SubscribeRequest;\n};\n\n/**\n * Details about the state of a lost connection and recovery attempts.\n * @typedef ConnectionLostDetails\n * @property {boolean} isConnectionLost - Indicates if the connection is currently lost.\n * @property {boolean} isRestoreFailed - Indicates if restoring the connection has failed.\n * @property {boolean} isSocketReconnected - Indicates if the socket has been reconnected.\n * @property {boolean} isKeepAlive - Indicates if the keep-alive mechanism is active.\n * @ignore\n */\nexport type ConnectionLostDetails = {\n isConnectionLost: boolean;\n isRestoreFailed: boolean;\n isSocketReconnected: boolean;\n isKeepAlive: boolean;\n};\n\n/**\n * Properties for connection configuration.\n * @typedef ConnectionProp\n * @property {number} lostConnectionRecoveryTimeout - Timeout in milliseconds for lost connection recovery.\n * @ignore\n */\nexport type ConnectionProp = {\n lostConnectionRecoveryTimeout: number;\n};\n"],"mappings":"","ignoreList":[]}
|
package/dist/services/index.js
CHANGED
|
@@ -30,7 +30,7 @@ class Services {
|
|
|
30
30
|
|
|
31
31
|
/** WebSocket manager for handling real-time communications */
|
|
32
32
|
|
|
33
|
-
/** RTD WebSocket manager for handling
|
|
33
|
+
/** RTD WebSocket manager for handling real-time transcription */
|
|
34
34
|
|
|
35
35
|
/** Connection service for managing websocket connections */
|
|
36
36
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_agent","_interopRequireDefault","require","_contact","_config","_aqmReqs","_WebSocketManager","_connectionService","_dialer","e","__esModule","default","Services","constructor","options","webex","connectionConfig","webSocketManager","WebSocketManager","rtdWebSocketManager","aqmReq","AqmReqs","config","AgentConfigService","agent","routingAgent","contact","routingContact","dialer","aqmDialer","connectionService","ConnectionService","subscribeRequest","getInstance","instance","exports"],"sources":["index.ts"],"sourcesContent":["import routingAgent from './agent';\nimport routingContact from './task/contact';\nimport AgentConfigService from './config';\nimport AqmReqs from './core/aqm-reqs';\nimport {WebSocketManager} from './core/websocket/WebSocketManager';\nimport {ConnectionService} from './core/websocket/connection-service';\nimport {WebexSDK, SubscribeRequest} from '../types';\nimport aqmDialer from './task/dialer';\n\n/**\n * Services class provides centralized access to all contact center plugin services\n * using a singleton pattern to ensure a single instance throughout the application.\n * @private\n * @ignore\n * @class\n */\nexport default class Services {\n /** Agent services for managing agent state and capabilities */\n public readonly agent: ReturnType<typeof routingAgent>;\n /** Configuration services for agent settings */\n public readonly config: AgentConfigService;\n /** Contact services for managing customer interactions */\n public readonly contact: ReturnType<typeof routingContact>;\n /** Dialer services for outbound calling features */\n public readonly dialer: ReturnType<typeof aqmDialer>;\n /** WebSocket manager for handling real-time communications */\n public readonly webSocketManager: WebSocketManager;\n /** RTD WebSocket manager for handling
|
|
1
|
+
{"version":3,"names":["_agent","_interopRequireDefault","require","_contact","_config","_aqmReqs","_WebSocketManager","_connectionService","_dialer","e","__esModule","default","Services","constructor","options","webex","connectionConfig","webSocketManager","WebSocketManager","rtdWebSocketManager","aqmReq","AqmReqs","config","AgentConfigService","agent","routingAgent","contact","routingContact","dialer","aqmDialer","connectionService","ConnectionService","subscribeRequest","getInstance","instance","exports"],"sources":["index.ts"],"sourcesContent":["import routingAgent from './agent';\nimport routingContact from './task/contact';\nimport AgentConfigService from './config';\nimport AqmReqs from './core/aqm-reqs';\nimport {WebSocketManager} from './core/websocket/WebSocketManager';\nimport {ConnectionService} from './core/websocket/connection-service';\nimport {WebexSDK, SubscribeRequest} from '../types';\nimport aqmDialer from './task/dialer';\n\n/**\n * Services class provides centralized access to all contact center plugin services\n * using a singleton pattern to ensure a single instance throughout the application.\n * @private\n * @ignore\n * @class\n */\nexport default class Services {\n /** Agent services for managing agent state and capabilities */\n public readonly agent: ReturnType<typeof routingAgent>;\n /** Configuration services for agent settings */\n public readonly config: AgentConfigService;\n /** Contact services for managing customer interactions */\n public readonly contact: ReturnType<typeof routingContact>;\n /** Dialer services for outbound calling features */\n public readonly dialer: ReturnType<typeof aqmDialer>;\n /** WebSocket manager for handling real-time communications */\n public readonly webSocketManager: WebSocketManager;\n /** RTD WebSocket manager for handling real-time transcription */\n public readonly rtdWebSocketManager: WebSocketManager;\n /** Connection service for managing websocket connections */\n public readonly connectionService: ConnectionService;\n /** Singleton instance of the Services class */\n private static instance: Services;\n\n /**\n * Creates a new Services instance\n * @param options - Configuration options\n * @param options.webex - WebexSDK instance\n * @param options.connectionConfig - Subscription configuration for websocket connection\n */\n constructor(options: {webex: WebexSDK; connectionConfig: SubscribeRequest}) {\n const {webex, connectionConfig} = options;\n this.webSocketManager = new WebSocketManager({webex});\n // TODO: Implement reconnection logic for this websocket in upcoming PR\n this.rtdWebSocketManager = new WebSocketManager({webex});\n const aqmReq = new AqmReqs(this.webSocketManager);\n this.config = new AgentConfigService();\n this.agent = routingAgent(aqmReq);\n this.contact = routingContact(aqmReq);\n this.dialer = aqmDialer(aqmReq);\n this.connectionService = new ConnectionService({\n webSocketManager: this.webSocketManager,\n subscribeRequest: connectionConfig,\n });\n }\n\n /**\n * Gets singleton instance of Services class\n * Creates a new instance if one doesn't exist\n * @param options - Configuration options\n * @param options.webex - WebexSDK instance\n * @param options.connectionConfig - Subscription configuration for websocket connection\n * @returns The singleton Services instance\n */\n public static getInstance(options: {\n webex: WebexSDK;\n connectionConfig: SubscribeRequest;\n }): Services {\n if (!this.instance) {\n this.instance = new Services(options);\n }\n\n return this.instance;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AAEA,IAAAM,OAAA,GAAAP,sBAAA,CAAAC,OAAA;AAAsC,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAMG,QAAQ,CAAC;EAC5B;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAGA;AACF;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,OAA8D,EAAE;IAC1E,MAAM;MAACC,KAAK;MAAEC;IAAgB,CAAC,GAAGF,OAAO;IACzC,IAAI,CAACG,gBAAgB,GAAG,IAAIC,kCAAgB,CAAC;MAACH;IAAK,CAAC,CAAC;IACrD;IACA,IAAI,CAACI,mBAAmB,GAAG,IAAID,kCAAgB,CAAC;MAACH;IAAK,CAAC,CAAC;IACxD,MAAMK,MAAM,GAAG,IAAIC,gBAAO,CAAC,IAAI,CAACJ,gBAAgB,CAAC;IACjD,IAAI,CAACK,MAAM,GAAG,IAAIC,eAAkB,CAAC,CAAC;IACtC,IAAI,CAACC,KAAK,GAAG,IAAAC,cAAY,EAACL,MAAM,CAAC;IACjC,IAAI,CAACM,OAAO,GAAG,IAAAC,gBAAc,EAACP,MAAM,CAAC;IACrC,IAAI,CAACQ,MAAM,GAAG,IAAAC,eAAS,EAACT,MAAM,CAAC;IAC/B,IAAI,CAACU,iBAAiB,GAAG,IAAIC,oCAAiB,CAAC;MAC7Cd,gBAAgB,EAAE,IAAI,CAACA,gBAAgB;MACvCe,gBAAgB,EAAEhB;IACpB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAciB,WAAWA,CAACnB,OAGzB,EAAY;IACX,IAAI,CAAC,IAAI,CAACoB,QAAQ,EAAE;MAClB,IAAI,CAACA,QAAQ,GAAG,IAAItB,QAAQ,CAACE,OAAO,CAAC;IACvC;IAEA,OAAO,IAAI,CAACoB,QAAQ;EACtB;AACF;AAACC,OAAA,CAAAxB,OAAA,GAAAC,QAAA","ignoreList":[]}
|