@webex/calling 3.9.0 → 3.10.0-multi-llms.1

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 (192) hide show
  1. package/dist/CallHistory/CallHistory.js +43 -43
  2. package/dist/CallHistory/CallHistory.js.map +1 -1
  3. package/dist/CallHistory/CallHistory.test.js +157 -152
  4. package/dist/CallHistory/CallHistory.test.js.map +1 -1
  5. package/dist/CallHistory/callHistoryFixtures.js.map +1 -1
  6. package/dist/CallHistory/constants.js.map +1 -1
  7. package/dist/CallHistory/types.js.map +1 -1
  8. package/dist/CallSettings/CallSettings.js +8 -8
  9. package/dist/CallSettings/CallSettings.js.map +1 -1
  10. package/dist/CallSettings/CallSettings.test.js +1 -1
  11. package/dist/CallSettings/CallSettings.test.js.map +1 -1
  12. package/dist/CallSettings/UcmBackendConnector.js +12 -11
  13. package/dist/CallSettings/UcmBackendConnector.js.map +1 -1
  14. package/dist/CallSettings/UcmBackendConnector.test.js +11 -11
  15. package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -1
  16. package/dist/CallSettings/WxCallBackendConnector.js +53 -52
  17. package/dist/CallSettings/WxCallBackendConnector.js.map +1 -1
  18. package/dist/CallSettings/WxCallBackendConnector.test.js +112 -110
  19. package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -1
  20. package/dist/CallSettings/constants.js.map +1 -1
  21. package/dist/CallSettings/testFixtures.js.map +1 -1
  22. package/dist/CallSettings/types.js.map +1 -1
  23. package/dist/CallingClient/CallingClient.js +458 -203
  24. package/dist/CallingClient/CallingClient.js.map +1 -1
  25. package/dist/CallingClient/CallingClient.test.js +458 -315
  26. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  27. package/dist/CallingClient/callRecordFixtures.js.map +1 -1
  28. package/dist/CallingClient/calling/CallerId/index.js +2 -2
  29. package/dist/CallingClient/calling/CallerId/index.js.map +1 -1
  30. package/dist/CallingClient/calling/CallerId/index.test.js +8 -7
  31. package/dist/CallingClient/calling/CallerId/index.test.js.map +1 -1
  32. package/dist/CallingClient/calling/CallerId/types.js.map +1 -1
  33. package/dist/CallingClient/calling/call.js +406 -373
  34. package/dist/CallingClient/calling/call.js.map +1 -1
  35. package/dist/CallingClient/calling/call.test.js +482 -415
  36. package/dist/CallingClient/calling/call.test.js.map +1 -1
  37. package/dist/CallingClient/calling/callManager.js +3 -4
  38. package/dist/CallingClient/calling/callManager.js.map +1 -1
  39. package/dist/CallingClient/calling/callManager.test.js +68 -69
  40. package/dist/CallingClient/calling/callManager.test.js.map +1 -1
  41. package/dist/CallingClient/calling/index.js.map +1 -1
  42. package/dist/CallingClient/calling/types.js.map +1 -1
  43. package/dist/CallingClient/callingClientFixtures.js.map +1 -1
  44. package/dist/CallingClient/constants.js +9 -6
  45. package/dist/CallingClient/constants.js.map +1 -1
  46. package/dist/CallingClient/line/index.js +10 -11
  47. package/dist/CallingClient/line/index.js.map +1 -1
  48. package/dist/CallingClient/line/line.test.js +10 -9
  49. package/dist/CallingClient/line/line.test.js.map +1 -1
  50. package/dist/CallingClient/line/types.js.map +1 -1
  51. package/dist/CallingClient/registration/index.js.map +1 -1
  52. package/dist/CallingClient/registration/register.js +285 -205
  53. package/dist/CallingClient/registration/register.js.map +1 -1
  54. package/dist/CallingClient/registration/register.test.js +251 -180
  55. package/dist/CallingClient/registration/register.test.js.map +1 -1
  56. package/dist/CallingClient/registration/registerFixtures.js.map +1 -1
  57. package/dist/CallingClient/registration/types.js.map +1 -1
  58. package/dist/CallingClient/registration/webWorker.js +25 -10
  59. package/dist/CallingClient/registration/webWorker.js.map +1 -1
  60. package/dist/CallingClient/registration/webWorker.test.js +85 -38
  61. package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
  62. package/dist/CallingClient/registration/webWorkerStr.js +1 -1
  63. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
  64. package/dist/CallingClient/types.js.map +1 -1
  65. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js +142 -0
  66. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js.map +1 -0
  67. package/dist/Contacts/ContactsClient.js +244 -247
  68. package/dist/Contacts/ContactsClient.js.map +1 -1
  69. package/dist/Contacts/ContactsClient.test.js +93 -93
  70. package/dist/Contacts/ContactsClient.test.js.map +1 -1
  71. package/dist/Contacts/constants.js +2 -2
  72. package/dist/Contacts/constants.js.map +1 -1
  73. package/dist/Contacts/contactFixtures.js.map +1 -1
  74. package/dist/Contacts/types.js.map +1 -1
  75. package/dist/Errors/catalog/CallError.js +2 -2
  76. package/dist/Errors/catalog/CallError.js.map +1 -1
  77. package/dist/Errors/catalog/CallingDeviceError.js +2 -2
  78. package/dist/Errors/catalog/CallingDeviceError.js.map +1 -1
  79. package/dist/Errors/catalog/ExtendedError.js +3 -3
  80. package/dist/Errors/catalog/ExtendedError.js.map +1 -1
  81. package/dist/Errors/catalog/LineError.js +2 -2
  82. package/dist/Errors/catalog/LineError.js.map +1 -1
  83. package/dist/Errors/index.js.map +1 -1
  84. package/dist/Errors/types.js.map +1 -1
  85. package/dist/Events/impl/index.js +3 -3
  86. package/dist/Events/impl/index.js.map +1 -1
  87. package/dist/Events/types.js.map +1 -1
  88. package/dist/Logger/index.js +3 -3
  89. package/dist/Logger/index.js.map +1 -1
  90. package/dist/Logger/index.test.js +1 -1
  91. package/dist/Logger/index.test.js.map +1 -1
  92. package/dist/Logger/types.js.map +1 -1
  93. package/dist/Metrics/index.js +221 -104
  94. package/dist/Metrics/index.js.map +1 -1
  95. package/dist/Metrics/index.test.js +112 -23
  96. package/dist/Metrics/index.test.js.map +1 -1
  97. package/dist/Metrics/types.js +15 -1
  98. package/dist/Metrics/types.js.map +1 -1
  99. package/dist/SDKConnector/index.js +0 -1
  100. package/dist/SDKConnector/index.js.map +1 -1
  101. package/dist/SDKConnector/index.test.js.map +1 -1
  102. package/dist/SDKConnector/types.js.map +1 -1
  103. package/dist/SDKConnector/utils.js.map +1 -1
  104. package/dist/SDKConnector/utils.test.js.map +1 -1
  105. package/dist/Voicemail/BroadworksBackendConnector.js +55 -61
  106. package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -1
  107. package/dist/Voicemail/BroadworksBackendConnector.test.js +129 -122
  108. package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -1
  109. package/dist/Voicemail/UcmBackendConnector.js +53 -50
  110. package/dist/Voicemail/UcmBackendConnector.js.map +1 -1
  111. package/dist/Voicemail/UcmBackendConnector.test.js +73 -74
  112. package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -1
  113. package/dist/Voicemail/Voicemail.js +89 -113
  114. package/dist/Voicemail/Voicemail.js.map +1 -1
  115. package/dist/Voicemail/Voicemail.test.js +2 -2
  116. package/dist/Voicemail/Voicemail.test.js.map +1 -1
  117. package/dist/Voicemail/WxCallBackendConnector.js +87 -92
  118. package/dist/Voicemail/WxCallBackendConnector.js.map +1 -1
  119. package/dist/Voicemail/WxCallBackendConnector.test.js +228 -203
  120. package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -1
  121. package/dist/Voicemail/constants.js.map +1 -1
  122. package/dist/Voicemail/types.js.map +1 -1
  123. package/dist/Voicemail/voicemailFixture.js.map +1 -1
  124. package/dist/api.js.map +1 -1
  125. package/dist/common/Utils.js +85 -66
  126. package/dist/common/Utils.js.map +1 -1
  127. package/dist/common/Utils.test.js +113 -123
  128. package/dist/common/Utils.test.js.map +1 -1
  129. package/dist/common/constants.js.map +1 -1
  130. package/dist/common/index.js.map +1 -1
  131. package/dist/common/testUtil.js +1 -1
  132. package/dist/common/testUtil.js.map +1 -1
  133. package/dist/common/types.js.map +1 -1
  134. package/dist/index.js +5 -5
  135. package/dist/index.js.map +1 -1
  136. package/dist/module/CallHistory/CallHistory.js +17 -8
  137. package/dist/module/CallSettings/UcmBackendConnector.js +2 -2
  138. package/dist/module/CallSettings/WxCallBackendConnector.js +14 -14
  139. package/dist/module/CallingClient/CallingClient.js +176 -36
  140. package/dist/module/CallingClient/calling/call.js +92 -62
  141. package/dist/module/CallingClient/constants.js +8 -4
  142. package/dist/module/CallingClient/line/index.js +3 -3
  143. package/dist/module/CallingClient/registration/register.js +37 -13
  144. package/dist/module/CallingClient/registration/webWorker.js +17 -3
  145. package/dist/module/CallingClient/registration/webWorkerStr.js +19 -3
  146. package/dist/module/CallingClient/windowsChromiumIceWarmupUtils.js +59 -0
  147. package/dist/module/Contacts/ContactsClient.js +33 -37
  148. package/dist/module/Contacts/constants.js +1 -1
  149. package/dist/module/Events/impl/index.js +1 -1
  150. package/dist/module/Logger/index.js +2 -2
  151. package/dist/module/Metrics/index.js +142 -55
  152. package/dist/module/Metrics/types.js +14 -0
  153. package/dist/module/Voicemail/BroadworksBackendConnector.js +10 -17
  154. package/dist/module/Voicemail/UcmBackendConnector.js +11 -10
  155. package/dist/module/Voicemail/Voicemail.js +42 -68
  156. package/dist/module/Voicemail/WxCallBackendConnector.js +22 -28
  157. package/dist/module/common/Utils.js +29 -12
  158. package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
  159. package/dist/types/CallSettings/UcmBackendConnector.d.ts.map +1 -1
  160. package/dist/types/CallSettings/WxCallBackendConnector.d.ts.map +1 -1
  161. package/dist/types/CallingClient/CallingClient.d.ts +12 -1
  162. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  163. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  164. package/dist/types/CallingClient/calling/types.d.ts +2 -1
  165. package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
  166. package/dist/types/CallingClient/constants.d.ts +8 -4
  167. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  168. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  169. package/dist/types/CallingClient/registration/register.d.ts +1 -0
  170. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  171. package/dist/types/CallingClient/registration/webWorker.d.ts +2 -1
  172. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
  173. package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
  174. package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
  175. package/dist/types/CallingClient/windowsChromiumIceWarmupUtils.d.ts +5 -0
  176. package/dist/types/CallingClient/windowsChromiumIceWarmupUtils.d.ts.map +1 -0
  177. package/dist/types/Contacts/ContactsClient.d.ts.map +1 -1
  178. package/dist/types/Contacts/constants.d.ts +1 -1
  179. package/dist/types/Contacts/constants.d.ts.map +1 -1
  180. package/dist/types/Logger/index.d.ts +1 -2
  181. package/dist/types/Logger/index.d.ts.map +1 -1
  182. package/dist/types/Metrics/index.d.ts.map +1 -1
  183. package/dist/types/Metrics/types.d.ts +18 -3
  184. package/dist/types/Metrics/types.d.ts.map +1 -1
  185. package/dist/types/Voicemail/BroadworksBackendConnector.d.ts.map +1 -1
  186. package/dist/types/Voicemail/UcmBackendConnector.d.ts.map +1 -1
  187. package/dist/types/Voicemail/Voicemail.d.ts.map +1 -1
  188. package/dist/types/Voicemail/WxCallBackendConnector.d.ts.map +1 -1
  189. package/dist/types/common/Utils.d.ts.map +1 -1
  190. package/dist/types/common/types.d.ts +1 -0
  191. package/dist/types/common/types.d.ts.map +1 -1
  192. package/package.json +10 -8
