@webex/contact-center 3.12.0-llmrefactor.12 → 3.12.0-llmrefactor.14

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 (107) hide show
  1. package/.sdd/manifest.json +6 -5
  2. package/ai-docs/CONTRACTS.md +8 -0
  3. package/ai-docs/SERVICE_STATE.md +4 -0
  4. package/ai-docs/contact-center-spec.md +26 -3
  5. package/ai-docs/features/contact-owner-change-refactor.md +78 -0
  6. package/dist/cc.js +202 -9
  7. package/dist/cc.js.map +1 -1
  8. package/dist/constants.js +5 -1
  9. package/dist/constants.js.map +1 -1
  10. package/dist/index.js +25 -10
  11. package/dist/index.js.map +1 -1
  12. package/dist/metrics/behavioral-events.js +6 -0
  13. package/dist/metrics/behavioral-events.js.map +1 -1
  14. package/dist/metrics/constants.js +6 -0
  15. package/dist/metrics/constants.js.map +1 -1
  16. package/dist/services/AnswerCallOnWebexService.js +4 -4
  17. package/dist/services/AnswerCallOnWebexService.js.map +1 -1
  18. package/dist/services/ApiAiAssistant.js +116 -1
  19. package/dist/services/ApiAiAssistant.js.map +1 -1
  20. package/dist/services/WebexCrossClientService.js +5 -2
  21. package/dist/services/WebexCrossClientService.js.map +1 -1
  22. package/dist/services/WxAppTelephonyMercurySync.js +6 -3
  23. package/dist/services/WxAppTelephonyMercurySync.js.map +1 -1
  24. package/dist/services/config/Util.js +5 -1
  25. package/dist/services/config/Util.js.map +1 -1
  26. package/dist/services/config/constants.js +10 -1
  27. package/dist/services/config/constants.js.map +1 -1
  28. package/dist/services/config/index.js +51 -0
  29. package/dist/services/config/index.js.map +1 -1
  30. package/dist/services/config/types.js +4 -3
  31. package/dist/services/config/types.js.map +1 -1
  32. package/dist/services/core/Utils.js +5 -1
  33. package/dist/services/core/Utils.js.map +1 -1
  34. package/dist/services/task/TaskFactory.js +1 -0
  35. package/dist/services/task/TaskFactory.js.map +1 -1
  36. package/dist/services/task/TaskManager.js +50 -58
  37. package/dist/services/task/TaskManager.js.map +1 -1
  38. package/dist/services/task/types.js.map +1 -1
  39. package/dist/services/task/voice/Voice.js +63 -44
  40. package/dist/services/task/voice/Voice.js.map +1 -1
  41. package/dist/services/task/voice/wxAppOfferObservability.js +145 -0
  42. package/dist/services/task/voice/wxAppOfferObservability.js.map +1 -0
  43. package/dist/services/task/voice/wxAppVoiceMethods.js +52 -11
  44. package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -1
  45. package/dist/services/wxAppDiagnosticLogging.js +50 -13
  46. package/dist/services/wxAppDiagnosticLogging.js.map +1 -1
  47. package/dist/types/cc.d.ts +21 -1
  48. package/dist/types/constants.d.ts +4 -0
  49. package/dist/types/index.d.ts +11 -1
  50. package/dist/types/metrics/constants.d.ts +6 -0
  51. package/dist/types/services/ApiAiAssistant.d.ts +35 -2
  52. package/dist/types/services/config/constants.d.ts +5 -0
  53. package/dist/types/services/config/types.d.ts +15 -2
  54. package/dist/types/services/core/Utils.d.ts +2 -0
  55. package/dist/types/services/task/types.d.ts +2 -0
  56. package/dist/types/services/task/voice/Voice.d.ts +15 -2
  57. package/dist/types/services/task/voice/wxAppOfferObservability.d.ts +39 -0
  58. package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +19 -6
  59. package/dist/types/services/wxAppDiagnosticLogging.d.ts +12 -0
  60. package/dist/types/types.d.ts +56 -1
  61. package/dist/types.js +39 -2
  62. package/dist/types.js.map +1 -1
  63. package/dist/webex.js +9 -1
  64. package/dist/webex.js.map +1 -1
  65. package/package.json +9 -9
  66. package/src/cc.ts +294 -25
  67. package/src/constants.ts +4 -0
  68. package/src/index.ts +11 -0
  69. package/src/metrics/ai-docs/metrics-spec.md +61 -20
  70. package/src/metrics/behavioral-events.ts +6 -0
  71. package/src/metrics/constants.ts +6 -0
  72. package/src/services/AnswerCallOnWebexService.ts +4 -4
  73. package/src/services/ApiAiAssistant.ts +153 -1
  74. package/src/services/WebexCrossClientService.ts +7 -2
  75. package/src/services/WxAppTelephonyMercurySync.ts +3 -3
  76. package/src/services/ai-docs/services-spec.md +11 -3
  77. package/src/services/config/Util.ts +6 -0
  78. package/src/services/config/ai-docs/config-spec.md +14 -3
  79. package/src/services/config/constants.ts +12 -0
  80. package/src/services/config/index.ts +65 -0
  81. package/src/services/config/types.ts +13 -2
  82. package/src/services/core/Utils.ts +4 -0
  83. package/src/services/task/TaskFactory.ts +1 -0
  84. package/src/services/task/TaskManager.ts +85 -87
  85. package/src/services/task/ai-docs/task-spec.md +7 -3
  86. package/src/services/task/types.ts +16 -0
  87. package/src/services/task/voice/Voice.ts +74 -52
  88. package/src/services/task/voice/wxAppOfferObservability.ts +204 -0
  89. package/src/services/task/voice/wxAppVoiceMethods.ts +83 -24
  90. package/src/services/wxAppDiagnosticLogging.ts +135 -23
  91. package/src/types.ts +65 -0
  92. package/src/webex.js +8 -0
  93. package/test/unit/spec/cc.ts +469 -19
  94. package/test/unit/spec/services/ApiAiAssistant.ts +134 -2
  95. package/test/unit/spec/services/WebexCrossClientService.ts +45 -3
  96. package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +1 -1
  97. package/test/unit/spec/services/config/Util.ts +44 -0
  98. package/test/unit/spec/services/config/index.ts +68 -0
  99. package/test/unit/spec/services/task/TaskManager.ts +214 -3
  100. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +33 -0
  101. package/test/unit/spec/services/task/voice/Voice.ts +10 -51
  102. package/test/unit/spec/services/task/voice/wxAppOfferObservability.ts +361 -0
  103. package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +121 -5
  104. package/test/unit/spec/services/wxAppDiagnosticLogging.ts +44 -8
  105. package/test/unit/spec/wellnessSampleUtils.ts +288 -0
  106. package/umd/contact-center.min.js +2 -2
  107. package/umd/contact-center.min.js.map +1 -1
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.WxAppOfferObservability = exports.WXAPP_PARTICIPANT_MISMATCH_GRACE_MS = void 0;
7
+ var _constants = require("../../../metrics/constants");
8
+ var _wxAppDiagnosticLogging = require("../../wxAppDiagnosticLogging");
9
+ var _stateMachine = require("../state-machine");
10
+ var _types = require("../types");
11
+ var _wxAppVoiceMethods = require("./wxAppVoiceMethods");
12
+ /** Defer mismatch WARN/metric so transient WS ordering gaps (~200–300 ms) do not false-alarm. */
13
+ const WXAPP_PARTICIPANT_MISMATCH_GRACE_MS = exports.WXAPP_PARTICIPANT_MISMATCH_GRACE_MS = 500;
14
+ /**
15
+ * OFFERED-state wxApp offer diagnostics: acceptReason logging and deferred participant mismatch.
16
+ * Invoked from Voice.updateUiControls — observability only.
17
+ */
18
+ class WxAppOfferObservability {
19
+ lastLoggedWxAppParticipantMismatch = false;
20
+ disposed = false;
21
+ handleUiControlsUpdate(ctx) {
22
+ if (this.disposed) {
23
+ return;
24
+ }
25
+ if (!ctx.getEnableWxBetterTogether()) {
26
+ this.cancelGraceTimer();
27
+ return;
28
+ }
29
+ const state = ctx.getTaskState();
30
+ if (state !== _stateMachine.TaskState.OFFERED) {
31
+ this.cancelGraceTimer();
32
+ return;
33
+ }
34
+ const accept = ctx.getAcceptControl();
35
+ if (!accept?.isVisible) {
36
+ return;
37
+ }
38
+ const deps = ctx.getWxAppVoiceDependencies();
39
+ const isOutdial = ctx.isOutdial();
40
+ const isWxAppInboundOffer = ctx.isWxAppInboundOffer();
41
+ const isWxAppOutdialOffer = ctx.isWxAppCallingOffer() && isOutdial;
42
+ const deviceDetails = (0, _wxAppVoiceMethods.getCallingDeviceDetails)(deps);
43
+ const participantDiagnostics = (0, _wxAppVoiceMethods.getWxAppParticipantDiagnostics)(deps);
44
+ const usersubPublished = ctx.getUsersubPublished();
45
+ const acceptReason = (0, _wxAppDiagnosticLogging.deriveWxAppAcceptReason)({
46
+ isWxAppInboundOffer,
47
+ isWxAppOutdialOffer,
48
+ isWebrtc: ctx.getVoiceVariant() === _types.VOICE_VARIANT.WEBRTC,
49
+ isOutdial,
50
+ wxAppAcceptInFlight: ctx.getWxAppAcceptInFlight(),
51
+ wxAppAnswerPending: ctx.getWxAppAnswerPending(),
52
+ enableWxBetterTogether: ctx.getEnableWxBetterTogether(),
53
+ hasDeviceCallId: participantDiagnostics.hasDeviceCallId
54
+ });
55
+ if (acceptReason !== this.lastLoggedWxAppAcceptReason) {
56
+ this.lastLoggedWxAppAcceptReason = acceptReason;
57
+ (0, _wxAppDiagnosticLogging.logWxAppOfferDecision)({
58
+ interactionId: ctx.getInteractionId(),
59
+ acceptVisible: accept.isVisible,
60
+ acceptEnabled: accept.isEnabled,
61
+ acceptReason,
62
+ wxAppParticipantDeviceType: deviceDetails?.deviceType ?? participantDiagnostics.participantDeviceType,
63
+ hasDeviceCallId: participantDiagnostics.hasDeviceCallId,
64
+ hasDeviceId: participantDiagnostics.hasDeviceId,
65
+ usersubPublished
66
+ });
67
+ }
68
+ if (participantDiagnostics.hasValidWxAppParticipant || !usersubPublished) {
69
+ this.cancelGraceTimer();
70
+ } else if (!ctx.isOutdial() && !this.lastLoggedWxAppParticipantMismatch) {
71
+ this.scheduleGraceTimer(ctx);
72
+ }
73
+ }
74
+ dispose() {
75
+ this.disposed = true;
76
+ this.cancelGraceTimer();
77
+ }
78
+ cancelGraceTimer() {
79
+ if (this.wxAppParticipantMismatchGraceTimer !== undefined) {
80
+ clearTimeout(this.wxAppParticipantMismatchGraceTimer);
81
+ this.wxAppParticipantMismatchGraceTimer = undefined;
82
+ }
83
+ }
84
+ scheduleGraceTimer(ctx) {
85
+ if (this.disposed || this.lastLoggedWxAppParticipantMismatch || this.wxAppParticipantMismatchGraceTimer !== undefined) {
86
+ return;
87
+ }
88
+ this.wxAppParticipantMismatchGraceTimer = setTimeout(() => {
89
+ this.wxAppParticipantMismatchGraceTimer = undefined;
90
+ this.emitParticipantMismatchIfStillNeeded(ctx);
91
+ }, WXAPP_PARTICIPANT_MISMATCH_GRACE_MS);
92
+ }
93
+ emitParticipantMismatchIfStillNeeded(ctx) {
94
+ if (this.disposed || !ctx.getEnableWxBetterTogether() || this.lastLoggedWxAppParticipantMismatch) {
95
+ return;
96
+ }
97
+ if (ctx.isOutdial()) {
98
+ return;
99
+ }
100
+ if (ctx.getTaskState() !== _stateMachine.TaskState.OFFERED) {
101
+ return;
102
+ }
103
+ const accept = ctx.getAcceptControl();
104
+ if (!accept?.isVisible) {
105
+ return;
106
+ }
107
+ const deps = ctx.getWxAppVoiceDependencies();
108
+ const participantDiagnostics = (0, _wxAppVoiceMethods.getWxAppParticipantDiagnostics)(deps);
109
+ const usersubPublished = ctx.getUsersubPublished();
110
+ if (!usersubPublished || participantDiagnostics.hasValidWxAppParticipant) {
111
+ return;
112
+ }
113
+ const isOutdial = ctx.isOutdial();
114
+ const acceptReason = (0, _wxAppDiagnosticLogging.deriveWxAppAcceptReason)({
115
+ isWxAppInboundOffer: ctx.isWxAppInboundOffer(),
116
+ isWxAppOutdialOffer: ctx.isWxAppCallingOffer() && isOutdial,
117
+ isWebrtc: ctx.getVoiceVariant() === _types.VOICE_VARIANT.WEBRTC,
118
+ isOutdial,
119
+ wxAppAcceptInFlight: ctx.getWxAppAcceptInFlight(),
120
+ wxAppAnswerPending: ctx.getWxAppAnswerPending(),
121
+ enableWxBetterTogether: ctx.getEnableWxBetterTogether(),
122
+ hasDeviceCallId: participantDiagnostics.hasDeviceCallId
123
+ });
124
+ this.lastLoggedWxAppParticipantMismatch = true;
125
+ (0, _wxAppDiagnosticLogging.logWxAppOfferParticipantMismatch)({
126
+ interactionId: ctx.getInteractionId(),
127
+ usersubPublished,
128
+ hasDeviceCallId: participantDiagnostics.hasDeviceCallId,
129
+ hasDeviceId: participantDiagnostics.hasDeviceId,
130
+ participantDeviceType: participantDiagnostics.participantDeviceType,
131
+ acceptVisible: accept.isVisible,
132
+ acceptEnabled: accept.isEnabled,
133
+ acceptReason
134
+ });
135
+ ctx.getMetricsManager().trackEvent(_constants.METRIC_EVENT_NAMES.WXAPP_OFFER_PARTICIPANT_FIELDS_MISSING, {
136
+ taskId: ctx.getInteractionId(),
137
+ usersubPublished,
138
+ hasDeviceCallId: participantDiagnostics.hasDeviceCallId,
139
+ hasDeviceId: participantDiagnostics.hasDeviceId,
140
+ acceptReason
141
+ }, ['operational', 'behavioral']);
142
+ }
143
+ }
144
+ exports.WxAppOfferObservability = WxAppOfferObservability;
145
+ //# sourceMappingURL=wxAppOfferObservability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_constants","require","_wxAppDiagnosticLogging","_stateMachine","_types","_wxAppVoiceMethods","WXAPP_PARTICIPANT_MISMATCH_GRACE_MS","exports","WxAppOfferObservability","lastLoggedWxAppParticipantMismatch","disposed","handleUiControlsUpdate","ctx","getEnableWxBetterTogether","cancelGraceTimer","state","getTaskState","TaskState","OFFERED","accept","getAcceptControl","isVisible","deps","getWxAppVoiceDependencies","isOutdial","isWxAppInboundOffer","isWxAppOutdialOffer","isWxAppCallingOffer","deviceDetails","getCallingDeviceDetails","participantDiagnostics","getWxAppParticipantDiagnostics","usersubPublished","getUsersubPublished","acceptReason","deriveWxAppAcceptReason","isWebrtc","getVoiceVariant","VOICE_VARIANT","WEBRTC","wxAppAcceptInFlight","getWxAppAcceptInFlight","wxAppAnswerPending","getWxAppAnswerPending","enableWxBetterTogether","hasDeviceCallId","lastLoggedWxAppAcceptReason","logWxAppOfferDecision","interactionId","getInteractionId","acceptVisible","acceptEnabled","isEnabled","wxAppParticipantDeviceType","deviceType","participantDeviceType","hasDeviceId","hasValidWxAppParticipant","scheduleGraceTimer","dispose","wxAppParticipantMismatchGraceTimer","undefined","clearTimeout","setTimeout","emitParticipantMismatchIfStillNeeded","logWxAppOfferParticipantMismatch","getMetricsManager","trackEvent","METRIC_EVENT_NAMES","WXAPP_OFFER_PARTICIPANT_FIELDS_MISSING","taskId"],"sources":["wxAppOfferObservability.ts"],"sourcesContent":["import MetricsManager from '../../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../../metrics/constants';\nimport {\n deriveWxAppAcceptReason,\n logWxAppOfferDecision,\n logWxAppOfferParticipantMismatch,\n WxAppAcceptReason,\n} from '../../wxAppDiagnosticLogging';\nimport {TaskState} from '../state-machine';\nimport {VoiceVariant, VOICE_VARIANT} from '../types';\nimport {\n getCallingDeviceDetails,\n getWxAppParticipantDiagnostics,\n WxAppVoiceDependencies,\n} from './wxAppVoiceMethods';\n\n/** Defer mismatch WARN/metric so transient WS ordering gaps (~200–300 ms) do not false-alarm. */\nexport const WXAPP_PARTICIPANT_MISMATCH_GRACE_MS = 500;\n\nexport type WxAppOfferObservabilityContext = {\n getInteractionId: () => string;\n getTaskState: () => TaskState | undefined;\n getAcceptControl: () => {isVisible: boolean; isEnabled: boolean} | undefined;\n getVoiceVariant: () => VoiceVariant;\n isOutdial: () => boolean;\n isWxAppInboundOffer: () => boolean;\n isWxAppCallingOffer: () => boolean;\n getWxAppAcceptInFlight: () => boolean;\n getWxAppAnswerPending: () => boolean;\n getEnableWxBetterTogether: () => boolean;\n getUsersubPublished: () => boolean;\n getWxAppVoiceDependencies: () => WxAppVoiceDependencies;\n getMetricsManager: () => MetricsManager;\n};\n\n/**\n * OFFERED-state wxApp offer diagnostics: acceptReason logging and deferred participant mismatch.\n * Invoked from Voice.updateUiControls — observability only.\n */\nexport class WxAppOfferObservability {\n private lastLoggedWxAppAcceptReason?: WxAppAcceptReason;\n private lastLoggedWxAppParticipantMismatch = false;\n private wxAppParticipantMismatchGraceTimer?: ReturnType<typeof setTimeout>;\n private disposed = false;\n\n public handleUiControlsUpdate(ctx: WxAppOfferObservabilityContext): void {\n if (this.disposed) {\n return;\n }\n\n if (!ctx.getEnableWxBetterTogether()) {\n this.cancelGraceTimer();\n\n return;\n }\n\n const state = ctx.getTaskState();\n if (state !== TaskState.OFFERED) {\n this.cancelGraceTimer();\n\n return;\n }\n\n const accept = ctx.getAcceptControl();\n if (!accept?.isVisible) {\n return;\n }\n\n const deps = ctx.getWxAppVoiceDependencies();\n const isOutdial = ctx.isOutdial();\n const isWxAppInboundOffer = ctx.isWxAppInboundOffer();\n const isWxAppOutdialOffer = ctx.isWxAppCallingOffer() && isOutdial;\n const deviceDetails = getCallingDeviceDetails(deps);\n const participantDiagnostics = getWxAppParticipantDiagnostics(deps);\n const usersubPublished = ctx.getUsersubPublished();\n const acceptReason = deriveWxAppAcceptReason({\n isWxAppInboundOffer,\n isWxAppOutdialOffer,\n isWebrtc: ctx.getVoiceVariant() === VOICE_VARIANT.WEBRTC,\n isOutdial,\n wxAppAcceptInFlight: ctx.getWxAppAcceptInFlight(),\n wxAppAnswerPending: ctx.getWxAppAnswerPending(),\n enableWxBetterTogether: ctx.getEnableWxBetterTogether(),\n hasDeviceCallId: participantDiagnostics.hasDeviceCallId,\n });\n\n if (acceptReason !== this.lastLoggedWxAppAcceptReason) {\n this.lastLoggedWxAppAcceptReason = acceptReason;\n\n logWxAppOfferDecision({\n interactionId: ctx.getInteractionId(),\n acceptVisible: accept.isVisible,\n acceptEnabled: accept.isEnabled,\n acceptReason,\n wxAppParticipantDeviceType:\n deviceDetails?.deviceType ?? participantDiagnostics.participantDeviceType,\n hasDeviceCallId: participantDiagnostics.hasDeviceCallId,\n hasDeviceId: participantDiagnostics.hasDeviceId,\n usersubPublished,\n });\n }\n\n if (participantDiagnostics.hasValidWxAppParticipant || !usersubPublished) {\n this.cancelGraceTimer();\n } else if (!ctx.isOutdial() && !this.lastLoggedWxAppParticipantMismatch) {\n this.scheduleGraceTimer(ctx);\n }\n }\n\n public dispose(): void {\n this.disposed = true;\n this.cancelGraceTimer();\n }\n\n private cancelGraceTimer(): void {\n if (this.wxAppParticipantMismatchGraceTimer !== undefined) {\n clearTimeout(this.wxAppParticipantMismatchGraceTimer);\n this.wxAppParticipantMismatchGraceTimer = undefined;\n }\n }\n\n private scheduleGraceTimer(ctx: WxAppOfferObservabilityContext): void {\n if (\n this.disposed ||\n this.lastLoggedWxAppParticipantMismatch ||\n this.wxAppParticipantMismatchGraceTimer !== undefined\n ) {\n return;\n }\n\n this.wxAppParticipantMismatchGraceTimer = setTimeout(() => {\n this.wxAppParticipantMismatchGraceTimer = undefined;\n this.emitParticipantMismatchIfStillNeeded(ctx);\n }, WXAPP_PARTICIPANT_MISMATCH_GRACE_MS);\n }\n\n private emitParticipantMismatchIfStillNeeded(ctx: WxAppOfferObservabilityContext): void {\n if (\n this.disposed ||\n !ctx.getEnableWxBetterTogether() ||\n this.lastLoggedWxAppParticipantMismatch\n ) {\n return;\n }\n\n if (ctx.isOutdial()) {\n return;\n }\n\n if (ctx.getTaskState() !== TaskState.OFFERED) {\n return;\n }\n\n const accept = ctx.getAcceptControl();\n if (!accept?.isVisible) {\n return;\n }\n\n const deps = ctx.getWxAppVoiceDependencies();\n const participantDiagnostics = getWxAppParticipantDiagnostics(deps);\n const usersubPublished = ctx.getUsersubPublished();\n\n if (!usersubPublished || participantDiagnostics.hasValidWxAppParticipant) {\n return;\n }\n\n const isOutdial = ctx.isOutdial();\n const acceptReason = deriveWxAppAcceptReason({\n isWxAppInboundOffer: ctx.isWxAppInboundOffer(),\n isWxAppOutdialOffer: ctx.isWxAppCallingOffer() && isOutdial,\n isWebrtc: ctx.getVoiceVariant() === VOICE_VARIANT.WEBRTC,\n isOutdial,\n wxAppAcceptInFlight: ctx.getWxAppAcceptInFlight(),\n wxAppAnswerPending: ctx.getWxAppAnswerPending(),\n enableWxBetterTogether: ctx.getEnableWxBetterTogether(),\n hasDeviceCallId: participantDiagnostics.hasDeviceCallId,\n });\n\n this.lastLoggedWxAppParticipantMismatch = true;\n\n logWxAppOfferParticipantMismatch({\n interactionId: ctx.getInteractionId(),\n usersubPublished,\n hasDeviceCallId: participantDiagnostics.hasDeviceCallId,\n hasDeviceId: participantDiagnostics.hasDeviceId,\n participantDeviceType: participantDiagnostics.participantDeviceType,\n acceptVisible: accept.isVisible,\n acceptEnabled: accept.isEnabled,\n acceptReason,\n });\n\n ctx.getMetricsManager().trackEvent(\n METRIC_EVENT_NAMES.WXAPP_OFFER_PARTICIPANT_FIELDS_MISSING,\n {\n taskId: ctx.getInteractionId(),\n usersubPublished,\n hasDeviceCallId: participantDiagnostics.hasDeviceCallId,\n hasDeviceId: participantDiagnostics.hasDeviceId,\n acceptReason,\n },\n ['operational', 'behavioral']\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -7,6 +7,7 @@ exports.acceptOnWebex = acceptOnWebex;
7
7
  exports.getCallingDeviceDetails = getCallingDeviceDetails;
