@webex/calling 3.8.0-next.32 → 3.8.0-next.33

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 (139) hide show
  1. package/dist/CallHistory/CallHistory.js +100 -63
  2. package/dist/CallHistory/CallHistory.js.map +1 -1
  3. package/dist/CallHistory/CallHistory.test.js +115 -19
  4. package/dist/CallHistory/CallHistory.test.js.map +1 -1
  5. package/dist/CallHistory/constants.js +9 -1
  6. package/dist/CallHistory/constants.js.map +1 -1
  7. package/dist/CallSettings/CallSettings.js +46 -13
  8. package/dist/CallSettings/CallSettings.js.map +1 -1
  9. package/dist/CallSettings/UcmBackendConnector.js +62 -18
  10. package/dist/CallSettings/UcmBackendConnector.js.map +1 -1
  11. package/dist/CallSettings/UcmBackendConnector.test.js +70 -7
  12. package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -1
  13. package/dist/CallSettings/WxCallBackendConnector.js +153 -103
  14. package/dist/CallSettings/WxCallBackendConnector.js.map +1 -1
  15. package/dist/CallSettings/WxCallBackendConnector.test.js +52 -15
  16. package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -1
  17. package/dist/CallSettings/constants.js +15 -1
  18. package/dist/CallSettings/constants.js.map +1 -1
  19. package/dist/CallingClient/CallingClient.js +148 -107
  20. package/dist/CallingClient/CallingClient.js.map +1 -1
  21. package/dist/CallingClient/CallingClient.test.js +53 -24
  22. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  23. package/dist/CallingClient/calling/call.js +251 -189
  24. package/dist/CallingClient/calling/call.js.map +1 -1
  25. package/dist/CallingClient/calling/call.test.js +96 -41
  26. package/dist/CallingClient/calling/call.test.js.map +1 -1
  27. package/dist/CallingClient/calling/callManager.js +73 -48
  28. package/dist/CallingClient/calling/callManager.js.map +1 -1
  29. package/dist/CallingClient/calling/callManager.test.js +96 -37
  30. package/dist/CallingClient/calling/callManager.test.js.map +1 -1
  31. package/dist/CallingClient/constants.js +101 -1
  32. package/dist/CallingClient/constants.js.map +1 -1
  33. package/dist/CallingClient/line/index.js +47 -18
  34. package/dist/CallingClient/line/index.js.map +1 -1
  35. package/dist/CallingClient/registration/register.js +151 -115
  36. package/dist/CallingClient/registration/register.js.map +1 -1
  37. package/dist/CallingClient/registration/register.test.js +43 -21
  38. package/dist/CallingClient/registration/register.test.js.map +1 -1
  39. package/dist/Contacts/ContactsClient.js +156 -102
  40. package/dist/Contacts/ContactsClient.js.map +1 -1
  41. package/dist/Contacts/ContactsClient.test.js +197 -49
  42. package/dist/Contacts/ContactsClient.test.js.map +1 -1
  43. package/dist/Contacts/constants.js +11 -1
  44. package/dist/Contacts/constants.js.map +1 -1
  45. package/dist/Events/impl/index.js +1 -1
  46. package/dist/Events/impl/index.js.map +1 -1
  47. package/dist/Metrics/index.js +93 -39
  48. package/dist/Metrics/index.js.map +1 -1
  49. package/dist/Metrics/types.js +4 -1
  50. package/dist/Metrics/types.js.map +1 -1
  51. package/dist/SDKConnector/types.js.map +1 -1
  52. package/dist/Voicemail/BroadworksBackendConnector.js +154 -91
  53. package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -1
  54. package/dist/Voicemail/BroadworksBackendConnector.test.js +99 -19
  55. package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -1
  56. package/dist/Voicemail/UcmBackendConnector.js +105 -54
  57. package/dist/Voicemail/UcmBackendConnector.js.map +1 -1
  58. package/dist/Voicemail/UcmBackendConnector.test.js +127 -17
  59. package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -1
  60. package/dist/Voicemail/Voicemail.js +198 -79
  61. package/dist/Voicemail/Voicemail.js.map +1 -1
  62. package/dist/Voicemail/Voicemail.test.js +188 -23
  63. package/dist/Voicemail/Voicemail.test.js.map +1 -1
  64. package/dist/Voicemail/WxCallBackendConnector.js +123 -76
  65. package/dist/Voicemail/WxCallBackendConnector.js.map +1 -1
  66. package/dist/Voicemail/WxCallBackendConnector.test.js +69 -6
  67. package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -1
  68. package/dist/Voicemail/constants.js +25 -1
  69. package/dist/Voicemail/constants.js.map +1 -1
  70. package/dist/common/Utils.js +113 -64
  71. package/dist/common/Utils.js.map +1 -1
  72. package/dist/common/Utils.test.js +154 -21
  73. package/dist/common/Utils.test.js.map +1 -1
  74. package/dist/common/constants.js +2 -1
  75. package/dist/common/constants.js.map +1 -1
  76. package/dist/common/types.js.map +1 -1
  77. package/dist/module/CallHistory/CallHistory.js +32 -13
  78. package/dist/module/CallHistory/constants.js +6 -0
  79. package/dist/module/CallSettings/CallSettings.js +36 -3
  80. package/dist/module/CallSettings/UcmBackendConnector.js +50 -5
  81. package/dist/module/CallSettings/WxCallBackendConnector.js +54 -18
  82. package/dist/module/CallSettings/constants.js +12 -0
  83. package/dist/module/CallingClient/CallingClient.js +52 -14
  84. package/dist/module/CallingClient/calling/call.js +172 -121
  85. package/dist/module/CallingClient/calling/callManager.js +51 -26
  86. package/dist/module/CallingClient/constants.js +98 -0
  87. package/dist/module/CallingClient/line/index.js +37 -8
  88. package/dist/module/CallingClient/registration/register.js +37 -11
  89. package/dist/module/Contacts/ContactsClient.js +65 -21
  90. package/dist/module/Contacts/constants.js +10 -0
  91. package/dist/module/Events/impl/index.js +1 -1
  92. package/dist/module/Metrics/index.js +49 -1
  93. package/dist/module/Metrics/types.js +3 -0
  94. package/dist/module/Voicemail/BroadworksBackendConnector.js +66 -17
  95. package/dist/module/Voicemail/UcmBackendConnector.js +51 -11
  96. package/dist/module/Voicemail/Voicemail.js +109 -9
  97. package/dist/module/Voicemail/WxCallBackendConnector.js +50 -17
  98. package/dist/module/Voicemail/constants.js +21 -0
  99. package/dist/module/common/Utils.js +26 -4
  100. package/dist/module/common/constants.js +1 -0
  101. package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
  102. package/dist/types/CallHistory/constants.d.ts +6 -0
  103. package/dist/types/CallHistory/constants.d.ts.map +1 -1
  104. package/dist/types/CallSettings/CallSettings.d.ts.map +1 -1
  105. package/dist/types/CallSettings/UcmBackendConnector.d.ts.map +1 -1
  106. package/dist/types/CallSettings/WxCallBackendConnector.d.ts.map +1 -1
  107. package/dist/types/CallSettings/constants.d.ts +12 -0
  108. package/dist/types/CallSettings/constants.d.ts.map +1 -1
  109. package/dist/types/CallingClient/CallingClient.d.ts +2 -3
  110. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  111. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  112. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  113. package/dist/types/CallingClient/constants.d.ts +98 -0
  114. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  115. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  116. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  117. package/dist/types/Contacts/ContactsClient.d.ts.map +1 -1
  118. package/dist/types/Contacts/constants.d.ts +10 -0
  119. package/dist/types/Contacts/constants.d.ts.map +1 -1
  120. package/dist/types/Metrics/index.d.ts +1 -1
  121. package/dist/types/Metrics/index.d.ts.map +1 -1
  122. package/dist/types/Metrics/types.d.ts +5 -1
  123. package/dist/types/Metrics/types.d.ts.map +1 -1
  124. package/dist/types/SDKConnector/types.d.ts +8 -2
  125. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  126. package/dist/types/Voicemail/BroadworksBackendConnector.d.ts.map +1 -1
  127. package/dist/types/Voicemail/UcmBackendConnector.d.ts.map +1 -1
  128. package/dist/types/Voicemail/Voicemail.d.ts +1 -1
  129. package/dist/types/Voicemail/Voicemail.d.ts.map +1 -1
  130. package/dist/types/Voicemail/WxCallBackendConnector.d.ts.map +1 -1
  131. package/dist/types/Voicemail/constants.d.ts +21 -0
  132. package/dist/types/Voicemail/constants.d.ts.map +1 -1
  133. package/dist/types/common/Utils.d.ts +2 -2
  134. package/dist/types/common/Utils.d.ts.map +1 -1
  135. package/dist/types/common/constants.d.ts +1 -0
  136. package/dist/types/common/constants.d.ts.map +1 -1
  137. package/dist/types/common/types.d.ts +12 -0
  138. package/dist/types/common/types.d.ts.map +1 -1
  139. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["_uuid","require","_common","_types","_Metrics","_calling","_Logger","_interopRequireDefault","_SDKConnector","_types2","_constants","_types3","_createForOfIteratorHelper","o","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","_Array$from","test","arr","len","arr2","Array","ownKeys","r","t","_Object$keys2","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","Registration","exports","webex","serviceData","mutex","lineEmitter","logLevel","jwe","_classCallCheck2","sdkConnector","SDKConnector","isCCFlow","indicator","ServiceIndicator","CONTACT_CENTER","getWebex","setWebex","userId","internal","device","registrationStatus","RegistrationStatus","IDLE","failback429RetryAttempts","log","setLogger","REGISTRATION_FILE","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","callManager","getCallManager","metricManager","getMetricManager","primaryMobiusUris","backupMobiusUris","_createClass2","key","getActiveMobiusUrl","activeMobiusUrl","setActiveMobiusUrl","url","info","concat","method","file","updateActiveMobius","setMobiusServers","_postKeepAlive","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","abrupt","request","uri","HTTP_METHODS","POST","headers","CISCO_DEVICE_URL","SPARK_USER_AGENT","CALLING_USER_AGENT","service","ALLOWED_SERVICES","MOBIUS","stop","postKeepAlive","_x","_deleteRegistration","_callee2","deviceId","deviceUrl","_response","response","_callee2$","_context2","t0","fetch","t1","DEVICES_ENDPOINT_RESOURCE","t2","DELETE","t3","t4","t5","t6","credentials","getUserToken","t7","sent","t8","t9","WEBEX_WEB_CLIENT","uuid","t10","t11","t12","t13","t14","t15","warn","setStatus","INACTIVE","LINE_EVENTS","UNREGISTERED","json","deleteRegistration","_x2","_x3","_x4","_postRegistration","_callee3","deviceInfo","_callee3$","_context3","clientDeviceUri","body","postRegistration","_x5","_restorePreviousRegistration","_callee4","caller","abort","_callee4$","_context4","attemptRegistrationWithServers","restorePreviousRegistration","_x6","_handle429Retry","_callee5","retryAfter","interval","_callee5$","_context5","FAILBACK_UTIL","REG_FAILBACK_429_MAX_RETRIES","clearFailbackTimer","REG_429_RETRY_UTIL","getRegRetryInterval","startFailbackTimer","scheduled429Retry","isDeviceRegistered","restartRegistration","handle429Retry","_x7","_x8","attempt","undefined","BASE_REG_RETRY_TIMER_VAL_IN_SEC","Math","pow","BASE_REG_TIMER_MFACTOR","floor","random","REG_RANDOM_T_FACTOR_UPPER_LIMIT","SEC_TO_MSEC_MFACTOR","_startFailoverTimer","_callee10","_this","timeElapsed","loggerContext","TIMER_THRESHOLD","excessVal","scheduledTime","_args10","_callee10$","_context10","FAILOVER_UTIL","REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC","REG_TRY_BACKUP_TIMER_VAL_IN_SEC","failoverImmediately","_now","max","setTimeout","_callee7","_callee7$","_context7","runExclusive","_callee6","currentTime","_callee6$","_context6","startFailoverTimer","RETRY_TIMER_UPPER_LIMIT","_callee9","_callee9$","_context9","_callee8","_callee8$","_context8","emitFinalFailure","clientError","ERROR","failbackTimer","clearTimeout","isFailbackRequired","indexOf","getFailbackInterval","initiateFailback","intervalInMinutes","MINUTES_TO_SEC_MFACTOR","intervalInSeconds","_this2","_callee11","_callee11$","_context11","executeFailback","_executeFailback","_callee13","_this3","_callee13$","_context13","_callee12","abortNew","_callee12$","_context12","_keys","getActiveCalls","deregister","setIntervalValues","getDeviceInfo","ACTIVE","getStatus","_restartRegistration","_callee14","_callee14$","_context14","_x9","_handleConnectionRestoration","_callee16","retry","_this4","_callee16$","_context16","_callee15","_callee15$","_context15","handleConnectionRestoration","clearKeepaliveTimer","_x10","restoreRegistrationCallBack","_this5","_ref8","_callee17","restoreData","logContext","restore","finalError","_callee17$","_context17","isRegRetry","getExistingDevice","setRegRetry","_x11","_x12","_triggerRegistration","_callee18","_callee18$","_context18","triggerRegistration","_attemptRegistrationWithServers","_callee19","_this6","servers","_iterator","_step","_this$deviceInfo$devi","resp","_args19","_callee19$","_context19","REGISTER_UTIL","CONNECTING","REGISTERED","setDeviceInfo","submitRegistrationMetric","METRIC_EVENT","REGISTRATION","REG_ACTION","REGISTER","METRIC_TYPE","BEHAVIORAL","startKeepaliveTimer","keepaliveInterval","handleRegistrationErrors","REGISTRATION_ERROR","retryCaller","finish","_x13","_this7","keepAliveRetryCount","RETRY_COUNT_THRESHOLD","keepaliveTimer","setInterval","_callee21","_callee21$","_context21","_callee20","res","error","_callee20$","_context20","statusCode","RECONNECTED","KEEPALIVE_FAILURE","reconnectOnFailure","RECONNECTING","clearInterval","isReconnectPending","reconnectPending","_deregister","_callee22","_this$deviceInfo$devi2","_this$deviceInfo$devi3","_callee22$","_context22","registerRetry","devices","DEFAULT_KEEPALIVE_INTERVAL","stringToReplace","replace","_reconnectOnFailure","_callee23","_callee23$","_context23","_x14","createRegistration"],"sources":["register.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport {Mutex} from 'async-mutex';\nimport {emitFinalFailure, handleRegistrationErrors} from '../../common';\n\nimport {IMetricManager, METRIC_EVENT, METRIC_TYPE, REG_ACTION} from '../../Metrics/types';\nimport {getMetricManager} from '../../Metrics';\nimport {ICallManager} from '../calling/types';\nimport {getCallManager} from '../calling';\nimport {LOGGER} from '../../Logger/types';\nimport log from '../../Logger';\nimport {IRegistration} from './types';\nimport SDKConnector from '../../SDKConnector';\nimport {\n ALLOWED_SERVICES,\n HTTP_METHODS,\n IDeviceInfo,\n RegistrationStatus,\n ServiceData,\n ServiceIndicator,\n WebexRequestPayload,\n} from '../../common/types';\nimport {ISDKConnector, WebexSDK} from '../../SDKConnector/types';\nimport {\n CALLING_USER_AGENT,\n CISCO_DEVICE_URL,\n DEVICES_ENDPOINT_RESOURCE,\n SPARK_USER_AGENT,\n WEBEX_WEB_CLIENT,\n BASE_REG_RETRY_TIMER_VAL_IN_SEC,\n BASE_REG_TIMER_MFACTOR,\n SEC_TO_MSEC_MFACTOR,\n REG_RANDOM_T_FACTOR_UPPER_LIMIT,\n REG_TRY_BACKUP_TIMER_VAL_IN_SEC,\n MINUTES_TO_SEC_MFACTOR,\n REG_429_RETRY_UTIL,\n REG_FAILBACK_429_MAX_RETRIES,\n FAILBACK_UTIL,\n REGISTRATION_FILE,\n DEFAULT_REHOMING_INTERVAL_MIN,\n DEFAULT_REHOMING_INTERVAL_MAX,\n DEFAULT_KEEPALIVE_INTERVAL,\n REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC,\n FAILOVER_UTIL,\n REGISTER_UTIL,\n RETRY_TIMER_UPPER_LIMIT,\n} from '../constants';\nimport {LINE_EVENTS, LineEmitterCallback} from '../line/types';\nimport {LineError} from '../../Errors/catalog/LineError';\n\n/**\n *\n */\nexport class Registration implements IRegistration {\n private sdkConnector: ISDKConnector;\n\n private webex: WebexSDK;\n\n private userId = '';\n\n private serviceData: ServiceData;\n\n private failback429RetryAttempts: number;\n private registrationStatus: RegistrationStatus;\n private failbackTimer?: NodeJS.Timer;\n private activeMobiusUrl!: string;\n\n private keepaliveTimer: NodeJS.Timer | undefined;\n private rehomingIntervalMin: number;\n\n private rehomingIntervalMax: number;\n private mutex: Mutex;\n private metricManager: IMetricManager;\n private lineEmitter: LineEmitterCallback;\n private callManager: ICallManager;\n private deviceInfo: IDeviceInfo = {};\n private primaryMobiusUris: string[];\n private backupMobiusUris: string[];\n private registerRetry = false;\n private reconnectPending = false;\n private jwe?: string;\n private isCCFlow = false;\n private failoverImmediately = false;\n private retryAfter: number | undefined;\n private scheduled429Retry = false;\n\n /**\n */\n constructor(\n webex: WebexSDK,\n serviceData: ServiceData,\n mutex: Mutex,\n lineEmitter: LineEmitterCallback,\n logLevel: LOGGER,\n jwe?: string\n ) {\n this.jwe = jwe;\n this.sdkConnector = SDKConnector;\n this.serviceData = serviceData;\n this.isCCFlow = serviceData.indicator === ServiceIndicator.CONTACT_CENTER;\n\n if (!this.sdkConnector.getWebex()) {\n SDKConnector.setWebex(webex);\n }\n this.webex = this.sdkConnector.getWebex();\n this.userId = this.webex.internal.device.userId;\n this.registrationStatus = RegistrationStatus.IDLE;\n this.failback429RetryAttempts = 0;\n log.setLogger(logLevel, REGISTRATION_FILE);\n this.rehomingIntervalMin = DEFAULT_REHOMING_INTERVAL_MIN;\n this.rehomingIntervalMax = DEFAULT_REHOMING_INTERVAL_MAX;\n this.mutex = mutex;\n this.callManager = getCallManager(this.webex, serviceData.indicator);\n this.metricManager = getMetricManager(this.webex, serviceData.indicator);\n this.lineEmitter = lineEmitter;\n\n this.primaryMobiusUris = [];\n this.backupMobiusUris = [];\n }\n\n public getActiveMobiusUrl(): string {\n return this.activeMobiusUrl;\n }\n\n public setActiveMobiusUrl(url: string) {\n log.info(`ActiveMobiusUrl: ${url}`, {method: 'setActiveMobiusUrl', file: REGISTRATION_FILE});\n this.activeMobiusUrl = url;\n this.callManager.updateActiveMobius(url);\n }\n\n public setMobiusServers(primaryMobiusUris: string[], backupMobiusUris: string[]) {\n this.primaryMobiusUris = primaryMobiusUris;\n this.backupMobiusUris = backupMobiusUris;\n }\n\n /**\n * Implementation of sending keepalive.\n *\n */\n private async postKeepAlive(url: string) {\n return <WebexRequestPayload>this.webex.request({\n uri: `${url}/status`,\n method: HTTP_METHODS.POST,\n headers: {\n [CISCO_DEVICE_URL]: this.webex.internal.device.url,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n service: ALLOWED_SERVICES.MOBIUS,\n });\n }\n\n /**\n * Implementation of delete device.\n *\n */\n private async deleteRegistration(url: string, deviceId: string, deviceUrl: string) {\n let response;\n try {\n response = await fetch(`${url}${DEVICES_ENDPOINT_RESOURCE}/${deviceId}`, {\n method: HTTP_METHODS.DELETE,\n headers: {\n [CISCO_DEVICE_URL]: deviceUrl,\n Authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${WEBEX_WEB_CLIENT}_${uuid()}`,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n });\n } catch (error) {\n log.warn(`Delete failed with Mobius`, {});\n }\n\n this.setStatus(RegistrationStatus.INACTIVE);\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n\n return <WebexRequestPayload>response?.json();\n }\n\n /**\n * Implementation of POST request for device registration.\n *\n */\n private async postRegistration(url: string) {\n const deviceInfo = {\n userId: this.userId,\n clientDeviceUri: this.webex.internal.device.url,\n serviceData: this.jwe ? {...this.serviceData, jwe: this.jwe} : this.serviceData,\n };\n\n return <WebexRequestPayload>this.webex.request({\n uri: `${url}device`,\n method: HTTP_METHODS.POST,\n headers: {\n [CISCO_DEVICE_URL]: deviceInfo.clientDeviceUri,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n body: deviceInfo,\n service: ALLOWED_SERVICES.MOBIUS,\n });\n }\n\n /**\n * Re-attempts registration with the mobius url it was last registered\n * to, that mobius url is expected to be updated already in this.activeMobiusUrl.\n */\n private async restorePreviousRegistration(caller: string): Promise<boolean> {\n let abort = false;\n\n if (this.activeMobiusUrl) {\n abort = await this.attemptRegistrationWithServers(caller, [this.activeMobiusUrl]);\n }\n\n return abort;\n }\n\n /**\n *\n */\n private async handle429Retry(retryAfter: number, caller: string): Promise<void> {\n if (caller === FAILBACK_UTIL) {\n if (this.failback429RetryAttempts >= REG_FAILBACK_429_MAX_RETRIES) {\n return;\n }\n\n this.clearFailbackTimer();\n this.failback429RetryAttempts += 1;\n log.log(`Received 429 while rehoming, 429 retry count : ${this.failback429RetryAttempts}`, {\n file: REGISTRATION_FILE,\n method: REG_429_RETRY_UTIL,\n });\n const interval = this.getRegRetryInterval(this.failback429RetryAttempts);\n\n this.startFailbackTimer(interval);\n this.scheduled429Retry = true;\n const abort = await this.restorePreviousRegistration(REG_429_RETRY_UTIL);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(REG_429_RETRY_UTIL);\n }\n } else {\n this.retryAfter = retryAfter;\n }\n }\n\n /**\n * Calculates and returns a random interval value using input argument\n * attempt as the variable factor.\n *\n * attempted already.\n */\n private getRegRetryInterval(attempt = 1): number {\n return (\n BASE_REG_RETRY_TIMER_VAL_IN_SEC +\n BASE_REG_TIMER_MFACTOR ** attempt +\n Math.floor(\n (Math.random() * (REG_RANDOM_T_FACTOR_UPPER_LIMIT - SEC_TO_MSEC_MFACTOR + 1) +\n SEC_TO_MSEC_MFACTOR) /\n SEC_TO_MSEC_MFACTOR\n )\n );\n }\n\n /**\n * Schedules registration retry with primary mobius servers at a random\n * interval calculated based on the number of times registration retry is already done\n * Once the time taken since the beginning of retry attempt exceeds the\n * retry threshold, it switches over to backup mobius servers.\n *\n */\n private async startFailoverTimer(attempt = 1, timeElapsed = 0) {\n const loggerContext = {\n file: REGISTRATION_FILE,\n method: FAILOVER_UTIL,\n };\n\n let interval = this.getRegRetryInterval(attempt);\n\n const TIMER_THRESHOLD = this.isCCFlow\n ? REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC\n : REG_TRY_BACKUP_TIMER_VAL_IN_SEC;\n\n if (timeElapsed + interval > TIMER_THRESHOLD) {\n const excessVal = timeElapsed + interval - TIMER_THRESHOLD;\n\n interval -= excessVal;\n }\n\n if (this.retryAfter != null && interval < this.retryAfter) {\n this.failoverImmediately = this.retryAfter + timeElapsed > TIMER_THRESHOLD;\n }\n\n let abort;\n if (interval > BASE_REG_RETRY_TIMER_VAL_IN_SEC && !this.failoverImmediately) {\n const scheduledTime = Math.floor(Date.now() / 1000);\n\n if (this.retryAfter != null) {\n interval = Math.max(interval, this.retryAfter);\n }\n\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(FAILOVER_UTIL);\n const currentTime = Math.floor(Date.now() / 1000);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.startFailoverTimer(attempt + 1, timeElapsed + (currentTime - scheduledTime));\n }\n });\n }, interval * SEC_TO_MSEC_MFACTOR);\n log.log(\n `Scheduled retry with primary in ${interval} seconds, number of attempts : ${attempt}`,\n loggerContext\n );\n } else if (this.backupMobiusUris.length) {\n log.log('Failing over to backup servers.', loggerContext);\n this.failoverImmediately = false;\n abort = await this.attemptRegistrationWithServers(FAILOVER_UTIL, this.backupMobiusUris);\n if (!abort && !this.isDeviceRegistered()) {\n interval = this.getRegRetryInterval();\n\n if (this.retryAfter != null && this.retryAfter < RETRY_TIMER_UPPER_LIMIT) {\n interval = interval < this.retryAfter ? this.retryAfter : interval;\n }\n\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(FAILOVER_UTIL, this.backupMobiusUris);\n if (!abort && !this.isDeviceRegistered()) {\n emitFinalFailure((clientError: LineError) => {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }, loggerContext);\n }\n });\n }, interval * SEC_TO_MSEC_MFACTOR);\n log.log(`Scheduled retry with backup servers in ${interval} seconds.`, loggerContext);\n }\n } else {\n emitFinalFailure((clientError: LineError) => {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }, loggerContext);\n }\n }\n\n /**\n * Clears the failback timer if running.\n */\n private clearFailbackTimer() {\n if (this.failbackTimer) {\n clearTimeout(this.failbackTimer);\n this.failbackTimer = undefined;\n }\n }\n\n /**\n * Returns true if device is registered with a backup mobius.\n */\n private isFailbackRequired(): boolean {\n return this.isDeviceRegistered() && this.primaryMobiusUris.indexOf(this.activeMobiusUrl) === -1;\n }\n\n /**\n * Calculates and returns a random value between rehomingIntervalMin and\n * rehomingIntervalMax.\n */\n private getFailbackInterval(): number {\n return Math.floor(\n Math.random() * (this.rehomingIntervalMax - this.rehomingIntervalMin + 1) +\n this.rehomingIntervalMin\n );\n }\n\n /**\n * Starts failback timer to move to primary mobius if device\n * is registered with a backup mobius.\n */\n private initiateFailback() {\n if (this.isFailbackRequired()) {\n if (!this.failbackTimer) {\n this.failback429RetryAttempts = 0;\n const intervalInMinutes = this.getFailbackInterval();\n\n this.startFailbackTimer(intervalInMinutes * MINUTES_TO_SEC_MFACTOR);\n }\n } else {\n this.failback429RetryAttempts = 0;\n this.clearFailbackTimer();\n }\n }\n\n /**\n * Starts failback timer with the interval value received.\n *\n */\n private startFailbackTimer(intervalInSeconds: number) {\n this.failbackTimer = setTimeout(\n async () => this.executeFailback(),\n intervalInSeconds * SEC_TO_MSEC_MFACTOR\n );\n log.log(`Failback scheduled after ${intervalInSeconds} seconds.`, {\n file: REGISTRATION_FILE,\n method: this.startFailbackTimer.name,\n });\n }\n\n /**\n * Core logic for the failback processing, scheduled and executed\n * at failback timer expiry.\n */\n private async executeFailback() {\n await this.mutex.runExclusive(async () => {\n if (this.isFailbackRequired()) {\n if (Object.keys(this.callManager.getActiveCalls()).length === 0) {\n log.info(`Attempting failback to primary.`, {\n file: REGISTRATION_FILE,\n method: this.executeFailback.name,\n });\n await this.deregister();\n const abort = await this.attemptRegistrationWithServers(FAILBACK_UTIL);\n\n if (this.scheduled429Retry || abort || this.isDeviceRegistered()) {\n return;\n }\n\n const abortNew = await this.restorePreviousRegistration(FAILBACK_UTIL);\n\n if (abortNew) {\n this.clearFailbackTimer();\n\n return;\n }\n\n if (!this.isDeviceRegistered()) {\n await this.restartRegistration(this.executeFailback.name);\n } else {\n this.failbackTimer = undefined;\n this.initiateFailback();\n }\n } else {\n log.info('Active calls present, deferring failback to next cycle.', {\n file: REGISTRATION_FILE,\n method: this.executeFailback.name,\n });\n this.failbackTimer = undefined;\n this.initiateFailback();\n }\n }\n });\n }\n\n /**\n * Updates rehomingIntervalMin and rehomingIntervalMax values\n * if received in registration response from a primary mobius\n * server.\n *\n */\n private setIntervalValues(deviceInfo: IDeviceInfo) {\n if (this.primaryMobiusUris.indexOf(this.activeMobiusUrl) !== -1) {\n this.rehomingIntervalMin = deviceInfo?.rehomingIntervalMin\n ? deviceInfo.rehomingIntervalMin\n : DEFAULT_REHOMING_INTERVAL_MIN;\n this.rehomingIntervalMax = deviceInfo?.rehomingIntervalMax\n ? deviceInfo.rehomingIntervalMax\n : DEFAULT_REHOMING_INTERVAL_MAX;\n }\n }\n\n /**\n * Retrieves information about the device as {@link IDeviceInfo}.\n *\n */\n public getDeviceInfo(): IDeviceInfo {\n return this.deviceInfo;\n }\n\n /**\n * Checks if the device is currently registered.\n *\n * by checking if isRegistered state is set to\n * ACTIVE, else false.\n */\n public isDeviceRegistered(): boolean {\n return this.registrationStatus === RegistrationStatus.ACTIVE;\n }\n\n public getStatus(): RegistrationStatus {\n return this.registrationStatus;\n }\n\n public setStatus(value: RegistrationStatus) {\n this.registrationStatus = value;\n }\n\n /**\n * Start fresh registration cycle with the mobius\n * server list already present.\n *\n */\n private async restartRegistration(caller: string) {\n /*\n * Cancel any failback timer running\n * and start fresh registration attempt with retry as true.\n */\n this.clearFailbackTimer();\n this.failback429RetryAttempts = 0;\n const abort = await this.attemptRegistrationWithServers(caller, this.primaryMobiusUris);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.startFailoverTimer();\n }\n }\n\n /**\n * Restores the connection and attempts refreshing existing registration with server.\n * Allows retry if not restored in the first attempt.\n *\n */\n public async handleConnectionRestoration(retry: boolean): Promise<boolean> {\n await this.mutex.runExclusive(async () => {\n /* Check retry once again to see if another timer thread has not finished the job already. */\n if (retry) {\n log.info('Mercury connection is up again, re-registering with Webex Calling if needed', {\n file: REGISTRATION_FILE,\n method: this.handleConnectionRestoration.name,\n });\n this.clearKeepaliveTimer();\n if (this.isDeviceRegistered()) {\n // eslint-disable-next-line no-await-in-loop\n await this.deregister();\n }\n\n /*\n * Do not attempt registration if mobius url is not set in this.activeMobiusUrl\n * as that'd mean initial registration itself is not finished yet, let\n * failover timer handle the registration in that case.\n */\n if (this.activeMobiusUrl) {\n /*\n * When restoring connectivity, register with same url first\n * where it was registered last even if it was a backup url,\n * because failback timer may already be running to register\n * it back to primary.\n */\n const abort = await this.restorePreviousRegistration(\n this.handleConnectionRestoration.name\n );\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(this.handleConnectionRestoration.name);\n }\n }\n retry = false;\n }\n });\n\n return retry;\n }\n\n /**\n * Callback function for restoring registration in case of failure during initial registration\n * due to device registration already exists.\n *\n */\n private restoreRegistrationCallBack() {\n return async (restoreData: IDeviceInfo, caller: string) => {\n const logContext = {file: REGISTRATION_FILE, method: caller};\n if (!this.isRegRetry()) {\n log.info('Registration restoration in progress.', logContext);\n const restore = this.getExistingDevice(restoreData);\n\n if (restore) {\n this.setRegRetry(true);\n await this.deregister();\n const finalError = await this.restorePreviousRegistration(caller);\n this.setRegRetry(false);\n if (this.isDeviceRegistered()) {\n log.info('Registration restored successfully.', logContext);\n }\n\n return finalError;\n }\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n } else {\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n }\n\n return false;\n };\n }\n\n /**\n * Triggers the registration with the given list of Mobius servers\n * Registration is attempted with primary and backup until it succeeds or the list is exhausted\n */\n public async triggerRegistration() {\n if (this.primaryMobiusUris.length > 0) {\n const abort = await this.attemptRegistrationWithServers(\n this.triggerRegistration.name,\n this.primaryMobiusUris\n );\n\n if (!this.isDeviceRegistered() && !abort) {\n await this.startFailoverTimer();\n }\n }\n }\n\n /**\n * Attempts registration with the server list received in\n * argument one by one until registration either succeeds with\n * one or all of them are tried.\n *\n * attempt has hit a final error and a retry should not be scheduled\n * else false.\n */\n private async attemptRegistrationWithServers(\n caller: string,\n servers: string[] = this.primaryMobiusUris\n ): Promise<boolean> {\n let abort = false;\n this.retryAfter = undefined;\n\n if (this.failoverImmediately) {\n return abort;\n }\n\n if (this.isDeviceRegistered()) {\n log.log(`[${caller}] : Device already registered with : ${this.activeMobiusUrl}`, {\n file: REGISTRATION_FILE,\n method: REGISTER_UTIL,\n });\n\n return abort;\n }\n for (const url of servers) {\n try {\n abort = false;\n this.registrationStatus = RegistrationStatus.INACTIVE;\n this.lineEmitter(LINE_EVENTS.CONNECTING);\n log.log(`[${caller}] : Mobius url to contact: ${url}`, {\n file: REGISTRATION_FILE,\n method: REGISTER_UTIL,\n });\n // eslint-disable-next-line no-await-in-loop\n const resp = await this.postRegistration(url);\n this.deviceInfo = resp.body as IDeviceInfo;\n this.registrationStatus = RegistrationStatus.ACTIVE;\n this.lineEmitter(LINE_EVENTS.REGISTERED, resp.body as IDeviceInfo);\n this.setActiveMobiusUrl(url);\n this.setIntervalValues(this.deviceInfo);\n this.metricManager.setDeviceInfo(this.deviceInfo);\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n undefined\n );\n this.startKeepaliveTimer(\n this.deviceInfo.device?.uri as string,\n this.deviceInfo.keepaliveInterval as number\n );\n this.initiateFailback();\n break;\n } catch (err: unknown) {\n const body = err as WebexRequestPayload;\n\n // eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-unused-vars\n abort = await handleRegistrationErrors(\n body,\n (clientError, finalError) => {\n if (finalError) {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n } else {\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n }\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION_ERROR,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n clientError\n );\n },\n {method: caller, file: REGISTRATION_FILE},\n (retryAfter: number, retryCaller: string) => this.handle429Retry(retryAfter, retryCaller),\n this.restoreRegistrationCallBack()\n );\n if (this.registrationStatus === RegistrationStatus.ACTIVE) {\n log.info(\n `[${caller}] : Device is already restored, active mobius url: ${this.activeMobiusUrl}`,\n {\n file: REGISTRATION_FILE,\n method: this.attemptRegistrationWithServers.name,\n }\n );\n break;\n }\n if (abort) {\n this.setStatus(RegistrationStatus.INACTIVE);\n break;\n }\n }\n }\n\n return abort;\n }\n\n /**\n * This method sets up a timer to periodically send keep-alive requests to maintain a connection.\n * It handles retries, error handling, and re-registration attempts based on the response, ensuring continuous connectivity with the server.\n */\n private startKeepaliveTimer(url: string, interval: number) {\n let keepAliveRetryCount = 0;\n this.clearKeepaliveTimer();\n const RETRY_COUNT_THRESHOLD = this.isCCFlow ? 4 : 5;\n\n this.keepaliveTimer = setInterval(async () => {\n const logContext = {\n file: REGISTRATION_FILE,\n method: this.startKeepaliveTimer.name,\n };\n await this.mutex.runExclusive(async () => {\n if (this.isDeviceRegistered() && keepAliveRetryCount < RETRY_COUNT_THRESHOLD) {\n try {\n const res = await this.postKeepAlive(url);\n log.info(`Sent Keepalive, status: ${res.statusCode}`, logContext);\n if (keepAliveRetryCount > 0) {\n this.lineEmitter(LINE_EVENTS.RECONNECTED);\n }\n keepAliveRetryCount = 0;\n } catch (err: unknown) {\n keepAliveRetryCount += 1;\n const error = <WebexRequestPayload>err;\n\n log.warn(\n `Keep-alive missed ${keepAliveRetryCount} times. Status -> ${error.statusCode} `,\n logContext\n );\n\n const abort = await handleRegistrationErrors(\n error,\n (clientError, finalError) => {\n if (finalError) {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION,\n REG_ACTION.KEEPALIVE_FAILURE,\n METRIC_TYPE.BEHAVIORAL,\n clientError\n );\n },\n {method: this.startKeepaliveTimer.name, file: REGISTRATION_FILE}\n );\n\n if (abort || keepAliveRetryCount >= RETRY_COUNT_THRESHOLD) {\n this.failoverImmediately = this.isCCFlow;\n this.setStatus(RegistrationStatus.INACTIVE);\n this.clearKeepaliveTimer();\n this.clearFailbackTimer();\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n\n if (!abort) {\n /* In case of non-final error, re-attempt registration */\n await this.reconnectOnFailure(this.startKeepaliveTimer.name);\n }\n } else {\n this.lineEmitter(LINE_EVENTS.RECONNECTING);\n }\n }\n }\n });\n }, interval * 1000);\n }\n\n /**\n * Clears the keepalive timer if running.\n */\n public clearKeepaliveTimer() {\n if (this.keepaliveTimer) {\n clearInterval(this.keepaliveTimer);\n this.keepaliveTimer = undefined;\n }\n }\n\n public isReconnectPending(): boolean {\n return this.reconnectPending;\n }\n\n public async deregister() {\n try {\n await this.deleteRegistration(\n this.activeMobiusUrl as string,\n this.deviceInfo.device?.deviceId as string,\n this.deviceInfo.device?.clientDeviceUri as string\n );\n } catch (err) {\n log.warn(`Delete failed with Mobius`, {});\n }\n\n this.clearKeepaliveTimer();\n this.setStatus(RegistrationStatus.INACTIVE);\n }\n\n /**\n * Indicates whether the calling client is in a mode\n * to retry registration.\n */\n private isRegRetry(): boolean {\n return this.registerRetry;\n }\n\n /**\n * Sets the received value in instance variable\n * registerRetry for registration retry cases.\n *\n */\n private setRegRetry(value: boolean) {\n this.registerRetry = value;\n }\n\n /**\n * Restores the deviceInfo object in callingClient when receiving a 403 with error code 101.\n *\n */\n private getExistingDevice(restoreData: IDeviceInfo) {\n if (restoreData.devices && restoreData.devices.length > 0) {\n this.deviceInfo = {\n userId: restoreData.userId,\n device: restoreData.devices[0],\n keepaliveInterval: DEFAULT_KEEPALIVE_INTERVAL,\n rehomingIntervalMax: DEFAULT_REHOMING_INTERVAL_MAX,\n rehomingIntervalMin: DEFAULT_REHOMING_INTERVAL_MIN,\n };\n\n const stringToReplace = `${DEVICES_ENDPOINT_RESOURCE}/${restoreData.devices[0].deviceId}`;\n\n const uri = restoreData.devices[0].uri.replace(stringToReplace, '');\n this.setActiveMobiusUrl(uri);\n this.registrationStatus = RegistrationStatus.ACTIVE;\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Invoked to re-register in cases when the registration\n * is lost due to some failure.\n * If there are active calls, it will only mark reconnectPending\n * as true and then retry will happen when this method gets\n * invoked again on receiving all calls cleared event from\n * callManager.\n *\n */\n public async reconnectOnFailure(caller: string) {\n this.reconnectPending = false;\n if (!this.isDeviceRegistered()) {\n if (Object.keys(this.callManager.getActiveCalls()).length === 0) {\n const abort = await this.restorePreviousRegistration(caller);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(caller);\n }\n } else {\n this.reconnectPending = true;\n log.info('Active call(s) present, deferred reconnect till call cleanup.', {\n file: REGISTRATION_FILE,\n method: this.reconnectOnFailure.name,\n });\n }\n }\n }\n}\n\n/*\n */\nexport const createRegistration = (\n webex: WebexSDK,\n serviceData: ServiceData,\n mutex: Mutex,\n lineEmitter: LineEmitterCallback,\n logLevel: LOGGER,\n jwe?: string\n): IRegistration => new Registration(webex, serviceData, mutex, lineEmitter, logLevel, jwe);\n"],"mappings":"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"}
