@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.
Files changed (312) hide show
  1. package/.sdd/manifest.json +884 -0
  2. package/AGENTS.md +94 -0
  3. package/ai-docs/ARCHITECTURE.md +168 -0
  4. package/ai-docs/CONTRACTS.md +53 -0
  5. package/ai-docs/GETTING_STARTED.md +168 -0
  6. package/ai-docs/GLOSSARY.md +43 -0
  7. package/ai-docs/README.md +138 -0
  8. package/ai-docs/REVIEW_CHECKLIST.md +41 -0
  9. package/ai-docs/RULES.md +444 -0
  10. package/ai-docs/SECURITY.md +52 -0
  11. package/ai-docs/SERVICE_STATE.md +52 -0
  12. package/ai-docs/SPEC_INDEX.md +65 -0
  13. package/ai-docs/adr/0001-spec-source-policy.md +55 -0
  14. package/ai-docs/adr/README.md +8 -0
  15. package/ai-docs/adr/_adr-template.md +31 -0
  16. package/ai-docs/contact-center-spec.md +382 -0
  17. package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
  18. package/ai-docs/features/contact-owner-change-refactor.md +78 -0
  19. package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
  20. package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
  21. package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
  22. package/ai-docs/patterns/event-driven-patterns.md +485 -0
  23. package/ai-docs/patterns/testing-patterns.md +480 -0
  24. package/ai-docs/patterns/typescript-patterns.md +365 -0
  25. package/ai-docs/templates/README.md +102 -0
  26. package/ai-docs/templates/documentation/create-agents-md.md +240 -0
  27. package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
  28. package/ai-docs/templates/existing-service/bug-fix.md +254 -0
  29. package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
  30. package/ai-docs/templates/new-method/00-master.md +80 -0
  31. package/ai-docs/templates/new-method/01-requirements.md +232 -0
  32. package/ai-docs/templates/new-method/02-implementation.md +295 -0
  33. package/ai-docs/templates/new-method/03-tests.md +201 -0
  34. package/ai-docs/templates/new-method/04-validation.md +141 -0
  35. package/ai-docs/templates/new-service/00-master.md +109 -0
  36. package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
  37. package/ai-docs/templates/new-service/02-code-generation.md +346 -0
  38. package/ai-docs/templates/new-service/03-integration.md +178 -0
  39. package/ai-docs/templates/new-service/04-test-generation.md +205 -0
  40. package/ai-docs/templates/new-service/05-validation.md +145 -0
  41. package/dist/cc.js +971 -42
  42. package/dist/cc.js.map +1 -1
  43. package/dist/config.js +13 -0
  44. package/dist/config.js.map +1 -1
  45. package/dist/constants.js +31 -3
  46. package/dist/constants.js.map +1 -1
  47. package/dist/index.js +45 -15
  48. package/dist/index.js.map +1 -1
  49. package/dist/metrics/MetricsManager.js +16 -0
  50. package/dist/metrics/MetricsManager.js.map +1 -1
  51. package/dist/metrics/behavioral-events.js +205 -0
  52. package/dist/metrics/behavioral-events.js.map +1 -1
  53. package/dist/metrics/constants.js +48 -4
  54. package/dist/metrics/constants.js.map +1 -1
  55. package/dist/services/AddressBook.js +18 -15
  56. package/dist/services/AddressBook.js.map +1 -1
  57. package/dist/services/AnswerCallOnWebexService.js +202 -0
  58. package/dist/services/AnswerCallOnWebexService.js.map +1 -0
  59. package/dist/services/ApiAiAssistant.js +269 -9
  60. package/dist/services/ApiAiAssistant.js.map +1 -1
  61. package/dist/services/EntryPoint.js +46 -68
  62. package/dist/services/EntryPoint.js.map +1 -1
  63. package/dist/services/Queue.js +27 -22
  64. package/dist/services/Queue.js.map +1 -1
  65. package/dist/services/UserPreference.js +427 -0
  66. package/dist/services/UserPreference.js.map +1 -0
  67. package/dist/services/WebexCrossClientService.js +222 -0
  68. package/dist/services/WebexCrossClientService.js.map +1 -0
  69. package/dist/services/WxAppTelephonyMercurySync.js +108 -0
  70. package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
  71. package/dist/services/config/Util.js +11 -4
  72. package/dist/services/config/Util.js.map +1 -1
  73. package/dist/services/config/constants.js +41 -7
  74. package/dist/services/config/constants.js.map +1 -1
  75. package/dist/services/config/index.js +51 -0
  76. package/dist/services/config/index.js.map +1 -1
  77. package/dist/services/config/types.js +57 -12
  78. package/dist/services/config/types.js.map +1 -1
  79. package/dist/services/core/Err.js.map +1 -1
  80. package/dist/services/core/Utils.js +111 -32
  81. package/dist/services/core/Utils.js.map +1 -1
  82. package/dist/services/core/WebexRequest.js +6 -2
  83. package/dist/services/core/WebexRequest.js.map +1 -1
  84. package/dist/services/core/aqm-reqs.js +28 -14
  85. package/dist/services/core/aqm-reqs.js.map +1 -1
  86. package/dist/services/core/types.js.map +1 -1
  87. package/dist/services/core/websocket/WebSocketManager.js +2 -1
  88. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  89. package/dist/services/core/websocket/types.js.map +1 -1
  90. package/dist/services/index.js +1 -1
  91. package/dist/services/index.js.map +1 -1
  92. package/dist/services/task/Task.js +754 -0
  93. package/dist/services/task/Task.js.map +1 -0
  94. package/dist/services/task/TaskFactory.js +49 -0
  95. package/dist/services/task/TaskFactory.js.map +1 -0
  96. package/dist/services/task/TaskManager.js +1172 -521
  97. package/dist/services/task/TaskManager.js.map +1 -1
  98. package/dist/services/task/TaskUtils.js +211 -27
  99. package/dist/services/task/TaskUtils.js.map +1 -1
  100. package/dist/services/task/WebexCallingUtils.js +70 -0
  101. package/dist/services/task/WebexCallingUtils.js.map +1 -0
  102. package/dist/services/task/constants.js +12 -2
  103. package/dist/services/task/constants.js.map +1 -1
  104. package/dist/services/task/contact.js +29 -0
  105. package/dist/services/task/contact.js.map +1 -1
  106. package/dist/services/task/dialer.js +78 -0
  107. package/dist/services/task/dialer.js.map +1 -1
  108. package/dist/services/task/digital/Digital.js +78 -0
  109. package/dist/services/task/digital/Digital.js.map +1 -0
  110. package/dist/services/task/state-machine/TaskStateMachine.js +982 -0
  111. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  112. package/dist/services/task/state-machine/actions.js +572 -0
  113. package/dist/services/task/state-machine/actions.js.map +1 -0
  114. package/dist/services/task/state-machine/constants.js +161 -0
  115. package/dist/services/task/state-machine/constants.js.map +1 -0
  116. package/dist/services/task/state-machine/guards.js +379 -0
  117. package/dist/services/task/state-machine/guards.js.map +1 -0
  118. package/dist/services/task/state-machine/index.js +53 -0
  119. package/dist/services/task/state-machine/index.js.map +1 -0
  120. package/dist/services/task/state-machine/types.js +54 -0
  121. package/dist/services/task/state-machine/types.js.map +1 -0
  122. package/dist/services/task/state-machine/uiControlsComputer.js +703 -0
  123. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  124. package/dist/services/task/taskDataNormalizer.js +99 -0
  125. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  126. package/dist/services/task/types.js +228 -5
  127. package/dist/services/task/types.js.map +1 -1
  128. package/dist/services/task/voice/Voice.js +1485 -0
  129. package/dist/services/task/voice/Voice.js.map +1 -0
  130. package/dist/services/task/voice/WebRTC.js +152 -0
  131. package/dist/services/task/voice/WebRTC.js.map +1 -0
  132. package/dist/services/task/voice/wxAppVoiceMethods.js +354 -0
  133. package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
  134. package/dist/services/wxAppDiagnosticLogging.js +122 -0
  135. package/dist/services/wxAppDiagnosticLogging.js.map +1 -0
  136. package/dist/services/wxAppTelephonyUtils.js +19 -0
  137. package/dist/services/wxAppTelephonyUtils.js.map +1 -0
  138. package/dist/types/cc.d.ts +193 -6
  139. package/dist/types/config.d.ts +13 -0
  140. package/dist/types/constants.d.ts +29 -1
  141. package/dist/types/index.d.ts +35 -8
  142. package/dist/types/metrics/MetricsManager.d.ts +6 -0
  143. package/dist/types/metrics/constants.d.ts +43 -1
  144. package/dist/types/services/AddressBook.d.ts +2 -1
  145. package/dist/types/services/AnswerCallOnWebexService.d.ts +38 -0
  146. package/dist/types/services/ApiAiAssistant.d.ts +56 -5
  147. package/dist/types/services/EntryPoint.d.ts +7 -5
  148. package/dist/types/services/Queue.d.ts +5 -3
  149. package/dist/types/services/UserPreference.d.ts +118 -0
  150. package/dist/types/services/WebexCrossClientService.d.ts +32 -0
  151. package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
  152. package/dist/types/services/config/constants.d.ts +34 -5
  153. package/dist/types/services/config/types.d.ts +197 -12
  154. package/dist/types/services/core/Err.d.ts +6 -0
  155. package/dist/types/services/core/Utils.d.ts +35 -13
  156. package/dist/types/services/core/WebexRequest.d.ts +1 -0
  157. package/dist/types/services/core/types.d.ts +2 -0
  158. package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
  159. package/dist/types/services/core/websocket/types.d.ts +1 -1
  160. package/dist/types/services/index.d.ts +1 -1
  161. package/dist/types/services/task/Task.d.ts +175 -0
  162. package/dist/types/services/task/TaskFactory.d.ts +13 -0
  163. package/dist/types/services/task/TaskUtils.d.ts +48 -2
  164. package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
  165. package/dist/types/services/task/constants.d.ts +10 -0
  166. package/dist/types/services/task/contact.d.ts +4 -0
  167. package/dist/types/services/task/dialer.d.ts +30 -0
  168. package/dist/types/services/task/digital/Digital.d.ts +22 -0
  169. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1442 -0
  170. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  171. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  172. package/dist/types/services/task/state-machine/guards.d.ts +103 -0
  173. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  174. package/dist/types/services/task/state-machine/types.d.ts +277 -0
  175. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  176. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  177. package/dist/types/services/task/types.d.ts +680 -66
  178. package/dist/types/services/task/voice/Voice.d.ts +227 -0
  179. package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
  180. package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +55 -0
  181. package/dist/types/services/wxAppDiagnosticLogging.d.ts +51 -0
  182. package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
  183. package/dist/types/types.d.ts +205 -9
  184. package/dist/types/utils/PageCache.d.ts +20 -3
  185. package/dist/types/webex.d.ts +1 -0
  186. package/dist/types.js +162 -4
  187. package/dist/types.js.map +1 -1
  188. package/dist/utils/PageCache.js +19 -5
  189. package/dist/utils/PageCache.js.map +1 -1
  190. package/dist/webex.js +22 -2
  191. package/dist/webex.js.map +1 -1
  192. package/package.json +16 -12
  193. package/src/cc.ts +1289 -112
  194. package/src/config.ts +13 -0
  195. package/src/constants.ts +29 -1
  196. package/src/index.ts +36 -5
  197. package/src/metrics/MetricsManager.ts +16 -0
  198. package/src/metrics/ai-docs/AGENTS.md +350 -0
  199. package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
  200. package/src/metrics/ai-docs/metrics-spec.md +921 -0
  201. package/src/metrics/behavioral-events.ts +212 -0
  202. package/src/metrics/constants.ts +52 -4
  203. package/src/services/AddressBook.ts +17 -6
  204. package/src/services/AnswerCallOnWebexService.ts +239 -0
  205. package/src/services/ApiAiAssistant.ts +356 -9
  206. package/src/services/EntryPoint.ts +59 -60
  207. package/src/services/Queue.ts +29 -12
  208. package/src/services/UserPreference.ts +509 -0
  209. package/src/services/WebexCrossClientService.ts +293 -0
  210. package/src/services/WxAppTelephonyMercurySync.ts +142 -0
  211. package/src/services/agent/ai-docs/AGENTS.md +240 -0
  212. package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
  213. package/src/services/agent/ai-docs/agent-spec.md +505 -0
  214. package/src/services/ai-docs/AGENTS.md +386 -0
  215. package/src/services/ai-docs/services-spec.md +505 -0
  216. package/src/services/config/Util.ts +12 -3
  217. package/src/services/config/ai-docs/AGENTS.md +255 -0
  218. package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
  219. package/src/services/config/ai-docs/config-spec.md +686 -0
  220. package/src/services/config/constants.ts +46 -6
  221. package/src/services/config/index.ts +65 -0
  222. package/src/services/config/types.ts +197 -13
  223. package/src/services/core/Err.ts +3 -0
  224. package/src/services/core/Utils.ts +127 -37
  225. package/src/services/core/WebexRequest.ts +3 -1
  226. package/src/services/core/ai-docs/AGENTS.md +381 -0
  227. package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
  228. package/src/services/core/ai-docs/core-spec.md +787 -0
  229. package/src/services/core/aqm-reqs.ts +30 -15
  230. package/src/services/core/types.ts +2 -0
  231. package/src/services/core/websocket/WebSocketManager.ts +2 -0
  232. package/src/services/core/websocket/types.ts +1 -1
  233. package/src/services/index.ts +1 -1
  234. package/src/services/task/Task.ts +908 -0
  235. package/src/services/task/TaskFactory.ts +60 -0
  236. package/src/services/task/TaskManager.ts +1419 -608
  237. package/src/services/task/TaskUtils.ts +303 -25
  238. package/src/services/task/WebexCallingUtils.ts +136 -0
  239. package/src/services/task/ai-docs/AGENTS.md +457 -0
  240. package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
  241. package/src/services/task/ai-docs/task-spec.md +1474 -0
  242. package/src/services/task/constants.ts +10 -0
  243. package/src/services/task/contact.ts +30 -0
  244. package/src/services/task/dialer.ts +80 -0
  245. package/src/services/task/digital/Digital.ts +97 -0
  246. package/src/services/task/state-machine/TaskStateMachine.ts +1320 -0
  247. package/src/services/task/state-machine/actions.ts +741 -0
  248. package/src/services/task/state-machine/ai-docs/AGENTS.md +460 -0
  249. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1156 -0
  250. package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2247 -0
  251. package/src/services/task/state-machine/constants.ts +172 -0
  252. package/src/services/task/state-machine/guards.ts +442 -0
  253. package/src/services/task/state-machine/index.ts +28 -0
  254. package/src/services/task/state-machine/types.ts +258 -0
  255. package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
  256. package/src/services/task/taskDataNormalizer.ts +137 -0
  257. package/src/services/task/types.ts +819 -70
  258. package/src/services/task/voice/Voice.ts +1851 -0
  259. package/src/services/task/voice/WebRTC.ts +191 -0
  260. package/src/services/task/voice/wxAppVoiceMethods.ts +516 -0
  261. package/src/services/wxAppDiagnosticLogging.ts +174 -0
  262. package/src/services/wxAppTelephonyUtils.ts +14 -0
  263. package/src/types.ts +262 -11
  264. package/src/utils/AGENTS.md +289 -0
  265. package/src/utils/PageCache.ts +38 -5
  266. package/src/utils/ai-docs/utils-spec.md +391 -0
  267. package/src/webex.js +10 -0
  268. package/test/unit/spec/cc.ts +2210 -119
  269. package/test/unit/spec/logger-proxy.ts +70 -0
  270. package/test/unit/spec/metrics/MetricsManager.ts +25 -0
  271. package/test/unit/spec/metrics/behavioral-events.ts +60 -0
  272. package/test/unit/spec/services/AddressBook.ts +37 -6
  273. package/test/unit/spec/services/AnswerCallOnWebexService.ts +264 -0
  274. package/test/unit/spec/services/ApiAiAssistant.ts +311 -21
  275. package/test/unit/spec/services/EntryPoint.ts +87 -40
  276. package/test/unit/spec/services/Queue.ts +123 -12
  277. package/test/unit/spec/services/UserPreference.ts +401 -0
  278. package/test/unit/spec/services/WebCallingService.ts +7 -1
  279. package/test/unit/spec/services/WebexCrossClientService.ts +467 -0
  280. package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +136 -0
  281. package/test/unit/spec/services/config/Util.ts +129 -0
  282. package/test/unit/spec/services/config/index.ts +97 -29
  283. package/test/unit/spec/services/core/Utils.ts +425 -8
  284. package/test/unit/spec/services/core/WebexRequest.ts +3 -1
  285. package/test/unit/spec/services/core/aqm-reqs.ts +113 -1
  286. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
  287. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  288. package/test/unit/spec/services/task/Task.ts +745 -0
  289. package/test/unit/spec/services/task/TaskFactory.ts +99 -0
  290. package/test/unit/spec/services/task/TaskManager.ts +2518 -1494
  291. package/test/unit/spec/services/task/TaskUtils.ts +235 -0
  292. package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
  293. package/test/unit/spec/services/task/contact.ts +33 -0
  294. package/test/unit/spec/services/task/dialer.ts +190 -0
  295. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  296. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +4060 -0
  297. package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
  298. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  299. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
  300. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  301. package/test/unit/spec/services/task/voice/Voice.ts +2061 -0
  302. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  303. package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +603 -0
  304. package/test/unit/spec/services/wxAppDiagnosticLogging.ts +143 -0
  305. package/test/unit/spec/wellnessSampleUtils.ts +288 -0
  306. package/umd/contact-center.min.js +2 -2
  307. package/umd/contact-center.min.js.map +1 -1
  308. package/dist/services/task/index.js +0 -1525
  309. package/dist/services/task/index.js.map +0 -1
  310. package/dist/types/services/task/index.d.ts +0 -650
  311. package/src/services/task/index.ts +0 -1801
  312. package/test/unit/spec/services/task/index.ts +0 -2184