8
8
  exports.getWebexCallingCallId = getWebexCallingCallId;
9
9
  exports.getWxAppLineOwnerId = getWxAppLineOwnerId;
10
+ exports.getWxAppParticipantDiagnostics = getWxAppParticipantDiagnostics;
10
11
  exports.isWebexAppCallingOffer = isWebexAppCallingOffer;
11
12
  exports.isWebexAppInboundCallingOffer = isWebexAppInboundCallingOffer;
12
13
  exports.mapWxAppVoiceError = mapWxAppVoiceError;
@@ -44,6 +45,24 @@ function getWxAppAgentParticipant(deps) {
44
45
  }
45
46
  return Object.values(participants).find(participant => participant?.id === agentId);
46
47
  }
48
+ function getWxAppParticipantDiagnostics(deps) {
49
+ const participant = getWxAppAgentParticipant(deps);
50
+ const hasDeviceCallId = typeof participant?.deviceCallId === 'string' && participant.deviceCallId.trim() !== '';
51
+ const hasDeviceId = typeof participant?.deviceId === 'string' && participant.deviceId.trim() !== '';
52
+ return {
53
+ participantDeviceType: participant?.deviceType,
54
+ hasDeviceCallId,
55
+ hasDeviceId,
56
+ hasValidWxAppParticipant: isWxAppParticipant(participant)
57
+ };
58
+ }
59
+ function getWxAppTelephonyMetricContext(deps) {
60
+ const diagnostics = getWxAppParticipantDiagnostics(deps);
61
+ return {
62
+ hasDeviceCallId: diagnostics.hasDeviceCallId,
63
+ hasDeviceId: diagnostics.hasDeviceId
64
+ };
65
+ }
47
66
  function getCallingDeviceDetails(deps) {
48
67
  const taskData = deps.getTaskData();
49
68
  const participant = getWxAppAgentParticipant(deps);
@@ -104,7 +123,8 @@ function getWxAppTelephonyMetricFailurePayload(deps, error) {
104
123
  const wxError = error;
105
124
  const payload = {
106
125
  taskId: getInteractionId(deps) ?? '',
107
- error: error instanceof Error ? error.toString() : String(error)
126
+ error: error instanceof Error ? error.toString() : String(error),
127
+ ...getWxAppTelephonyMetricContext(deps)
108
128
  };
109
129
  if (wxError.trackingId) {
110
130
  payload.trackingId = wxError.trackingId;
@@ -120,6 +140,7 @@ function getWxAppOutdialDeclineFailurePayload(deps, error) {
120
140
  if (aqmDetails) {
121
141
  return {
122
142
  ...base,
143
+ ...getWxAppTelephonyMetricContext(deps),
123
144
  ..._MetricsManager.default.getCommonTrackingFieldForAQMResponseFailed(aqmDetails)
124
145
  };
125
146
  }
@@ -241,7 +262,7 @@ async function transmitDtmfOnWebex(deps, options) {
241
262
  (0, _wxAppDiagnosticLogging.logWxAppValidationFailure)('wxApp_call_id_unavailable', interactionId);
242
263
  throw new Error('WxApp call ID is unavailable');
243
264
  }
244
- _loggerProxy.default.info('transmitDtmf', {
265
+ _loggerProxy.default.log('transmitDtmf', {
245
266
  module: 'wxAppVoiceMethods',
246
267
  method: _constants.METHODS.TRANSMIT_DTMF,
247
268
  data: {
@@ -264,6 +285,7 @@ async function transmitDtmfOnWebex(deps, options) {
264
285
  }
265
286
  async function runWxAppAccept(deps, lifecycle, options) {
266
287
  const taskId = getInteractionId(deps);
288
+ const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';
267
289
  deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED]);
268
290
  try {
269
291
  lifecycle.setWxAppAcceptInFlight(true);
@@ -272,12 +294,17 @@ async function runWxAppAccept(deps, lifecycle, options) {
272
294
  lifecycle.resetWxAppMuted();
273
295
  await lifecycle.syncWxAppMuteFromCallDetails();
274
296
  deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS, {
275
- taskId
297
+ taskId,
298
+ acceptReason,
299
+ ...getWxAppTelephonyMetricContext(deps)
276
300
  }, ['operational', 'behavioral']);
277
301
  } catch (error) {
278
302
  lifecycle.setWxAppAnswerPending(false);
279
303
  logTelephonyFailure('accept', deps, error);
280
- deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED, getWxAppTelephonyMetricFailurePayload(deps, error), ['operational', 'behavioral']);
304
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_FAILED, {
305
+ acceptReason,
306
+ ...getWxAppTelephonyMetricFailurePayload(deps, error)
307
+ }, ['operational', 'behavioral']);
281
308
  lifecycle.mapWxAppVoiceError(error, _constants.METHODS.ACCEPT);
282
309
  } finally {
283
310
  lifecycle.setWxAppAcceptInFlight(false);
@@ -285,30 +312,42 @@ async function runWxAppAccept(deps, lifecycle, options) {
285
312
  }
286
313
  async function runWxAppReject(deps, lifecycle, options) {
287
314
  const taskId = getInteractionId(deps);
315
+ const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';
288
316
  deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED]);
289
317
  try {
290
318
  await rejectOnWebex(deps, options);
291
319
  deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {
292
- taskId
320
+ taskId,
321
+ acceptReason,
322
+ ...getWxAppTelephonyMetricContext(deps)
293
323
  }, ['operational', 'behavioral']);
294
324
  } catch (error) {
295
325
  logTelephonyFailure('decline', deps, error);
296
- deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED, getWxAppTelephonyMetricFailurePayload(deps, error), ['operational', 'behavioral']);
326
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED, {
327
+ acceptReason,
328
+ ...getWxAppTelephonyMetricFailurePayload(deps, error)
329
+ }, ['operational', 'behavioral']);
297
330
  lifecycle.mapWxAppVoiceError(error, _constants.METHODS.REJECT);
298
331
  }
299
332
  }
300
- async function runWxAppOutdialDecline(deps, executeCancel) {
333
+ async function runWxAppOutdialDecline(deps, executeCancel, options) {
301
334
  const taskId = getInteractionId(deps);
335
+ const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';
302
336
  deps.metricsManager.timeEvent([_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, _constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED]);
303
337
  try {
304
338
  const result = await executeCancel();
305
339
  deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS, {
306
- taskId
340
+ taskId,
341
+ acceptReason,
342
+ ...getWxAppTelephonyMetricContext(deps)
307
343
  }, ['operational', 'behavioral']);
308
344
  return result;
309
345
  } catch (error) {
310
346
  logWxAppOutdialDeclineFailure(deps, error);
311
- deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED, getWxAppOutdialDeclineFailurePayload(deps, error), ['operational', 'behavioral']);
347
+ deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED, {
348
+ acceptReason,
349
+ ...getWxAppOutdialDeclineFailurePayload(deps, error)
350
+ }, ['operational', 'behavioral']);
312
351
  throw error;
313
352
  }
314
353
  }