@@ -639,8 +639,7 @@ export class Call extends Eventing {
639
639
  });
640
640
  }
641
641
  catch (e) {
642
- const extendedError = new Error(`Failed to setup the call: ${e}`);
643
- log.error(extendedError, {
642
+ log.error(`Failed to setup the call: ${JSON.stringify(e)}`, {
644
643
  file: CALL_FILE,
645
644
  method: METHODS.HANDLE_OUTGOING_CALL_SETUP,
646
645
  });
@@ -653,6 +652,7 @@ export class Call extends Eventing {
653
652
  await uploadLogs({
654
653
  correlationId: this.correlationId,
655
654
  callId: this.callId,
655
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
656
656
  });
657
657
  }
658
658
  }
@@ -681,8 +681,7 @@ export class Call extends Eventing {
681
681
  }
682
682
  }
683
683
  catch (e) {
684
- const extendedError = new Error(`Failed to put the call on hold: ${e}`);
685
- log.error(extendedError, {
684
+ log.error(`Failed to put the call on hold: ${JSON.stringify(e)}`, {
686
685
  file: CALL_FILE,
687
686
  method: METHODS.HANDLE_CALL_HOLD,
688
687
  });
@@ -695,6 +694,7 @@ export class Call extends Eventing {
695
694
  await uploadLogs({
696
695
  correlationId: this.correlationId,
697
696
  callId: this.callId,
697
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
698
698
  });
699
699
  }
700
700
  }
@@ -707,14 +707,14 @@ export class Call extends Eventing {
707
707
  const response = await this.postSSRequest(undefined, SUPPLEMENTARY_SERVICES.RESUME);
708
708
  log.log(`Response code: ${response.statusCode}`, {
709
709
  file: CALL_FILE,
710
- method: this.handleCallResume.name,
710
+ method: METHODS.HANDLE_CALL_RESUME,
711
711
  });
712
712
  if (this.isHeld() === true) {
713
713
  this.supplementaryServicesTimer = setTimeout(async () => {
714
- const errorContext = { file: CALL_FILE, method: this.handleCallResume.name };
714
+ const errorContext = { file: CALL_FILE, method: METHODS.HANDLE_CALL_RESUME };
715
715
  log.warn('Resume response timed out', {
716
716
  file: CALL_FILE,
717
- method: this.handleCallResume.name,
717
+ method: METHODS.HANDLE_CALL_RESUME,
718
718
  });
719
719
  const callError = createCallError('An error occurred while resuming the call. Wait a moment and try again.', errorContext, ERROR_TYPE.TIMEOUT, this.getCorrelationId(), ERROR_LAYER.CALL_CONTROL);
720
720
  this.emit(CALL_EVENT_KEYS.RESUME_ERROR, callError);
@@ -723,20 +723,20 @@ export class Call extends Eventing {
723
723
  }
724
724
  }
725
725
  catch (e) {
726
- const extendedError = new Error(`Failed to resume the call: ${e}`);
727
- log.error(extendedError, {
726
+ log.error(`Failed to resume the call: ${JSON.stringify(e)}`, {
728
727
  file: CALL_FILE,
729
- method: this.handleCallResume.name,
728
+ method: METHODS.HANDLE_CALL_RESUME,
730
729
  });
731
730
  const errData = e;
732
731
  handleCallErrors((error) => {
733
732
  this.emit(CALL_EVENT_KEYS.RESUME_ERROR, error);
734
733
  this.submitCallErrorMetric(error);
735
734
  this.sendCallStateMachineEvt({ type: 'E_CALL_ESTABLISHED', data: errData });
736
- }, ERROR_LAYER.CALL_CONTROL, (interval) => undefined, this.getCorrelationId(), errData, this.handleOutgoingCallSetup.name, CALL_FILE);
735
+ }, ERROR_LAYER.CALL_CONTROL, (interval) => undefined, this.getCorrelationId(), errData, METHODS.HANDLE_CALL_RESUME, CALL_FILE);
737
736
  await uploadLogs({
738
737
  correlationId: this.correlationId,
739
738
  callId: this.callId,
739
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
740
740
  });
741
741
  }
742
742
  }
@@ -749,20 +749,20 @@ export class Call extends Eventing {
749
749
  if (data?.callProgressData?.inbandMedia) {
750
750
  log.log('Inband media present. Setting Early Media flag', {
751
751
  file: CALL_FILE,
752
- method: this.handleIncomingCallProgress.name,
752
+ method: METHODS.HANDLE_INCOMING_CALL_PROGRESS,
753
753
  });
754
754
  this.earlyMedia = true;
755
755
  }
756
756
  else {
757
757
  log.log('Inband media not present.', {
758
758
  file: CALL_FILE,
759
- method: this.handleIncomingCallProgress.name,
759
+ method: METHODS.HANDLE_INCOMING_CALL_PROGRESS,
760
760
  });
761
761
  }
762
762
  if (data?.callerId) {
763
763
  log.info('Processing Caller-Id data', {
764
764
  file: CALL_FILE,
765
- method: this.handleIncomingCallProgress.name,
765
+ method: METHODS.HANDLE_INCOMING_CALL_PROGRESS,
766
766
  });
767
767
  this.startCallerIdResolution(data.callerId);
768
768
  }
@@ -777,19 +777,19 @@ export class Call extends Eventing {
777
777
  if (!this.mediaConnection) {
778
778
  log.info('Media connection is not up, buffer the remote Offer Request for later handling', {
779
779
  file: CALL_FILE,
780
- method: this.handleIncomingRoapOfferRequest.name,
780
+ method: METHODS.HANDLE_INCOMING_ROAP_OFFER_REQUEST,
781
781
  });
782
782
  this.seq = message.seq;
783
783
  log.info(`Setting Sequence No: ${this.seq}`, {
784
784
  file: CALL_FILE,
785
- method: this.handleIncomingRoapOfferRequest.name,
785
+ method: METHODS.HANDLE_INCOMING_ROAP_OFFER_REQUEST,
786
786
  });
787
787
  this.remoteRoapMessage = message;
788
788
  }
789
789
  else if (this.receivedRoapOKSeq === message.seq - 2) {
790
790
  log.info('Waiting for Roap OK, buffer the remote Offer Request for later handling', {
791
791
  file: CALL_FILE,
792
- method: this.handleIncomingRoapOfferRequest.name,
792
+ method: METHODS.HANDLE_INCOMING_ROAP_OFFER_REQUEST,
793
793
  });
794
794
  this.remoteRoapMessage = message;
795
795
  }
@@ -808,24 +808,24 @@ export class Call extends Eventing {
808
808
  const res = await this.patch(MobiusCallState.ALERTING);
809
809
  log.log(`PATCH response: ${res.statusCode}`, {
810
810
  file: CALL_FILE,
811
- method: this.handleOutgoingCallAlerting.name,
811
+ method: METHODS.HANDLE_OUTGOING_CALL_ALERTING,
812
812
  });
813
813
  }
814
- catch (err) {
815
- const extendedError = new Error(`Failed to signal call progression: ${err}`);
816
- log.error(extendedError, {
814
+ catch (e) {
815
+ log.error(`Failed to signal call progression: ${JSON.stringify(e)}`, {
817
816
  file: CALL_FILE,
818
- method: this.handleOutgoingCallAlerting.name,
817
+ method: METHODS.HANDLE_OUTGOING_CALL_ALERTING,
819
818
  });
820
- const errData = err;
819
+ const errData = e;
821
820
  handleCallErrors((error) => {
822
821
  this.emit(CALL_EVENT_KEYS.CALL_ERROR, error);
823
822
  this.submitCallErrorMetric(error);
824
823
  this.sendCallStateMachineEvt({ type: 'E_UNKNOWN', data: errData });
825
- }, ERROR_LAYER.CALL_CONTROL, (interval) => undefined, this.getCorrelationId(), errData, this.handleOutgoingCallAlerting.name, CALL_FILE);
824
+ }, ERROR_LAYER.CALL_CONTROL, (interval) => undefined, this.getCorrelationId(), errData, METHODS.HANDLE_OUTGOING_CALL_ALERTING, CALL_FILE);
826
825
  await uploadLogs({
827
826
  correlationId: this.correlationId,
828
827
  callId: this.callId,
828
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
829
829
  });
830
830
  }
831
831
  }
@@ -848,7 +848,7 @@ export class Call extends Eventing {
848
848
  if (!this.remoteRoapMessage) {
849
849
  log.warn('Offer not yet received from remote end... Exiting', {
850
850
  file: CALL_FILE,
851
- method: this.handleOutgoingCallConnect.name,
851
+ method: METHODS.HANDLE_OUTGOING_CALL_CONNECT,
852
852
  });
853
853
  return;
854
854
  }
@@ -857,24 +857,24 @@ export class Call extends Eventing {
857
857
  const res = await this.patch(MobiusCallState.CONNECTED);
858
858
  log.log(`PATCH response: ${res.statusCode}`, {
859
859
  file: CALL_FILE,
860
- method: this.handleOutgoingCallConnect.name,
860
+ method: METHODS.HANDLE_OUTGOING_CALL_CONNECT,
861
861
  });
862
862
  }
863
- catch (err) {
864
- const extendedError = new Error(`Failed to connect the call: ${err}`);
865
- log.error(extendedError, {
863
+ catch (e) {
864
+ log.error(`Failed to connect the call: ${JSON.stringify(e)}`, {
866
865
  file: CALL_FILE,
867
- method: this.handleOutgoingCallConnect.name,
866
+ method: METHODS.HANDLE_OUTGOING_CALL_CONNECT,
868
867
  });
869
- const errData = err;
868
+ const errData = e;
870
869
  handleCallErrors((error) => {
871
870
  this.emit(CALL_EVENT_KEYS.CALL_ERROR, error);
872
871
  this.submitCallErrorMetric(error);
873
872
  this.sendCallStateMachineEvt({ type: 'E_UNKNOWN', data: errData });
874
- }, ERROR_LAYER.CALL_CONTROL, (interval) => undefined, this.getCorrelationId(), errData, this.handleOutgoingCallConnect.name, CALL_FILE);
873
+ }, ERROR_LAYER.CALL_CONTROL, (interval) => undefined, this.getCorrelationId(), errData, METHODS.HANDLE_OUTGOING_CALL_CONNECT, CALL_FILE);
875
874
  await uploadLogs({
876
875
  correlationId: this.correlationId,
877
876
  callId: this.callId,
877
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
878
878
  });
879
879
  }
880
880
  }
@@ -892,10 +892,15 @@ export class Call extends Eventing {
892
892
  });
893
893
  }
894
894
  catch (e) {
895
- log.warn('Failed to delete the call', {
895
+ log.warn(`Failed to delete the call: ${JSON.stringify(e)}`, {
896
896
  file: CALL_FILE,
897
897
  method: METHODS.HANDLE_OUTGOING_CALL_DISCONNECT,
898
898
  });
899
+ uploadLogs({
900
+ correlationId: this.correlationId,
901
+ callId: this.callId,
902
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
903
+ });
899
904
  }
900
905
  this.deleteCb(this.correlationId);
901
906
  this.unregisterListeners();
@@ -935,6 +940,11 @@ export class Call extends Eventing {
935
940
  file: CALL_FILE,
936
941
  method: METHODS.HANDLE_OUTGOING_CALL_DISCONNECT,
937
942
  });
943
+ uploadLogs({
944
+ correlationId: this.correlationId,
945
+ callId: this.callId,
946
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
947
+ });
938
948
  }
939
949
  this.deleteCb(this.correlationId);
940
950
  this.unregisterListeners();
@@ -991,6 +1001,7 @@ export class Call extends Eventing {
991
1001
  await uploadLogs({
992
1002
  correlationId: this.correlationId,
993
1003
  callId: this.callId,
1004
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
994
1005
  });
995
1006
  }
996
1007
  }, DEFAULT_SESSION_TIMER);
@@ -1010,7 +1021,7 @@ export class Call extends Eventing {
1010
1021
  try {
1011
1022
  this.setDisconnectReason();
1012
1023
  const response = await this.delete();
1013
- log.log(`handleOutgoingCallDisconnect: Response code: ${response.statusCode}`, {
1024
+ log.log(`Response code: ${response.statusCode}`, {
1014
1025
  file: CALL_FILE,
1015
1026
  method: METHODS.HANDLE_UNKNOWN_STATE,
1016
1027
  });
@@ -1020,6 +1031,11 @@ export class Call extends Eventing {
1020
1031
  file: CALL_FILE,
1021
1032
  method: METHODS.HANDLE_UNKNOWN_STATE,
1022
1033
  });
1034
+ uploadLogs({
1035
+ correlationId: this.correlationId,
1036
+ callId: this.callId,
1037
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
1038
+ });
1023
1039
  }
1024
1040
  this.deleteCb(this.correlationId);
1025
1041
  if (this.sessionTimer) {
@@ -1108,6 +1124,7 @@ export class Call extends Eventing {
1108
1124
  await uploadLogs({
1109
1125
  correlationId: this.correlationId,
1110
1126
  callId: this.callId,
1127
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
1111
1128
  });
1112
1129
  }
1113
1130
  }
@@ -1142,7 +1159,7 @@ export class Call extends Eventing {
1142
1159
  method: METHODS.HANDLE_ROAP_ERROR,
1143
1160
  });
1144
1161
  const message = event.data;
1145
- if (message) {
1162
+ if (message && message.messageType === 'ERROR') {
1146
1163
  try {
1147
1164
  const res = await this.postMedia(message);
1148
1165
  log.info(`Response code: ${res.statusCode}`, {
@@ -1163,6 +1180,7 @@ export class Call extends Eventing {
1163
1180
  await uploadLogs({
1164
1181
  correlationId: this.correlationId,
1165
1182
  callId: this.callId,
1183
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
1166
1184
  });
1167
1185
  }
1168
1186
  }
@@ -1183,22 +1201,22 @@ export class Call extends Eventing {
1183
1201
  if (!message?.sdp) {
1184
1202
  log.info('Initializing Offer...', {
1185
1203
  file: CALL_FILE,
1186
- method: this.handleOutgoingRoapOffer.name,
1204
+ method: METHODS.HANDLE_OUTGOING_ROAP_OFFER,
1187
1205
  });
1188
1206
  this.mediaConnection.initiateOffer();
1189
1207
  return;
1190
1208
  }
1191
1209
  try {
1192
1210
  const res = await this.postMedia(message);
1193
- log.log(`handleOutgoingRoapOffer: Response code: ${res.statusCode}`, {
1211
+ log.log(`Response code: ${res.statusCode}`, {
1194
1212
  file: CALL_FILE,
1195
- method: this.handleOutgoingRoapOffer.name,
1213
+ method: METHODS.HANDLE_OUTGOING_ROAP_OFFER,
1196
1214
  });
1197
1215
  }
1198
1216
  catch (err) {
1199
1217
  log.warn('Failed to process MediaOk request', {
1200
1218
  file: CALL_FILE,
1201
- method: this.handleOutgoingRoapOffer.name,
1219
+ method: METHODS.HANDLE_OUTGOING_ROAP_OFFER,
1202
1220
  });
1203
1221
  const errData = err;
1204
1222
  handleCallErrors(this.getEmitterCallback(errData), ERROR_LAYER.MEDIA, (interval) => {
@@ -1207,10 +1225,11 @@ export class Call extends Eventing {
1207
1225
  this.sendMediaStateMachineEvt({ type: 'E_SEND_ROAP_OFFER', data: event.data });
1208
1226
  }, interval * 1000);
1209
1227
  }
1210
- }, this.getCorrelationId(), errData, this.handleOutgoingRoapOffer.name, CALL_FILE);
1228
+ }, this.getCorrelationId(), errData, METHODS.HANDLE_OUTGOING_ROAP_OFFER, CALL_FILE);
1211
1229
  await uploadLogs({
1212
1230
  correlationId: this.correlationId,
1213
1231
  callId: this.callId,
1232
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
1214
1233
  });
1215
1234
  }
1216
1235
  }
@@ -1223,15 +1242,15 @@ export class Call extends Eventing {
1223
1242
  try {
1224
1243
  message.seq = this.seq;
1225
1244
  const res = await this.postMedia(message);
1226
- log.log(`handleOutgoingRoapAnswer: Response code: ${res.statusCode}`, {
1245
+ log.log(`Response code: ${res.statusCode}`, {
1227
1246
  file: CALL_FILE,
1228
- method: this.handleOutgoingRoapAnswer.name,
1247
+ method: METHODS.HANDLE_OUTGOING_ROAP_ANSWER,
1229
1248
  });
1230
1249
  }
1231
1250
  catch (err) {
1232
1251
  log.warn('Failed to send MediaAnswer request', {
1233
1252
  file: CALL_FILE,
1234
- method: this.handleOutgoingRoapAnswer.name,
1253
+ method: METHODS.HANDLE_OUTGOING_ROAP_ANSWER,
1235
1254
  });
1236
1255
  const errData = err;
1237
1256
  handleCallErrors(this.getEmitterCallback(errData), ERROR_LAYER.MEDIA, (interval) => {
@@ -1240,10 +1259,11 @@ export class Call extends Eventing {
1240
1259
  this.sendMediaStateMachineEvt({ type: 'E_SEND_ROAP_ANSWER', data: event.data });
1241
1260
  }, interval * 1000);
1242
1261
  }
1243
- }, this.getCorrelationId(), errData, this.handleOutgoingRoapAnswer.name, CALL_FILE);
1262
+ }, this.getCorrelationId(), errData, METHODS.HANDLE_OUTGOING_ROAP_ANSWER, CALL_FILE);
1244
1263
  await uploadLogs({
1245
1264
  correlationId: this.correlationId,
1246
1265
  callId: this.callId,
1266
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
1247
1267
  });
1248
1268
  }
1249
1269
  }
@@ -1257,25 +1277,25 @@ export class Call extends Eventing {
1257
1277
  if (!this.mediaConnection) {
1258
1278
  log.info('Media connection is not up, buffer the remote offer for later handling', {
1259
1279
  file: CALL_FILE,
1260
- method: this.handleIncomingRoapOffer.name,
1280
+ method: METHODS.HANDLE_INCOMING_ROAP_OFFER,
1261
1281
  });
1262
1282
  this.seq = message.seq;
1263
1283
  log.info(`Setting Sequence No: ${this.seq}`, {
1264
1284
  file: CALL_FILE,
1265
- method: this.handleIncomingRoapOffer.name,
1285
+ method: METHODS.HANDLE_INCOMING_ROAP_OFFER,
1266
1286
  });
1267
1287
  }
1268
1288
  else if (this.receivedRoapOKSeq === message.seq - 2) {
1269
1289
  log.info('Waiting for Roap OK, buffer the remote offer for later handling', {
1270
1290
  file: CALL_FILE,
1271
- method: this.handleIncomingRoapOffer.name,
1291
+ method: METHODS.HANDLE_INCOMING_ROAP_OFFER,
1272
1292
  });
1273
1293
  this.remoteRoapMessage = message;
1274
1294
  }
1275
1295
  else {
1276
1296
  log.info('Handling new offer...', {
1277
1297
  file: CALL_FILE,
1278
- method: this.handleIncomingRoapOffer.name,
1298
+ method: METHODS.HANDLE_INCOMING_ROAP_OFFER,
1279
1299
  });
1280
1300
  this.seq = message.seq;
1281
1301
  if (this.mediaConnection) {
@@ -1307,12 +1327,12 @@ export class Call extends Eventing {
1307
1327
  }
1308
1328
  catch (error) {
1309
1329
  const errorInfo = error;
1310
- const errorStatus = serviceErrorCodeHandler(errorInfo, loggerContext);
1311
- const errorLog = new Error(`Failed to upload webrtc telemetry statistics. ${errorStatus}`);
1312
- log.error(errorLog, loggerContext);
1330
+ const errorStatus = await serviceErrorCodeHandler(errorInfo, loggerContext);
1331
+ log.error(`Failed to upload webrtc telemetry statistics. ${JSON.stringify(errorStatus)}`, loggerContext);
1313
1332
  await uploadLogs({
1314
1333
  correlationId: this.correlationId,
1315
1334
  callId: this.callId,
1335
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
1316
1336
  });
1317
1337
  }
1318
1338
  };
@@ -1465,7 +1485,7 @@ export class Call extends Eventing {
1465
1485
  async patch(state) {
1466
1486
  log.info(`Send a PATCH for ${state} to Webex Calling`, {
1467
1487
  file: CALL_FILE,
1468
- method: this.patch.name,
1488
+ method: 'patch',
1469
1489
  });
1470
1490
  return this.webex.request({
1471
1491
  uri: `${this.mobiusUrl}${DEVICES_ENDPOINT_RESOURCE}/${this.deviceId}/${CALLS_ENDPOINT_RESOURCE}/${this.callId}`,
@@ -1528,7 +1548,7 @@ export class Call extends Eventing {
1528
1548
  default: {
1529
1549
  log.warn(`Unknown type for PUT request: ${type}`, {
1530
1550
  file: CALL_FILE,
1531
- method: this.postSSRequest.name,
1551
+ method: METHODS.POST_SS_REQUEST,
1532
1552
  });
1533
1553
  }
1534
1554
  }
@@ -1556,7 +1576,7 @@ export class Call extends Eventing {
1556
1576
  if (transferType === TransferType.BLIND && transferTarget) {
1557
1577
  log.info(`Initiating Blind transfer with : ${transferTarget}`, {
1558
1578
  file: CALL_FILE,
1559
- method: this.completeTransfer.name,
1579
+ method: METHODS.COMPLETE_TRANSFER,
1560
1580
  });
1561
1581
  const context = {
1562
1582
  transferorCallId: this.getCallId(),
@@ -1564,28 +1584,33 @@ export class Call extends Eventing {
1564
1584
  };
1565
1585
  try {
1566
1586
  await this.postSSRequest(context, SUPPLEMENTARY_SERVICES.TRANSFER);
1587
+ log.info(`Blind Transfer completed for correlationId ${this.getCorrelationId()}`, {
1588
+ file: CALL_FILE,
1589
+ method: METHODS.COMPLETE_TRANSFER,
1590
+ });
1567
1591
  this.metricManager.submitCallMetric(METRIC_EVENT.CALL, TRANSFER_ACTION.BLIND, METRIC_TYPE.BEHAVIORAL, this.getCallId(), this.getCorrelationId(), undefined);
1568
1592
  }
1569
1593
  catch (e) {
1570
1594
  log.warn(`Blind Transfer failed for correlationId ${this.getCorrelationId()}`, {
1571
1595
  file: CALL_FILE,
1572
- method: this.completeTransfer.name,
1596
+ method: METHODS.COMPLETE_TRANSFER,
1573
1597
  });
1574
1598
  const errData = e;
1575
1599
  handleCallErrors((error) => {
1576
1600
  this.emit(CALL_EVENT_KEYS.TRANSFER_ERROR, error);
1577
1601
  this.submitCallErrorMetric(error, TRANSFER_ACTION.BLIND);
1578
- }, ERROR_LAYER.CALL_CONTROL, (interval) => undefined, this.getCorrelationId(), errData, this.completeTransfer.name, CALL_FILE);
1602
+ }, ERROR_LAYER.CALL_CONTROL, (interval) => undefined, this.getCorrelationId(), errData, METHODS.COMPLETE_TRANSFER, CALL_FILE);
1579
1603
  await uploadLogs({
1580
1604
  correlationId: this.correlationId,
1581
1605
  callId: this.callId,
1606
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
1582
1607
  });
1583
1608
  }
1584
1609
  }
1585
1610
  else if (transferType === TransferType.CONSULT && transferCallId) {
1586
1611
  log.info(`Initiating Consult transfer between : ${this.callId} and ${transferCallId}`, {
1587
1612
  file: CALL_FILE,
1588
- method: this.completeTransfer.name,
1613
+ method: METHODS.COMPLETE_TRANSFER,
1589
1614
  });
1590
1615
  const context = {
1591
1616
  transferorCallId: this.getCallId(),
@@ -1593,28 +1618,33 @@ export class Call extends Eventing {
1593
1618
  };
1594
1619
  try {
1595
1620
  await this.postSSRequest(context, SUPPLEMENTARY_SERVICES.TRANSFER);
1621
+ log.info(`Consult Transfer completed for correlationId ${this.getCorrelationId()}`, {
1622
+ file: CALL_FILE,
1623
+ method: METHODS.COMPLETE_TRANSFER,
1624
+ });
1596
1625
  this.metricManager.submitCallMetric(METRIC_EVENT.CALL, TRANSFER_ACTION.CONSULT, METRIC_TYPE.BEHAVIORAL, this.getCallId(), this.getCorrelationId(), undefined);
1597
1626
  }
1598
1627
  catch (e) {
1599
1628
  log.warn(`Consult Transfer failed for correlationId ${this.getCorrelationId()}`, {
1600
1629
  file: CALL_FILE,
1601
- method: this.completeTransfer.name,
1630
+ method: METHODS.COMPLETE_TRANSFER,
1602
1631
  });
1603
1632
  const errData = e;
1604
1633
  handleCallErrors((error) => {
1605
1634
  this.emit(CALL_EVENT_KEYS.TRANSFER_ERROR, error);
1606
1635
  this.submitCallErrorMetric(error, TRANSFER_ACTION.CONSULT);
1607
- }, ERROR_LAYER.CALL_CONTROL, (interval) => undefined, this.getCorrelationId(), errData, this.completeTransfer.name, CALL_FILE);
1636
+ }, ERROR_LAYER.CALL_CONTROL, (interval) => undefined, this.getCorrelationId(), errData, METHODS.COMPLETE_TRANSFER, CALL_FILE);
1608
1637
  await uploadLogs({
1609
1638
  correlationId: this.correlationId,
1610
1639
  callId: this.callId,
1640
+ broadworksCorrelationInfo: this.broadworksCorrelationInfo,
1611
1641
  });
1612
1642
  }
1613
1643
  }
1614
1644
  else {
1615
1645
  log.warn(`Invalid information received, transfer failed for correlationId: ${this.getCorrelationId()}`, {
1616
1646
  file: CALL_FILE,
1617
- method: this.completeTransfer.name,
1647
+ method: METHODS.COMPLETE_TRANSFER,
1618
1648
  });
1619
1649
  }
1620
1650
  }
@@ -1677,13 +1707,13 @@ export class Call extends Eventing {
1677
1707
  case RoapScenario.OFFER: {
1678
1708
  log.info(`before modifying sdp: ${event.roapMessage.sdp}`, {
1679
1709
  file: CALL_FILE,
1680
- method: this.mediaRoapEventsListener.name,
1710
+ method: METHODS.MEDIA_ROAP_EVENTS_LISTENER,
1681
1711
  });
1682
1712
  event.roapMessage.sdp = modifySdpForIPv4(event.roapMessage.sdp);
1683
1713
  const sdpVideoPortZero = event.roapMessage.sdp.replace(/^m=(video) (?:\d+) /gim, 'm=$1 0 ');
1684
1714
  log.info(`after modification sdp: ${sdpVideoPortZero}`, {
1685
1715
  file: CALL_FILE,
1686
- method: this.mediaRoapEventsListener.name,
1716
+ method: METHODS.MEDIA_ROAP_EVENTS_LISTENER,
1687
1717
  });
1688
1718
  event.roapMessage.sdp = sdpVideoPortZero;
1689
1719
  this.localRoapMessage = event.roapMessage;
@@ -45,7 +45,7 @@ export const DUMMY_MOBIUS_URL = 'https://mobius.aintgen-a-1.int.infra.webex.com/
45
45
  export const IP_ENDPOINT = 'myip';
46
46
  export const INITIAL_SEQ_NUMBER = 1;
47
47
  export const MEDIA_ENDPOINT_RESOURCE = 'media';
48
- export const NETWORK_FLAP_TIMEOUT = 2000;
48
+ export const NETWORK_FLAP_TIMEOUT = 5000;
49
49
  export const CALL_HOLD_SERVICE = 'callhold';
50
50
  export const CALL_TRANSFER_SERVICE = 'calltransfer';
51
51
  export const HOLD_ENDPOINT = 'hold';
@@ -61,7 +61,7 @@ export const WEB_AGENT = '(web)';
61
61
  export const WEBEX = 'webex';
62
62
  export const WEBEX_WEB_CLIENT = 'webex-web-client';
63
63
  export const CALLER_ID_FILE = 'CallerId';
64
- export const UTILS_FILE = 'utils';
64
+ export const UTILS_FILE = 'src/common/Utils.ts';
65
65
  export const CALLING_CLIENT_FILE = 'CallingClient';
66
66
  export const LINE_FILE = 'line';
67
67
  export const CALL_FILE = 'call';
@@ -115,7 +115,6 @@ export const KEEPALIVE_UTIL = 'startKeepaliveTimer';
115
115
  export const FAILBACK_UTIL = 'executeFailback';
116
116
  export const REG_429_RETRY_UTIL = 'handle429Retry';
117
117
  export const FAILOVER_UTIL = 'startFailoverTimer';
118
- export const NETWORK_CHANGE_DETECTION_UTIL = 'detectNetworkChange';
119
118
  export const CALLS_CLEARED_HANDLER_UTIL = 'callsClearedHandler';
120
119
  export const RECONNECT_UTIL = 'reconnectOnFailure';
121
120
  export const NOISE_REDUCTION_EFFECT = 'noise-reduction-effect';
@@ -148,6 +147,7 @@ export const METHODS = {
148
147
  HANDLE_OUTGOING_ROAP_ANSWER: 'handleOutgoingRoapAnswer',
149
148
  HANDLE_INCOMING_ROAP_OFFER: 'handleIncomingRoapOffer',
150
149
  HANDLE_INCOMING_ROAP_ANSWER: 'handleIncomingRoapAnswer',
150
+ INIT: 'init',
151
151
  FORCE_SEND_STATS_REPORT: 'forceSendStatsReport',
152
152
  UPDATE_ACTIVE_MOBIUS: 'updateActiveMobius',
153
153
  DEQUEUE_WS_EVENTS: 'dequeueWsEvents',
@@ -199,6 +199,7 @@ export const METHODS = {
199
199
  GET_CALL_RTP_STATS: 'getCallRtpStats',
200
200
  REGISTER: 'register',
201
201
  DEREGISTER: 'deregister',
202
+ DELETE_REGISTRATION: 'deleteRegistration',
202
203
  NORMALIZE_LINE: 'normalizeLine',
203
204
  LINE_EMITTER: 'lineEmitter',
204
205
  GET_LOGGING_LEVEL: 'getLoggingLevel',
@@ -210,7 +211,10 @@ export const METHODS = {
210
211
  SET_MOBIUS_SERVERS: 'setMobiusServers',
211
212
  HANDLE_CONNECTION_RESTORATION: 'handleConnectionRestoration',
212
213
  RECONNECT_ON_FAILURE: 'reconnectOnFailure',
213
- DETECT_NETWORK_CHANGE: 'detectNetworkChange',
214
+ MERCURY_OFFLINE: 'handleMercuryOffline',
215
+ MERCURY_ONLINE: 'handleMercuryOnline',
216
+ NETWORK_OFFLINE: 'handleNetworkOffline',
217
+ NETWORK_ONLINE: 'handleNetworkOnline',
214
218
  GET_CLIENT_REGION_INFO: 'getClientRegionInfo',
215
219
  GET_MOBIUS_SERVERS: 'getMobiusServers',
216
220
  REGISTER_CALLS_CLEARED_LISTENER: 'registerCallsClearedListener',
@@ -69,9 +69,6 @@ export default class Line extends Eventing {
69
69
  this.registration.setMobiusServers(this.#primaryMobiusUris, this.#backupMobiusUris);
70
70
  await this.registration.triggerRegistration();
71
71
  });
72
- if (this.mobiusDeviceId) {
73
- this.callManager.updateLine(this.mobiusDeviceId, this);
74
- }
75
72
  }
76
73
  async deregister() {
77
74
  log.info(METHOD_START_MESSAGE, {
@@ -93,6 +90,9 @@ export default class Line extends Eventing {
93
90
  this.rehomingIntervalMax = rehomingIntervalMax;
94
91
  this.voicePortalNumber = voicePortalNumber;
95
92
  this.voicePortalExtension = voicePortalExtension;
93
+ if (this.mobiusDeviceId) {
94
+ this.callManager.updateLine(this.mobiusDeviceId, this);
95
+ }
96
96
  }
97
97
  lineEmitter = (event, deviceInfo, lineError) => {
98
98
  log.info(METHOD_START_MESSAGE, {