1
+ {"version":3,"names":["_uuid","require","_constants","_common","_types","_Metrics","_calling","_Logger","_interopRequireDefault","_SDKConnector","_types2","_constants2","_types3","_createForOfIteratorHelper","o","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","_Array$from","test","arr","len","arr2","Array","ownKeys","r","t","_Object$keys2","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","Registration","exports","webex","serviceData","mutex","lineEmitter","logLevel","jwe","_classCallCheck2","sdkConnector","SDKConnector","isCCFlow","indicator","ServiceIndicator","CONTACT_CENTER","getWebex","setWebex","userId","internal","device","registrationStatus","RegistrationStatus","IDLE","failback429RetryAttempts","log","setLogger","REGISTRATION_FILE","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","callManager","getCallManager","metricManager","getMetricManager","primaryMobiusUris","backupMobiusUris","_createClass2","key","getActiveMobiusUrl","activeMobiusUrl","setActiveMobiusUrl","url","info","concat","METHOD_START_MESSAGE","method","METHODS","UPDATE_ACTIVE_MOBIUS","file","updateActiveMobius","setMobiusServers","SET_MOBIUS_SERVERS","_postKeepAlive","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","abrupt","request","uri","HTTP_METHODS","POST","headers","CISCO_DEVICE_URL","SPARK_USER_AGENT","CALLING_USER_AGENT","service","ALLOWED_SERVICES","MOBIUS","stop","postKeepAlive","_x","_deleteRegistration","_callee2","deviceId","deviceUrl","_response","response","_callee2$","_context2","t0","fetch","t1","DEVICES_ENDPOINT_RESOURCE","t2","DELETE","t3","t4","t5","t6","credentials","getUserToken","t7","sent","t8","t9","WEBEX_WEB_CLIENT","uuid","t10","t11","t12","t13","t14","t15","warn","DEREGISTER","setStatus","INACTIVE","LINE_EVENTS","UNREGISTERED","json","deleteRegistration","_x2","_x3","_x4","_postRegistration","_callee3","deviceInfo","_callee3$","_context3","clientDeviceUri","body","postRegistration","_x5","_restorePreviousRegistration","_callee4","caller","abort","_callee4$","_context4","attemptRegistrationWithServers","restorePreviousRegistration","_x6","_handle429Retry","_callee5","retryAfter","interval","_callee5$","_context5","FAILBACK_UTIL","REG_FAILBACK_429_MAX_RETRIES","clearFailbackTimer","REG_429_RETRY_UTIL","getRegRetryInterval","startFailbackTimer","scheduled429Retry","isDeviceRegistered","restartRegistration","handle429Retry","_x7","_x8","attempt","undefined","BASE_REG_RETRY_TIMER_VAL_IN_SEC","Math","pow","BASE_REG_TIMER_MFACTOR","floor","random","REG_RANDOM_T_FACTOR_UPPER_LIMIT","SEC_TO_MSEC_MFACTOR","_startFailoverTimer","_callee10","_this","timeElapsed","loggerContext","TIMER_THRESHOLD","excessVal","scheduledTime","_args10","_callee10$","_context10","FAILOVER_UTIL","REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC","REG_TRY_BACKUP_TIMER_VAL_IN_SEC","failoverImmediately","_now","max","setTimeout","_callee7","_callee7$","_context7","runExclusive","_callee6","currentTime","_callee6$","_context6","startFailoverTimer","RETRY_TIMER_UPPER_LIMIT","_callee9","_callee9$","_context9","_callee8","_callee8$","_context8","uploadLogs","emitFinalFailure","clientError","ERROR","failbackTimer","clearTimeout","isFailbackRequired","indexOf","getFailbackInterval","initiateFailback","intervalInMinutes","MINUTES_TO_SEC_MFACTOR","intervalInSeconds","_this2","_callee11","_callee11$","_context11","executeFailback","_executeFailback","_callee13","_this3","_callee13$","_context13","_callee12","abortNew","_callee12$","_context12","_keys","getActiveCalls","deregister","setIntervalValues","getDeviceInfo","ACTIVE","getStatus","_restartRegistration","_callee14","_callee14$","_context14","_x9","_handleConnectionRestoration","_callee16","retry","_this4","_callee16$","_context16","HANDLE_CONNECTION_RESTORATION","_callee15","_callee15$","_context15","handleConnectionRestoration","clearKeepaliveTimer","_x10","restoreRegistrationCallBack","_this5","_ref8","_callee17","restoreData","logContext","restore","finalError","_callee17$","_context17","isRegRetry","getExistingDevice","setRegRetry","_x11","_x12","_triggerRegistration","_callee18","_callee18$","_context18","triggerRegistration","_attemptRegistrationWithServers","_callee19","_this6","servers","_iterator","_step","_this$deviceInfo$devi","_this$deviceInfo$devi2","resp","_args19","_callee19$","_context19","REGISTER_UTIL","CONNECTING","REGISTERED","REGISTER","setDeviceInfo","submitRegistrationMetric","METRIC_EVENT","REGISTRATION","REG_ACTION","METRIC_TYPE","BEHAVIORAL","startKeepaliveTimer","keepaliveInterval","handleRegistrationErrors","REGISTRATION_ERROR","retryCaller","finish","_x13","_this7","keepAliveRetryCount","RETRY_COUNT_THRESHOLD","keepaliveTimer","setInterval","_callee21","_callee21$","_context21","_callee20","res","error","_callee20$","_context20","statusCode","RECONNECTED","KEEPALIVE_FAILURE","reconnectOnFailure","RECONNECTING","clearInterval","isReconnectPending","reconnectPending","_deregister","_callee22","_this$deviceInfo$devi3","_this$deviceInfo$devi4","_callee22$","_context22","registerRetry","devices","DEFAULT_KEEPALIVE_INTERVAL","stringToReplace","replace","_reconnectOnFailure","_callee23","_callee23$","_context23","RECONNECT_ON_FAILURE","_x14","createRegistration"],"sources":["register.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport {Mutex} from 'async-mutex';\nimport {METHOD_START_MESSAGE} from '../../common/constants';\nimport {emitFinalFailure, handleRegistrationErrors, uploadLogs} from '../../common';\n\nimport {IMetricManager, METRIC_EVENT, METRIC_TYPE, REG_ACTION} from '../../Metrics/types';\nimport {getMetricManager} from '../../Metrics';\nimport {ICallManager} from '../calling/types';\nimport {getCallManager} from '../calling';\nimport {LOGGER} from '../../Logger/types';\nimport log from '../../Logger';\nimport {IRegistration} from './types';\nimport SDKConnector from '../../SDKConnector';\nimport {\n ALLOWED_SERVICES,\n HTTP_METHODS,\n IDeviceInfo,\n RegistrationStatus,\n ServiceData,\n ServiceIndicator,\n WebexRequestPayload,\n} from '../../common/types';\nimport {ISDKConnector, WebexSDK} from '../../SDKConnector/types';\nimport {\n CALLING_USER_AGENT,\n CISCO_DEVICE_URL,\n DEVICES_ENDPOINT_RESOURCE,\n SPARK_USER_AGENT,\n WEBEX_WEB_CLIENT,\n BASE_REG_RETRY_TIMER_VAL_IN_SEC,\n BASE_REG_TIMER_MFACTOR,\n SEC_TO_MSEC_MFACTOR,\n REG_RANDOM_T_FACTOR_UPPER_LIMIT,\n REG_TRY_BACKUP_TIMER_VAL_IN_SEC,\n MINUTES_TO_SEC_MFACTOR,\n REG_429_RETRY_UTIL,\n REG_FAILBACK_429_MAX_RETRIES,\n FAILBACK_UTIL,\n REGISTRATION_FILE,\n DEFAULT_REHOMING_INTERVAL_MIN,\n DEFAULT_REHOMING_INTERVAL_MAX,\n DEFAULT_KEEPALIVE_INTERVAL,\n REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC,\n FAILOVER_UTIL,\n REGISTER_UTIL,\n RETRY_TIMER_UPPER_LIMIT,\n METHODS,\n} from '../constants';\nimport {LINE_EVENTS, LineEmitterCallback} from '../line/types';\nimport {LineError} from '../../Errors/catalog/LineError';\n\n/**\n *\n */\nexport class Registration implements IRegistration {\n private sdkConnector: ISDKConnector;\n\n private webex: WebexSDK;\n\n private userId = '';\n\n private serviceData: ServiceData;\n\n private failback429RetryAttempts: number;\n private registrationStatus: RegistrationStatus;\n private failbackTimer?: NodeJS.Timer;\n private activeMobiusUrl!: string;\n\n private keepaliveTimer: NodeJS.Timer | undefined;\n private rehomingIntervalMin: number;\n\n private rehomingIntervalMax: number;\n private mutex: Mutex;\n private metricManager: IMetricManager;\n private lineEmitter: LineEmitterCallback;\n private callManager: ICallManager;\n private deviceInfo: IDeviceInfo = {};\n private primaryMobiusUris: string[];\n private backupMobiusUris: string[];\n private registerRetry = false;\n private reconnectPending = false;\n private jwe?: string;\n private isCCFlow = false;\n private failoverImmediately = false;\n private retryAfter: number | undefined;\n private scheduled429Retry = false;\n\n /**\n */\n constructor(\n webex: WebexSDK,\n serviceData: ServiceData,\n mutex: Mutex,\n lineEmitter: LineEmitterCallback,\n logLevel: LOGGER,\n jwe?: string\n ) {\n this.jwe = jwe;\n this.sdkConnector = SDKConnector;\n this.serviceData = serviceData;\n this.isCCFlow = serviceData.indicator === ServiceIndicator.CONTACT_CENTER;\n\n if (!this.sdkConnector.getWebex()) {\n SDKConnector.setWebex(webex);\n }\n this.webex = this.sdkConnector.getWebex();\n this.userId = this.webex.internal.device.userId;\n this.registrationStatus = RegistrationStatus.IDLE;\n this.failback429RetryAttempts = 0;\n log.setLogger(logLevel, REGISTRATION_FILE);\n this.rehomingIntervalMin = DEFAULT_REHOMING_INTERVAL_MIN;\n this.rehomingIntervalMax = DEFAULT_REHOMING_INTERVAL_MAX;\n this.mutex = mutex;\n this.callManager = getCallManager(this.webex, serviceData.indicator);\n this.metricManager = getMetricManager(this.webex, serviceData.indicator);\n this.lineEmitter = lineEmitter;\n\n this.primaryMobiusUris = [];\n this.backupMobiusUris = [];\n }\n\n public getActiveMobiusUrl(): string {\n return this.activeMobiusUrl;\n }\n\n public setActiveMobiusUrl(url: string) {\n log.info(`${METHOD_START_MESSAGE} with ${url}`, {\n method: METHODS.UPDATE_ACTIVE_MOBIUS,\n file: REGISTRATION_FILE,\n });\n this.activeMobiusUrl = url;\n this.callManager.updateActiveMobius(url);\n }\n\n public setMobiusServers(primaryMobiusUris: string[], backupMobiusUris: string[]) {\n log.log(METHOD_START_MESSAGE, {method: METHODS.SET_MOBIUS_SERVERS, file: REGISTRATION_FILE});\n this.primaryMobiusUris = primaryMobiusUris;\n this.backupMobiusUris = backupMobiusUris;\n }\n\n /**\n * Implementation of sending keepalive.\n *\n */\n private async postKeepAlive(url: string) {\n return <WebexRequestPayload>this.webex.request({\n uri: `${url}/status`,\n method: HTTP_METHODS.POST,\n headers: {\n [CISCO_DEVICE_URL]: this.webex.internal.device.url,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n service: ALLOWED_SERVICES.MOBIUS,\n });\n }\n\n /**\n * Implementation of delete device.\n *\n */\n private async deleteRegistration(url: string, deviceId: string, deviceUrl: string) {\n let response;\n try {\n response = await fetch(`${url}${DEVICES_ENDPOINT_RESOURCE}/${deviceId}`, {\n method: HTTP_METHODS.DELETE,\n headers: {\n [CISCO_DEVICE_URL]: deviceUrl,\n Authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${WEBEX_WEB_CLIENT}_${uuid()}`,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n });\n } catch (error) {\n log.warn(`Delete failed with Mobius ${error}`, {\n file: REGISTRATION_FILE,\n method: METHODS.DEREGISTER,\n });\n }\n\n this.setStatus(RegistrationStatus.INACTIVE);\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n\n return <WebexRequestPayload>response?.json();\n }\n\n /**\n * Implementation of POST request for device registration.\n *\n */\n private async postRegistration(url: string) {\n const deviceInfo = {\n userId: this.userId,\n clientDeviceUri: this.webex.internal.device.url,\n serviceData: this.jwe ? {...this.serviceData, jwe: this.jwe} : this.serviceData,\n };\n\n return <WebexRequestPayload>this.webex.request({\n uri: `${url}device`,\n method: HTTP_METHODS.POST,\n headers: {\n [CISCO_DEVICE_URL]: deviceInfo.clientDeviceUri,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n body: deviceInfo,\n service: ALLOWED_SERVICES.MOBIUS,\n });\n }\n\n /**\n * Re-attempts registration with the mobius url it was last registered\n * to, that mobius url is expected to be updated already in this.activeMobiusUrl.\n */\n private async restorePreviousRegistration(caller: string): Promise<boolean> {\n let abort = false;\n\n if (this.activeMobiusUrl) {\n abort = await this.attemptRegistrationWithServers(caller, [this.activeMobiusUrl]);\n }\n\n return abort;\n }\n\n /**\n *\n */\n private async handle429Retry(retryAfter: number, caller: string): Promise<void> {\n if (caller === FAILBACK_UTIL) {\n if (this.failback429RetryAttempts >= REG_FAILBACK_429_MAX_RETRIES) {\n return;\n }\n\n this.clearFailbackTimer();\n this.failback429RetryAttempts += 1;\n log.log(`Received 429 while rehoming, 429 retry count : ${this.failback429RetryAttempts}`, {\n file: REGISTRATION_FILE,\n method: REG_429_RETRY_UTIL,\n });\n const interval = this.getRegRetryInterval(this.failback429RetryAttempts);\n\n this.startFailbackTimer(interval);\n this.scheduled429Retry = true;\n const abort = await this.restorePreviousRegistration(REG_429_RETRY_UTIL);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(REG_429_RETRY_UTIL);\n }\n } else {\n this.retryAfter = retryAfter;\n }\n }\n\n /**\n * Calculates and returns a random interval value using input argument\n * attempt as the variable factor.\n *\n * attempted already.\n */\n private getRegRetryInterval(attempt = 1): number {\n return (\n BASE_REG_RETRY_TIMER_VAL_IN_SEC +\n BASE_REG_TIMER_MFACTOR ** attempt +\n Math.floor(\n (Math.random() * (REG_RANDOM_T_FACTOR_UPPER_LIMIT - SEC_TO_MSEC_MFACTOR + 1) +\n SEC_TO_MSEC_MFACTOR) /\n SEC_TO_MSEC_MFACTOR\n )\n );\n }\n\n /**\n * Schedules registration retry with primary mobius servers at a random\n * interval calculated based on the number of times registration retry is already done\n * Once the time taken since the beginning of retry attempt exceeds the\n * retry threshold, it switches over to backup mobius servers.\n *\n */\n private async startFailoverTimer(attempt = 1, timeElapsed = 0) {\n const loggerContext = {\n file: REGISTRATION_FILE,\n method: FAILOVER_UTIL,\n };\n\n let interval = this.getRegRetryInterval(attempt);\n\n const TIMER_THRESHOLD = this.isCCFlow\n ? REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC\n : REG_TRY_BACKUP_TIMER_VAL_IN_SEC;\n\n if (timeElapsed + interval > TIMER_THRESHOLD) {\n const excessVal = timeElapsed + interval - TIMER_THRESHOLD;\n\n interval -= excessVal;\n }\n\n if (this.retryAfter != null && interval < this.retryAfter) {\n this.failoverImmediately = this.retryAfter + timeElapsed > TIMER_THRESHOLD;\n }\n\n let abort;\n if (interval > BASE_REG_RETRY_TIMER_VAL_IN_SEC && !this.failoverImmediately) {\n const scheduledTime = Math.floor(Date.now() / 1000);\n\n if (this.retryAfter != null) {\n interval = Math.max(interval, this.retryAfter);\n }\n\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(FAILOVER_UTIL);\n const currentTime = Math.floor(Date.now() / 1000);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.startFailoverTimer(attempt + 1, timeElapsed + (currentTime - scheduledTime));\n }\n });\n }, interval * SEC_TO_MSEC_MFACTOR);\n log.log(\n `Scheduled retry with primary in ${interval} seconds, number of attempts : ${attempt}`,\n loggerContext\n );\n } else if (this.backupMobiusUris.length) {\n log.info('Failing over to backup servers.', loggerContext);\n this.failoverImmediately = false;\n abort = await this.attemptRegistrationWithServers(FAILOVER_UTIL, this.backupMobiusUris);\n if (!abort && !this.isDeviceRegistered()) {\n interval = this.getRegRetryInterval();\n\n if (this.retryAfter != null && this.retryAfter < RETRY_TIMER_UPPER_LIMIT) {\n interval = interval < this.retryAfter ? this.retryAfter : interval;\n }\n\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(FAILOVER_UTIL, this.backupMobiusUris);\n if (!abort && !this.isDeviceRegistered()) {\n await uploadLogs();\n emitFinalFailure((clientError: LineError) => {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }, loggerContext);\n }\n });\n }, interval * SEC_TO_MSEC_MFACTOR);\n log.log(`Scheduled retry with backup servers in ${interval} seconds.`, loggerContext);\n }\n } else {\n await uploadLogs();\n emitFinalFailure((clientError: LineError) => {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }, loggerContext);\n }\n }\n\n /**\n * Clears the failback timer if running.\n */\n private clearFailbackTimer() {\n if (this.failbackTimer) {\n clearTimeout(this.failbackTimer);\n this.failbackTimer = undefined;\n }\n }\n\n /**\n * Returns true if device is registered with a backup mobius.\n */\n private isFailbackRequired(): boolean {\n return this.isDeviceRegistered() && this.primaryMobiusUris.indexOf(this.activeMobiusUrl) === -1;\n }\n\n /**\n * Calculates and returns a random value between rehomingIntervalMin and\n * rehomingIntervalMax.\n */\n private getFailbackInterval(): number {\n return Math.floor(\n Math.random() * (this.rehomingIntervalMax - this.rehomingIntervalMin + 1) +\n this.rehomingIntervalMin\n );\n }\n\n /**\n * Starts failback timer to move to primary mobius if device\n * is registered with a backup mobius.\n */\n private initiateFailback() {\n if (this.isFailbackRequired()) {\n if (!this.failbackTimer) {\n this.failback429RetryAttempts = 0;\n const intervalInMinutes = this.getFailbackInterval();\n\n this.startFailbackTimer(intervalInMinutes * MINUTES_TO_SEC_MFACTOR);\n }\n } else {\n this.failback429RetryAttempts = 0;\n this.clearFailbackTimer();\n }\n }\n\n /**\n * Starts failback timer with the interval value received.\n *\n */\n private startFailbackTimer(intervalInSeconds: number) {\n this.failbackTimer = setTimeout(\n async () => this.executeFailback(),\n intervalInSeconds * SEC_TO_MSEC_MFACTOR\n );\n log.log(`Failback scheduled after ${intervalInSeconds} seconds.`, {\n file: REGISTRATION_FILE,\n method: this.startFailbackTimer.name,\n });\n }\n\n /**\n * Core logic for the failback processing, scheduled and executed\n * at failback timer expiry.\n */\n private async executeFailback() {\n await this.mutex.runExclusive(async () => {\n if (this.isFailbackRequired()) {\n if (Object.keys(this.callManager.getActiveCalls()).length === 0) {\n log.info(`Attempting failback to primary.`, {\n file: REGISTRATION_FILE,\n method: this.executeFailback.name,\n });\n await this.deregister();\n const abort = await this.attemptRegistrationWithServers(FAILBACK_UTIL);\n\n if (this.scheduled429Retry || abort || this.isDeviceRegistered()) {\n return;\n }\n\n const abortNew = await this.restorePreviousRegistration(FAILBACK_UTIL);\n\n if (abortNew) {\n this.clearFailbackTimer();\n\n return;\n }\n\n if (!this.isDeviceRegistered()) {\n await this.restartRegistration(this.executeFailback.name);\n } else {\n this.failbackTimer = undefined;\n this.initiateFailback();\n }\n } else {\n log.info('Active calls present, deferring failback to next cycle.', {\n file: REGISTRATION_FILE,\n method: this.executeFailback.name,\n });\n this.failbackTimer = undefined;\n this.initiateFailback();\n }\n }\n });\n }\n\n /**\n * Updates rehomingIntervalMin and rehomingIntervalMax values\n * if received in registration response from a primary mobius\n * server.\n *\n */\n private setIntervalValues(deviceInfo: IDeviceInfo) {\n if (this.primaryMobiusUris.indexOf(this.activeMobiusUrl) !== -1) {\n this.rehomingIntervalMin = deviceInfo?.rehomingIntervalMin\n ? deviceInfo.rehomingIntervalMin\n : DEFAULT_REHOMING_INTERVAL_MIN;\n this.rehomingIntervalMax = deviceInfo?.rehomingIntervalMax\n ? deviceInfo.rehomingIntervalMax\n : DEFAULT_REHOMING_INTERVAL_MAX;\n }\n }\n\n /**\n * Retrieves information about the device as {@link IDeviceInfo}.\n *\n */\n public getDeviceInfo(): IDeviceInfo {\n return this.deviceInfo;\n }\n\n /**\n * Checks if the device is currently registered.\n *\n * by checking if isRegistered state is set to\n * ACTIVE, else false.\n */\n public isDeviceRegistered(): boolean {\n return this.registrationStatus === RegistrationStatus.ACTIVE;\n }\n\n public getStatus(): RegistrationStatus {\n return this.registrationStatus;\n }\n\n public setStatus(value: RegistrationStatus) {\n this.registrationStatus = value;\n }\n\n /**\n * Start fresh registration cycle with the mobius\n * server list already present.\n *\n */\n private async restartRegistration(caller: string) {\n /*\n * Cancel any failback timer running\n * and start fresh registration attempt with retry as true.\n */\n this.clearFailbackTimer();\n this.failback429RetryAttempts = 0;\n const abort = await this.attemptRegistrationWithServers(caller, this.primaryMobiusUris);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.startFailoverTimer();\n }\n }\n\n /**\n * Restores the connection and attempts refreshing existing registration with server.\n * Allows retry if not restored in the first attempt.\n *\n */\n public async handleConnectionRestoration(retry: boolean): Promise<boolean> {\n log.info(METHOD_START_MESSAGE, {\n method: METHODS.HANDLE_CONNECTION_RESTORATION,\n file: REGISTRATION_FILE,\n });\n await this.mutex.runExclusive(async () => {\n /* Check retry once again to see if another timer thread has not finished the job already. */\n if (retry) {\n log.log('Mercury connection is up again, re-registering with Webex Calling if needed', {\n file: REGISTRATION_FILE,\n method: this.handleConnectionRestoration.name,\n });\n this.clearKeepaliveTimer();\n if (this.isDeviceRegistered()) {\n // eslint-disable-next-line no-await-in-loop\n await this.deregister();\n }\n\n /*\n * Do not attempt registration if mobius url is not set in this.activeMobiusUrl\n * as that'd mean initial registration itself is not finished yet, let\n * failover timer handle the registration in that case.\n */\n if (this.activeMobiusUrl) {\n /*\n * When restoring connectivity, register with same url first\n * where it was registered last even if it was a backup url,\n * because failback timer may already be running to register\n * it back to primary.\n */\n const abort = await this.restorePreviousRegistration(\n this.handleConnectionRestoration.name\n );\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(this.handleConnectionRestoration.name);\n }\n }\n retry = false;\n }\n });\n\n return retry;\n }\n\n /**\n * Callback function for restoring registration in case of failure during initial registration\n * due to device registration already exists.\n *\n */\n private restoreRegistrationCallBack() {\n return async (restoreData: IDeviceInfo, caller: string) => {\n const logContext = {file: REGISTRATION_FILE, method: caller};\n if (!this.isRegRetry()) {\n log.info('Registration restoration in progress.', logContext);\n const restore = this.getExistingDevice(restoreData);\n\n if (restore) {\n this.setRegRetry(true);\n await this.deregister();\n const finalError = await this.restorePreviousRegistration(caller);\n this.setRegRetry(false);\n if (this.isDeviceRegistered()) {\n log.info('Registration restored successfully.', logContext);\n }\n\n return finalError;\n }\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n } else {\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n }\n\n return false;\n };\n }\n\n /**\n * Triggers the registration with the given list of Mobius servers\n * Registration is attempted with primary and backup until it succeeds or the list is exhausted\n */\n public async triggerRegistration() {\n if (this.primaryMobiusUris.length > 0) {\n const abort = await this.attemptRegistrationWithServers(\n this.triggerRegistration.name,\n this.primaryMobiusUris\n );\n\n if (!this.isDeviceRegistered() && !abort) {\n await this.startFailoverTimer();\n }\n }\n }\n\n /**\n * Attempts registration with the server list received in\n * argument one by one until registration either succeeds with\n * one or all of them are tried.\n *\n * attempt has hit a final error and a retry should not be scheduled\n * else false.\n */\n private async attemptRegistrationWithServers(\n caller: string,\n servers: string[] = this.primaryMobiusUris\n ): Promise<boolean> {\n let abort = false;\n this.retryAfter = undefined;\n\n if (this.failoverImmediately) {\n return abort;\n }\n\n if (this.isDeviceRegistered()) {\n log.info(`[${caller}] : Device already registered with : ${this.activeMobiusUrl}`, {\n file: REGISTRATION_FILE,\n method: REGISTER_UTIL,\n });\n\n return abort;\n }\n for (const url of servers) {\n try {\n abort = false;\n this.registrationStatus = RegistrationStatus.INACTIVE;\n this.lineEmitter(LINE_EVENTS.CONNECTING);\n log.info(`[${caller}] : Mobius url to contact: ${url}`, {\n file: REGISTRATION_FILE,\n method: REGISTER_UTIL,\n });\n // eslint-disable-next-line no-await-in-loop\n const resp = await this.postRegistration(url);\n this.deviceInfo = resp.body as IDeviceInfo;\n this.registrationStatus = RegistrationStatus.ACTIVE;\n this.lineEmitter(LINE_EVENTS.REGISTERED, resp.body as IDeviceInfo);\n log.log(\n `Registration successful for deviceId: ${this.deviceInfo.device?.deviceId} userId: ${this.userId}`,\n {\n file: REGISTRATION_FILE,\n method: METHODS.REGISTER,\n }\n );\n this.setActiveMobiusUrl(url);\n this.setIntervalValues(this.deviceInfo);\n this.metricManager.setDeviceInfo(this.deviceInfo);\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n undefined\n );\n this.startKeepaliveTimer(\n this.deviceInfo.device?.uri as string,\n this.deviceInfo.keepaliveInterval as number\n );\n this.initiateFailback();\n break;\n } catch (err: unknown) {\n const body = err as WebexRequestPayload;\n\n // eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-unused-vars\n abort = await handleRegistrationErrors(\n body,\n (clientError, finalError) => {\n if (finalError) {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n } else {\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n }\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION_ERROR,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n clientError\n );\n },\n {method: caller, file: REGISTRATION_FILE},\n (retryAfter: number, retryCaller: string) => this.handle429Retry(retryAfter, retryCaller),\n this.restoreRegistrationCallBack()\n );\n if (this.registrationStatus === RegistrationStatus.ACTIVE) {\n log.info(\n `[${caller}] : Device is already restored, active mobius url: ${this.activeMobiusUrl}`,\n {\n file: REGISTRATION_FILE,\n method: this.attemptRegistrationWithServers.name,\n }\n );\n break;\n }\n if (abort) {\n this.setStatus(RegistrationStatus.INACTIVE);\n break;\n }\n }\n }\n\n return abort;\n }\n\n /**\n * This method sets up a timer to periodically send keep-alive requests to maintain a connection.\n * It handles retries, error handling, and re-registration attempts based on the response, ensuring continuous connectivity with the server.\n */\n private startKeepaliveTimer(url: string, interval: number) {\n let keepAliveRetryCount = 0;\n this.clearKeepaliveTimer();\n const RETRY_COUNT_THRESHOLD = this.isCCFlow ? 4 : 5;\n\n this.keepaliveTimer = setInterval(async () => {\n const logContext = {\n file: REGISTRATION_FILE,\n method: this.startKeepaliveTimer.name,\n };\n await this.mutex.runExclusive(async () => {\n if (this.isDeviceRegistered() && keepAliveRetryCount < RETRY_COUNT_THRESHOLD) {\n try {\n const res = await this.postKeepAlive(url);\n log.log(`Sent Keepalive, status: ${res.statusCode}`, logContext);\n if (keepAliveRetryCount > 0) {\n this.lineEmitter(LINE_EVENTS.RECONNECTED);\n }\n keepAliveRetryCount = 0;\n } catch (err: unknown) {\n keepAliveRetryCount += 1;\n const error = <WebexRequestPayload>err;\n\n log.warn(\n `Keep-alive missed ${keepAliveRetryCount} times. Status -> ${error.statusCode} `,\n logContext\n );\n\n const abort = await handleRegistrationErrors(\n error,\n (clientError, finalError) => {\n if (finalError) {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION,\n REG_ACTION.KEEPALIVE_FAILURE,\n METRIC_TYPE.BEHAVIORAL,\n clientError\n );\n },\n {method: this.startKeepaliveTimer.name, file: REGISTRATION_FILE}\n );\n\n if (abort || keepAliveRetryCount >= RETRY_COUNT_THRESHOLD) {\n this.failoverImmediately = this.isCCFlow;\n this.setStatus(RegistrationStatus.INACTIVE);\n this.clearKeepaliveTimer();\n this.clearFailbackTimer();\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n\n if (!abort) {\n /* In case of non-final error, re-attempt registration */\n await this.reconnectOnFailure(this.startKeepaliveTimer.name);\n }\n } else {\n this.lineEmitter(LINE_EVENTS.RECONNECTING);\n }\n }\n }\n });\n }, interval * 1000);\n }\n\n /**\n * Clears the keepalive timer if running.\n */\n public clearKeepaliveTimer() {\n if (this.keepaliveTimer) {\n clearInterval(this.keepaliveTimer);\n this.keepaliveTimer = undefined;\n }\n }\n\n public isReconnectPending(): boolean {\n return this.reconnectPending;\n }\n\n public async deregister() {\n try {\n await this.deleteRegistration(\n this.activeMobiusUrl as string,\n this.deviceInfo.device?.deviceId as string,\n this.deviceInfo.device?.clientDeviceUri as string\n );\n log.log('Registration successfully deregistered', {\n file: REGISTRATION_FILE,\n method: METHODS.DEREGISTER,\n });\n } catch (err) {\n log.warn(`Delete failed with Mobius: ${err}`, {\n file: REGISTRATION_FILE,\n method: METHODS.DEREGISTER,\n });\n }\n\n this.clearKeepaliveTimer();\n this.setStatus(RegistrationStatus.INACTIVE);\n }\n\n /**\n * Indicates whether the calling client is in a mode\n * to retry registration.\n */\n private isRegRetry(): boolean {\n return this.registerRetry;\n }\n\n /**\n * Sets the received value in instance variable\n * registerRetry for registration retry cases.\n *\n */\n private setRegRetry(value: boolean) {\n this.registerRetry = value;\n }\n\n /**\n * Restores the deviceInfo object in callingClient when receiving a 403 with error code 101.\n *\n */\n private getExistingDevice(restoreData: IDeviceInfo) {\n if (restoreData.devices && restoreData.devices.length > 0) {\n this.deviceInfo = {\n userId: restoreData.userId,\n device: restoreData.devices[0],\n keepaliveInterval: DEFAULT_KEEPALIVE_INTERVAL,\n rehomingIntervalMax: DEFAULT_REHOMING_INTERVAL_MAX,\n rehomingIntervalMin: DEFAULT_REHOMING_INTERVAL_MIN,\n };\n\n const stringToReplace = `${DEVICES_ENDPOINT_RESOURCE}/${restoreData.devices[0].deviceId}`;\n\n const uri = restoreData.devices[0].uri.replace(stringToReplace, '');\n this.setActiveMobiusUrl(uri);\n this.registrationStatus = RegistrationStatus.ACTIVE;\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Invoked to re-register in cases when the registration\n * is lost due to some failure.\n * If there are active calls, it will only mark reconnectPending\n * as true and then retry will happen when this method gets\n * invoked again on receiving all calls cleared event from\n * callManager.\n *\n */\n public async reconnectOnFailure(caller: string) {\n log.info(METHOD_START_MESSAGE, {method: METHODS.RECONNECT_ON_FAILURE, file: REGISTRATION_FILE});\n this.reconnectPending = false;\n if (!this.isDeviceRegistered()) {\n if (Object.keys(this.callManager.getActiveCalls()).length === 0) {\n const abort = await this.restorePreviousRegistration(caller);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(caller);\n }\n } else {\n this.reconnectPending = true;\n log.info('Active call(s) present, deferred reconnect till call cleanup.', {\n file: REGISTRATION_FILE,\n method: METHODS.RECONNECT_ON_FAILURE,\n });\n }\n }\n }\n}\n\n/*\n */\nexport const createRegistration = (\n webex: WebexSDK,\n serviceData: ServiceData,\n mutex: Mutex,\n lineEmitter: LineEmitterCallback,\n logLevel: LOGGER,\n jwe?: string\n): IRegistration => new Registration(webex, serviceData, mutex, lineEmitter, logLevel, jwe);\n"],"mappings":"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"}
@@ -37,9 +37,11 @@ var MockServiceData = {
37
37
  indicator: _types.ServiceIndicator.CALLING,
38
38
  domain: ''
39
39
  };