@@ -319,7 +358,8 @@ async function runWxAppToggleMute(deps, lifecycle, options) {
319
358
  await toggleMuteOnWebex(deps, options);
320
359
  deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_MUTE_SUCCESS, {
321
360
  taskId,
322
- targetMuted: deps.getWxAppMuted()
361
+ targetMuted: deps.getWxAppMuted(),
362
+ ...getWxAppTelephonyMetricContext(deps)
323
363
  }, ['operational', 'behavioral']);
324
364
  } catch (error) {
325
365
  logTelephonyFailure('mute', deps, error);
@@ -334,7 +374,8 @@ async function runWxAppTransmitDtmf(deps, lifecycle, options) {
334
374
  await transmitDtmfOnWebex(deps, options);
335
375
  deps.metricsManager.trackEvent(_constants2.METRIC_EVENT_NAMES.WXAPP_TASK_DTMF_SUCCESS, {
336
376
  taskId,
337
- dtmfLength: options.dtmf.length
377
+ dtmfLength: options.dtmf.length,
378
+ ...getWxAppTelephonyMetricContext(deps)
338
379
  }, ['operational', 'behavioral']);
339
380
  } catch (error) {
340
381
  logTelephonyFailure('dtmf', deps, error);
@@ -1 +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":";;;;;;;;;;;;;;;;;;;;;AAGA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAGA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AACA,IAAAM,kBAAA,GAAAN,OAAA;AAKA,IAAAO,uBAAA,GAAAP,OAAA;AAIsC,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAmBtC;;AAWA,MAAMG,kBAAkB,GAAIC,WAAoB,IAC7CA,WAAW,EAAuBC,UAAU,KAAK,OAAO,IACzD,OAAQD,WAAW,EAAuBE,YAAY,KAAK,QAAQ,IAClEF,WAAW,CAAsBE,YAAY,CAACC,IAAI,CAAC,CAAC,KAAK,EAAE,IAC5D,OAAQH,WAAW,EAAuBI,QAAQ,KAAK,QAAQ,IAC9DJ,WAAW,CAAsBI,QAAQ,CAACD,IAAI,CAAC,CAAC,KAAK,EAAE;AAE1D,MAAME,aAAa,GAAIC,IAA4B,IACjDA,IAAI,CAACC,WAAW,CAAC,CAAC,EAAEC,WAAW,EAAEC,YAAY,KAAK,SAAS;AAE7D,SAASC,wBAAwBA,CAACJ,IAA4B,EAAW;EACvE,MAAMK,QAAQ,GAAGL,IAAI,CAACC,WAAW,CAAC,CAAC;EACnC,MAAMK,YAAY,GAAGD,QAAQ,CAACH,WAAW,EAAEI,YAAY;EACvD,MAAMC,OAAO,GAAGP,IAAI,CAACO,OAAO,IAAIF,QAAQ,CAACE,OAAO;EAEhD,IAAI,CAACD,YAAY,IAAI,CAACC,OAAO,EAAE;IAC7B,OAAOC,SAAS;EAClB;EAEA,IAAIF,YAAY,CAACC,OAAO,CAAC,EAAE;IACzB,OAAOD,YAAY,CAACC,OAAO,CAAC;EAC9B;EAEA,OAAOE,MAAM,CAACC,MAAM,CAACJ,YAAY,CAAC,CAACK,IAAI,CACpCjB,WAAW,IAAMA,WAAW,EAAoBkB,EAAE,KAAKL,OAC1D,CAAC;AACH;AAEO,SAASM,uBAAuBA,CACrCb,IAA4B,EACW;EACvC,MAAMK,QAAQ,GAAGL,IAAI,CAACC,WAAW,CAAC,CAAC;EACnC,MAAMP,WAAW,GAAGU,wBAAwB,CAACJ,IAAI,CAAC;EAElD,IAAI,CAACP,kBAAkB,CAACC,WAAW,CAAC,EAAE;IACpC,OAAOc,SAAS;EAClB;EAEA,OAAO,IAAAM,uDAAoC,EACzCd,IAAI,CAACO,OAAO,IAAIF,QAAQ,CAACE,OAAO,EAChCF,QAAQ,CAACH,WAAW,EAAEI,YACxB,CAAC;AACH;AAEO,SAASS,sBAAsBA,CAACf,IAA4B,EAAW;EAC5E,IAAI,CAACA,IAAI,CAACgB,sBAAsB,EAAE;IAChC,OAAO,KAAK;EACd;EAEA,MAAMC,KAAK,GAAGjB,IAAI,CAACkB,YAAY,CAAC,CAAC;EACjC,IAAID,KAAK,KAAKE,uBAAS,CAACC,OAAO,EAAE;IAC/B,OAAO,KAAK;EACd;EAEA,MAAMC,OAAO,GAAGR,uBAAuB,CAACb,IAAI,CAAC;EAE7C,OAAOsB,OAAO,CAACD,OAAO,CAAC;AACzB;;AAEA;AACO,SAASE,6BAA6BA,CAACvB,IAA4B,EAAW;EACnF,OAAOe,sBAAsB,CAACf,IAAI,CAAC,IAAI,CAACD,aAAa,CAACC,IAAI,CAAC;AAC7D;AAEO,SAASwB,qBAAqBA,CAACxB,IAA4B,EAAiB;EACjF,MAAMiB,KAAK,GAAGjB,IAAI,CAACkB,YAAY,CAAC,CAAC;EACjC,IACE,CAACD,KAAK,IACNA,KAAK,KAAKE,uBAAS,CAACC,OAAO,IAC3BH,KAAK,KAAKE,uBAAS,CAACM,IAAI,IACxBR,KAAK,KAAKE,uBAAS,CAACO,WAAW,IAC/BT,KAAK,KAAKE,uBAAS,CAACQ,UAAU,IAC9BV,KAAK,KAAKE,uBAAS,CAACS,SAAS,EAC7B;IACA,OAAO,IAAI;EACb;EAEA,OAAOf,uBAAuB,CAACb,IAAI,CAAC,EAAEJ,YAAY,IAAI,IAAI;AAC5D;AAEO,SAASiC,mBAAmBA,CAAC7B,IAA4B,EAAsB;EACpF,MAAMN,WAAW,GAAGU,wBAAwB,CAACJ,IAAI,CAAuC;EACxF,MAAM8B,WAAW,GAAGpC,WAAW,EAAEoC,WAAW;EAE5C,OAAO,OAAOA,WAAW,KAAK,QAAQ,IAAIA,WAAW,CAACjC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAGiC,WAAW,GAAGtB,SAAS;AAC/F;AAEO,SAASuB,uBAAuBA,CACrC/B,IAA4B,EAC5BgC,QAAiB,EACG;EACpB,IAAI,OAAOA,QAAQ,KAAK,QAAQ,IAAIA,QAAQ,CAACnC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1D,OAAOmC,QAAQ;EACjB;EAEA,OAAO,IAAAC,qCAAkB,EAACJ,mBAAmB,CAAC7B,IAAI,CAAC,CAAC;AACtD;AAEA,SAASkC,gBAAgBA,CAAClC,IAA4B,EAAsB;EAC1E,OAAOA,IAAI,CAACC,WAAW,CAAC,CAAC,EAAEkC,aAAa;AAC1C;AAEA,SAASC,mBAAmBA,CAC1BC,MAA4B,EAC5BrC,IAA4B,EAC5BsC,KAAc,EACR;EACN,MAAMC,OAAO,GAAGD,KAA4B;EAC5C,IAAAE,+CAAuB,EAAC;IACtBH,MAAM;IACNI,KAAK,EAAE,QAAQ;IACfN,aAAa,EAAED,gBAAgB,CAAClC,IAAI,CAAC;IACrC0C,UAAU,EAAEH,OAAO,CAACG,UAAU;IAC9BC,UAAU,EAAEJ,OAAO,CAACK,MAAM;IAC1BC,aAAa,EAAEN,OAAO,CAACO;EACzB,CAAC,CAAC;AACJ;AAEA,SAASC,qCAAqCA,CAC5C/C,IAA4B,EAC5BsC,KAAc,EACU;EACxB,MAAMC,OAAO,GAAGD,KAA4B;EAC5C,MAAMU,OAA+B,GAAG;IACtCC,MAAM,EAAEf,gBAAgB,CAAClC,IAAI,CAAC,IAAI,EAAE;IACpCsC,KAAK,EAAEA,KAAK,YAAYY,KAAK,GAAGZ,KAAK,CAACa,QAAQ,CAAC,CAAC,GAAGC,MAAM,CAACd,KAAK;EACjE,CAAC;EAED,IAAIC,OAAO,CAACG,UAAU,EAAE;IACtBM,OAAO,CAACN,UAAU,GAAGH,OAAO,CAACG,UAAU;EACzC;EAEA,OAAOM,OAAO;AAChB;AAMA,SAASK,oCAAoCA,CAC3CrD,IAA4B,EAC5BsC,KAAc,EACA;EACd,MAAMgB,IAAkB,GAAG;IACzBL,MAAM,EAAEf,gBAAgB,CAAClC,IAAI,CAAC,IAAI,EAAE;IACpCsC,KAAK,EAAEA,KAAK,YAAYY,KAAK,GAAGZ,KAAK,CAACa,QAAQ,CAAC,CAAC,GAAGC,MAAM,CAACd,KAAK;EACjE,CAAC;EACD,MAAMiB,UAAU,GAAIjB,KAAK,CAAqBjB,OAAO;EAErD,IAAIkC,UAAU,EAAE;IACd,OAAO;MAAC,GAAGD,IAAI;MAAE,GAAGE,uBAAc,CAACC,0CAA0C,CAACF,UAAU;IAAC,CAAC;EAC5F;EAEA,OAAOR,qCAAqC,CAAC/C,IAAI,EAAEsC,KAAK,CAAC;AAC3D;AAEA,SAASoB,6BAA6BA,CAAC1D,IAA4B,EAAEsC,KAAc,EAAQ;EACzF,MAAMiB,UAAU,GAAIjB,KAAK,CAAqBjB,OAAO;EACrD,MAAMkB,OAAO,GAAGD,KAA4B;EAE5C,IAAAE,+CAAuB,EAAC;IACtBH,MAAM,EAAE,SAAS;IACjBI,KAAK,EAAE,QAAQ;IACfN,aAAa,EAAED,gBAAgB,CAAClC,IAAI,CAAC;IACrC0C,UAAU,EAAEa,UAAU,EAAEb,UAAU,IAAIH,OAAO,CAACG,UAAU;IACxDC,UAAU,EAAEJ,OAAO,CAACK,MAAM;IAC1BC,aAAa,EAAEU,UAAU,EAAEI,IAAI,EAAEC,MAAM,IAAIrB,OAAO,CAACO;EACrD,CAAC,CAAC;AACJ;AAEA,SAASe,kBAAkBA,CAAC7D,IAA4B,EAAQ;EAC9D,IAAI,CAACA,IAAI,CAACgB,sBAAsB,EAAE;IAChC,IAAA8C,iDAAyB,EAAC,iCAAiC,EAAE5B,gBAAgB,CAAClC,IAAI,CAAC,CAAC;IACpF,MAAM,IAAIkD,KAAK,CAAC,oCAAoC,CAAC;EACvD;EAEA,IAAI,CAAClD,IAAI,CAAC+D,wBAAwB,EAAE;IAClC,IAAAD,iDAAyB,EAAC,0CAA0C,EAAE5B,gBAAgB,CAAClC,IAAI,CAAC,CAAC;IAC7F,MAAM,IAAIkD,KAAK,CAAC,yCAAyC,CAAC;EAC5D;AACF;AAEO,eAAec,aAAaA,CACjChE,IAA4B,EAC5BiE,OAAgC,EACjB;EACf,MAAM9B,aAAa,GAAGD,gBAAgB,CAAClC,IAAI,CAAC;EAC5C,IAAAwC,+CAAuB,EAAC;IAACH,MAAM,EAAE,QAAQ;IAAEI,KAAK,EAAE,SAAS;IAAEN;EAAa,CAAC,CAAC;EAC5E0B,kBAAkB,CAAC7D,IAAI,CAAC;EAExB,IAAI,CAACe,sBAAsB,CAACf,IAAI,CAAC,EAAE;IACjC,IAAA8D,iDAAyB,EAAC,yBAAyB,EAAE3B,aAAa,CAAC;IACnE,MAAM,IAAIe,KAAK,CAAC,mCAAmC,CAAC;EACtD;EAEA,MAAM7B,OAAO,GAAGR,uBAAuB,CAACb,IAAI,CAAC;EAC7C,IAAI,CAACqB,OAAO,EAAE;IACZ,IAAAyC,iDAAyB,EAAC,kCAAkC,EAAE3B,aAAa,CAAC;IAC5E,MAAM,IAAIe,KAAK,CAAC,8CAA8C,CAAC;EACjE;EAEA,MAAMlD,IAAI,CAAC+D,wBAAwB,CAACG,UAAU,CAAC;IAC7CC,MAAM,EAAE9C,OAAO,CAACzB,YAAY;IAC5BwE,UAAU,EAAE/C,OAAO,CAACvB,QAAQ;IAC5BgC,WAAW,EAAEC,uBAAuB,CAAC/B,IAAI,EAAEiE,OAAO,EAAEnC,WAAW;EACjE,CAAC,CAAC;EACF,IAAAU,+CAAuB,EAAC;IAACH,MAAM,EAAE,QAAQ;IAAEI,KAAK,EAAE,SAAS;IAAEN;EAAa,CAAC,CAAC;AAC9E;AAEO,eAAekC,aAAaA,CACjCrE,IAA4B,EAC5BiE,OAAgC,EACjB;EACf,MAAM9B,aAAa,GAAGD,gBAAgB,CAAClC,IAAI,CAAC;EAC5C,IAAAwC,+CAAuB,EAAC;IAACH,MAAM,EAAE,SAAS;IAAEI,KAAK,EAAE,SAAS;IAAEN;EAAa,CAAC,CAAC;EAC7E0B,kBAAkB,CAAC7D,IAAI,CAAC;EAExB,IAAI,CAACuB,6BAA6B,CAACvB,IAAI,CAAC,EAAE;IACxC,IAAA8D,iDAAyB,EAAC,iCAAiC,EAAE3B,aAAa,CAAC;IAC3E,MAAM,IAAIe,KAAK,CAAC,2CAA2C,CAAC;EAC9D;EAEA,MAAM7B,OAAO,GAAGR,uBAAuB,CAACb,IAAI,CAAC;EAC7C,IAAI,CAACqB,OAAO,EAAE;IACZ,IAAAyC,iDAAyB,EAAC,kCAAkC,EAAE3B,aAAa,CAAC;IAC5E,MAAM,IAAIe,KAAK,CAAC,8CAA8C,CAAC;EACjE;EAEA,MAAMlD,IAAI,CAAC+D,wBAAwB,CAACO,UAAU,CAAC;IAC7CH,MAAM,EAAE9C,OAAO,CAACzB,YAAY;IAC5BkC,WAAW,EAAEC,uBAAuB,CAAC/B,IAAI,EAAEiE,OAAO,EAAEnC,WAAW;EACjE,CAAC,CAAC;EACF,IAAAU,+CAAuB,EAAC;IAACH,MAAM,EAAE,SAAS;IAAEI,KAAK,EAAE,SAAS;IAAEN;EAAa,CAAC,CAAC;AAC/E;AAEO,eAAeoC,iBAAiBA,CACrCvE,IAA4B,EAC5BiE,OAAiD,EAClC;EACf,MAAM9B,aAAa,GAAGD,gBAAgB,CAAClC,IAAI,CAAC;EAC5C,IAAAwC,+CAAuB,EAAC;IAACH,MAAM,EAAE,MAAM;IAAEI,KAAK,EAAE,SAAS;IAAEN;EAAa,CAAC,CAAC;EAC1E0B,kBAAkB,CAAC7D,IAAI,CAAC;EAExB,MAAMmE,MAAM,GAAG3C,qBAAqB,CAACxB,IAAI,CAAC;EAC1C,IAAI,CAACmE,MAAM,EAAE;IACX,IAAAL,iDAAyB,EAAC,2BAA2B,EAAE3B,aAAa,CAAC;IACrE,MAAM,IAAIe,KAAK,CAAC,8BAA8B,CAAC;EACjD;EAEA,MAAMsB,WAAW,GAAGP,OAAO,EAAEQ,KAAK,IAAI,CAACzE,IAAI,CAAC0E,aAAa,CAAC,CAAC;EAC3D,MAAMC,OAAO,GAAGH,WAAW,GACvBxE,IAAI,CAAC+D,wBAAwB,CAACa,QAAQ,CAACC,IAAI,CAAC7E,IAAI,CAAC+D,wBAAwB,CAAC,GAC1E/D,IAAI,CAAC+D,wBAAwB,CAACe,UAAU,CAACD,IAAI,CAAC7E,IAAI,CAAC+D,wBAAwB,CAAC;EAEhF,MAAMY,OAAO,CAAC;IACZR,MAAM;IACNrC,WAAW,EAAEC,uBAAuB,CAAC/B,IAAI,EAAEiE,OAAO,EAAEnC,WAAW;EACjE,CAAC,CAAC;EACF9B,IAAI,CAAC+E,aAAa,CAACP,WAAW,CAAC;EAC/B,IAAAhC,+CAAuB,EAAC;IAACH,MAAM,EAAE,MAAM;IAAEI,KAAK,EAAE,SAAS;IAAEN;EAAa,CAAC,CAAC;AAC5E;AAEO,eAAe6C,mBAAmBA,CACvChF,IAA4B,EAC5BiE,OAA6C,EAC9B;EACf,MAAM9B,aAAa,GAAGD,gBAAgB,CAAClC,IAAI,CAAC;EAC5C,IAAAwC,+CAAuB,EAAC;IAACH,MAAM,EAAE,MAAM;IAAEI,KAAK,EAAE,SAAS;IAAEN;EAAa,CAAC,CAAC;EAC1E0B,kBAAkB,CAAC7D,IAAI,CAAC;EAExB,MAAMmE,MAAM,GAAG3C,qBAAqB,CAACxB,IAAI,CAAC;EAC1C,IAAI,CAACmE,MAAM,EAAE;IACX,IAAAL,iDAAyB,EAAC,2BAA2B,EAAE3B,aAAa,CAAC;IACrE,MAAM,IAAIe,KAAK,CAAC,8BAA8B,CAAC;EACjD;EAEA+B,oBAAW,CAACC,IAAI,CAAC,cAAc,EAAE;IAC/BC,MAAM,EAAE,mBAAmB;IAC3BC,MAAM,EAAEC,kBAAO,CAACC,aAAa;IAC7B3B,IAAI,EAAE;MACJxB,aAAa;MACboD,YAAY,EAAEpB,MAAM,CAACqB,MAAM,IAAI,CAAC,GAAGrB,MAAM,GAAGA,MAAM,CAACsB,KAAK,CAAC,CAAC,CAAC,CAAC;MAC5DC,UAAU,EAAEzB,OAAO,CAAC0B,IAAI,CAACH,MAAM;MAC/BI,cAAc,EAAEtE,OAAO,CAAC2C,OAAO,CAACnC,WAAW;IAC7C;EACF,CAAC,CAAC;EAEF,MAAM9B,IAAI,CAAC+D,wBAAwB,CAAC8B,YAAY,CAAC;IAC/C1B,MAAM;IACNwB,IAAI,EAAE1B,OAAO,CAAC0B,IAAI;IAClB7D,WAAW,EAAEC,uBAAuB,CAAC/B,IAAI,EAAEiE,OAAO,CAACnC,WAAW;EAChE,CAAC,CAAC;EACF,IAAAU,+CAAuB,EAAC;IAACH,MAAM,EAAE,MAAM;IAAEI,KAAK,EAAE,SAAS;IAAEN;EAAa,CAAC,CAAC;AAC5E;AAEO,eAAe2D,cAAcA,CAClC9F,IAA4B,EAC5B+F,SAA8B,EAC9B9B,OAAgC,EACjB;EACf,MAAMhB,MAAM,GAAGf,gBAAgB,CAAClC,IAAI,CAAC;EAErCA,IAAI,CAACgG,cAAc,CAACC,SAAS,CAAC,CAC5BC,8BAAkB,CAACC,yBAAyB,EAC5CD,8BAAkB,CAACE,wBAAwB,CAC5C,CAAC;EAEF,IAAI;IACFL,SAAS,CAACM,sBAAsB,CAAC,IAAI,CAAC;IACtCN,SAAS,CAACO,qBAAqB,CAAC,IAAI,CAAC;IACrC,MAAMtC,aAAa,CAAChE,IAAI,EAAEiE,OAAO,CAAC;IAClC8B,SAAS,CAACQ,eAAe,CAAC,CAAC;IAC3B,MAAMR,SAAS,CAACS,4BAA4B,CAAC,CAAC;IAE9CxG,IAAI,CAACgG,cAAc,CAACS,UAAU,CAACP,8BAAkB,CAACC,yBAAyB,EAAE;MAAClD;IAAM,CAAC,EAAE,CACrF,aAAa,EACb,YAAY,CACb,CAAC;EACJ,CAAC,CAAC,OAAOX,KAAK,EAAE;IACdyD,SAAS,CAACO,qBAAqB,CAAC,KAAK,CAAC;IACtClE,mBAAmB,CAAC,QAAQ,EAAEpC,IAAI,EAAEsC,KAAK,CAAC;IAC1CtC,IAAI,CAACgG,cAAc,CAACS,UAAU,CAC5BP,8BAAkB,CAACE,wBAAwB,EAC3CrD,qCAAqC,CAAC/C,IAAI,EAAEsC,KAAK,CAAC,EAClD,CAAC,aAAa,EAAE,YAAY,CAC9B,CAAC;IACDyD,SAAS,CAACW,kBAAkB,CAACpE,KAAK,EAAE+C,kBAAO,CAACsB,MAAM,CAAC;EACrD,CAAC,SAAS;IACRZ,SAAS,CAACM,sBAAsB,CAAC,KAAK,CAAC;EACzC;AACF;AAEO,eAAeO,cAAcA,CAClC5G,IAA4B,EAC5B+F,SAA8B,EAC9B9B,OAAgC,EACjB;EACf,MAAMhB,MAAM,GAAGf,gBAAgB,CAAClC,IAAI,CAAC;EAErCA,IAAI,CAACgG,cAAc,CAACC,SAAS,CAAC,CAC5BC,8BAAkB,CAACW,0BAA0B,EAC7CX,8BAAkB,CAACY,yBAAyB,CAC7C,CAAC;EAEF,IAAI;IACF,MAAMzC,aAAa,CAACrE,IAAI,EAAEiE,OAAO,CAAC;IAElCjE,IAAI,CAACgG,cAAc,CAACS,UAAU,CAACP,8BAAkB,CAACW,0BAA0B,EAAE;MAAC5D;IAAM,CAAC,EAAE,CACtF,aAAa,EACb,YAAY,CACb,CAAC;EACJ,CAAC,CAAC,OAAOX,KAAK,EAAE;IACdF,mBAAmB,CAAC,SAAS,EAAEpC,IAAI,EAAEsC,KAAK,CAAC;IAC3CtC,IAAI,CAACgG,cAAc,CAACS,UAAU,CAC5BP,8BAAkB,CAACY,yBAAyB,EAC5C/D,qCAAqC,CAAC/C,IAAI,EAAEsC,KAAK,CAAC,EAClD,CAAC,aAAa,EAAE,YAAY,CAC9B,CAAC;IACDyD,SAAS,CAACW,kBAAkB,CAACpE,KAAK,EAAE+C,kBAAO,CAAC0B,MAAM,CAAC;EACrD;AACF;AAEO,eAAeC,sBAAsBA,CAC1ChH,IAA4B,EAC5BiH,aAA+B,EACnB;EACZ,MAAMhE,MAAM,GAAGf,gBAAgB,CAAClC,IAAI,CAAC;EAErCA,IAAI,CAACgG,cAAc,CAACC,SAAS,CAAC,CAC5BC,8BAAkB,CAACW,0BAA0B,EAC7CX,8BAAkB,CAACY,yBAAyB,CAC7C,CAAC;EAEF,IAAI;IACF,MAAMI,MAAM,GAAG,MAAMD,aAAa,CAAC,CAAC;IAEpCjH,IAAI,CAACgG,cAAc,CAACS,UAAU,CAACP,8BAAkB,CAACW,0BAA0B,EAAE;MAAC5D;IAAM,CAAC,EAAE,CACtF,aAAa,EACb,YAAY,CACb,CAAC;IAEF,OAAOiE,MAAM;EACf,CAAC,CAAC,OAAO5E,KAAK,EAAE;IACdoB,6BAA6B,CAAC1D,IAAI,EAAEsC,KAAK,CAAC;IAC1CtC,IAAI,CAACgG,cAAc,CAACS,UAAU,CAC5BP,8BAAkB,CAACY,yBAAyB,EAC5CzD,oCAAoC,CAACrD,IAAI,EAAEsC,KAAK,CAAC,EACjD,CAAC,aAAa,EAAE,YAAY,CAC9B,CAAC;IACD,MAAMA,KAAK;EACb;AACF;AAEO,eAAe6E,kBAAkBA,CACtCnH,IAA4B,EAC5B+F,SAA8B,EAC9B9B,OAA+B,EAChB;EACf,MAAMhB,MAAM,GAAGf,gBAAgB,CAAClC,IAAI,CAAC;EAErCA,IAAI,CAACgG,cAAc,CAACC,SAAS,CAAC,CAC5BC,8BAAkB,CAACkB,uBAAuB,EAC1ClB,8BAAkB,CAACmB,sBAAsB,CAC1C,CAAC;EAEF,IAAI;IACF,MAAM9C,iBAAiB,CAACvE,IAAI,EAAEiE,OAAO,CAAC;IAEtCjE,IAAI,CAACgG,cAAc,CAACS,UAAU,CAC5BP,8BAAkB,CAACkB,uBAAuB,EAC1C;MAACnE,MAAM;MAAEuB,WAAW,EAAExE,IAAI,CAAC0E,aAAa,CAAC;IAAC,CAAC,EAC3C,CAAC,aAAa,EAAE,YAAY,CAC9B,CAAC;EACH,CAAC,CAAC,OAAOpC,KAAK,EAAE;IACdF,mBAAmB,CAAC,MAAM,EAAEpC,IAAI,EAAEsC,KAAK,CAAC;IACxCtC,IAAI,CAACgG,cAAc,CAACS,UAAU,CAC5BP,8BAAkB,CAACmB,sBAAsB,EACzCtE,qCAAqC,CAAC/C,IAAI,EAAEsC,KAAK,CAAC,EAClD,CAAC,aAAa,EAAE,YAAY,CAC9B,CAAC;IACDyD,SAAS,CAACW,kBAAkB,CAACpE,KAAK,EAAE+C,kBAAO,CAACiC,WAAW,CAAC;EAC1D;AACF;AAEO,eAAeC,oBAAoBA,CACxCvH,IAA4B,EAC5B+F,SAA8B,EAC9B9B,OAAgC,EACjB;EACf,MAAMhB,MAAM,GAAGf,gBAAgB,CAAClC,IAAI,CAAC;EAErCA,IAAI,CAACgG,cAAc,CAACC,SAAS,CAAC,CAC5BC,8BAAkB,CAACsB,uBAAuB,EAC1CtB,8BAAkB,CAACuB,sBAAsB,CAC1C,CAAC;EAEF,IAAI;IACF,MAAMzC,mBAAmB,CAAChF,IAAI,EAAEiE,OAAO,CAAC;IAExCjE,IAAI,CAACgG,cAAc,CAACS,UAAU,CAC5BP,8BAAkB,CAACsB,uBAAuB,EAC1C;MAACvE,MAAM;MAAEyC,UAAU,EAAEzB,OAAO,CAAC0B,IAAI,CAACH;IAAM,CAAC,EACzC,CAAC,aAAa,EAAE,YAAY,CAC9B,CAAC;EACH,CAAC,CAAC,OAAOlD,KAAK,EAAE;IACdF,mBAAmB,CAAC,MAAM,EAAEpC,IAAI,EAAEsC,KAAK,CAAC;IACxCtC,IAAI,CAACgG,cAAc,CAACS,UAAU,CAC5BP,8BAAkB,CAACuB,sBAAsB,EACzC1E,qCAAqC,CAAC/C,IAAI,EAAEsC,KAAK,CAAC,EAClD,CAAC,aAAa,EAAE,YAAY,CAC9B,CAAC;IACDyD,SAAS,CAACW,kBAAkB,CAACpE,KAAK,EAAE+C,kBAAO,CAACC,aAAa,CAAC;EAC5D;AACF;AAEO,SAASoB,kBAAkBA,CAACpE,KAAc,EAAE8C,MAAc,EAAED,MAAc,EAAS;EACxF,IACE7C,KAAK,YAAYY,KAAK,IACrBZ,KAAK,CAA+CoF,qBAAqB,EAC1E;IACA,MAAMpF,KAAK;EACb;EAEA,MAAM;IAACA,KAAK,EAAEqF;EAAa,CAAC,GAAG,IAAAC,sBAAe,EAACtF,KAAK,EAAE8C,MAAM,EAAED,MAAM,CAAC;EACrE,MAAMwC,aAAa;AACrB","ignoreList":[]}
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","getWxAppParticipantDiagnostics","hasDeviceCallId","hasDeviceId","participantDeviceType","hasValidWxAppParticipant","getWxAppTelephonyMetricContext","diagnostics","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","log","module","method","METHODS","TRANSMIT_DTMF","callIdSuffix","length","slice","dtmfLength","dtmf","hasLineOwnerId","transmitDtmf","runWxAppAccept","lifecycle","acceptReason","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 WxAppAcceptReason,\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 /** Read-only observability: whether usersub answer-calls-on-wxcc is active this session. */\n getUsersubPublished?: () => boolean;\n};\n\nexport type WxAppParticipantDiagnostics = {\n participantDeviceType?: string;\n hasDeviceCallId: boolean;\n hasDeviceId: boolean;\n hasValidWxAppParticipant: boolean;\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 getWxAppParticipantDiagnostics(\n deps: WxAppVoiceDependencies\n): WxAppParticipantDiagnostics {\n const participant = getWxAppAgentParticipant(deps) as WxAppParticipant | undefined;\n const hasDeviceCallId =\n typeof participant?.deviceCallId === 'string' && participant.deviceCallId.trim() !== '';\n const hasDeviceId =\n typeof participant?.deviceId === 'string' && participant.deviceId.trim() !== '';\n\n return {\n participantDeviceType: participant?.deviceType,\n hasDeviceCallId,\n hasDeviceId,\n hasValidWxAppParticipant: isWxAppParticipant(participant),\n };\n}\n\nfunction getWxAppTelephonyMetricContext(\n deps: WxAppVoiceDependencies\n): Record<string, boolean | string> {\n const diagnostics = getWxAppParticipantDiagnostics(deps);\n\n return {\n hasDeviceCallId: diagnostics.hasDeviceCallId,\n hasDeviceId: diagnostics.hasDeviceId,\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 | boolean> {\n const wxError = error as WxAppTelephonyError;\n const payload: Record<string, string | boolean> = {\n taskId: getInteractionId(deps) ?? '',\n error: error instanceof Error ? error.toString() : String(error),\n ...getWxAppTelephonyMetricContext(deps),\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 {\n ...base,\n ...getWxAppTelephonyMetricContext(deps),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(aqmDetails),\n };\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.log('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 type WxAppAcceptRejectOptions = {\n lineOwnerId?: string;\n acceptReason?: WxAppAcceptReason;\n};\n\nexport async function runWxAppAccept(\n deps: WxAppVoiceDependencies,\n lifecycle: WxAppVoiceLifecycle,\n options?: WxAppAcceptRejectOptions\n): Promise<void> {\n const taskId = getInteractionId(deps);\n const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';\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(\n METRIC_EVENT_NAMES.WXAPP_TASK_ACCEPT_SUCCESS,\n {taskId, acceptReason, ...getWxAppTelephonyMetricContext(deps)},\n ['operational', '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 {acceptReason, ...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?: WxAppAcceptRejectOptions\n): Promise<void> {\n const taskId = getInteractionId(deps);\n const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';\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(\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS,\n {taskId, acceptReason, ...getWxAppTelephonyMetricContext(deps)},\n ['operational', 'behavioral']\n );\n } catch (error) {\n logTelephonyFailure('decline', deps, error);\n deps.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_FAILED,\n {acceptReason, ...getWxAppTelephonyMetricFailurePayload(deps, error)},\n ['operational', 'behavioral']\n );\n lifecycle.mapWxAppVoiceError(error, METHODS.REJECT);\n }\n}\n\nexport type WxAppOutdialDeclineOptions = {\n acceptReason?: WxAppAcceptReason;\n};\n\nexport async function runWxAppOutdialDecline<T>(\n deps: WxAppVoiceDependencies,\n executeCancel: () => Promise<T>,\n options?: WxAppOutdialDeclineOptions\n): Promise<T> {\n const taskId = getInteractionId(deps);\n const acceptReason = options?.acceptReason ?? 'wxApp_offer_ready';\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(\n METRIC_EVENT_NAMES.WXAPP_TASK_DECLINE_SUCCESS,\n {taskId, acceptReason, ...getWxAppTelephonyMetricContext(deps)},\n ['operational', '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 {acceptReason, ...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(), ...getWxAppTelephonyMetricContext(deps)},\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, ...getWxAppTelephonyMetricContext(deps)},\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":[]}
@@ -8,6 +8,7 @@ exports.callIdSuffix = callIdSuffix;
8
8
  exports.deriveWxAppAcceptReason = deriveWxAppAcceptReason;
9
9
  exports.logWxAppMercuryMuteSync = logWxAppMercuryMuteSync;
10
10
  exports.logWxAppOfferDecision = logWxAppOfferDecision;
11
+ exports.logWxAppOfferParticipantMismatch = logWxAppOfferParticipantMismatch;
11
12
  exports.logWxAppSessionReadiness = logWxAppSessionReadiness;
12
13
  exports.logWxAppTelephonyAction = logWxAppTelephonyAction;
13
14
  exports.logWxAppValidationFailure = logWxAppValidationFailure;
@@ -22,8 +23,14 @@ function callIdSuffix(callId) {
22
23
  }
23
24
  return callId.length <= 8 ? callId : callId.slice(-8);
24
25
  }
25
- function logWxApp(message, method, data) {
26
- _loggerProxy.default.info(`${WXAPP_LOG_PREFIX} ${message}`, {
26
+ function formatLogSuffix(data, keys) {
27
+ const entries = keys ? keys.map(key => [key, data[key]]) : Object.entries(data).filter(([key]) => key !== 'feature' && key !== 'event');
28
+ const parts = entries.filter(([, value]) => value !== undefined && value !== null && value !== '').map(([key, value]) => `${key}=${String(value)}`);
29
+ return parts.length > 0 ? ` ${parts.join(' ')}` : '';
30
+ }
31
+ function logWxApp(message, method, data, suffixKeys) {
32
+ const suffix = formatLogSuffix(data, suffixKeys);
33
+ _loggerProxy.default.log(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {
27
34
  module: 'wxAppDiagnosticLogging',
28
35
  method,
29
36
  data: {
@@ -32,8 +39,20 @@ function logWxApp(message, method, data) {
32
39
  }
33
40
  });
34
41
  }
35
- function logWxAppError(message, method, data) {
36
- _loggerProxy.default.error(`${WXAPP_LOG_PREFIX} ${message}`, {
42
+ function logWxAppWarn(message, method, data, suffixKeys) {
43
+ const suffix = formatLogSuffix(data, suffixKeys);
44
+ _loggerProxy.default.warn(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {
45
+ module: 'wxAppDiagnosticLogging',
46
+ method,
47
+ data: {
48
+ feature: WXAPP_LOG_FEATURE,
49
+ ...data
50
+ }
51
+ });
52
+ }
53
+ function logWxAppError(message, method, data, suffixKeys) {
54
+ const suffix = formatLogSuffix(data, suffixKeys);
55
+ _loggerProxy.default.error(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {
37
56
  module: 'wxAppDiagnosticLogging',
38
57
  method,
39
58
  data: {
@@ -43,7 +62,7 @@ function logWxAppError(message, method, data) {
43
62
  });
44
63
  }
45
64
  function logWxAppSessionReadiness(params) {
46
- logWxApp('session readiness', 'logWxAppSessionReadiness', {
65
+ const data = {
47
66
  event: 'session_readiness',
48
67
  enableWxBetterTogether: params.enableWxBetterTogether,
49
68
  loginOption: params.loginOption,
@@ -52,7 +71,8 @@ function logWxAppSessionReadiness(params) {
52
71
  mercurySubscribed: params.mercurySubscribed,
53
72
  telephonyTaskType: params.telephonyTaskType,
54
73
  skipReason: params.skipReason
55
- });
74
+ };
75
+ logWxApp('session readiness', 'logWxAppSessionReadiness', data, ['usersubPublished', 'mercurySubscribed', 'loginOption', 'enableWxBetterTogether', 'telephonyTaskType', 'skipReason']);
56
76
  }
57
77
  function deriveWxAppAcceptReason(params) {
58
78
  if (params.isWxAppInboundOffer || params.isWxAppOutdialOffer) {
@@ -76,15 +96,32 @@ function deriveWxAppAcceptReason(params) {
76
96
  return 'extension_non_wxApp_offer';
77
97
  }
78
98
  function logWxAppOfferDecision(params) {
79
- logWxApp('offer decision', 'logWxAppOfferDecision', {
99
+ const data = {
80
100
  event: 'offer_decision',
81
101
  interactionId: params.interactionId,
82
102
  acceptVisible: params.acceptVisible,
83
103
  acceptEnabled: params.acceptEnabled,
84
104
  acceptReason: params.acceptReason,
85
105
  wxAppParticipantDeviceType: params.wxAppParticipantDeviceType,
86
- hasDeviceCallId: params.hasDeviceCallId
87
- });
106
+ hasDeviceCallId: params.hasDeviceCallId,
107
+ hasDeviceId: params.hasDeviceId,
108
+ usersubPublished: params.usersubPublished
109
+ };
110
+ logWxApp('offer decision', 'logWxAppOfferDecision', data, ['acceptReason', 'hasDeviceCallId', 'hasDeviceId', 'usersubPublished', 'interactionId', 'acceptVisible', 'acceptEnabled']);
111
+ }
112
+ function logWxAppOfferParticipantMismatch(params) {
113
+ const data = {
114
+ event: 'participant_fields_mismatch',
115
+ interactionId: params.interactionId,
116
+ usersubPublished: params.usersubPublished,
117
+ hasDeviceCallId: params.hasDeviceCallId,
118
+ hasDeviceId: params.hasDeviceId,
119
+ participantDeviceType: params.participantDeviceType ?? 'missing',
120
+ acceptVisible: params.acceptVisible,
121
+ acceptEnabled: params.acceptEnabled,
122
+ acceptReason: params.acceptReason
123
+ };
124
+ logWxAppWarn('participant fields mismatch', 'logWxAppOfferParticipantMismatch', data, ['usersubPublished', 'hasDeviceCallId', 'hasDeviceId', 'acceptReason', 'interactionId', 'participantDeviceType']);
88
125
  }
89
126
  function logWxAppTelephonyAction(params) {
90
127
  const payload = {
@@ -97,9 +134,9 @@ function logWxAppTelephonyAction(params) {
97
134
  failureReason: params.failureReason
98
135
  };
99
136
  if (params.phase === 'failed') {
100
- logWxAppError(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);
137
+ logWxAppError(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload, ['interactionId', 'trackingId', 'httpStatus', 'failureReason']);
101
138
  } else {
102
- logWxApp(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload);
139
+ logWxApp(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload, ['interactionId', 'action', 'phase']);
103
140
  }
104
141
  }
105
142
  function logWxAppValidationFailure(reason, interactionId) {
@@ -107,7 +144,7 @@ function logWxAppValidationFailure(reason, interactionId) {
107
144
  event: 'validation_failed',
108
145
  reason,
109
146
  interactionId
110
- });
147
+ }, ['reason', 'interactionId']);
111
148
  }
112
149
  function logWxAppMercuryMuteSync(params) {
113
150
  logWxApp(`mercury mute sync ${params.phase}`, 'logWxAppMercuryMuteSync', {
@@ -117,6 +154,6 @@ function logWxAppMercuryMuteSync(params) {
117
154
  callIdSuffix: params.callIdSuffix,
118
155
  interactionId: params.interactionId,
119
156
  dropReason: params.dropReason
120
- });
157
+ }, ['phase', 'muted', 'callIdSuffix', 'interactionId', 'dropReason']);
121
158
  }
122
159
  //# sourceMappingURL=wxAppDiagnosticLogging.js.map