@@ -0,0 +1,354 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.acceptOnWebex = acceptOnWebex;
7
+ exports.getCallingDeviceDetails = getCallingDeviceDetails;
8
+ exports.getWebexCallingCallId = getWebexCallingCallId;
9
+ exports.getWxAppLineOwnerId = getWxAppLineOwnerId;
10
+ exports.isWebexAppCallingOffer = isWebexAppCallingOffer;
11
+ exports.isWebexAppInboundCallingOffer = isWebexAppInboundCallingOffer;
12
+ exports.mapWxAppVoiceError = mapWxAppVoiceError;
13
+ exports.rejectOnWebex = rejectOnWebex;
14
+ exports.resolveWxAppLineOwnerId = resolveWxAppLineOwnerId;
15
+ exports.runWxAppAccept = runWxAppAccept;
16
+ exports.runWxAppOutdialDecline = runWxAppOutdialDecline;
17
+ exports.runWxAppReject = runWxAppReject;
18
+ exports.runWxAppToggleMute = runWxAppToggleMute;
19
+ exports.runWxAppTransmitDtmf = runWxAppTransmitDtmf;
20
+ exports.toggleMuteOnWebex = toggleMuteOnWebex;
21
+ exports.transmitDtmfOnWebex = transmitDtmfOnWebex;
22
+ var _loggerProxy = _interopRequireDefault(require("../../../logger-proxy"));
23
+ var _constants = require("../../../constants");
24
+ var _Utils = require("../../core/Utils");
25
+ var _stateMachine = require("../state-machine");
26
+ var _MetricsManager = _interopRequireDefault(require("../../../metrics/MetricsManager"));
27
+ var _constants2 = require("../../../metrics/constants");
28
+ var _WebexCallingUtils = require("../WebexCallingUtils");
29
+ var _wxAppDiagnosticLogging = require("../../wxAppDiagnosticLogging");
30
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
31
+ /** @deprecated Use {@link WxAppVoiceDependencies} */
32
+
33
+ const isWxAppParticipant = participant => participant?.deviceType === 'wxApp' && typeof participant?.deviceCallId === 'string' && participant.deviceCallId.trim() !== '' && typeof participant?.deviceId === 'string' && participant.deviceId.trim() !== '';
34
+ const isOutdialTask = deps => deps.getTaskData()?.interaction?.outboundType === 'OUTDIAL';
35
+ function getWxAppAgentParticipant(deps) {
36
+ const taskData = deps.getTaskData();
37
+ const participants = taskData.interaction?.participants;
38
+ const agentId = deps.agentId ?? taskData.agentId;
39
+ if (!participants || !agentId) {
40
+ return undefined;
41
+ }
42
+ if (participants[agentId]) {
43
+ return participants[agentId];
44
+ }
45
+ return Object.values(participants).find(participant => participant?.id === agentId);
46
+ }
47
+ function getCallingDeviceDetails(deps) {
48
+ const taskData = deps.getTaskData();
49
+ const participant = getWxAppAgentParticipant(deps);
50
+ if (!isWxAppParticipant(participant)) {
51
+ return undefined;
52
+ }
53
+ return (0, _WebexCallingUtils.getWebexCallingDeviceDetailsForAgent)(deps.agentId ?? taskData.agentId, taskData.interaction?.participants);
54
+ }
55
+ function isWebexAppCallingOffer(deps) {
56
+ if (!deps.enableWxBetterTogether) {
57
+ return false;
58
+ }
59
+ const state = deps.getTaskState();
60
+ if (state !== _stateMachine.TaskState.OFFERED) {
61
+ return false;
62
+ }
63
+ const details = getCallingDeviceDetails(deps);
64
+ return Boolean(details);
65
+ }
66
+
67
+ /** Inbound wxApp offer only — outdial decline uses CC routing, not telephony reject. */
68
+ function isWebexAppInboundCallingOffer(deps) {
69
+ return isWebexAppCallingOffer(deps) && !isOutdialTask(deps);
70
+ }
71
+ function getWebexCallingCallId(deps) {
72
+ const state = deps.getTaskState();
73
+ if (!state || state === _stateMachine.TaskState.OFFERED || state === _stateMachine.TaskState.IDLE || state === _stateMachine.TaskState.WRAPPING_UP || state === _stateMachine.TaskState.TERMINATED || state === _stateMachine.TaskState.COMPLETED) {
74
+ return null;
75
+ }
76
+ return getCallingDeviceDetails(deps)?.deviceCallId ?? null;
77
+ }
78
+ function getWxAppLineOwnerId(deps) {
79
+ const participant = getWxAppAgentParticipant(deps);
80
+ const lineOwnerId = participant?.lineOwnerId;
81
+ return typeof lineOwnerId === 'string' && lineOwnerId.trim() !== '' ? lineOwnerId : undefined;
82
+ }
83
+ function resolveWxAppLineOwnerId(deps, override) {
84
+ if (typeof override === 'string' && override.trim() !== '') {
85
+ return override;
86
+ }
87
+ return (0, _WebexCallingUtils.decodedLineOwnerId)(getWxAppLineOwnerId(deps));
88
+ }
89
+ function getInteractionId(deps) {
90
+ return deps.getTaskData()?.interactionId;
91
+ }
92
+ function logTelephonyFailure(action, deps, error) {
93
+ const wxError = error;
94
+ (0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
95
+ action,
96
+ phase: 'failed',
97
+ interactionId: getInteractionId(deps),
98
+ trackingId: wxError.trackingId,
99
+ httpStatus: wxError.status,
100
+ failureReason: wxError.message
101
+ });
102
+ }
103
+ function getWxAppTelephonyMetricFailurePayload(deps, error) {
104
+ const wxError = error;
105
+ const payload = {
106
+ taskId: getInteractionId(deps) ?? '',
107
+ error: error instanceof Error ? error.toString() : String(error)
108
+ };
109
+ if (wxError.trackingId) {
110
+ payload.trackingId = wxError.trackingId;
111
+ }
112
+ return payload;
113
+ }
114
+ function getWxAppOutdialDeclineFailurePayload(deps, error) {
115
+ const base = {
116
+ taskId: getInteractionId(deps) ?? '',
117
+ error: error instanceof Error ? error.toString() : String(error)
118
+ };
119
+ const aqmDetails = error.details;
120
+ if (aqmDetails) {
121
+ return {
122
+ ...base,
123
+ ..._MetricsManager.default.getCommonTrackingFieldForAQMResponseFailed(aqmDetails)
124
+ };
125
+ }
126
+ return getWxAppTelephonyMetricFailurePayload(deps, error);
127
+ }
128
+ function logWxAppOutdialDeclineFailure(deps, error) {
129
+ const aqmDetails = error.details;
130
+ const wxError = error;
131
+ (0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
132
+ action: 'decline',
133
+ phase: 'failed',
134
+ interactionId: getInteractionId(deps),
135
+ trackingId: aqmDetails?.trackingId ?? wxError.trackingId,
136
+ httpStatus: wxError.status,
137
+ failureReason: aqmDetails?.data?.reason ?? wxError.message
138
+ });
139
+ }
140
+ function assertWxAppEnabled(deps) {
141
+ if (!deps.enableWxBetterTogether) {
142
+ (0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('enableWxBetterTogether_disabled', getInteractionId(deps));
143
+ throw new Error('enableWxBetterTogether is disabled');
144
+ }
145
+ if (!deps.answerCallOnWebexService) {
146
+ (0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('answer_call_on_webex_service_unavailable', getInteractionId(deps));
147
+ throw new Error('AnswerCallOnWebexService is unavailable');
148
+ }
149
+ }
150
+ async function acceptOnWebex(deps, options) {
151
+ const interactionId = getInteractionId(deps);
152
+ (0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
153
+ action: 'accept',
154
+ phase: 'started',
155
+ interactionId
156
+ });
157
+ assertWxAppEnabled(deps);
158
+ if (!isWebexAppCallingOffer(deps)) {
159
+ (0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('not_wxApp_calling_offer', interactionId);
160
+ throw new Error('Task is not a wxApp calling offer');
161
+ }
162
+ const details = getCallingDeviceDetails(deps);
163
+ if (!details) {
164
+ (0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('wxApp_device_details_unavailable', interactionId);
165
+ throw new Error('WxApp calling device details are unavailable');
166
+ }
167
+ await deps.answerCallOnWebexService.answerCall({
168
+ callId: details.deviceCallId,
169
+ endpointId: details.deviceId,
170
+ lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId)
171
+ });
172
+ (0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
173
+ action: 'accept',
174
+ phase: 'success',
175
+ interactionId
176
+ });
177
+ }
178
+ async function rejectOnWebex(deps, options) {
179
+ const interactionId = getInteractionId(deps);
180
+ (0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
181
+ action: 'decline',
182
+ phase: 'started',
183
+ interactionId
184
+ });
185
+ assertWxAppEnabled(deps);
186
+ if (!isWebexAppInboundCallingOffer(deps)) {
187
+ (0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('not_wxApp_inbound_calling_offer', interactionId);
188
+ throw new Error('Task is not a wxApp inbound calling offer');
189
+ }
190
+ const details = getCallingDeviceDetails(deps);
191
+ if (!details) {
192
+ (0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('wxApp_device_details_unavailable', interactionId);
193
+ throw new Error('WxApp calling device details are unavailable');
194
+ }
195
+ await deps.answerCallOnWebexService.rejectCall({
196
+ callId: details.deviceCallId,
197
+ lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId)
198
+ });
199
+ (0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
200
+ action: 'decline',
201
+ phase: 'success',
202
+ interactionId
203
+ });
204
+ }
205
+ async function toggleMuteOnWebex(deps, options) {
206
+ const interactionId = getInteractionId(deps);
207
+ (0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
208
+ action: 'mute',
209
+ phase: 'started',
210
+ interactionId
211
+ });
212
+ assertWxAppEnabled(deps);
213
+ const callId = getWebexCallingCallId(deps);
214
+ if (!callId) {
215
+ (0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('wxApp_call_id_unavailable', interactionId);
216
+ throw new Error('WxApp call ID is unavailable');
217
+ }
218
+ const targetMuted = options?.muted ?? !deps.getWxAppMuted();
219
+ const request = targetMuted ? deps.answerCallOnWebexService.muteCall.bind(deps.answerCallOnWebexService) : deps.answerCallOnWebexService.unmuteCall.bind(deps.answerCallOnWebexService);
220
+ await request({
221
+ callId,
222
+ lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId)
223
+ });
224
+ deps.setWxAppMuted(targetMuted);
225
+ (0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
226
+ action: 'mute',
227
+ phase: 'success',
228
+ interactionId
229
+ });
230
+ }
231
+ async function transmitDtmfOnWebex(deps, options) {
232
+ const interactionId = getInteractionId(deps);
233
+ (0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
234
+ action: 'dtmf',
235
+ phase: 'started',
236
+ interactionId
237
+ });
238
+ assertWxAppEnabled(deps);
239
+ const callId = getWebexCallingCallId(deps);
240
+ if (!callId) {
241
+ (0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('wxApp_call_id_unavailable', interactionId);
242
+ throw new Error('WxApp call ID is unavailable');
243
+ }
244
+ _loggerProxy.default.info('transmitDtmf', {
245
+ module: 'wxAppVoiceMethods',
246
+ method: _constants.METHODS.TRANSMIT_DTMF,
247
+ data: {
248
+ interactionId,
249
+ callIdSuffix: callId.length <= 8 ? callId : callId.slice(-8),
250
+ dtmfLength: options.dtmf.length,
251
+ hasLineOwnerId: Boolean(options.lineOwnerId)
252
+ }
253
+ });
254
+ await deps.answerCallOnWebexService.transmitDtmf({
255
+ callId,
256
+ dtmf: options.dtmf,
257
+ lineOwnerId: resolveWxAppLineOwnerId(deps, options.lineOwnerId)
258
+ });
259
+ (0, _wxAppDiagnosticLogging.logWxAppTelephonyAction)({
260
+ action: 'dtmf',
261
+ phase: 'success',
262
+ interactionId
263
+ });
264
+ }
265
+ async function runWxAppAccept(deps, lifecycle, options) {
266
+ const taskId = getInteractionId(deps);
267
+ deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED]);
268
+ try {
269
+ lifecycle.setWxAppAcceptInFlight(true);
270
+ lifecycle.setWxAppAnswerPending(true);
271
+ await acceptOnWebex(deps, options);
272
+ lifecycle.resetWxAppMuted();
273
+ await lifecycle.syncWxAppMuteFromCallDetails();
274
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS, {
275
+ taskId
276
+ }, ['operational', 'behavioral']);
277
+ } catch (error) {
278
+ lifecycle.setWxAppAnswerPending(false);
279
+ logTelephonyFailure('accept', deps, error);
280
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED, getWxAppTelephonyMetricFailurePayload(deps, error), ['operational', 'behavioral']);
281
+ lifecycle.mapWxAppVoiceError(error, _constants.METHODS.ACCEPT);
282
+ } finally {
283
+ lifecycle.setWxAppAcceptInFlight(false);
284
+ }
285
+ }
286
+ async function runWxAppReject(deps, lifecycle, options) {
287
+ const taskId = getInteractionId(deps);
288
+ deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED]);
289
+ try {
290
+ await rejectOnWebex(deps, options);
291
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {
292
+ taskId
293
+ }, ['operational', 'behavioral']);
294
+ } catch (error) {
295
+ logTelephonyFailure('decline', deps, error);
296
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED, getWxAppTelephonyMetricFailurePayload(deps, error), ['operational', 'behavioral']);
297
+ lifecycle.mapWxAppVoiceError(error, _constants.METHODS.REJECT);
298
+ }
299
+ }
300
+ async function runWxAppOutdialDecline(deps, executeCancel) {
301
+ const taskId = getInteractionId(deps);
302
+ deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED]);
303
+ try {
304
+ const result = await executeCancel();
305
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {
306
+ taskId
307
+ }, ['operational', 'behavioral']);
308
+ return result;
309
+ } catch (error) {
310
+ logWxAppOutdialDeclineFailure(deps, error);
311
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED, getWxAppOutdialDeclineFailurePayload(deps, error), ['operational', 'behavioral']);
312
+ throw error;
313
+ }
314
+ }
315
+ async function runWxAppToggleMute(deps, lifecycle, options) {
316
+ const taskId = getInteractionId(deps);
317
+ deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED]);
318
+ try {
319
+ await toggleMuteOnWebex(deps, options);
320
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS, {
321
+ taskId,
322
+ targetMuted: deps.getWxAppMuted()
323
+ }, ['operational', 'behavioral']);
324
+ } catch (error) {
325
+ logTelephonyFailure('mute', deps, error);
326
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED, getWxAppTelephonyMetricFailurePayload(deps, error), ['operational', 'behavioral']);
327
+ lifecycle.mapWxAppVoiceError(error, _constants.METHODS.TOGGLE_MUTE);
328
+ }
329
+ }
330
+ async function runWxAppTransmitDtmf(deps, lifecycle, options) {
331
+ const taskId = getInteractionId(deps);
332
+ deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED]);
333
+ try {
334
+ await transmitDtmfOnWebex(deps, options);
335
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS, {
336
+ taskId,
337
+ dtmfLength: options.dtmf.length
338
+ }, ['operational', 'behavioral']);
339
+ } catch (error) {
340
+ logTelephonyFailure('dtmf', deps, error);
341
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED, getWxAppTelephonyMetricFailurePayload(deps, error), ['operational', 'behavioral']);
342
+ lifecycle.mapWxAppVoiceError(error, _constants.METHODS.TRANSMIT_DTMF);
343
+ }
344
+ }
345
+ function mapWxAppVoiceError(error, method, module) {
346
+ if (error instanceof Error && error.isWxAppTelephonyError) {
347
+ throw error;
348
+ }
349
+ const {
350
+ error: detailedError
351
+ } = (0, _Utils.getErrorDetails)(error, method, module);
352
+ throw detailedError;
353
+ }
354
+ //# sourceMappingURL=wxAppVoiceMethods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","_Utils","_stateMachine","_MetricsManager","_constants2","_WebexCallingUtils","_wxAppDiagnosticLogging","e","__esModule","default","isWxAppParticipant","participant","deviceType","deviceCallId","trim","deviceId","isOutdialTask","deps","getTaskData","interaction","outboundType","getWxAppAgentParticipant","taskData","participants","agentId","undefined","Object","values","find","id","getCallingDeviceDetails","getWebexCallingDeviceDetailsForAgent","isWebexAppCallingOffer","enableWxBetterTogether","state","getTaskState","TaskState","OFFERED","details","Boolean","isWebexAppInboundCallingOffer","getWebexCallingCallId","IDLE","WRAPPING_UP","TERMINATED","COMPLETED","getWxAppLineOwnerId","lineOwnerId","resolveWxAppLineOwnerId","override","decodedLineOwnerId","getInteractionId","interactionId","logTelephonyFailure","action","error","wxError","logWxAppTelephonyAction","phase","trackingId","httpStatus","status","failureReason","message","getWxAppTelephonyMetricFailurePayload","payload","taskId","Error","toString","String","getWxAppOutdialDeclineFailurePayload","base","aqmDetails","MetricsManager","getCommonTrackingFieldForAQMResponseFailed","logWxAppOutdialDeclineFailure","data","reason","assertWxAppEnabled","logWxAppValidationFailure","answerCallOnWebexService","acceptOnWebex","options","answerCall","callId","endpointId","rejectOnWebex","rejectCall","toggleMuteOnWebex","targetMuted","muted","getWxAppMuted","request","muteCall","bind","unmuteCall","setWxAppMuted","transmitDtmfOnWebex","LoggerProxy","info","module","method","METHODS","TRANSMIT_DTMF","callIdSuffix","length","slice","dtmfLength","dtmf","hasLineOwnerId","transmitDtmf","runWxAppAccept","lifecycle","metricsManager","timeEvent","METRIC_EVENT_NAMES","WXAPP_TASK_ACCEPT_SUCCESS","WXAPP_TASK_ACCEPT_FAILED","setWxAppAcceptInFlight","setWxAppAnswerPending","resetWxAppMuted","syncWxAppMuteFromCallDetails","trackEvent","mapWxAppVoiceError","ACCEPT","runWxAppReject","WXAPP_TASK_DECLINE_SUCCESS","WXAPP_TASK_DECLINE_FAILED","REJECT","runWxAppOutdialDecline","executeCancel","result","runWxAppToggleMute","WXAPP_TASK_MUTE_SUCCESS","WXAPP_TASK_MUTE_FAILED","TOGGLE_MUTE","runWxAppTransmitDtmf","WXAPP_TASK_DTMF_SUCCESS","WXAPP_TASK_DTMF_FAILED","isWxAppTelephonyError","detailedError","getErrorDetails"],"sources":["wxAppVoiceMethods.ts"],"sourcesContent":["import {EventPayload} from '@webex/internal-plugin-metrics/src/metrics.types';\n\nimport AnswerCallOnWebexService, {WxAppTelephonyError} from '../../AnswerCallOnWebexService';\nimport LoggerProxy from '../../../logger-proxy';\nimport {METHODS} from '../../../constants';\nimport {getErrorDetails} from '../../core/Utils';\nimport {Failure} from '../../core/GlobalTypes';\nimport {TaskData, TaskToggleMuteOptions, TaskTransmitDtmfOptions} from '../types';\nimport {TaskState} from '../state-machine';\nimport MetricsManager from '../../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../../metrics/constants';\nimport {\n decodedLineOwnerId,\n getWebexCallingDeviceDetailsForAgent,\n WebexCallingDeviceDetails,\n} from '../WebexCallingUtils';\nimport {\n logWxAppTelephonyAction,\n logWxAppValidationFailure,\n type WxAppTelephonyAction,\n} from '../../wxAppDiagnosticLogging';\n\ntype WxAppParticipant = {\n deviceType?: string;\n deviceCallId?: string;\n deviceId?: string;\n};\n\nexport type WxAppVoiceDependencies = {\n enableWxBetterTogether: boolean;\n answerCallOnWebexService?: AnswerCallOnWebexService;\n agentId?: string;\n metricsManager: MetricsManager;\n getTaskData: () => TaskData;\n getTaskState: () => TaskState | undefined;\n getWxAppMuted: () => boolean;\n setWxAppMuted: (muted: boolean) => void;\n};\n\n/** @deprecated Use {@link WxAppVoiceDependencies} */\nexport type WxAppVoiceDeps = WxAppVoiceDependencies;\n\nexport type WxAppVoiceLifecycle = {\n setWxAppAcceptInFlight: (inFlight: boolean) => void;\n setWxAppAnswerPending: (pending: boolean) => void;\n resetWxAppMuted: () => void;\n syncWxAppMuteFromCallDetails: () => Promise<boolean | undefined>;\n mapWxAppVoiceError: (error: unknown, method: string) => never;\n};\n\nconst isWxAppParticipant = (participant: unknown): participant is WxAppParticipant =>\n (participant as WxAppParticipant)?.deviceType === 'wxApp' &&\n typeof (participant as WxAppParticipant)?.deviceCallId === 'string' &&\n (participant as WxAppParticipant).deviceCallId.trim() !== '' &&\n typeof (participant as WxAppParticipant)?.deviceId === 'string' &&\n (participant as WxAppParticipant).deviceId.trim() !== '';\n\nconst isOutdialTask = (deps: WxAppVoiceDependencies): boolean =>\n deps.getTaskData()?.interaction?.outboundType === 'OUTDIAL';\n\nfunction getWxAppAgentParticipant(deps: WxAppVoiceDependencies): unknown {\n const taskData = deps.getTaskData();\n const participants = taskData.interaction?.participants;\n const agentId = deps.agentId ?? taskData.agentId;\n\n if (!participants || !agentId) {\n return undefined;\n }\n\n if (participants[agentId]) {\n return participants[agentId];\n }\n\n return Object.values(participants).find(\n (participant) => (participant as {id?: string})?.id === agentId\n );\n}\n\nexport function getCallingDeviceDetails(\n deps: WxAppVoiceDependencies\n): WebexCallingDeviceDetails | undefined {\n const taskData = deps.getTaskData();\n const participant = getWxAppAgentParticipant(deps);\n\n if (!isWxAppParticipant(participant)) {\n return undefined;\n }\n\n return getWebexCallingDeviceDetailsForAgent(\n deps.agentId ?? taskData.agentId,\n taskData.interaction?.participants\n );\n}\n\nexport function isWebexAppCallingOffer(deps: WxAppVoiceDependencies): boolean {\n if (!deps.enableWxBetterTogether) {\n return false;\n }\n\n const state = deps.getTaskState();\n if (state !== TaskState.OFFERED) {\n return false;\n }\n\n const details = getCallingDeviceDetails(deps);\n\n return Boolean(details);\n}\n\n/** Inbound wxApp offer only — outdial decline uses CC routing, not telephony reject. */\nexport function isWebexAppInboundCallingOffer(deps: WxAppVoiceDependencies): boolean {\n return isWebexAppCallingOffer(deps) && !isOutdialTask(deps);\n}\n\nexport function getWebexCallingCallId(deps: WxAppVoiceDependencies): string | null {\n const state = deps.getTaskState();\n if (\n !state ||\n state === TaskState.OFFERED ||\n state === TaskState.IDLE ||\n state === TaskState.WRAPPING_UP ||\n state === TaskState.TERMINATED ||\n state === TaskState.COMPLETED\n ) {\n return null;\n }\n\n return getCallingDeviceDetails(deps)?.deviceCallId ?? null;\n}\n\nexport function getWxAppLineOwnerId(deps: WxAppVoiceDependencies): string | undefined {\n const participant = getWxAppAgentParticipant(deps) as {lineOwnerId?: string} | undefined;\n const lineOwnerId = participant?.lineOwnerId;\n\n return typeof lineOwnerId === 'string' && lineOwnerId.trim() !== '' ? lineOwnerId : undefined;\n}\n\nexport function resolveWxAppLineOwnerId(\n deps: WxAppVoiceDependencies,\n override?: string\n): string | undefined {\n if (typeof override === 'string' && override.trim() !== '') {\n return override;\n }\n\n return decodedLineOwnerId(getWxAppLineOwnerId(deps));\n}\n\nfunction getInteractionId(deps: WxAppVoiceDependencies): string | undefined {\n return deps.getTaskData()?.interactionId;\n}\n\nfunction logTelephonyFailure(\n action: WxAppTelephonyAction,\n deps: WxAppVoiceDependencies,\n error: unknown\n): void {\n const wxError = error as WxAppTelephonyError;\n logWxAppTelephonyAction({\n action,\n phase: 'failed',\n interactionId: getInteractionId(deps),\n trackingId: wxError.trackingId,\n httpStatus: wxError.status,\n failureReason: wxError.message,\n });\n}\n\nfunction getWxAppTelephonyMetricFailurePayload(\n deps: WxAppVoiceDependencies,\n error: unknown\n): Record<string, string> {\n const wxError = error as WxAppTelephonyError;\n const payload: Record<string, string> = {\n taskId: getInteractionId(deps) ?? '',\n error: error instanceof Error ? error.toString() : String(error),\n };\n\n if (wxError.trackingId) {\n payload.trackingId = wxError.trackingId;\n }\n\n return payload;\n}\n\ntype AqmWrappedError = {\n details?: Failure;\n};\n\nfunction getWxAppOutdialDeclineFailurePayload(\n deps: WxAppVoiceDependencies,\n error: unknown\n): EventPayload {\n const base: EventPayload = {\n taskId: getInteractionId(deps) ?? '',\n error: error instanceof Error ? error.toString() : String(error),\n };\n const aqmDetails = (error as AqmWrappedError).details;\n\n if (aqmDetails) {\n return {...base, ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(aqmDetails)};\n }\n\n return getWxAppTelephonyMetricFailurePayload(deps, error);\n}\n\nfunction logWxAppOutdialDeclineFailure(deps: WxAppVoiceDependencies, error: unknown): void {\n const aqmDetails = (error as AqmWrappedError).details;\n const wxError = error as WxAppTelephonyError;\n\n logWxAppTelephonyAction({\n action: 'decline',\n phase: 'failed',\n interactionId: getInteractionId(deps),\n trackingId: aqmDetails?.trackingId ?? wxError.trackingId,\n httpStatus: wxError.status,\n failureReason: aqmDetails?.data?.reason ?? wxError.message,\n });\n}\n\nfunction assertWxAppEnabled(deps: WxAppVoiceDependencies): void {\n if (!deps.enableWxBetterTogether) {\n logWxAppValidationFailure('enableWxBetterTogether_disabled', getInteractionId(deps));\n throw new Error('enableWxBetterTogether is disabled');\n }\n\n if (!deps.answerCallOnWebexService) {\n logWxAppValidationFailure('answer_call_on_webex_service_unavailable', getInteractionId(deps));\n throw new Error('AnswerCallOnWebexService is unavailable');\n }\n}\n\nexport async function acceptOnWebex(\n deps: WxAppVoiceDependencies,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'accept', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n if (!isWebexAppCallingOffer(deps)) {\n logWxAppValidationFailure('not_wxApp_calling_offer', interactionId);\n throw new Error('Task is not a wxApp calling offer');\n }\n\n const details = getCallingDeviceDetails(deps);\n if (!details) {\n logWxAppValidationFailure('wxApp_device_details_unavailable', interactionId);\n throw new Error('WxApp calling device details are unavailable');\n }\n\n await deps.answerCallOnWebexService.answerCall({\n callId: details.deviceCallId,\n endpointId: details.deviceId,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId),\n });\n logWxAppTelephonyAction({action: 'accept', phase: 'success', interactionId});\n}\n\nexport async function rejectOnWebex(\n deps: WxAppVoiceDependencies,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'decline', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n if (!isWebexAppInboundCallingOffer(deps)) {\n logWxAppValidationFailure('not_wxApp_inbound_calling_offer', interactionId);\n throw new Error('Task is not a wxApp inbound calling offer');\n }\n\n const details = getCallingDeviceDetails(deps);\n if (!details) {\n logWxAppValidationFailure('wxApp_device_details_unavailable', interactionId);\n throw new Error('WxApp calling device details are unavailable');\n }\n\n await deps.answerCallOnWebexService.rejectCall({\n callId: details.deviceCallId,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId),\n });\n logWxAppTelephonyAction({action: 'decline', phase: 'success', interactionId});\n}\n\nexport async function toggleMuteOnWebex(\n deps: WxAppVoiceDependencies,\n options?: {lineOwnerId?: string; muted?: boolean}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'mute', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n const callId = getWebexCallingCallId(deps);\n if (!callId) {\n logWxAppValidationFailure('wxApp_call_id_unavailable', interactionId);\n throw new Error('WxApp call ID is unavailable');\n }\n\n const targetMuted = options?.muted ?? !deps.getWxAppMuted();\n const request = targetMuted\n ? deps.answerCallOnWebexService.muteCall.bind(deps.answerCallOnWebexService)\n : deps.answerCallOnWebexService.unmuteCall.bind(deps.answerCallOnWebexService);\n\n await request({\n callId,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options?.lineOwnerId),\n });\n deps.setWxAppMuted(targetMuted);\n logWxAppTelephonyAction({action: 'mute', phase: 'success', interactionId});\n}\n\nexport async function transmitDtmfOnWebex(\n deps: WxAppVoiceDependencies,\n options: {dtmf: string; lineOwnerId?: string}\n): Promise<void> {\n const interactionId = getInteractionId(deps);\n logWxAppTelephonyAction({action: 'dtmf', phase: 'started', interactionId});\n assertWxAppEnabled(deps);\n\n const callId = getWebexCallingCallId(deps);\n if (!callId) {\n logWxAppValidationFailure('wxApp_call_id_unavailable', interactionId);\n throw new Error('WxApp call ID is unavailable');\n }\n\n LoggerProxy.info('transmitDtmf', {\n module: 'wxAppVoiceMethods',\n method: METHODS.TRANSMIT_DTMF,\n data: {\n interactionId,\n callIdSuffix: callId.length <= 8 ? callId : callId.slice(-8),\n dtmfLength: options.dtmf.length,\n hasLineOwnerId: Boolean(options.lineOwnerId),\n },\n });\n\n await deps.answerCallOnWebexService.transmitDtmf({\n callId,\n dtmf: options.dtmf,\n lineOwnerId: resolveWxAppLineOwnerId(deps, options.lineOwnerId),\n });\n logWxAppTelephonyAction({action: 'dtmf', phase: 'success', interactionId});\n}\n\nexport async function runWxAppAccept(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED,\n ]);\n\n try {\n lifecycle.setWxAppAcceptInFlight(true);\n lifecycle.setWxAppAnswerPending(true);\n await acceptOnWebex(deps, options);\n lifecycle.resetWxAppMuted();\n await lifecycle.syncWxAppMuteFromCallDetails();\n\n deps.metricsManager.trackEvent(METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS, {taskId}, [\n 'operational',\n 'behavioral',\n ]);\n } catch (error) {\n lifecycle.setWxAppAnswerPending(false);\n logTelephonyFailure('accept', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED,\n getWxAppTelephonyMetricFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.ACCEPT);\n } finally {\n lifecycle.setWxAppAcceptInFlight(false);\n }\n}\n\nexport async function runWxAppReject(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: {lineOwnerId?: string}\n): Promise<void> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n ]);\n\n try {\n await rejectOnWebex(deps, options);\n\n deps.metricsManager.trackEvent(METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {taskId}, [\n 'operational',\n 'behavioral',\n ]);\n } catch (error) {\n logTelephonyFailure('decline', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n getWxAppTelephonyMetricFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.REJECT);\n }\n}\n\nexport async function runWxAppOutdialDecline<T>(\n deps: WxAppVoiceDependencies,\n executeCancel: () => Promise<T>\n): Promise<T> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n ]);\n\n try {\n const result = await executeCancel();\n\n deps.metricsManager.trackEvent(METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {taskId}, [\n 'operational',\n 'behavioral',\n ]);\n\n return result;\n } catch (error) {\n logWxAppOutdialDeclineFailure(deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n getWxAppOutdialDeclineFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n throw error;\n }\n}\n\nexport async function runWxAppToggleMute(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: TaskToggleMuteOptions\n): Promise<void> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED,\n ]);\n\n try {\n await toggleMuteOnWebex(deps, options);\n\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS,\n {taskId, targetMuted: deps.getWxAppMuted()},\n ['operational', 'behavioral']\n );\n } catch (error) {\n logTelephonyFailure('mute', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_FAILED,\n getWxAppTelephonyMetricFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.TOGGLE_MUTE);\n }\n}\n\nexport async function runWxAppTransmitDtmf(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options: TaskTransmitDtmfOptions\n): Promise<void> {\n const taskId = getInteractionId(deps);\n\n deps.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS,\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED,\n ]);\n\n try {\n await transmitDtmfOnWebex(deps, options);\n\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS,\n {taskId, dtmfLength: options.dtmf.length},\n ['operational', 'behavioral']\n );\n } catch (error) {\n logTelephonyFailure('dtmf', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_FAILED,\n getWxAppTelephonyMetricFailurePayload(deps, error),\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.TRANSMIT_DTMF);\n }\n}\n\nexport function mapWxAppVoiceError(error: unknown, method: string, module: string): never {\n if (\n error instanceof Error &&\n (error as Error & {isWxAppTelephonyError?: boolean}).isWxAppTelephonyError\n ) {\n throw error;\n }\n\n const {error: detailedError} = getErrorDetails(error, method, module);\n throw detailedError;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.WXAPP_LOG_PREFIX = exports.WXAPP_LOG_FEATURE = void 0;
7
+ exports.callIdSuffix = callIdSuffix;
8
+ exports.deriveWxAppAcceptReason = deriveWxAppAcceptReason;
9
+ exports.logWxAppMercuryMuteSync = logWxAppMercuryMuteSync;
10
+ exports.logWxAppOfferDecision = logWxAppOfferDecision;
11
+ exports.logWxAppSessionReadiness = logWxAppSessionReadiness;
12
+ exports.logWxAppTelephonyAction = logWxAppTelephonyAction;
13
+ exports.logWxAppValidationFailure = logWxAppValidationFailure;
14
+ var _loggerProxy = _interopRequireDefault(require("../logger-proxy"));
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
+ const WXAPP_LOG_FEATURE = exports.WXAPP_LOG_FEATURE = 'wxApp';
17
+ const WXAPP_LOG_PREFIX = exports.WXAPP_LOG_PREFIX = '[CC wxApp]';
18
+ /** Last 8 chars of callId for correlation without logging full id. */
19
+ function callIdSuffix(callId) {
20
+ if (!callId) {
21
+ return undefined;
22
+ }
23
+ return callId.length <= 8 ? callId : callId.slice(-8);
24
+ }
25
+ function logWxApp(message, method, data) {
26
+ _loggerProxy.default.info(`${WXAPP_LOG_PREFIX} ${message}`, {
27
+ module: 'wxAppDiagnosticLogging',
28
+ method,
29
+ data: {
30
+ feature: WXAPP_LOG_FEATURE,
31
+ ...data
32
+ }
33
+ });
34
+ }
35
+ function logWxAppError(message, method, data) {
36
+ _loggerProxy.default.error(`${WXAPP_LOG_PREFIX} ${message}`, {
37
+ module: 'wxAppDiagnosticLogging',
38
+ method,
39
+ data: {
40
+ feature: WXAPP_LOG_FEATURE,
41
+ ...data
42
+ }
43
+ });
44
+ }
45
+ function logWxAppSessionReadiness(params) {
46
+ logWxApp('session readiness', 'logWxAppSessionReadiness', {
47
+ event: 'session_readiness',
48
+ enableWxBetterTogether: params.enableWxBetterTogether,
49
+ loginOption: params.loginOption,
50
+ wxAppHooksApplied: params.wxAppHooksApplied,
51
+ usersubPublished: params.usersubPublished,
52
+ mercurySubscribed: params.mercurySubscribed,
53
+ telephonyTaskType: params.telephonyTaskType,
54
+ skipReason: params.skipReason
55
+ });
56
+ }
57
+ function deriveWxAppAcceptReason(params) {
58
+ if (params.isWxAppInboundOffer || params.isWxAppOutdialOffer) {
59
+ if (params.wxAppAcceptInFlight) {
60
+ return 'wxApp_accept_in_flight';
61
+ }
62
+ if (params.wxAppAnswerPending) {
63
+ return 'wxApp_answer_pending';
64
+ }
65
+ return 'wxApp_offer_ready';
66
+ }
67
+ if (params.isWebrtc && !params.isOutdial) {
68
+ return 'browser_webrtc_offer';
69
+ }
70
+ if (params.isOutdial) {
71
+ return 'outdial_auto_answer';
72
+ }
73
+ if (params.enableWxBetterTogether && !params.hasDeviceCallId) {
74
+ return 'extension_non_wxApp_offer';
75
+ }
76
+ return 'extension_non_wxApp_offer';
77
+ }
78
+ function logWxAppOfferDecision(params) {
79
+ logWxApp('offer decision', 'logWxAppOfferDecision', {
80
+ event: 'offer_decision',
81
+ interactionId: params.interactionId,
82
+ acceptVisible: params.acceptVisible,
83
+ acceptEnabled: params.acceptEnabled,
84
+ acceptReason: params.acceptReason,
85
+ wxAppParticipantDeviceType: params.wxAppParticipantDeviceType,
86
+ hasDeviceCallId: params.hasDeviceCallId
87
+ });
88
+ }
89
+ function logWxAppTelephonyAction(params) {
90
+ const payload = {
91
+ event: 'telephony_action',
92
+ action: params.action,
93
+ phase: params.phase,
94
+ interactionId: params.interactionId,
95
+ trackingId: params.trackingId,
96
+ httpStatus: params.httpStatus,
97
+ failureReason: params.failureReason
98
+ };
99
+ if (params.phase === 'failed') {
100
+ logWxAppError(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);
101
+ } else {
102
+ logWxApp(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);
103
+ }
104
+ }
105
+ function logWxAppValidationFailure(reason, interactionId) {
106
+ logWxAppError('validation failed', 'logWxAppValidationFailure', {
107
+ event: 'validation_failed',
108
+ reason,
109
+ interactionId
110
+ });
111
+ }
112
+ function logWxAppMercuryMuteSync(params) {
113
+ logWxApp(`mercury mute sync ${params.phase}`, 'logWxAppMercuryMuteSync', {
114
+ event: 'mercury_mute_sync',
115
+ phase: params.phase,
116
+ muted: params.muted,
117
+ callIdSuffix: params.callIdSuffix,
118
+ interactionId: params.interactionId,
119
+ dropReason: params.dropReason
120
+ });
121
+ }
122
+ //# sourceMappingURL=wxAppDiagnosticLogging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","e","__esModule","default","WXAPP_LOG_FEATURE","exports","WXAPP_LOG_PREFIX","callIdSuffix","callId","undefined","length","slice","logWxApp","message","method","data","LoggerProxy","info","module","feature","logWxAppError","error","logWxAppSessionReadiness","params","event","enableWxBetterTogether","loginOption","wxAppHooksApplied","usersubPublished","mercurySubscribed","telephonyTaskType","skipReason","deriveWxAppAcceptReason","isWxAppInboundOffer","isWxAppOutdialOffer","wxAppAcceptInFlight","wxAppAnswerPending","isWebrtc","isOutdial","hasDeviceCallId","logWxAppOfferDecision","interactionId","acceptVisible","acceptEnabled","acceptReason","wxAppParticipantDeviceType","logWxAppTelephonyAction","payload","action","phase","trackingId","httpStatus","failureReason","logWxAppValidationFailure","reason","logWxAppMercuryMuteSync","muted","dropReason"],"sources":["wxAppDiagnosticLogging.ts"],"sourcesContent":["import LoggerProxy from '../logger-proxy';\n\nexport const WXAPP_LOG_FEATURE = 'wxApp';\nexport const WXAPP_LOG_PREFIX = '[CC wxApp]';\n\nexport type WxAppAcceptReason =\n | 'wxApp_offer_ready'\n | 'wxApp_answer_pending'\n | 'wxApp_accept_in_flight'\n | 'extension_non_wxApp_offer'\n | 'browser_webrtc_offer'\n | 'outdial_auto_answer';\n\nexport type WxAppSessionSkipReason =\n | 'unsupported_browser_login'\n | 'flag_disabled'\n | 'mercury_subscribe_failed'\n | 'publish_failed';\n\nexport type WxAppTelephonyAction = 'accept' | 'decline' | 'mute' | 'dtmf';\nexport type WxAppTelephonyPhase = 'started' | 'success' | 'failed';\n\ntype WxAppLogData = Record<string, string | boolean | number | undefined>;\n\n/** Last 8 chars of callId for correlation without logging full id. */\nexport function callIdSuffix(callId: string | null | undefined): string | undefined {\n if (!callId) {\n return undefined;\n }\n\n return callId.length <= 8 ? callId : callId.slice(-8);\n}\n\nfunction logWxApp(message: string, method: string, data: WxAppLogData): void {\n LoggerProxy.info(`${WXAPP_LOG_PREFIX} ${message}`, {\n module: 'wxAppDiagnosticLogging',\n method,\n data: {feature: WXAPP_LOG_FEATURE, ...data},\n });\n}\n\nfunction logWxAppError(message: string, method: string, data: WxAppLogData): void {\n LoggerProxy.error(`${WXAPP_LOG_PREFIX} ${message}`, {\n module: 'wxAppDiagnosticLogging',\n method,\n data: {feature: WXAPP_LOG_FEATURE, ...data},\n });\n}\n\nexport function logWxAppSessionReadiness(params: {\n enableWxBetterTogether: boolean;\n loginOption: string | undefined;\n wxAppHooksApplied: boolean;\n usersubPublished: boolean;\n mercurySubscribed: boolean;\n telephonyTaskType: 'Voice' | 'WebRTC' | 'unknown';\n skipReason?: WxAppSessionSkipReason;\n}): void {\n logWxApp('session readiness', 'logWxAppSessionReadiness', {\n event: 'session_readiness',\n enableWxBetterTogether: params.enableWxBetterTogether,\n loginOption: params.loginOption,\n wxAppHooksApplied: params.wxAppHooksApplied,\n usersubPublished: params.usersubPublished,\n mercurySubscribed: params.mercurySubscribed,\n telephonyTaskType: params.telephonyTaskType,\n skipReason: params.skipReason,\n });\n}\n\nexport function deriveWxAppAcceptReason(params: {\n isWxAppInboundOffer: boolean;\n isWxAppOutdialOffer: boolean;\n isWebrtc: boolean;\n isOutdial: boolean;\n wxAppAcceptInFlight: boolean;\n wxAppAnswerPending: boolean;\n enableWxBetterTogether: boolean;\n hasDeviceCallId: boolean;\n}): WxAppAcceptReason {\n if (params.isWxAppInboundOffer || params.isWxAppOutdialOffer) {\n if (params.wxAppAcceptInFlight) {\n return 'wxApp_accept_in_flight';\n }\n if (params.wxAppAnswerPending) {\n return 'wxApp_answer_pending';\n }\n\n return 'wxApp_offer_ready';\n }\n\n if (params.isWebrtc && !params.isOutdial) {\n return 'browser_webrtc_offer';\n }\n\n if (params.isOutdial) {\n return 'outdial_auto_answer';\n }\n\n if (params.enableWxBetterTogether && !params.hasDeviceCallId) {\n return 'extension_non_wxApp_offer';\n }\n\n return 'extension_non_wxApp_offer';\n}\n\nexport function logWxAppOfferDecision(params: {\n interactionId: string;\n acceptVisible: boolean;\n acceptEnabled: boolean;\n acceptReason: WxAppAcceptReason;\n wxAppParticipantDeviceType?: string;\n hasDeviceCallId: boolean;\n}): void {\n logWxApp('offer decision', 'logWxAppOfferDecision', {\n event: 'offer_decision',\n interactionId: params.interactionId,\n acceptVisible: params.acceptVisible,\n acceptEnabled: params.acceptEnabled,\n acceptReason: params.acceptReason,\n wxAppParticipantDeviceType: params.wxAppParticipantDeviceType,\n hasDeviceCallId: params.hasDeviceCallId,\n });\n}\n\nexport function logWxAppTelephonyAction(params: {\n action: WxAppTelephonyAction;\n phase: WxAppTelephonyPhase;\n interactionId?: string;\n trackingId?: string;\n httpStatus?: number | string;\n failureReason?: string;\n}): void {\n const payload: WxAppLogData = {\n event: 'telephony_action',\n action: params.action,\n phase: params.phase,\n interactionId: params.interactionId,\n trackingId: params.trackingId,\n httpStatus: params.httpStatus,\n failureReason: params.failureReason,\n };\n\n if (params.phase === 'failed') {\n logWxAppError(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);\n } else {\n logWxApp(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);\n }\n}\n\nexport function logWxAppValidationFailure(reason: string, interactionId?: string): void {\n logWxAppError('validation failed', 'logWxAppValidationFailure', {\n event: 'validation_failed',\n reason,\n interactionId,\n });\n}\n\nexport function logWxAppMercuryMuteSync(params: {\n phase: 'received' | 'applied' | 'dropped';\n muted?: boolean;\n callIdSuffix?: string;\n interactionId?: string;\n dropReason?: string;\n}): void {\n logWxApp(`mercury mute sync ${params.phase}`, 'logWxAppMercuryMuteSync', {\n event: 'mercury_mute_sync',\n phase: params.phase,\n muted: params.muted,\n callIdSuffix: params.callIdSuffix,\n interactionId: params.interactionId,\n dropReason: params.dropReason,\n });\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isWxAppCallNotFoundError = isWxAppCallNotFoundError;
7
+ /**
8
+ * Expected Hydra responses when mute backfill races call creation (WXCC-6026).
9
+ * These must not be logged as errors — see task-spec wxApp mute backfill guard.
10
+ */
11
+ function isWxAppCallNotFoundError(error) {
12
+ const err = error;
13
+ if (err?.status === 400 || err?.status === '400') {
14
+ return true;
15
+ }
16
+ const message = String(err?.message ?? error ?? '');
17
+ return message.includes('Call not found') || message.includes('101002');
18
+ }
19
+ //# sourceMappingURL=wxAppTelephonyUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isWxAppCallNotFoundError","error","err","status","message","String","includes"],"sources":["wxAppTelephonyUtils.ts"],"sourcesContent":["/**\n * Expected Hydra responses when mute backfill races call creation (WXCC-6026).\n * These must not be logged as errors — see task-spec wxApp mute backfill guard.\n */\nexport function isWxAppCallNotFoundError(error: unknown): boolean {\n const err = error as {status?: number | string; message?: string};\n if (err?.status === 400 || err?.status === '400') {\n return true;\n }\n\n const message = String(err?.message ?? error ?? '');\n\n return message.includes('Call not found') || message.includes('101002');\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACO,SAASA,wBAAwBA,CAACC,KAAc,EAAW;EAChE,MAAMC,GAAG,GAAGD,KAAqD;EACjE,IAAIC,GAAG,EAAEC,MAAM,KAAK,GAAG,IAAID,GAAG,EAAEC,MAAM,KAAK,KAAK,EAAE;IAChD,OAAO,IAAI;EACb;EAEA,MAAMC,OAAO,GAAGC,MAAM,CAACH,GAAG,EAAEE,OAAO,IAAIH,KAAK,IAAI,EAAE,CAAC;EAEnD,OAAOG,OAAO,CAACE,QAAQ,CAAC,gBAAgB,CAAC,IAAIF,OAAO,CAACE,QAAQ,CAAC,QAAQ,CAAC;AACzE","ignoreList":[]}