40
- var logSpy = jest.spyOn(_Logger.default, 'info');
40
+ var logSpy = jest.spyOn(_Logger.default, 'log');
41
+ var infoSpy = jest.spyOn(_Logger.default, 'info');
41
42
  var warnSpy = jest.spyOn(_Logger.default, 'warn');
42
43
  var handleErrorSpy = jest.spyOn(utils, 'handleRegistrationErrors');
44
+ jest.spyOn(utils, 'uploadLogs').mockResolvedValue();
43
45
  describe('Registration Tests', function () {
44
46
  var originalProcessNextTick = process.nextTick;
45
47
  function flushPromises() {
@@ -147,7 +149,13 @@ describe('Registration Tests', function () {
147
149
  expect(lineEmitter).toBeCalledTimes(2);
148
150
  expect(lineEmitter).toBeCalledWith(_types4.LINE_EVENTS.CONNECTING);
149
151
  expect(lineEmitter).toBeCalledWith(_types4.LINE_EVENTS.REGISTERED, _registerFixtures.mockPostResponse);
150
- case 8:
152
+
153
+ // Check that log.log was called for successful registration
154
+ expect(logSpy).toBeCalledWith("Registration successful for deviceId: ".concat(_registerFixtures.mockPostResponse.device.deviceId, " userId: ").concat(_registerFixtures.mockPostResponse.userId), expect.objectContaining({
155
+ file: _constants.REGISTRATION_FILE,
156
+ method: expect.any(String)
157
+ }));
158
+ case 9:
151
159
  case "end":
152
160
  return _context.stop();
153
161
  }
@@ -214,8 +222,8 @@ describe('Registration Tests', function () {
214
222
  headers: expect.anything()
215
223
  });
216
224
  expect(warnSpy).toBeCalledWith('User device limit exceeded', expect.anything());
217
- expect(logSpy).toBeCalledWith('Registration restoration in progress.', expect.anything());
218
- expect(logSpy).toBeCalledWith('Registration restored successfully.', expect.anything());
225
+ expect(infoSpy).toBeCalledWith('Registration restoration in progress.', expect.anything());
226
+ expect(infoSpy).toBeCalledWith('Registration restored successfully.', expect.anything());
219
227
  expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
220
228
  expect(lineEmitter).toBeCalledTimes(4);
221
229
  expect(lineEmitter).nthCalledWith(1, _types4.LINE_EVENTS.CONNECTING);
@@ -347,7 +355,7 @@ describe('Registration Tests', function () {
347
355
  expect(retry429Spy).toBeCalledOnceWith(failurePayload429One.headers['retry-after'], 'startFailoverTimer');
348
356
  expect(failoverSpy).toBeCalledOnceWith(3, 73);
349
357
  expect(logSpy).not.toBeCalledWith("Scheduled retry with primary in ".concat(failurePayload429One.headers['retry-after'], " seconds, number of attempts : 3"), loggerContext);
350
- expect(logSpy).toBeCalledWith("Failing over to backup servers.", loggerContext);
358
+ expect(infoSpy).toBeCalledWith("Failing over to backup servers.", loggerContext);
351
359
  expect(webex.request).toHaveBeenNthCalledWith(4, _objectSpread(_objectSpread({}, mockResponse), {}, {
352
360
  method: 'POST',
353
361
  uri: "".concat(mobiusUris.backup[0], "device")
@@ -418,7 +426,7 @@ describe('Registration Tests', function () {
418
426
  }));
419
427
  expect(retry429Spy).toBeCalledOnceWith(failurePayload429One.headers['retry-after'], 'startFailoverTimer');
420
428
  expect(failoverSpy).toBeCalledOnceWith(4, 114);
421
- expect(logSpy).toBeCalledWith("Failing over to backup servers.", loggerContext);
429
+ expect(infoSpy).toBeCalledWith("Failing over to backup servers.", loggerContext);
422
430
  expect(webex.request).toHaveBeenNthCalledWith(5, _objectSpread(_objectSpread({}, mockResponse), {}, {
423
431
  method: 'POST',
424
432
  uri: "".concat(mobiusUris.backup[0], "device")
@@ -496,9 +504,9 @@ describe('Registration Tests', function () {
496
504
  }));
497
505
  expect(reg.getStatus()).toEqual(_types.RegistrationStatus.INACTIVE);
498
506
  expect(failoverSpy).toBeCalledOnceWith();
507
+ expect(infoSpy).toBeCalledWith("Failing over to backup servers.", loggerContext);
499
508
  expect(logSpy).not.toBeCalledWith("Scheduled retry with primary in 40 seconds, number of attempts : 1", loggerContext);
500
509
  expect(logSpy).not.toBeCalledWith("Scheduled retry with primary in ".concat(failurePayload429Three.headers['retry-after'], " seconds, number of attempts : 1"), loggerContext);
501
- expect(logSpy).toBeCalledWith("Failing over to backup servers.", loggerContext);
502
510
  expect(webex.request).toHaveBeenNthCalledWith(2, _objectSpread(_objectSpread({}, mockResponse), {}, {
503
511
  method: 'POST',
504
512
  uri: "".concat(mobiusUris.backup[0], "device")
@@ -538,9 +546,9 @@ describe('Registration Tests', function () {
538
546
  }));
539
547
  expect(failoverSpy).toBeCalledOnceWith(2, failurePayload429One.headers['retry-after']);
540
548
  expect(logSpy).not.toBeCalledWith("Scheduled retry with primary in 43 seconds, number of attempts : 2", loggerContext);
541
- expect(logSpy).toBeCalledWith("Failing over to backup servers.", loggerContext);
549
+ expect(infoSpy).toBeCalledWith("Failing over to backup servers.", loggerContext);
542
550
  expect(logSpy).not.toBeCalledWith("Scheduled retry with primary in ".concat(failurePayload429Four.headers['retry-after'], " seconds, number of attempts : 2"), loggerContext);
543
- expect(logSpy).toBeCalledWith("Failing over to backup servers.", loggerContext);
551
+ expect(infoSpy).toBeCalledWith("Failing over to backup servers.", loggerContext);
544
552
  expect(webex.request).toHaveBeenNthCalledWith(3, _objectSpread(_objectSpread({}, mockResponse), {}, {
545
553
  method: 'POST',
546
554
  uri: "".concat(mobiusUris.backup[0], "device")
@@ -722,7 +730,7 @@ describe('Registration Tests', function () {
722
730
  _context14.next = 5;
723
731
  return flushPromises();
724
732
  case 5:
725
- expect(logSpy).toBeCalledWith("Attempting failback to primary.", {
733
+ expect(infoSpy).toBeCalledWith("Attempting failback to primary.", {
726
734
  method: 'executeFailback',
727
735
  file: _constants.REGISTRATION_FILE
728
736
  });
@@ -755,7 +763,7 @@ describe('Registration Tests', function () {
755
763
  _context15.next = 4;
756
764
  return flushPromises();
757
765
  case 4:
758
- expect(logSpy).toBeCalledWith("Attempting failback to primary.", {
766
+ expect(infoSpy).toBeCalledWith("Attempting failback to primary.", {
759
767
  method: 'executeFailback',
760
768
  file: _constants.REGISTRATION_FILE
761
769
  });
@@ -787,7 +795,7 @@ describe('Registration Tests', function () {
787
795
  _context16.next = 6;
788
796
  return flushPromises();
789
797
  case 6:
790
- expect(logSpy).toBeCalledWith("Attempting failback to primary.", {
798
+ expect(infoSpy).toBeCalledWith("Attempting failback to primary.", {
791
799
  method: 'executeFailback',
792
800
  file: _constants.REGISTRATION_FILE
793
801
  });
@@ -814,7 +822,7 @@ describe('Registration Tests', function () {
814
822
  _context17.next = 4;
815
823
  return flushPromises();
816
824
  case 4:
817
- expect(logSpy).toBeCalledWith("Attempting failback to primary.", {
825
+ expect(infoSpy).toBeCalledWith("Attempting failback to primary.", {
818
826
  method: 'executeFailback',
819
827
  file: _constants.REGISTRATION_FILE
820
828
  });
@@ -842,7 +850,7 @@ describe('Registration Tests', function () {
842
850
  _context18.next = 4;
843
851
  return flushPromises();
844
852
  case 4:
845
- expect(logSpy).toBeCalledWith("Attempting failback to primary.", {
853
+ expect(infoSpy).toBeCalledWith("Attempting failback to primary.", {
846
854
  method: 'executeFailback',
847
855
  file: _constants.REGISTRATION_FILE
848
856
  });
@@ -874,7 +882,7 @@ describe('Registration Tests', function () {
874
882
  _context19.next = 6;
875
883
  return flushPromises();
876
884
  case 6:
877
- expect(logSpy).toBeCalledWith("Active calls present, deferring failback to next cycle.", {
885
+ expect(infoSpy).toBeCalledWith("Active calls present, deferring failback to next cycle.", {
878
886
  method: 'executeFailback',
879
887
  file: _constants.REGISTRATION_FILE
880
888
  });
@@ -884,7 +892,7 @@ describe('Registration Tests', function () {
884
892
  expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
885
893
  expect(restoreSpy).not.toBeCalled();
886
894
  expect(restartSpy).not.toBeCalled();
887
- expect(logSpy).toBeCalledWith('Active calls present, deferring failback to next cycle.', {
895
+ expect(infoSpy).toBeCalledWith('Active calls present, deferring failback to next cycle.', {
888
896
  file: _constants.REGISTRATION_FILE,
889
897
  method: _constants.FAILBACK_UTIL
890
898
  });
@@ -960,8 +968,10 @@ describe('Registration Tests', function () {
960
968
  return flushPromises();
961
969
  case 8:
962
970
  expect(funcSpy).toBeCalledTimes(2); // should be called 2 times: first try and after the interval.
963
- expect(logSpy).lastCalledWith('Sent Keepalive, status: 200', logObj);
964
- case 10:
971
+
972
+ expect(logSpy).toBeCalledWith('Sent Keepalive, status: 200', logObj);
973
+ expect(infoSpy).not.toBeCalledWith('Sent Keepalive, status: 200', logObj);
974
+ case 11:
965
975
  case "end":
966
976
  return _context21.stop();
967
977
  }
@@ -1039,8 +1049,16 @@ describe('Registration Tests', function () {
1039
1049
  expect(reconnectSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
1040
1050
  expect(restoreSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
1041
1051
  expect(restartRegSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
1052
+ expect(warnSpy).toHaveBeenCalledWith('Keep-alive missed 1 times. Status -> 503 ', expect.objectContaining({
1053
+ file: _constants.REGISTRATION_FILE,
1054
+ method: 'startKeepaliveTimer'
1055
+ }));
1042
1056
  expect(webex.request).toBeCalledTimes(7);
1043
1057
  expect(reg.keepaliveTimer).toBe(undefined);
1058
+ expect(warnSpy).toHaveBeenCalledWith('Keep-alive missed 1 times. Status -> 503 ', expect.objectContaining({
1059
+ file: _constants.REGISTRATION_FILE,
1060
+ method: 'startKeepaliveTimer'
1061
+ }));
1044
1062
  expect(lineEmitter).nthCalledWith(1, _types4.LINE_EVENTS.RECONNECTING);
1045
1063
  expect(lineEmitter).nthCalledWith(4, _types4.LINE_EVENTS.RECONNECTING);
1046
1064
  expect(lineEmitter).nthCalledWith(5, _types4.LINE_EVENTS.UNREGISTERED);
@@ -1051,7 +1069,7 @@ describe('Registration Tests', function () {
1051
1069
  expect(lineEmitter).nthCalledWith(8, _types4.LINE_EVENTS.CONNECTING);
1052
1070
  expect(lineEmitter).nthCalledWith(9, _types4.LINE_EVENTS.UNREGISTERED);
1053
1071
  expect(lineEmitter).toBeCalledTimes(9);
1054
- case 31:
1072
+ case 33:
1055
1073
  case "end":
1056
1074
  return _context23.stop();
1057
1075
  }
@@ -1228,7 +1246,11 @@ describe('Registration Tests', function () {
1228
1246
  file: _constants.REGISTRATION_FILE,
1229
1247
  method: _constants.KEEPALIVE_UTIL
1230
1248
  });
1231
- case 21:
1249
+ expect(warnSpy).toBeCalledWith('Keep-alive missed 1 times. Status -> 404 ', expect.objectContaining({
1250
+ file: _constants.REGISTRATION_FILE,
1251
+ method: 'startKeepaliveTimer'
1252
+ }));
1253
+ case 22:
1232
1254
  case "end":
1233
1255
  return _context27.stop();
1234
1256
  }
@@ -1281,7 +1303,7 @@ describe('Registration Tests', function () {
1281
1303
  expect(restoreSpy).not.toBeCalled();
1282
1304
  expect(restartRegSpy).not.toBeCalled();
1283
1305
  expect(reg.reconnectPending).toStrictEqual(true);
1284
- expect(logSpy).toBeCalledWith('Active call(s) present, deferred reconnect till call cleanup.', {
1306
+ expect(infoSpy).toBeCalledWith('Active call(s) present, deferred reconnect till call cleanup.', {
1285
1307
  file: _constants.REGISTRATION_FILE,
1286
1308
  method: expect.any(String)
1287
1309
  });