@webex/calling 3.0.0-next.2 → 3.0.0-next.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1403 -0
- package/dist/CallHistory/CallHistory.js +1 -3
- package/dist/CallHistory/CallHistory.js.map +1 -1
- package/dist/CallHistory/callHistoryFixtures.js +9 -0
- package/dist/CallHistory/callHistoryFixtures.js.map +1 -1
- package/dist/CallHistory/types.js.map +1 -1
- package/dist/CallSettings/CallSettings.js +0 -2
- package/dist/CallSettings/CallSettings.js.map +1 -1
- package/dist/CallSettings/types.js.map +1 -1
- package/dist/CallingClient/CallingClient.js +119 -62
- package/dist/CallingClient/CallingClient.js.map +1 -1
- package/dist/CallingClient/CallingClient.test.js +161 -102
- package/dist/CallingClient/CallingClient.test.js.map +1 -1
- package/dist/CallingClient/calling/CallerId/index.js +3 -23
- package/dist/CallingClient/calling/CallerId/index.js.map +1 -1
- package/dist/CallingClient/calling/CallerId/types.js.map +1 -1
- package/dist/CallingClient/calling/call.js +78 -33
- package/dist/CallingClient/calling/call.js.map +1 -1
- package/dist/CallingClient/calling/call.test.js +483 -351
- package/dist/CallingClient/calling/call.test.js.map +1 -1
- package/dist/CallingClient/calling/callManager.js +0 -9
- package/dist/CallingClient/calling/callManager.js.map +1 -1
- package/dist/CallingClient/calling/callManager.test.js +1 -1
- package/dist/CallingClient/calling/callManager.test.js.map +1 -1
- package/dist/CallingClient/calling/types.js.map +1 -1
- package/dist/CallingClient/callingClientFixtures.js +107 -1
- package/dist/CallingClient/callingClientFixtures.js.map +1 -1
- package/dist/CallingClient/constants.js +14 -6
- package/dist/CallingClient/constants.js.map +1 -1
- package/dist/CallingClient/line/index.js +12 -12
- package/dist/CallingClient/line/index.js.map +1 -1
- package/dist/CallingClient/line/line.test.js +9 -9
- package/dist/CallingClient/line/line.test.js.map +1 -1
- package/dist/CallingClient/line/types.js +4 -7
- package/dist/CallingClient/line/types.js.map +1 -1
- package/dist/CallingClient/registration/register.js +62 -80
- package/dist/CallingClient/registration/register.js.map +1 -1
- package/dist/CallingClient/registration/register.test.js +28 -28
- package/dist/CallingClient/registration/register.test.js.map +1 -1
- package/dist/CallingClient/registration/types.js.map +1 -1
- package/dist/CallingClient/types.js.map +1 -1
- package/dist/Contacts/ContactsClient.js +8 -2
- package/dist/Contacts/ContactsClient.js.map +1 -1
- package/dist/Contacts/types.js +3 -0
- package/dist/Contacts/types.js.map +1 -1
- package/dist/Errors/catalog/CallingDeviceError.js +1 -1
- package/dist/Errors/catalog/CallingDeviceError.js.map +1 -1
- package/dist/Errors/catalog/LineError.js +2 -2
- package/dist/Errors/catalog/LineError.js.map +1 -1
- package/dist/Errors/index.js +7 -0
- package/dist/Errors/index.js.map +1 -1
- package/dist/Errors/types.js.map +1 -1
- package/dist/Events/types.js +0 -1
- package/dist/Events/types.js.map +1 -1
- package/dist/Metrics/index.test.js +1 -1
- package/dist/Metrics/index.test.js.map +1 -1
- package/dist/SDKConnector/types.js.map +1 -1
- package/dist/Voicemail/Voicemail.js +18 -21
- package/dist/Voicemail/Voicemail.js.map +1 -1
- package/dist/Voicemail/WxCallBackendConnector.js +1 -1
- package/dist/Voicemail/WxCallBackendConnector.js.map +1 -1
- package/dist/Voicemail/types.js.map +1 -1
- package/dist/api.js +43 -20
- package/dist/api.js.map +1 -1
- package/dist/common/Utils.js +13 -18
- package/dist/common/Utils.js.map +1 -1
- package/dist/common/Utils.test.js +1 -1
- package/dist/common/Utils.test.js.map +1 -1
- package/dist/common/testUtil.js +2 -1
- package/dist/common/testUtil.js.map +1 -1
- package/dist/common/types.js +8 -7
- package/dist/common/types.js.map +1 -1
- package/dist/index.js +233 -0
- package/dist/index.js.map +1 -1
- package/dist/module/CallHistory/callHistoryFixtures.js +9 -0
- package/dist/module/CallingClient/CallingClient.js +59 -42
- package/dist/module/CallingClient/calling/CallerId/index.js +3 -23
- package/dist/module/CallingClient/calling/call.js +54 -17
- package/dist/module/CallingClient/calling/callManager.js +0 -6
- package/dist/module/CallingClient/callingClientFixtures.js +119 -1
- package/dist/module/CallingClient/constants.js +8 -4
- package/dist/module/CallingClient/line/index.js +7 -10
- package/dist/module/CallingClient/line/types.js +0 -5
- package/dist/module/CallingClient/registration/register.js +28 -20
- package/dist/module/Contacts/ContactsClient.js +3 -0
- package/dist/module/Errors/catalog/CallingDeviceError.js +2 -2
- package/dist/module/Errors/catalog/LineError.js +2 -2
- package/dist/module/Errors/index.js +1 -0
- package/dist/module/api.js +6 -5
- package/dist/module/common/Utils.js +14 -19
- package/dist/module/common/testUtil.js +2 -1
- package/dist/module/common/types.js +6 -5
- package/dist/module/index.js +7 -0
- package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
- package/dist/types/CallHistory/callHistoryFixtures.d.ts.map +1 -1
- package/dist/types/CallSettings/CallSettings.d.ts.map +1 -1
- package/dist/types/CallSettings/types.d.ts.map +1 -1
- package/dist/types/CallingClient/CallingClient.d.ts +2 -0
- package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/CallerId/index.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/CallerId/types.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/call.d.ts +2 -0
- package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/callManager.d.ts +0 -1
- package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/types.d.ts +30 -30
- package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
- package/dist/types/CallingClient/callingClientFixtures.d.ts +69 -1
- package/dist/types/CallingClient/callingClientFixtures.d.ts.map +1 -1
- package/dist/types/CallingClient/constants.d.ts +7 -3
- package/dist/types/CallingClient/constants.d.ts.map +1 -1
- package/dist/types/CallingClient/line/index.d.ts +4 -5
- package/dist/types/CallingClient/line/index.d.ts.map +1 -1
- package/dist/types/CallingClient/line/types.d.ts +8 -13
- package/dist/types/CallingClient/line/types.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/register.d.ts +3 -3
- package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/types.d.ts +14 -14
- package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
- package/dist/types/CallingClient/types.d.ts +6 -4
- package/dist/types/CallingClient/types.d.ts.map +1 -1
- package/dist/types/Contacts/ContactsClient.d.ts +3 -2
- package/dist/types/Contacts/ContactsClient.d.ts.map +1 -1
- package/dist/types/Contacts/types.d.ts +2 -0
- package/dist/types/Contacts/types.d.ts.map +1 -1
- package/dist/types/Errors/catalog/CallingDeviceError.d.ts +4 -4
- package/dist/types/Errors/catalog/CallingDeviceError.d.ts.map +1 -1
- package/dist/types/Errors/catalog/LineError.d.ts +4 -4
- package/dist/types/Errors/catalog/LineError.d.ts.map +1 -1
- package/dist/types/Errors/index.d.ts +1 -0
- package/dist/types/Errors/index.d.ts.map +1 -1
- package/dist/types/Errors/types.d.ts +2 -3
- package/dist/types/Errors/types.d.ts.map +1 -1
- package/dist/types/Events/types.d.ts +11 -0
- package/dist/types/Events/types.d.ts.map +1 -1
- package/dist/types/SDKConnector/types.d.ts +2 -1
- package/dist/types/SDKConnector/types.d.ts.map +1 -1
- package/dist/types/Voicemail/UcmBackendConnector.d.ts +1 -1
- package/dist/types/Voicemail/Voicemail.d.ts.map +1 -1
- package/dist/types/Voicemail/WxCallBackendConnector.d.ts +1 -1
- package/dist/types/Voicemail/types.d.ts +10 -10
- package/dist/types/Voicemail/types.d.ts.map +1 -1
- package/dist/types/api.d.ts +10 -10
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/common/Utils.d.ts.map +1 -1
- package/dist/types/common/testUtil.d.ts +1 -0
- package/dist/types/common/testUtil.d.ts.map +1 -1
- package/dist/types/common/types.d.ts +3 -2
- package/dist/types/common/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","require","_types","_common","_types2","_Metrics","_calling","_Logger","_interopRequireDefault","_SDKConnector","_types3","_constants","_types4","_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","Registration","webex","serviceData","mutex","lineEmitter","logLevel","_classCallCheck2","default","_defineProperty2","sdkConnector","SDKConnector","getWebex","setWebex","userId","internal","device","registrationStatus","MobiusStatus","DEFAULT","failback429RetryAttempts","log","setLogger","REGISTRATION_FILE","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","callManager","getCallManager","indicator","metricManager","getMetricManager","primaryMobiusUris","backupMobiusUris","_createClass2","key","getActiveMobiusUrl","activeMobiusUrl","setActiveMobiusUrl","url","info","concat","method","file","updateActiveMobius","setMobiusServers","_postKeepAlive","_asyncToGenerator2","_regenerator","mark","_callee","_headers","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","apply","arguments","_deleteRegistration","_callee2","deviceId","deviceUrl","_headers2","response","_callee2$","_context2","t0","fetch","t1","DEVICES_ENDPOINT_RESOURCE","t2","DELETE","t3","t4","credentials","getUserToken","t5","sent","WEBEX_WEB_CLIENT","uuid","t6","t7","LINE_EVENTS","UNREGISTERED","json","deleteRegistration","_x2","_x3","_x4","_postRegistration","_callee3","_headers3","deviceInfo","_callee3$","_context3","clientDeviceUri","body","postRegistration","_x5","_restorePreviousRegistration","_callee4","caller","abort","_callee4$","_context4","attemptRegistrationWithServers","restorePreviousRegistration","_x6","_scheduleFailback429Retry","_callee5","interval","_callee5$","_context5","REG_FAILBACK_429_MAX_RETRIES","clearFailbackTimer","FAILBACK_429_RETRY_UTIL","getRegRetryInterval","startFailbackTimer","isDeviceRegistered","restartRegistration","scheduleFailback429Retry","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","excessVal","scheduledTime","_args10","_callee10$","_context10","startFailoverTimer","REG_TRY_BACKUP_TIMER_VAL_IN_SEC","_now","setTimeout","_callee7","_callee7$","_context7","runExclusive","_callee6","currentTime","_callee6$","_context6","_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","FAILBACK_UTIL","setIntervalValues","getDeviceInfo","ACTIVE","getStatus","setStatus","_restartRegistration","_callee14","_callee14$","_context14","_x7","_handleConnectionRestoration","_callee16","retry","_this4","_callee16$","_context16","_callee15","_callee15$","_context15","handleConnectionRestoration","clearKeepaliveTimer","_x8","restoreRegistrationCallBack","_this5","_ref8","_callee17","restoreData","logContext","restore","finalError","_callee17$","_context17","isRegRetry","getExistingDevice","setRegRetry","_x9","_x10","_triggerRegistration","_callee18","_callee18$","_context18","triggerRegistration","_attemptRegistrationWithServers","_callee19","_this6","servers","_iterator","_step","_this$deviceInfo$devi","resp","error","_args19","_callee19$","_context19","CONNECTING","REGISTERED","setDeviceInfo","submitRegistrationMetric","METRIC_EVENT","REGISTRATION","REG_ACTION","REGISTER","METRIC_TYPE","BEHAVIORAL","startKeepaliveTimer","keepaliveInterval","handleRegistrationErrors","REGISTRATION_ERROR","statusCode","ERROR_CODE","TOO_MANY_REQUESTS","finish","_x11","_this7","keepAliveRetryCount","keepaliveTimer","setInterval","_callee21","_callee21$","_context21","_callee20","res","_callee20$","_context20","RECONNECTED","warn","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","_x12","exports","createRegistration"],"sources":["register.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {v4 as uuid} from 'uuid';\nimport {Mutex} from 'async-mutex';\nimport {ERROR_CODE} from '../../Errors/types';\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 MobiusStatus,\n ServiceData,\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 FAILBACK_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} 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: MobiusStatus;\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\n /**\n * @param webex - A webex instance.\n * @param serviceData - indicates whether the backend service is calling or contactcentre\n * @param mutex - mutex which is used to run any registration scenario exclusively\n * @param lineEmitter - Line emitter for registration related events\n * @param logLevel - log level option for registration module\n */\n constructor(\n webex: WebexSDK,\n serviceData: ServiceData,\n mutex: Mutex,\n lineEmitter: LineEmitterCallback,\n logLevel: LOGGER\n ) {\n this.sdkConnector = SDKConnector;\n this.serviceData = serviceData;\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 = MobiusStatus.DEFAULT;\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 * @param url - Entire device url.\n * @returns Promise<boolean>.\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 * @param url -.\n * @param deviceId -.\n * @param deviceUrl -.\n */\n private async deleteRegistration(url: string, deviceId: string, deviceUrl: string) {\n const 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\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 * @param url - backend service url for registration\n */\n private async postRegistration(url: string) {\n const deviceInfo = {\n userId: this.userId,\n clientDeviceUri: this.webex.internal.device.url,\n serviceData: 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 * @param caller - Caller of this method.\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 * When a failback request is rejected with 429, it means the\n * request did not even land on primary mobius to know if it\n * can handle this device registration now, in such cases this\n * method is called to retry sooner than the rehoming timer value.\n */\n private async scheduleFailback429Retry() {\n if (this.failback429RetryAttempts >= REG_FAILBACK_429_MAX_RETRIES) {\n return;\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: FAILBACK_429_RETRY_UTIL,\n });\n const interval = this.getRegRetryInterval(this.failback429RetryAttempts);\n\n this.startFailbackTimer(interval);\n const abort = await this.restorePreviousRegistration(FAILBACK_429_RETRY_UTIL);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(FAILBACK_429_RETRY_UTIL);\n }\n }\n\n /**\n * Calculates and returns a random interval value using input argument\n * attempt as the variable factor.\n *\n * @param attempt - Number of times registration has been\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 * @param attempt - Number of times registration has been attempted already.\n * @param timeElapsed - Time elapsed since the first registration attempt.\n */\n private async startFailoverTimer(attempt = 1, timeElapsed = 0) {\n const loggerContext = {\n file: REGISTRATION_FILE,\n method: this.startFailoverTimer.name,\n };\n\n let interval = this.getRegRetryInterval(attempt);\n\n if (timeElapsed + interval > REG_TRY_BACKUP_TIMER_VAL_IN_SEC) {\n const excessVal = timeElapsed + interval - REG_TRY_BACKUP_TIMER_VAL_IN_SEC;\n\n interval -= excessVal;\n }\n\n let abort;\n\n if (interval > BASE_REG_RETRY_TIMER_VAL_IN_SEC) {\n const scheduledTime = Math.floor(Date.now() / 1000);\n\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(this.startFailoverTimer.name);\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 abort = await this.attemptRegistrationWithServers(\n this.startFailoverTimer.name,\n this.backupMobiusUris\n );\n if (!abort && !this.isDeviceRegistered()) {\n interval = this.getRegRetryInterval();\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(\n this.startFailoverTimer.name,\n this.backupMobiusUris\n );\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 * @param intervalInSeconds - Failback timer interval value in seconds.\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 if (!abort && !this.isDeviceRegistered()) {\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 }\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 * @param deviceInfo - Line info.\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 public getDeviceInfo(): IDeviceInfo {\n return this.deviceInfo;\n }\n\n /**\n * .\n *\n * @returns True if this device is in registered state\n * by checking if isRegistered state is set to\n * ACTIVE, else false.\n */\n public isDeviceRegistered(): boolean {\n return this.registrationStatus === MobiusStatus.ACTIVE;\n }\n\n public getStatus(): MobiusStatus {\n return this.registrationStatus;\n }\n\n public setStatus(value: MobiusStatus) {\n this.registrationStatus = value;\n }\n\n /**\n * Start fresh registration cycle with the mobius\n * server list already present.\n *\n * @param caller - Caller of this method.\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 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 Mobius', {\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 * @param caller - Caller of this method.\n * @param servers - List of mobius server urls to try.\n * @returns Promise resolving to a boolean carrying true if registration\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\n if (this.isDeviceRegistered()) {\n log.log(`[${caller}] : Device already registered with : ${this.activeMobiusUrl}`, {\n file: REGISTRATION_FILE,\n method: this.attemptRegistrationWithServers.name,\n });\n\n return abort;\n }\n for (const url of servers) {\n try {\n abort = false;\n this.registrationStatus = MobiusStatus.DEFAULT;\n this.lineEmitter(LINE_EVENTS.CONNECTING);\n log.log(`[${caller}] : Mobius url to contact: ${url}`, {\n file: REGISTRATION_FILE,\n method: this.attemptRegistrationWithServers.name,\n });\n // eslint-disable-next-line no-await-in-loop\n const resp = await this.postRegistration(url);\n\n this.deviceInfo = resp.body as IDeviceInfo;\n this.lineEmitter(LINE_EVENTS.REGISTERED, resp.body as IDeviceInfo);\n this.registrationStatus = MobiusStatus.ACTIVE;\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: this.attemptRegistrationWithServers.name, file: REGISTRATION_FILE},\n this.restoreRegistrationCallBack()\n );\n if (this.registrationStatus === MobiusStatus.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 break;\n } else if (caller === this.executeFailback.name) {\n const error = body.statusCode;\n\n if (error === ERROR_CODE.TOO_MANY_REQUESTS) {\n // eslint-disable-next-line no-await-in-loop\n await this.scheduleFailback429Retry();\n abort = true;\n break;\n }\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 * @param keepAliveRetryCount\n * @param url\n * @param logContext\n * @param interval\n * @returns\n */\n private startKeepaliveTimer(url: string, interval: number) {\n let keepAliveRetryCount = 0;\n this.clearKeepaliveTimer();\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 < 5) {\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 >= 5) {\n this.setStatus(MobiusStatus.DEFAULT);\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(MobiusStatus.DEFAULT);\n }\n\n /**\n * @returns The value of instance variable registerRetry.\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 * @param value - for registerRetry\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 * @param callingClient - Instance of CallingClient.\n * @param restoreData - Data from Mobius with existing device information.\n * @returns Boolean.\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 = MobiusStatus.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 * @param caller - Caller of this method.\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 * @param webex - A webex instance.\n * @param serviceData - indicates whether the backend service is calling or contactcentre\n * @param mutex - mutex which is used to run any registration scenario exclusively\n * @param lineEmitter - Line emitter for registration related events\n * @param logLevel - log level option for registration module\n */\nexport const createRegistration = (\n webex: WebexSDK,\n serviceData: ServiceData,\n mutex: Mutex,\n lineEmitter: LineEmitterCallback,\n logLevel: LOGGER\n): IRegistration => new Registration(webex, serviceData, mutex, lineEmitter, logLevel);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_uuid","require","_types","_common","_types2","_Metrics","_calling","_Logger","_interopRequireDefault","_SDKConnector","_types3","_constants","_types4","_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","Registration","webex","serviceData","mutex","lineEmitter","logLevel","_classCallCheck2","default","_defineProperty2","sdkConnector","SDKConnector","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","indicator","metricManager","getMetricManager","primaryMobiusUris","backupMobiusUris","_createClass2","key","getActiveMobiusUrl","activeMobiusUrl","setActiveMobiusUrl","url","info","concat","method","file","updateActiveMobius","setMobiusServers","_postKeepAlive","_asyncToGenerator2","_regenerator","mark","_callee","_headers","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","apply","arguments","_deleteRegistration","_callee2","deviceId","deviceUrl","_response","response","_headers2","_callee2$","_context2","t0","fetch","t1","DEVICES_ENDPOINT_RESOURCE","t2","DELETE","t3","t4","credentials","getUserToken","t5","sent","WEBEX_WEB_CLIENT","uuid","t6","t7","t8","warn","setStatus","INACTIVE","LINE_EVENTS","UNREGISTERED","json","deleteRegistration","_x2","_x3","_x4","_postRegistration","_callee3","_headers3","deviceInfo","_callee3$","_context3","clientDeviceUri","body","postRegistration","_x5","_restorePreviousRegistration","_callee4","caller","abort","_callee4$","_context4","attemptRegistrationWithServers","restorePreviousRegistration","_x6","_scheduleFailback429Retry","_callee5","interval","_callee5$","_context5","REG_FAILBACK_429_MAX_RETRIES","clearFailbackTimer","FAILBACK_429_RETRY_UTIL","getRegRetryInterval","startFailbackTimer","isDeviceRegistered","restartRegistration","scheduleFailback429Retry","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","excessVal","scheduledTime","_args10","_callee10$","_context10","startFailoverTimer","REG_TRY_BACKUP_TIMER_VAL_IN_SEC","_now","setTimeout","_callee7","_callee7$","_context7","runExclusive","_callee6","currentTime","_callee6$","_context6","_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","FAILBACK_UTIL","setIntervalValues","getDeviceInfo","ACTIVE","getStatus","_restartRegistration","_callee14","_callee14$","_context14","_x7","_handleConnectionRestoration","_callee16","retry","_this4","_callee16$","_context16","_callee15","_callee15$","_context15","handleConnectionRestoration","clearKeepaliveTimer","_x8","restoreRegistrationCallBack","_this5","_ref8","_callee17","restoreData","logContext","restore","finalError","_callee17$","_context17","isRegRetry","getExistingDevice","setRegRetry","_x9","_x10","_triggerRegistration","_callee18","_callee18$","_context18","triggerRegistration","_attemptRegistrationWithServers","_callee19","_this6","servers","_iterator","_step","_this$deviceInfo$devi","resp","error","_args19","_callee19$","_context19","CONNECTING","REGISTERED","setDeviceInfo","submitRegistrationMetric","METRIC_EVENT","REGISTRATION","REG_ACTION","REGISTER","METRIC_TYPE","BEHAVIORAL","startKeepaliveTimer","keepaliveInterval","handleRegistrationErrors","REGISTRATION_ERROR","statusCode","ERROR_CODE","TOO_MANY_REQUESTS","finish","_x11","_this7","keepAliveRetryCount","keepaliveTimer","setInterval","_callee21","_callee21$","_context21","_callee20","res","_callee20$","_context20","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","_x12","exports","createRegistration"],"sources":["register.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport {Mutex} from 'async-mutex';\nimport {ERROR_CODE} from '../../Errors/types';\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 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 FAILBACK_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} 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\n /**\n */\n constructor(\n webex: WebexSDK,\n serviceData: ServiceData,\n mutex: Mutex,\n lineEmitter: LineEmitterCallback,\n logLevel: LOGGER\n ) {\n this.sdkConnector = SDKConnector;\n this.serviceData = serviceData;\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.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 * When a failback request is rejected with 429, it means the\n * request did not even land on primary mobius to know if it\n * can handle this device registration now, in such cases this\n * method is called to retry sooner than the rehoming timer value.\n */\n private async scheduleFailback429Retry() {\n if (this.failback429RetryAttempts >= REG_FAILBACK_429_MAX_RETRIES) {\n return;\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: FAILBACK_429_RETRY_UTIL,\n });\n const interval = this.getRegRetryInterval(this.failback429RetryAttempts);\n\n this.startFailbackTimer(interval);\n const abort = await this.restorePreviousRegistration(FAILBACK_429_RETRY_UTIL);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(FAILBACK_429_RETRY_UTIL);\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: this.startFailoverTimer.name,\n };\n\n let interval = this.getRegRetryInterval(attempt);\n\n if (timeElapsed + interval > REG_TRY_BACKUP_TIMER_VAL_IN_SEC) {\n const excessVal = timeElapsed + interval - REG_TRY_BACKUP_TIMER_VAL_IN_SEC;\n\n interval -= excessVal;\n }\n\n let abort;\n\n if (interval > BASE_REG_RETRY_TIMER_VAL_IN_SEC) {\n const scheduledTime = Math.floor(Date.now() / 1000);\n\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(this.startFailoverTimer.name);\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 abort = await this.attemptRegistrationWithServers(\n this.startFailoverTimer.name,\n this.backupMobiusUris\n );\n if (!abort && !this.isDeviceRegistered()) {\n interval = this.getRegRetryInterval();\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(\n this.startFailoverTimer.name,\n this.backupMobiusUris\n );\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 if (!abort && !this.isDeviceRegistered()) {\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 }\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\n if (this.isDeviceRegistered()) {\n log.log(`[${caller}] : Device already registered with : ${this.activeMobiusUrl}`, {\n file: REGISTRATION_FILE,\n method: this.attemptRegistrationWithServers.name,\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: this.attemptRegistrationWithServers.name,\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.lineEmitter(LINE_EVENTS.REGISTERED, resp.body as IDeviceInfo);\n this.registrationStatus = RegistrationStatus.ACTIVE;\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: this.attemptRegistrationWithServers.name, file: REGISTRATION_FILE},\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 } else if (caller === this.executeFailback.name) {\n const error = body.statusCode;\n\n if (error === ERROR_CODE.TOO_MANY_REQUESTS) {\n // eslint-disable-next-line no-await-in-loop\n await this.scheduleFailback429Retry();\n abort = true;\n break;\n }\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 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 < 5) {\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 >= 5) {\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): IRegistration => new Registration(webex, serviceData, mutex, lineEmitter, logLevel);\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAEA,IAAAK,QAAA,GAAAL,OAAA;AAEA,IAAAM,OAAA,GAAAC,sBAAA,CAAAP,OAAA;AAEA,IAAAQ,aAAA,GAAAD,sBAAA,CAAAP,OAAA;AACA,IAAAS,OAAA,GAAAT,OAAA;AASA,IAAAU,UAAA,GAAAV,OAAA;AAoBA,IAAAW,OAAA,GAAAX,OAAA;AAA+D,SAAAY,2BAAAC,CAAA,EAAAC,cAAA,QAAAC,EAAA,UAAAC,OAAA,oBAAAH,CAAA,CAAAI,gBAAA,KAAAJ,CAAA,qBAAAE,EAAA,QAAAG,cAAA,CAAAL,CAAA,MAAAE,EAAA,GAAAI,2BAAA,CAAAN,CAAA,MAAAC,cAAA,IAAAD,CAAA,WAAAA,CAAA,CAAAO,MAAA,qBAAAL,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAM,CAAA,UAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAH,CAAA,IAAAR,CAAA,CAAAO,MAAA,WAAAK,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAb,CAAA,CAAAQ,CAAA,UAAAM,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAR,EAAA,GAAAA,EAAA,CAAAmB,IAAA,CAAArB,CAAA,MAAAW,CAAA,WAAAA,EAAA,QAAAW,IAAA,GAAApB,EAAA,CAAAqB,IAAA,IAAAL,gBAAA,GAAAI,IAAA,CAAAV,IAAA,SAAAU,IAAA,KAAAR,CAAA,WAAAA,EAAAU,GAAA,IAAAL,MAAA,SAAAC,GAAA,GAAAI,GAAA,KAAAR,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAhB,EAAA,CAAAuB,MAAA,UAAAvB,EAAA,CAAAuB,MAAA,oBAAAN,MAAA,QAAAC,GAAA;AAAA,SAAAd,4BAAAN,CAAA,EAAA0B,MAAA,SAAA1B,CAAA,qBAAAA,CAAA,sBAAA2B,iBAAA,CAAA3B,CAAA,EAAA0B,MAAA,OAAAf,CAAA,GAAAiB,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAT,IAAA,CAAArB,CAAA,EAAA+B,KAAA,aAAApB,CAAA,iBAAAX,CAAA,CAAAgC,WAAA,EAAArB,CAAA,GAAAX,CAAA,CAAAgC,WAAA,CAAAC,IAAA,MAAAtB,CAAA,cAAAA,CAAA,mBAAAuB,WAAA,CAAAlC,CAAA,OAAAW,CAAA,+DAAAwB,IAAA,CAAAxB,CAAA,UAAAgB,iBAAA,CAAA3B,CAAA,EAAA0B,MAAA;AAAA,SAAAC,kBAAAS,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAA7B,MAAA,EAAA8B,GAAA,GAAAD,GAAA,CAAA7B,MAAA,WAAAC,CAAA,MAAA8B,IAAA,OAAAC,KAAA,CAAAF,GAAA,GAAA7B,CAAA,GAAA6B,GAAA,EAAA7B,CAAA,IAAA8B,IAAA,CAAA9B,CAAA,IAAA4B,GAAA,CAAA5B,CAAA,UAAA8B,IAAA;AAG/D;AACA;AACA;AAFA,IAGaE,YAAY;EA4BvB;AACF;EACE,SAAAA,aACEC,KAAe,EACfC,WAAwB,EACxBC,KAAY,EACZC,WAAgC,EAChCC,QAAgB,EAChB;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAP,YAAA;IAAA,IAAAQ,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA,kBA/Be,EAAE;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA,sBAiBe,CAAC,CAAC;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA,yBAGZ,KAAK;IAAA,IAAAC,gBAAA,CAAAD,OAAA,4BACF,KAAK;IAW9B,IAAI,CAACE,YAAY,GAAGC,qBAAY;IAChC,IAAI,CAACR,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAAC,IAAI,CAACO,YAAY,CAACE,QAAQ,EAAE,EAAE;MACjCD,qBAAY,CAACE,QAAQ,CAACX,KAAK,CAAC;IAC9B;IACA,IAAI,CAACA,KAAK,GAAG,IAAI,CAACQ,YAAY,CAACE,QAAQ,EAAE;IACzC,IAAI,CAACE,MAAM,GAAG,IAAI,CAACZ,KAAK,CAACa,QAAQ,CAACC,MAAM,CAACF,MAAM;IAC/C,IAAI,CAACG,kBAAkB,GAAGC,0BAAkB,CAACC,IAAI;IACjD,IAAI,CAACC,wBAAwB,GAAG,CAAC;IACjCC,eAAG,CAACC,SAAS,CAAChB,QAAQ,EAAEiB,4BAAiB,CAAC;IAC1C,IAAI,CAACC,mBAAmB,GAAGC,wCAA6B;IACxD,IAAI,CAACC,mBAAmB,GAAGC,wCAA6B;IACxD,IAAI,CAACvB,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACwB,WAAW,GAAG,IAAAC,uBAAc,EAAC,IAAI,CAAC3B,KAAK,EAAEC,WAAW,CAAC2B,SAAS,CAAC;IACpE,IAAI,CAACC,aAAa,GAAG,IAAAC,yBAAgB,EAAC,IAAI,CAAC9B,KAAK,EAAEC,WAAW,CAAC2B,SAAS,CAAC;IACxE,IAAI,CAACzB,WAAW,GAAGA,WAAW;IAE9B,IAAI,CAAC4B,iBAAiB,GAAG,EAAE;IAC3B,IAAI,CAACC,gBAAgB,GAAG,EAAE;EAC5B;EAAC,IAAAC,aAAA,CAAA3B,OAAA,EAAAP,YAAA;IAAAmC,GAAA;IAAA9D,KAAA,EAED,SAAA+D,mBAAA,EAAoC;MAClC,OAAO,IAAI,CAACC,eAAe;IAC7B;EAAC;IAAAF,GAAA;IAAA9D,KAAA,EAED,SAAAiE,mBAA0BC,GAAW,EAAE;MACrCnB,eAAG,CAACoB,IAAI,qBAAAC,MAAA,CAAqBF,GAAG,GAAI;QAACG,MAAM,EAAE,oBAAoB;QAAEC,IAAI,EAAErB;MAAiB,CAAC,CAAC;MAC5F,IAAI,CAACe,eAAe,GAAGE,GAAG;MAC1B,IAAI,CAACZ,WAAW,CAACiB,kBAAkB,CAACL,GAAG,CAAC;IAC1C;EAAC;IAAAJ,GAAA;IAAA9D,KAAA,EAED,SAAAwE,iBAAwBb,iBAA2B,EAAEC,gBAA0B,EAAE;MAC/E,IAAI,CAACD,iBAAiB,GAAGA,iBAAiB;MAC1C,IAAI,CAACC,gBAAgB,GAAGA,gBAAgB;IAC1C;;IAEA;AACF;AACA;AACA;EAHE;IAAAE,GAAA;IAAA9D,KAAA;MAAA,IAAAyE,cAAA,OAAAC,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAIA,SAAAC,QAA4BX,GAAW;QAAA,IAAAY,QAAA;QAAA,OAAAH,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAvE,IAAA;YAAA;cAAA,OAAAuE,QAAA,CAAAE,MAAA,WACT,IAAI,CAACvD,KAAK,CAACwD,OAAO,CAAC;gBAC7CC,GAAG,KAAAjB,MAAA,CAAKF,GAAG,YAAS;gBACpBG,MAAM,EAAEiB,oBAAY,CAACC,IAAI;gBACzBC,OAAO,GAAAV,QAAA,WAAA3C,gBAAA,CAAAD,OAAA,EAAA4C,QAAA,EACJW,2BAAgB,EAAG,IAAI,CAAC7D,KAAK,CAACa,QAAQ,CAACC,MAAM,CAACwB,GAAG,OAAA/B,gBAAA,CAAAD,OAAA,EAAA4C,QAAA,EACjDY,2BAAgB,EAAGC,6BAAkB,GAAAb,QAAA,CACvC;gBACDc,OAAO,EAAEC,wBAAgB,CAACC;cAC5B,CAAC,CAAC;YAAA;YAAA;cAAA,OAAAb,QAAA,CAAAc,IAAA;UAAA;QAAA,GAAAlB,OAAA;MAAA,CACH;MAAA,SAAAmB,cAAAC,EAAA;QAAA,OAAAxB,cAAA,CAAAyB,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAAH,aAAA;IAAA;IAED;AACF;AACA;AACA;EAHE;IAAAlC,GAAA;IAAA9D,KAAA;MAAA,IAAAoG,mBAAA,OAAA1B,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAIA,SAAAyB,SAAiCnC,GAAW,EAAEoC,QAAgB,EAAEC,SAAiB;QAAA,IAAAC,SAAA;QAAA,IAAAC,QAAA,EAAAC,SAAA;QAAA,OAAA/B,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA4B,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA1B,IAAA,GAAA0B,SAAA,CAAAlG,IAAA;YAAA;cAAAkG,SAAA,CAAA1B,IAAA;cAAA0B,SAAA,CAAAC,EAAA,GAG5DC,KAAK;cAAAF,SAAA,CAAAG,EAAA,MAAA3C,MAAA,CAAIF,GAAG,EAAAE,MAAA,CAAG4C,oCAAyB,OAAA5C,MAAA,CAAIkC,QAAQ;cAAAM,SAAA,CAAAK,EAAA,GAC3D3B,oBAAY,CAAC4B,MAAM;cAAAR,SAAA;cAAA,IAAAvE,gBAAA,CAAAD,OAAA,EAAAwE,SAAA,EAExBjB,2BAAgB,EAAGc,SAAS;cAAAK,SAAA,CAAAO,EAAA,GAAAhF,gBAAA,CAAAD,OAAA;cAAA0E,SAAA,CAAAQ,EAAA,GAAAV,SAAA;cAAAE,SAAA,CAAAlG,IAAA;cAAA,OACR,IAAI,CAACkB,KAAK,CAACyF,WAAW,CAACC,YAAY,EAAE;YAAA;cAAAV,SAAA,CAAAW,EAAA,GAAAX,SAAA,CAAAY,IAAA;cAAA,IAAAZ,SAAA,CAAAO,EAAA,EAAAP,SAAA,CAAAQ,EAAA,mBAAAR,SAAA,CAAAW,EAAA;cAAA,IAAApF,gBAAA,CAAAD,OAAA,EAAAwE,SAAA,mBAAAtC,MAAA,CAC3CqD,2BAAgB,OAAArD,MAAA,CAAI,IAAAsD,QAAI,GAAE;cAAA,IAAAvF,gBAAA,CAAAD,OAAA,EAAAwE,SAAA,EACxChB,2BAAgB,EAAGC,6BAAkB;cAAAiB,SAAA,CAAAe,EAAA,GAAAjB,SAAA;cAAAE,SAAA,CAAAgB,EAAA;gBALxCvD,MAAM,EAAAuC,SAAA,CAAAK,EAAA;gBACNzB,OAAO,EAAAoB,SAAA,CAAAe;cAAA;cAAAf,SAAA,CAAAlG,IAAA;cAAA,WAAAkG,SAAA,CAAAC,EAAA,EAAAD,SAAA,CAAAG,EAAA,EAAAH,SAAA,CAAAgB,EAAA;YAAA;cAFTnB,QAAQ,GAAAG,SAAA,CAAAY,IAAA;cAAAZ,SAAA,CAAAlG,IAAA;cAAA;YAAA;cAAAkG,SAAA,CAAA1B,IAAA;cAAA0B,SAAA,CAAAiB,EAAA,GAAAjB,SAAA;cAUR7D,eAAG,CAAC+E,IAAI,8BAA8B,CAAC,CAAC,CAAC;YAAC;cAG5C,IAAI,CAACC,SAAS,CAACnF,0BAAkB,CAACoF,QAAQ,CAAC;cAC3C,IAAI,CAACjG,WAAW,CAACkG,mBAAW,CAACC,YAAY,CAAC;cAAC,OAAAtB,SAAA,CAAAzB,MAAA,YAAAqB,SAAA,GAEfC,QAAQ,cAAAD,SAAA,uBAARA,SAAA,CAAU2B,IAAI,EAAE;YAAA;YAAA;cAAA,OAAAvB,SAAA,CAAAb,IAAA;UAAA;QAAA,GAAAM,QAAA;MAAA,CAC7C;MAAA,SAAA+B,mBAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA;QAAA,OAAAnC,mBAAA,CAAAF,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAAiC,kBAAA;IAAA;IAED;AACF;AACA;AACA;EAHE;IAAAtE,GAAA;IAAA9D,KAAA;MAAA,IAAAwI,iBAAA,OAAA9D,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAIA,SAAA6D,SAA+BvE,GAAW;QAAA,IAAAwE,SAAA;QAAA,IAAAC,UAAA;QAAA,OAAAhE,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA6D,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA3D,IAAA,GAAA2D,SAAA,CAAAnI,IAAA;YAAA;cAClCiI,UAAU,GAAG;gBACjBnG,MAAM,EAAE,IAAI,CAACA,MAAM;gBACnBsG,eAAe,EAAE,IAAI,CAAClH,KAAK,CAACa,QAAQ,CAACC,MAAM,CAACwB,GAAG;gBAC/CrC,WAAW,EAAE,IAAI,CAACA;cACpB,CAAC;cAAA,OAAAgH,SAAA,CAAA1D,MAAA,WAE2B,IAAI,CAACvD,KAAK,CAACwD,OAAO,CAAC;gBAC7CC,GAAG,KAAAjB,MAAA,CAAKF,GAAG,WAAQ;gBACnBG,MAAM,EAAEiB,oBAAY,CAACC,IAAI;gBACzBC,OAAO,GAAAkD,SAAA,WAAAvG,gBAAA,CAAAD,OAAA,EAAAwG,SAAA,EACJjD,2BAAgB,EAAGkD,UAAU,CAACG,eAAe,OAAA3G,gBAAA,CAAAD,OAAA,EAAAwG,SAAA,EAC7ChD,2BAAgB,EAAGC,6BAAkB,GAAA+C,SAAA,CACvC;gBACDK,IAAI,EAAEJ,UAAU;gBAChB/C,OAAO,EAAEC,wBAAgB,CAACC;cAC5B,CAAC,CAAC;YAAA;YAAA;cAAA,OAAA+C,SAAA,CAAA9C,IAAA;UAAA;QAAA,GAAA0C,QAAA;MAAA,CACH;MAAA,SAAAO,iBAAAC,GAAA;QAAA,OAAAT,iBAAA,CAAAtC,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAA6C,gBAAA;IAAA;IAED;AACF;AACA;AACA;EAHE;IAAAlF,GAAA;IAAA9D,KAAA;MAAA,IAAAkJ,4BAAA,OAAAxE,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAIA,SAAAuE,SAA0CC,MAAc;QAAA,IAAAC,KAAA;QAAA,OAAA1E,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAAuE,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAArE,IAAA,GAAAqE,SAAA,CAAA7I,IAAA;YAAA;cAClD2I,KAAK,GAAG,KAAK;cAAA,KAEb,IAAI,CAACrF,eAAe;gBAAAuF,SAAA,CAAA7I,IAAA;gBAAA;cAAA;cAAA6I,SAAA,CAAA7I,IAAA;cAAA,OACR,IAAI,CAAC8I,8BAA8B,CAACJ,MAAM,EAAE,CAAC,IAAI,CAACpF,eAAe,CAAC,CAAC;YAAA;cAAjFqF,KAAK,GAAAE,SAAA,CAAA/B,IAAA;YAAA;cAAA,OAAA+B,SAAA,CAAApE,MAAA,WAGAkE,KAAK;YAAA;YAAA;cAAA,OAAAE,SAAA,CAAAxD,IAAA;UAAA;QAAA,GAAAoD,QAAA;MAAA,CACb;MAAA,SAAAM,4BAAAC,GAAA;QAAA,OAAAR,4BAAA,CAAAhD,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAAsD,2BAAA;IAAA;IAED;AACF;AACA;AACA;AACA;AACA;EALE;IAAA3F,GAAA;IAAA9D,KAAA;MAAA,IAAA2J,yBAAA,OAAAjF,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAMA,SAAAgF,SAAA;QAAA,IAAAC,QAAA,EAAAR,KAAA;QAAA,OAAA1E,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA+E,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA7E,IAAA,GAAA6E,SAAA,CAAArJ,IAAA;YAAA;cAAA,MACM,IAAI,CAACoC,wBAAwB,IAAIkH,uCAA4B;gBAAAD,SAAA,CAAArJ,IAAA;gBAAA;cAAA;cAAA,OAAAqJ,SAAA,CAAA5E,MAAA;YAAA;cAGjE,IAAI,CAAC8E,kBAAkB,EAAE;cACzB,IAAI,CAACnH,wBAAwB,IAAI,CAAC;cAClCC,eAAG,CAACA,GAAG,mDAAAqB,MAAA,CAAmD,IAAI,CAACtB,wBAAwB,GAAI;gBACzFwB,IAAI,EAAErB,4BAAiB;gBACvBoB,MAAM,EAAE6F;cACV,CAAC,CAAC;cACIL,QAAQ,GAAG,IAAI,CAACM,mBAAmB,CAAC,IAAI,CAACrH,wBAAwB,CAAC;cAExE,IAAI,CAACsH,kBAAkB,CAACP,QAAQ,CAAC;cAACE,SAAA,CAAArJ,IAAA;cAAA,OACd,IAAI,CAAC+I,2BAA2B,CAACS,kCAAuB,CAAC;YAAA;cAAvEb,KAAK,GAAAU,SAAA,CAAAvC,IAAA;cAAA,MAEP,CAAC6B,KAAK,IAAI,CAAC,IAAI,CAACgB,kBAAkB,EAAE;gBAAAN,SAAA,CAAArJ,IAAA;gBAAA;cAAA;cAAAqJ,SAAA,CAAArJ,IAAA;cAAA,OAChC,IAAI,CAAC4J,mBAAmB,CAACJ,kCAAuB,CAAC;YAAA;YAAA;cAAA,OAAAH,SAAA,CAAAhE,IAAA;UAAA;QAAA,GAAA6D,QAAA;MAAA,CAE1D;MAAA,SAAAW,yBAAA;QAAA,OAAAZ,yBAAA,CAAAzD,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAAoE,wBAAA;IAAA;IAED;AACF;AACA;AACA;AACA;AACA;EALE;IAAAzG,GAAA;IAAA9D,KAAA,EAMA,SAAAmK,oBAAA,EAAiD;MAAA,IAArBK,OAAO,GAAArE,SAAA,CAAAzG,MAAA,QAAAyG,SAAA,QAAAsE,SAAA,GAAAtE,SAAA,MAAG,CAAC;MACrC,OACEuE,0CAA+B,GAAAC,IAAA,CAAAC,GAAA,CAC/BC,iCAAsB,EAAIL,OAAO,IACjCG,IAAI,CAACG,KAAK,CACR,CAACH,IAAI,CAACI,MAAM,EAAE,IAAIC,0CAA+B,GAAGC,8BAAmB,GAAG,CAAC,CAAC,GAC1EA,8BAAmB,IACnBA,8BAAmB,CACtB;IAEL;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAnH,GAAA;IAAA9D,KAAA;MAAA,IAAAkL,mBAAA,OAAAxG,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAOA,SAAAuG,UAAA;QAAA,IAAAC,KAAA;QAAA,IAAAZ,OAAA;UAAAa,WAAA;UAAAC,aAAA;UAAAzB,QAAA;UAAA0B,SAAA;UAAAlC,KAAA;UAAAmC,aAAA;UAAAC,OAAA,GAAAtF,SAAA;QAAA,OAAAxB,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA2G,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAzG,IAAA,GAAAyG,UAAA,CAAAjL,IAAA;YAAA;cAAiC8J,OAAO,GAAAiB,OAAA,CAAA/L,MAAA,QAAA+L,OAAA,QAAAhB,SAAA,GAAAgB,OAAA,MAAG,CAAC;cAAEJ,WAAW,GAAAI,OAAA,CAAA/L,MAAA,QAAA+L,OAAA,QAAAhB,SAAA,GAAAgB,OAAA,MAAG,CAAC;cACrDH,aAAa,GAAG;gBACpBhH,IAAI,EAAErB,4BAAiB;gBACvBoB,MAAM,EAAE,IAAI,CAACuH,kBAAkB,CAACxK;cAClC,CAAC;cAEGyI,QAAQ,GAAG,IAAI,CAACM,mBAAmB,CAACK,OAAO,CAAC;cAEhD,IAAIa,WAAW,GAAGxB,QAAQ,GAAGgC,0CAA+B,EAAE;gBACtDN,SAAS,GAAGF,WAAW,GAAGxB,QAAQ,GAAGgC,0CAA+B;gBAE1EhC,QAAQ,IAAI0B,SAAS;cACvB;cAAC,MAIG1B,QAAQ,GAAGa,0CAA+B;gBAAAiB,UAAA,CAAAjL,IAAA;gBAAA;cAAA;cACtC8K,aAAa,GAAGb,IAAI,CAACG,KAAK,CAAC,IAAAgB,IAAA,CAAA5J,OAAA,GAAU,GAAG,IAAI,CAAC;cAEnD6J,UAAU,mBAAArH,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAAC,SAAAoH,SAAA;gBAAA,OAAArH,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAAkH,UAAAC,SAAA;kBAAA,kBAAAA,SAAA,CAAAhH,IAAA,GAAAgH,SAAA,CAAAxL,IAAA;oBAAA;sBAAAwL,SAAA,CAAAxL,IAAA;sBAAA,OACH0K,KAAI,CAACtJ,KAAK,CAACqK,YAAY,mBAAAzH,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAAC,SAAAwH,SAAA;wBAAA,IAAAC,WAAA;wBAAA,OAAA1H,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAAuH,UAAAC,SAAA;0BAAA,kBAAAA,SAAA,CAAArH,IAAA,GAAAqH,SAAA,CAAA7L,IAAA;4BAAA;8BAAA6L,SAAA,CAAA7L,IAAA;8BAAA,OACd0K,KAAI,CAAC5B,8BAA8B,CAAC4B,KAAI,CAACQ,kBAAkB,CAACxK,IAAI,CAAC;4BAAA;8BAA/EiI,KAAK,GAAAkD,SAAA,CAAA/E,IAAA;8BACC6E,WAAW,GAAG1B,IAAI,CAACG,KAAK,CAAC,IAAAgB,IAAA,CAAA5J,OAAA,GAAU,GAAG,IAAI,CAAC;8BAAA,MAE7C,CAACmH,KAAK,IAAI,CAAC+B,KAAI,CAACf,kBAAkB,EAAE;gCAAAkC,SAAA,CAAA7L,IAAA;gCAAA;8BAAA;8BAAA6L,SAAA,CAAA7L,IAAA;8BAAA,OAChC0K,KAAI,CAACQ,kBAAkB,CAACpB,OAAO,GAAG,CAAC,EAAEa,WAAW,IAAIgB,WAAW,GAAGb,aAAa,CAAC,CAAC;4BAAA;4BAAA;8BAAA,OAAAe,SAAA,CAAAxG,IAAA;0BAAA;wBAAA,GAAAqG,QAAA;sBAAA,CAE1F,GAAC;oBAAA;oBAAA;sBAAA,OAAAF,SAAA,CAAAnG,IAAA;kBAAA;gBAAA,GAAAiG,QAAA;cAAA,CACH,IAAEnC,QAAQ,GAAGoB,8BAAmB,CAAC;cAClClI,eAAG,CAACA,GAAG,oCAAAqB,MAAA,CAC8ByF,QAAQ,qCAAAzF,MAAA,CAAkCoG,OAAO,GACpFc,aAAa,CACd;cAACK,UAAA,CAAAjL,IAAA;cAAA;YAAA;cAAA,KACO,IAAI,CAACkD,gBAAgB,CAAClE,MAAM;gBAAAiM,UAAA,CAAAjL,IAAA;gBAAA;cAAA;cACrCqC,eAAG,CAACA,GAAG,CAAC,iCAAiC,EAAEuI,aAAa,CAAC;cAACK,UAAA,CAAAjL,IAAA;cAAA,OAC5C,IAAI,CAAC8I,8BAA8B,CAC/C,IAAI,CAACoC,kBAAkB,CAACxK,IAAI,EAC5B,IAAI,CAACwC,gBAAgB,CACtB;YAAA;cAHDyF,KAAK,GAAAsC,UAAA,CAAAnE,IAAA;cAIL,IAAI,CAAC6B,KAAK,IAAI,CAAC,IAAI,CAACgB,kBAAkB,EAAE,EAAE;gBACxCR,QAAQ,GAAG,IAAI,CAACM,mBAAmB,EAAE;gBACrC4B,UAAU,mBAAArH,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAAC,SAAA4H,SAAA;kBAAA,OAAA7H,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA0H,UAAAC,SAAA;oBAAA,kBAAAA,SAAA,CAAAxH,IAAA,GAAAwH,SAAA,CAAAhM,IAAA;sBAAA;wBAAAgM,SAAA,CAAAhM,IAAA;wBAAA,OACH0K,KAAI,CAACtJ,KAAK,CAACqK,YAAY,mBAAAzH,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAAC,SAAA+H,SAAA;0BAAA,OAAAhI,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA6H,UAAAC,SAAA;4BAAA,kBAAAA,SAAA,CAAA3H,IAAA,GAAA2H,SAAA,CAAAnM,IAAA;8BAAA;gCAAAmM,SAAA,CAAAnM,IAAA;gCAAA,OACd0K,KAAI,CAAC5B,8BAA8B,CAC/C4B,KAAI,CAACQ,kBAAkB,CAACxK,IAAI,EAC5BgK,KAAI,CAACxH,gBAAgB,CACtB;8BAAA;gCAHDyF,KAAK,GAAAwD,SAAA,CAAArF,IAAA;gCAIL,IAAI,CAAC6B,KAAK,IAAI,CAAC+B,KAAI,CAACf,kBAAkB,EAAE,EAAE;kCACxC,IAAAyC,wBAAgB,EAAC,UAACC,WAAsB,EAAK;oCAC3C3B,KAAI,CAACrJ,WAAW,CAACkG,mBAAW,CAAC+E,KAAK,EAAEvC,SAAS,EAAEsC,WAAW,CAAC;kCAC7D,CAAC,EAAEzB,aAAa,CAAC;gCACnB;8BAAC;8BAAA;gCAAA,OAAAuB,SAAA,CAAA9G,IAAA;4BAAA;0BAAA,GAAA4G,QAAA;wBAAA,CACF,GAAC;sBAAA;sBAAA;wBAAA,OAAAD,SAAA,CAAA3G,IAAA;oBAAA;kBAAA,GAAAyG,QAAA;gBAAA,CACH,IAAE3C,QAAQ,GAAGoB,8BAAmB,CAAC;gBAClClI,eAAG,CAACA,GAAG,2CAAAqB,MAAA,CAA2CyF,QAAQ,gBAAayB,aAAa,CAAC;cACvF;cAACK,UAAA,CAAAjL,IAAA;cAAA;YAAA;cAED,IAAAoM,wBAAgB,EAAC,UAACC,WAAsB,EAAK;gBAC3C3B,KAAI,CAACrJ,WAAW,CAACkG,mBAAW,CAAC+E,KAAK,EAAEvC,SAAS,EAAEsC,WAAW,CAAC;cAC7D,CAAC,EAAEzB,aAAa,CAAC;YAAC;YAAA;cAAA,OAAAK,UAAA,CAAA5F,IAAA;UAAA;QAAA,GAAAoF,SAAA;MAAA,CAErB;MAAA,SAAAS,mBAAA;QAAA,OAAAV,mBAAA,CAAAhF,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAAyF,kBAAA;IAAA;IAED;AACF;AACA;EAFE;IAAA9H,GAAA;IAAA9D,KAAA,EAGA,SAAAiK,mBAAA,EAA6B;MAC3B,IAAI,IAAI,CAACgD,aAAa,EAAE;QACtBC,YAAY,CAAC,IAAI,CAACD,aAAa,CAAC;QAChC,IAAI,CAACA,aAAa,GAAGxC,SAAS;MAChC;IACF;;IAEA;AACF;AACA;EAFE;IAAA3G,GAAA;IAAA9D,KAAA,EAGA,SAAAmN,mBAAA,EAAsC;MACpC,OAAO,IAAI,CAAC9C,kBAAkB,EAAE,IAAI,IAAI,CAAC1G,iBAAiB,CAACyJ,OAAO,CAAC,IAAI,CAACpJ,eAAe,CAAC,KAAK,CAAC,CAAC;IACjG;;IAEA;AACF;AACA;AACA;EAHE;IAAAF,GAAA;IAAA9D,KAAA,EAIA,SAAAqN,oBAAA,EAAsC;MACpC,OAAO1C,IAAI,CAACG,KAAK,CACfH,IAAI,CAACI,MAAM,EAAE,IAAI,IAAI,CAAC3H,mBAAmB,GAAG,IAAI,CAACF,mBAAmB,GAAG,CAAC,CAAC,GACvE,IAAI,CAACA,mBAAmB,CAC3B;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAY,GAAA;IAAA9D,KAAA,EAIA,SAAAsN,iBAAA,EAA2B;MACzB,IAAI,IAAI,CAACH,kBAAkB,EAAE,EAAE;QAC7B,IAAI,CAAC,IAAI,CAACF,aAAa,EAAE;UACvB,IAAI,CAACnK,wBAAwB,GAAG,CAAC;UACjC,IAAMyK,iBAAiB,GAAG,IAAI,CAACF,mBAAmB,EAAE;UAEpD,IAAI,CAACjD,kBAAkB,CAACmD,iBAAiB,GAAGC,iCAAsB,CAAC;QACrE;MACF,CAAC,MAAM;QACL,IAAI,CAAC1K,wBAAwB,GAAG,CAAC;QACjC,IAAI,CAACmH,kBAAkB,EAAE;MAC3B;IACF;;IAEA;AACF;AACA;AACA;EAHE;IAAAnG,GAAA;IAAA9D,KAAA,EAIA,SAAAoK,mBAA2BqD,iBAAyB,EAAE;MAAA,IAAAC,MAAA;MACpD,IAAI,CAACT,aAAa,GAAGlB,UAAU,mBAAArH,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAC7B,SAAA+I,UAAA;QAAA,OAAAhJ,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA6I,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAA3I,IAAA,GAAA2I,UAAA,CAAAnN,IAAA;YAAA;cAAA,OAAAmN,UAAA,CAAA1I,MAAA,WAAYuI,MAAI,CAACI,eAAe,EAAE;YAAA;YAAA;cAAA,OAAAD,UAAA,CAAA9H,IAAA;UAAA;QAAA,GAAA4H,SAAA;MAAA,KAClCF,iBAAiB,GAAGxC,8BAAmB,CACxC;MACDlI,eAAG,CAACA,GAAG,6BAAAqB,MAAA,CAA6BqJ,iBAAiB,gBAAa;QAChEnJ,IAAI,EAAErB,4BAAiB;QACvBoB,MAAM,EAAE,IAAI,CAAC+F,kBAAkB,CAAChJ;MAClC,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;EAHE;IAAA0C,GAAA;IAAA9D,KAAA;MAAA,IAAA+N,gBAAA,OAAArJ,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAIA,SAAAoJ,UAAA;QAAA,IAAAC,MAAA;QAAA,OAAAtJ,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAAmJ,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAjJ,IAAA,GAAAiJ,UAAA,CAAAzN,IAAA;YAAA;cAAAyN,UAAA,CAAAzN,IAAA;cAAA,OACQ,IAAI,CAACoB,KAAK,CAACqK,YAAY,mBAAAzH,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAAC,SAAAwJ,UAAA;gBAAA,IAAA/E,KAAA,EAAAgF,QAAA;gBAAA,OAAA1J,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAAuJ,WAAAC,UAAA;kBAAA,kBAAAA,UAAA,CAAArJ,IAAA,GAAAqJ,UAAA,CAAA7N,IAAA;oBAAA;sBAAA,KACxBuN,MAAI,CAACd,kBAAkB,EAAE;wBAAAoB,UAAA,CAAA7N,IAAA;wBAAA;sBAAA;sBAAA,MACvB,IAAA8N,KAAA,CAAAtM,OAAA,EAAY+L,MAAI,CAAC3K,WAAW,CAACmL,cAAc,EAAE,CAAC,CAAC/O,MAAM,KAAK,CAAC;wBAAA6O,UAAA,CAAA7N,IAAA;wBAAA;sBAAA;sBAC7DqC,eAAG,CAACoB,IAAI,oCAAoC;wBAC1CG,IAAI,EAAErB,4BAAiB;wBACvBoB,MAAM,EAAE4J,MAAI,CAACH,eAAe,CAAC1M;sBAC/B,CAAC,CAAC;sBAACmN,UAAA,CAAA7N,IAAA;sBAAA,OACGuN,MAAI,CAACS,UAAU,EAAE;oBAAA;sBAAAH,UAAA,CAAA7N,IAAA;sBAAA,OACHuN,MAAI,CAACzE,8BAA8B,CAACmF,wBAAa,CAAC;oBAAA;sBAAhEtF,KAAK,GAAAkF,UAAA,CAAA/G,IAAA;sBAAA,MACP,CAAC6B,KAAK,IAAI,CAAC4E,MAAI,CAAC5D,kBAAkB,EAAE;wBAAAkE,UAAA,CAAA7N,IAAA;wBAAA;sBAAA;sBAAA6N,UAAA,CAAA7N,IAAA;sBAAA,OACfuN,MAAI,CAACxE,2BAA2B,CAACkF,wBAAa,CAAC;oBAAA;sBAAhEN,QAAQ,GAAAE,UAAA,CAAA/G,IAAA;sBAAA,KAEV6G,QAAQ;wBAAAE,UAAA,CAAA7N,IAAA;wBAAA;sBAAA;sBACVuN,MAAI,CAAChE,kBAAkB,EAAE;sBAAC,OAAAsE,UAAA,CAAApJ,MAAA;oBAAA;sBAAA,IAKvB8I,MAAI,CAAC5D,kBAAkB,EAAE;wBAAAkE,UAAA,CAAA7N,IAAA;wBAAA;sBAAA;sBAAA6N,UAAA,CAAA7N,IAAA;sBAAA,OACtBuN,MAAI,CAAC3D,mBAAmB,CAAC2D,MAAI,CAACH,eAAe,CAAC1M,IAAI,CAAC;oBAAA;sBAAAmN,UAAA,CAAA7N,IAAA;sBAAA;oBAAA;sBAEzDuN,MAAI,CAAChB,aAAa,GAAGxC,SAAS;sBAC9BwD,MAAI,CAACX,gBAAgB,EAAE;oBAAC;sBAAAiB,UAAA,CAAA7N,IAAA;sBAAA;oBAAA;sBAI5BqC,eAAG,CAACoB,IAAI,CAAC,yDAAyD,EAAE;wBAClEG,IAAI,EAAErB,4BAAiB;wBACvBoB,MAAM,EAAE4J,MAAI,CAACH,eAAe,CAAC1M;sBAC/B,CAAC,CAAC;sBACF6M,MAAI,CAAChB,aAAa,GAAGxC,SAAS;sBAC9BwD,MAAI,CAACX,gBAAgB,EAAE;oBAAC;oBAAA;sBAAA,OAAAiB,UAAA,CAAAxI,IAAA;kBAAA;gBAAA,GAAAqI,SAAA;cAAA,CAG7B,GAAC;YAAA;YAAA;cAAA,OAAAD,UAAA,CAAApI,IAAA;UAAA;QAAA,GAAAiI,SAAA;MAAA,CACH;MAAA,SAAAF,gBAAA;QAAA,OAAAC,gBAAA,CAAA7H,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAA2H,eAAA;IAAA;IAED;AACF;AACA;AACA;AACA;AACA;EALE;IAAAhK,GAAA;IAAA9D,KAAA,EAMA,SAAA4O,kBAA0BjG,UAAuB,EAAE;MACjD,IAAI,IAAI,CAAChF,iBAAiB,CAACyJ,OAAO,CAAC,IAAI,CAACpJ,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE;QAC/D,IAAI,CAACd,mBAAmB,GAAGyF,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEzF,mBAAmB,GACtDyF,UAAU,CAACzF,mBAAmB,GAC9BC,wCAA6B;QACjC,IAAI,CAACC,mBAAmB,GAAGuF,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEvF,mBAAmB,GACtDuF,UAAU,CAACvF,mBAAmB,GAC9BC,wCAA6B;MACnC;IACF;;IAEA;AACF;AACA;AACA;EAHE;IAAAS,GAAA;IAAA9D,KAAA,EAIA,SAAA6O,cAAA,EAAoC;MAClC,OAAO,IAAI,CAAClG,UAAU;IACxB;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA7E,GAAA;IAAA9D,KAAA,EAMA,SAAAqK,mBAAA,EAAqC;MACnC,OAAO,IAAI,CAAC1H,kBAAkB,KAAKC,0BAAkB,CAACkM,MAAM;IAC9D;EAAC;IAAAhL,GAAA;IAAA9D,KAAA,EAED,SAAA+O,UAAA,EAAuC;MACrC,OAAO,IAAI,CAACpM,kBAAkB;IAChC;EAAC;IAAAmB,GAAA;IAAA9D,KAAA,EAED,SAAA+H,UAAiB/H,KAAyB,EAAE;MAC1C,IAAI,CAAC2C,kBAAkB,GAAG3C,KAAK;IACjC;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA8D,GAAA;IAAA9D,KAAA;MAAA,IAAAgP,oBAAA,OAAAtK,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAKA,SAAAqK,UAAkC7F,MAAc;QAAA,IAAAC,KAAA;QAAA,OAAA1E,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAAmK,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAjK,IAAA,GAAAiK,UAAA,CAAAzO,IAAA;YAAA;cAC9C;AACJ;AACA;AACA;cACI,IAAI,CAACuJ,kBAAkB,EAAE;cACzB,IAAI,CAACnH,wBAAwB,GAAG,CAAC;cAACqM,UAAA,CAAAzO,IAAA;cAAA,OACd,IAAI,CAAC8I,8BAA8B,CAACJ,MAAM,EAAE,IAAI,CAACzF,iBAAiB,CAAC;YAAA;cAAjF0F,KAAK,GAAA8F,UAAA,CAAA3H,IAAA;cAAA,MAEP,CAAC6B,KAAK,IAAI,CAAC,IAAI,CAACgB,kBAAkB,EAAE;gBAAA8E,UAAA,CAAAzO,IAAA;gBAAA;cAAA;cAAAyO,UAAA,CAAAzO,IAAA;cAAA,OAChC,IAAI,CAACkL,kBAAkB,EAAE;YAAA;YAAA;cAAA,OAAAuD,UAAA,CAAApJ,IAAA;UAAA;QAAA,GAAAkJ,SAAA;MAAA,CAElC;MAAA,SAAA3E,oBAAA8E,GAAA;QAAA,OAAAJ,oBAAA,CAAA9I,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAAmE,mBAAA;IAAA;IAED;AACF;AACA;AACA;AACA;EAJE;IAAAxG,GAAA;IAAA9D,KAAA;MAAA,IAAAqP,4BAAA,OAAA3K,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAKA,SAAA0K,UAAyCC,KAAc;QAAA,IAAAC,MAAA;QAAA,OAAA7K,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA0K,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAxK,IAAA,GAAAwK,UAAA,CAAAhP,IAAA;YAAA;cAAAgP,UAAA,CAAAhP,IAAA;cAAA,OAC/C,IAAI,CAACoB,KAAK,CAACqK,YAAY,mBAAAzH,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAAC,SAAA+K,UAAA;gBAAA,IAAAtG,KAAA;gBAAA,OAAA1E,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA6K,WAAAC,UAAA;kBAAA,kBAAAA,UAAA,CAAA3K,IAAA,GAAA2K,UAAA,CAAAnP,IAAA;oBAAA;sBAAA,KAExB6O,KAAK;wBAAAM,UAAA,CAAAnP,IAAA;wBAAA;sBAAA;sBACPqC,eAAG,CAACoB,IAAI,CAAC,6EAA6E,EAAE;wBACtFG,IAAI,EAAErB,4BAAiB;wBACvBoB,MAAM,EAAEmL,MAAI,CAACM,2BAA2B,CAAC1O;sBAC3C,CAAC,CAAC;sBACFoO,MAAI,CAACO,mBAAmB,EAAE;sBAAC,KACvBP,MAAI,CAACnF,kBAAkB,EAAE;wBAAAwF,UAAA,CAAAnP,IAAA;wBAAA;sBAAA;sBAAAmP,UAAA,CAAAnP,IAAA;sBAAA,OAErB8O,MAAI,CAACd,UAAU,EAAE;oBAAA;sBAAA,KAQrBc,MAAI,CAACxL,eAAe;wBAAA6L,UAAA,CAAAnP,IAAA;wBAAA;sBAAA;sBAAAmP,UAAA,CAAAnP,IAAA;sBAAA,OAOF8O,MAAI,CAAC/F,2BAA2B,CAClD+F,MAAI,CAACM,2BAA2B,CAAC1O,IAAI,CACtC;oBAAA;sBAFKiI,KAAK,GAAAwG,UAAA,CAAArI,IAAA;sBAAA,MAIP,CAAC6B,KAAK,IAAI,CAACmG,MAAI,CAACnF,kBAAkB,EAAE;wBAAAwF,UAAA,CAAAnP,IAAA;wBAAA;sBAAA;sBAAAmP,UAAA,CAAAnP,IAAA;sBAAA,OAChC8O,MAAI,CAAClF,mBAAmB,CAACkF,MAAI,CAACM,2BAA2B,CAAC1O,IAAI,CAAC;oBAAA;sBAGzEmO,KAAK,GAAG,KAAK;oBAAC;oBAAA;sBAAA,OAAAM,UAAA,CAAA9J,IAAA;kBAAA;gBAAA,GAAA4J,SAAA;cAAA,CAEjB,GAAC;YAAA;cAAA,OAAAD,UAAA,CAAAvK,MAAA,WAEKoK,KAAK;YAAA;YAAA;cAAA,OAAAG,UAAA,CAAA3J,IAAA;UAAA;QAAA,GAAAuJ,SAAA;MAAA,CACb;MAAA,SAAAQ,4BAAAE,GAAA;QAAA,OAAAX,4BAAA,CAAAnJ,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAA2J,2BAAA;IAAA;IAED;AACF;AACA;AACA;AACA;EAJE;IAAAhM,GAAA;IAAA9D,KAAA,EAKA,SAAAiQ,4BAAA,EAAsC;MAAA,IAAAC,MAAA;MACpC;QAAA,IAAAC,KAAA,OAAAzL,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAAO,SAAAwL,UAAOC,WAAwB,EAAEjH,MAAc;UAAA,IAAAkH,UAAA,EAAAC,OAAA,EAAAC,UAAA;UAAA,OAAA7L,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA0L,WAAAC,UAAA;YAAA,kBAAAA,UAAA,CAAAxL,IAAA,GAAAwL,UAAA,CAAAhQ,IAAA;cAAA;gBAC9C4P,UAAU,GAAG;kBAAChM,IAAI,EAAErB,4BAAiB;kBAAEoB,MAAM,EAAE+E;gBAAM,CAAC;gBAAA,IACvD8G,MAAI,CAACS,UAAU,EAAE;kBAAAD,UAAA,CAAAhQ,IAAA;kBAAA;gBAAA;gBACpBqC,eAAG,CAACoB,IAAI,CAAC,uCAAuC,EAAEmM,UAAU,CAAC;gBACvDC,OAAO,GAAGL,MAAI,CAACU,iBAAiB,CAACP,WAAW,CAAC;gBAAA,KAE/CE,OAAO;kBAAAG,UAAA,CAAAhQ,IAAA;kBAAA;gBAAA;gBACTwP,MAAI,CAACW,WAAW,CAAC,IAAI,CAAC;gBAACH,UAAA,CAAAhQ,IAAA;gBAAA,OACjBwP,MAAI,CAACxB,UAAU,EAAE;cAAA;gBAAAgC,UAAA,CAAAhQ,IAAA;gBAAA,OACEwP,MAAI,CAACzG,2BAA2B,CAACL,MAAM,CAAC;cAAA;gBAA3DoH,UAAU,GAAAE,UAAA,CAAAlJ,IAAA;gBAChB0I,MAAI,CAACW,WAAW,CAAC,KAAK,CAAC;gBACvB,IAAIX,MAAI,CAAC7F,kBAAkB,EAAE,EAAE;kBAC7BtH,eAAG,CAACoB,IAAI,CAAC,qCAAqC,EAAEmM,UAAU,CAAC;gBAC7D;gBAAC,OAAAI,UAAA,CAAAvL,MAAA,WAEMqL,UAAU;cAAA;gBAEnBN,MAAI,CAACnO,WAAW,CAACkG,mBAAW,CAACC,YAAY,CAAC;gBAACwI,UAAA,CAAAhQ,IAAA;gBAAA;cAAA;gBAE3CwP,MAAI,CAACnO,WAAW,CAACkG,mBAAW,CAACC,YAAY,CAAC;cAAC;gBAAA,OAAAwI,UAAA,CAAAvL,MAAA,WAGtC,KAAK;cAAA;cAAA;gBAAA,OAAAuL,UAAA,CAAA3K,IAAA;YAAA;UAAA,GAAAqK,SAAA;QAAA,CACb;QAAA,iBAAAU,GAAA,EAAAC,IAAA;UAAA,OAAAZ,KAAA,CAAAjK,KAAA,OAAAC,SAAA;QAAA;MAAA;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAArC,GAAA;IAAA9D,KAAA;MAAA,IAAAgR,oBAAA,OAAAtM,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAIA,SAAAqM,UAAA;QAAA,IAAA5H,KAAA;QAAA,OAAA1E,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAAmM,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAjM,IAAA,GAAAiM,UAAA,CAAAzQ,IAAA;YAAA;cAAA,MACM,IAAI,CAACiD,iBAAiB,CAACjE,MAAM,GAAG,CAAC;gBAAAyR,UAAA,CAAAzQ,IAAA;gBAAA;cAAA;cAAAyQ,UAAA,CAAAzQ,IAAA;cAAA,OACf,IAAI,CAAC8I,8BAA8B,CACrD,IAAI,CAAC4H,mBAAmB,CAAChQ,IAAI,EAC7B,IAAI,CAACuC,iBAAiB,CACvB;YAAA;cAHK0F,KAAK,GAAA8H,UAAA,CAAA3J,IAAA;cAAA,MAKP,CAAC,IAAI,CAAC6C,kBAAkB,EAAE,IAAI,CAAChB,KAAK;gBAAA8H,UAAA,CAAAzQ,IAAA;gBAAA;cAAA;cAAAyQ,UAAA,CAAAzQ,IAAA;cAAA,OAChC,IAAI,CAACkL,kBAAkB,EAAE;YAAA;YAAA;cAAA,OAAAuF,UAAA,CAAApL,IAAA;UAAA;QAAA,GAAAkL,SAAA;MAAA,CAGpC;MAAA,SAAAG,oBAAA;QAAA,OAAAJ,oBAAA,CAAA9K,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAAiL,mBAAA;IAAA;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAtN,GAAA;IAAA9D,KAAA;MAAA,IAAAqR,+BAAA,OAAA3M,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAQA,SAAA0M,UACElI,MAAc;QAAA,IAAAmI,MAAA;QAAA,IAAAC,OAAA;UAAAnI,KAAA;UAAAoI,SAAA;UAAAC,KAAA;UAAAxN,GAAA;UAAAyN,qBAAA;UAAAC,IAAA;UAAA7I,IAAA;UAAA8I,KAAA;UAAAC,OAAA,GAAA3L,SAAA;QAAA,OAAAxB,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAAgN,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAA9M,IAAA,GAAA8M,UAAA,CAAAtR,IAAA;YAAA;cACd8Q,OAAiB,GAAAM,OAAA,CAAApS,MAAA,QAAAoS,OAAA,QAAArH,SAAA,GAAAqH,OAAA,MAAG,IAAI,CAACnO,iBAAiB;cAEtC0F,KAAK,GAAG,KAAK;cAAA,KAEb,IAAI,CAACgB,kBAAkB,EAAE;gBAAA2H,UAAA,CAAAtR,IAAA;gBAAA;cAAA;cAC3BqC,eAAG,CAACA,GAAG,KAAAqB,MAAA,CAAKgF,MAAM,2CAAAhF,MAAA,CAAwC,IAAI,CAACJ,eAAe,GAAI;gBAChFM,IAAI,EAAErB,4BAAiB;gBACvBoB,MAAM,EAAE,IAAI,CAACmF,8BAA8B,CAACpI;cAC9C,CAAC,CAAC;cAAC,OAAA4Q,UAAA,CAAA7M,MAAA,WAEIkE,KAAK;YAAA;cAAAoI,SAAA,GAAAvS,0BAAA,CAEIsS,OAAO;cAAAQ,UAAA,CAAA9M,IAAA;cAAAuM,SAAA,CAAA5R,CAAA;YAAA;cAAA,KAAA6R,KAAA,GAAAD,SAAA,CAAA3R,CAAA,IAAAC,IAAA;gBAAAiS,UAAA,CAAAtR,IAAA;gBAAA;cAAA;cAAdwD,GAAG,GAAAwN,KAAA,CAAA1R,KAAA;cAAAgS,UAAA,CAAA9M,IAAA;cAEVmE,KAAK,GAAG,KAAK;cACb,IAAI,CAAC1G,kBAAkB,GAAGC,0BAAkB,CAACoF,QAAQ;cACrD,IAAI,CAACjG,WAAW,CAACkG,mBAAW,CAACgK,UAAU,CAAC;cACxClP,eAAG,CAACA,GAAG,KAAAqB,MAAA,CAAKgF,MAAM,iCAAAhF,MAAA,CAA8BF,GAAG,GAAI;gBACrDI,IAAI,EAAErB,4BAAiB;gBACvBoB,MAAM,EAAE,IAAI,CAACmF,8BAA8B,CAACpI;cAC9C,CAAC,CAAC;cACF;cAAA4Q,UAAA,CAAAtR,IAAA;cAAA,OACmB,IAAI,CAACsI,gBAAgB,CAAC9E,GAAG,CAAC;YAAA;cAAvC0N,IAAI,GAAAI,UAAA,CAAAxK,IAAA;cACV,IAAI,CAACmB,UAAU,GAAGiJ,IAAI,CAAC7I,IAAmB;cAC1C,IAAI,CAAChH,WAAW,CAACkG,mBAAW,CAACiK,UAAU,EAAEN,IAAI,CAAC7I,IAAI,CAAgB;cAClE,IAAI,CAACpG,kBAAkB,GAAGC,0BAAkB,CAACkM,MAAM;cACnD,IAAI,CAAC7K,kBAAkB,CAACC,GAAG,CAAC;cAC5B,IAAI,CAAC0K,iBAAiB,CAAC,IAAI,CAACjG,UAAU,CAAC;cACvC,IAAI,CAAClF,aAAa,CAAC0O,aAAa,CAAC,IAAI,CAACxJ,UAAU,CAAC;cACjD,IAAI,CAAClF,aAAa,CAAC2O,wBAAwB,CACzCC,oBAAY,CAACC,YAAY,EACzBC,kBAAU,CAACC,QAAQ,EACnBC,mBAAW,CAACC,UAAU,EACtBjI,SAAS,CACV;cACD,IAAI,CAACkI,mBAAmB,EAAAhB,qBAAA,GACtB,IAAI,CAAChJ,UAAU,CAACjG,MAAM,cAAAiP,qBAAA,uBAAtBA,qBAAA,CAAwBtM,GAAG,EAC3B,IAAI,CAACsD,UAAU,CAACiK,iBAAiB,CAClC;cACD,IAAI,CAACtF,gBAAgB,EAAE;cAAC,OAAA0E,UAAA,CAAA7M,MAAA;YAAA;cAAA6M,UAAA,CAAA9M,IAAA;cAAA8M,UAAA,CAAAnL,EAAA,GAAAmL,UAAA;cAGlBjJ,IAAI,GAAAiJ,UAAA,CAAAnL,EAAA,EAEV;cAAAmL,UAAA,CAAAtR,IAAA;cAAA,OACc,IAAAmS,gCAAwB,EACpC9J,IAAI,EACJ,UAACgE,WAAW,EAAEyD,UAAU,EAAK;gBAC3B,IAAIA,UAAU,EAAE;kBACde,MAAI,CAACxP,WAAW,CAACkG,mBAAW,CAAC+E,KAAK,EAAEvC,SAAS,EAAEsC,WAAW,CAAC;gBAC7D,CAAC,MAAM;kBACLwE,MAAI,CAACxP,WAAW,CAACkG,mBAAW,CAACC,YAAY,CAAC;gBAC5C;gBACAqJ,MAAI,CAAC9N,aAAa,CAAC2O,wBAAwB,CACzCC,oBAAY,CAACS,kBAAkB,EAC/BP,kBAAU,CAACC,QAAQ,EACnBC,mBAAW,CAACC,UAAU,EACtB3F,WAAW,CACZ;cACH,CAAC,EACD;gBAAC1I,MAAM,EAAE,IAAI,CAACmF,8BAA8B,CAACpI,IAAI;gBAAEkD,IAAI,EAAErB;cAAiB,CAAC,EAC3E,IAAI,CAACgN,2BAA2B,EAAE,CACnC;YAAA;cAjBD5G,KAAK,GAAA2I,UAAA,CAAAxK,IAAA;cAAA,MAkBD,IAAI,CAAC7E,kBAAkB,KAAKC,0BAAkB,CAACkM,MAAM;gBAAAkD,UAAA,CAAAtR,IAAA;gBAAA;cAAA;cACvDqC,eAAG,CAACoB,IAAI,KAAAC,MAAA,CACFgF,MAAM,yDAAAhF,MAAA,CAAsD,IAAI,CAACJ,eAAe,GACpF;gBACEM,IAAI,EAAErB,4BAAiB;gBACvBoB,MAAM,EAAE,IAAI,CAACmF,8BAA8B,CAACpI;cAC9C,CAAC,CACF;cAAC,OAAA4Q,UAAA,CAAA7M,MAAA;YAAA;cAAA,KAGAkE,KAAK;gBAAA2I,UAAA,CAAAtR,IAAA;gBAAA;cAAA;cACP,IAAI,CAACqH,SAAS,CAACnF,0BAAkB,CAACoF,QAAQ,CAAC;cAAC,OAAAgK,UAAA,CAAA7M,MAAA;YAAA;cAAA,MAEnCiE,MAAM,KAAK,IAAI,CAAC0E,eAAe,CAAC1M,IAAI;gBAAA4Q,UAAA,CAAAtR,IAAA;gBAAA;cAAA;cACvCmR,KAAK,GAAG9I,IAAI,CAACgK,UAAU;cAAA,MAEzBlB,KAAK,KAAKmB,iBAAU,CAACC,iBAAiB;gBAAAjB,UAAA,CAAAtR,IAAA;gBAAA;cAAA;cAAAsR,UAAA,CAAAtR,IAAA;cAAA,OAElC,IAAI,CAAC6J,wBAAwB,EAAE;YAAA;cACrClB,KAAK,GAAG,IAAI;cAAC,OAAA2I,UAAA,CAAA7M,MAAA;YAAA;cAAA6M,UAAA,CAAAtR,IAAA;cAAA;YAAA;cAAAsR,UAAA,CAAAtR,IAAA;cAAA;YAAA;cAAAsR,UAAA,CAAA9M,IAAA;cAAA8M,UAAA,CAAAjL,EAAA,GAAAiL,UAAA;cAAAP,SAAA,CAAAxR,CAAA,CAAA+R,UAAA,CAAAjL,EAAA;YAAA;cAAAiL,UAAA,CAAA9M,IAAA;cAAAuM,SAAA,CAAAtR,CAAA;cAAA,OAAA6R,UAAA,CAAAkB,MAAA;YAAA;cAAA,OAAAlB,UAAA,CAAA7M,MAAA,WAOdkE,KAAK;YAAA;YAAA;cAAA,OAAA2I,UAAA,CAAAjM,IAAA;UAAA;QAAA,GAAAuL,SAAA;MAAA,CACb;MAAA,SAAA9H,+BAAA2J,IAAA;QAAA,OAAA9B,+BAAA,CAAAnL,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAAqD,8BAAA;IAAA;IAED;AACF;AACA;AACA;EAHE;IAAA1F,GAAA;IAAA9D,KAAA,EAIA,SAAA2S,oBAA4BzO,GAAW,EAAE2F,QAAgB,EAAE;MAAA,IAAAuJ,MAAA;MACzD,IAAIC,mBAAmB,GAAG,CAAC;MAC3B,IAAI,CAACtD,mBAAmB,EAAE;MAC1B,IAAI,CAACuD,cAAc,GAAGC,WAAW,mBAAA7O,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAAC,SAAA4O,UAAA;QAAA,IAAAlD,UAAA;QAAA,OAAA3L,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA0O,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAxO,IAAA,GAAAwO,UAAA,CAAAhT,IAAA;YAAA;cAC1B4P,UAAU,GAAG;gBACjBhM,IAAI,EAAErB,4BAAiB;gBACvBoB,MAAM,EAAE+O,MAAI,CAACT,mBAAmB,CAACvR;cACnC,CAAC;cAAAsS,UAAA,CAAAhT,IAAA;cAAA,OACK0S,MAAI,CAACtR,KAAK,CAACqK,YAAY,mBAAAzH,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAAC,SAAA+O,UAAA;gBAAA,IAAAC,GAAA,EAAA/B,KAAA,EAAAxI,KAAA;gBAAA,OAAA1E,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA8O,WAAAC,UAAA;kBAAA,kBAAAA,UAAA,CAAA5O,IAAA,GAAA4O,UAAA,CAAApT,IAAA;oBAAA;sBAAA,MACxB0S,MAAI,CAAC/I,kBAAkB,EAAE,IAAIgJ,mBAAmB,GAAG,CAAC;wBAAAS,UAAA,CAAApT,IAAA;wBAAA;sBAAA;sBAAAoT,UAAA,CAAA5O,IAAA;sBAAA4O,UAAA,CAAApT,IAAA;sBAAA,OAElC0S,MAAI,CAACpN,aAAa,CAAC9B,GAAG,CAAC;oBAAA;sBAAnC0P,GAAG,GAAAE,UAAA,CAAAtM,IAAA;sBACTzE,eAAG,CAACoB,IAAI,4BAAAC,MAAA,CAA4BwP,GAAG,CAACb,UAAU,GAAIzC,UAAU,CAAC;sBACjE,IAAI+C,mBAAmB,GAAG,CAAC,EAAE;wBAC3BD,MAAI,CAACrR,WAAW,CAACkG,mBAAW,CAAC8L,WAAW,CAAC;sBAC3C;sBACAV,mBAAmB,GAAG,CAAC;sBAACS,UAAA,CAAApT,IAAA;sBAAA;oBAAA;sBAAAoT,UAAA,CAAA5O,IAAA;sBAAA4O,UAAA,CAAAjN,EAAA,GAAAiN,UAAA;sBAExBT,mBAAmB,IAAI,CAAC;sBAClBxB,KAAK,GAAAiC,UAAA,CAAAjN,EAAA;sBAEX9D,eAAG,CAAC+E,IAAI,sBAAA1D,MAAA,CACeiP,mBAAmB,wBAAAjP,MAAA,CAAqByN,KAAK,CAACkB,UAAU,QAC7EzC,UAAU,CACX;sBAACwD,UAAA,CAAApT,IAAA;sBAAA,OAEkB,IAAAmS,gCAAwB,EAC1ChB,KAAK,EACL,UAAC9E,WAAW,EAAEyD,UAAU,EAAK;wBAC3B,IAAIA,UAAU,EAAE;0BACd4C,MAAI,CAACrR,WAAW,CAACkG,mBAAW,CAAC+E,KAAK,EAAEvC,SAAS,EAAEsC,WAAW,CAAC;wBAC7D;wBACAqG,MAAI,CAAC3P,aAAa,CAAC2O,wBAAwB,CACzCC,oBAAY,CAACC,YAAY,EACzBC,kBAAU,CAACyB,iBAAiB,EAC5BvB,mBAAW,CAACC,UAAU,EACtB3F,WAAW,CACZ;sBACH,CAAC,EACD;wBAAC1I,MAAM,EAAE+O,MAAI,CAACT,mBAAmB,CAACvR,IAAI;wBAAEkD,IAAI,EAAErB;sBAAiB,CAAC,CACjE;oBAAA;sBAdKoG,KAAK,GAAAyK,UAAA,CAAAtM,IAAA;sBAAA,MAgBP6B,KAAK,IAAIgK,mBAAmB,IAAI,CAAC;wBAAAS,UAAA,CAAApT,IAAA;wBAAA;sBAAA;sBACnC0S,MAAI,CAACrL,SAAS,CAACnF,0BAAkB,CAACoF,QAAQ,CAAC;sBAC3CoL,MAAI,CAACrD,mBAAmB,EAAE;sBAC1BqD,MAAI,CAACnJ,kBAAkB,EAAE;sBACzBmJ,MAAI,CAACrR,WAAW,CAACkG,mBAAW,CAACC,YAAY,CAAC;sBAAC,IAEtCmB,KAAK;wBAAAyK,UAAA,CAAApT,IAAA;wBAAA;sBAAA;sBAAAoT,UAAA,CAAApT,IAAA;sBAAA,OAEF0S,MAAI,CAACa,kBAAkB,CAACb,MAAI,CAACT,mBAAmB,CAACvR,IAAI,CAAC;oBAAA;sBAAA0S,UAAA,CAAApT,IAAA;sBAAA;oBAAA;sBAG9D0S,MAAI,CAACrR,WAAW,CAACkG,mBAAW,CAACiM,YAAY,CAAC;oBAAC;oBAAA;sBAAA,OAAAJ,UAAA,CAAA/N,IAAA;kBAAA;gBAAA,GAAA4N,SAAA;cAAA,CAIlD,GAAC;YAAA;YAAA;cAAA,OAAAD,UAAA,CAAA3N,IAAA;UAAA;QAAA,GAAAyN,SAAA;MAAA,CACH,IAAE3J,QAAQ,GAAG,IAAI,CAAC;IACrB;;IAEA;AACF;AACA;EAFE;IAAA/F,GAAA;IAAA9D,KAAA,EAGA,SAAA+P,oBAAA,EAA6B;MAC3B,IAAI,IAAI,CAACuD,cAAc,EAAE;QACvBa,aAAa,CAAC,IAAI,CAACb,cAAc,CAAC;QAClC,IAAI,CAACA,cAAc,GAAG7I,SAAS;MACjC;IACF;EAAC;IAAA3G,GAAA;IAAA9D,KAAA,EAED,SAAAoU,mBAAA,EAAqC;MACnC,OAAO,IAAI,CAACC,gBAAgB;IAC9B;EAAC;IAAAvQ,GAAA;IAAA9D,KAAA;MAAA,IAAAsU,WAAA,OAAA5P,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CAED,SAAA2P,UAAA;QAAA,IAAAC,sBAAA,EAAAC,sBAAA;QAAA,OAAA9P,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAA2P,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAzP,IAAA,GAAAyP,UAAA,CAAAjU,IAAA;YAAA;cAAAiU,UAAA,CAAAzP,IAAA;cAAAyP,UAAA,CAAAjU,IAAA;cAAA,OAEU,IAAI,CAAC0H,kBAAkB,CAC3B,IAAI,CAACpE,eAAe,GAAAwQ,sBAAA,GACpB,IAAI,CAAC7L,UAAU,CAACjG,MAAM,cAAA8R,sBAAA,uBAAtBA,sBAAA,CAAwBlO,QAAQ,GAAAmO,sBAAA,GAChC,IAAI,CAAC9L,UAAU,CAACjG,MAAM,cAAA+R,sBAAA,uBAAtBA,sBAAA,CAAwB3L,eAAe,CACxC;YAAA;cAAA6L,UAAA,CAAAjU,IAAA;cAAA;YAAA;cAAAiU,UAAA,CAAAzP,IAAA;cAAAyP,UAAA,CAAA9N,EAAA,GAAA8N,UAAA;cAED5R,eAAG,CAAC+E,IAAI,8BAA8B,CAAC,CAAC,CAAC;YAAC;cAG5C,IAAI,CAACiI,mBAAmB,EAAE;cAC1B,IAAI,CAAChI,SAAS,CAACnF,0BAAkB,CAACoF,QAAQ,CAAC;YAAC;YAAA;cAAA,OAAA2M,UAAA,CAAA5O,IAAA;UAAA;QAAA,GAAAwO,SAAA;MAAA,CAC7C;MAAA,SAAA7F,WAAA;QAAA,OAAA4F,WAAA,CAAApO,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAAuI,UAAA;IAAA;IAED;AACF;AACA;AACA;EAHE;IAAA5K,GAAA;IAAA9D,KAAA,EAIA,SAAA2Q,WAAA,EAA8B;MAC5B,OAAO,IAAI,CAACiE,aAAa;IAC3B;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA9Q,GAAA;IAAA9D,KAAA,EAKA,SAAA6Q,YAAoB7Q,KAAc,EAAE;MAClC,IAAI,CAAC4U,aAAa,GAAG5U,KAAK;IAC5B;;IAEA;AACF;AACA;AACA;EAHE;IAAA8D,GAAA;IAAA9D,KAAA,EAIA,SAAA4Q,kBAA0BP,WAAwB,EAAE;MAClD,IAAIA,WAAW,CAACwE,OAAO,IAAIxE,WAAW,CAACwE,OAAO,CAACnV,MAAM,GAAG,CAAC,EAAE;QACzD,IAAI,CAACiJ,UAAU,GAAG;UAChBnG,MAAM,EAAE6N,WAAW,CAAC7N,MAAM;UAC1BE,MAAM,EAAE2N,WAAW,CAACwE,OAAO,CAAC,CAAC,CAAC;UAC9BjC,iBAAiB,EAAEkC,qCAA0B;UAC7C1R,mBAAmB,EAAEC,wCAA6B;UAClDH,mBAAmB,EAAEC;QACvB,CAAC;QAED,IAAM4R,eAAe,MAAA3Q,MAAA,CAAM4C,oCAAyB,OAAA5C,MAAA,CAAIiM,WAAW,CAACwE,OAAO,CAAC,CAAC,CAAC,CAACvO,QAAQ,CAAE;QAEzF,IAAMjB,GAAG,GAAGgL,WAAW,CAACwE,OAAO,CAAC,CAAC,CAAC,CAACxP,GAAG,CAAC2P,OAAO,CAACD,eAAe,EAAE,EAAE,CAAC;QACnE,IAAI,CAAC9Q,kBAAkB,CAACoB,GAAG,CAAC;QAC5B,IAAI,CAAC1C,kBAAkB,GAAGC,0BAAkB,CAACkM,MAAM;QAEnD,OAAO,IAAI;MACb;MAEA,OAAO,KAAK;IACd;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAhL,GAAA;IAAA9D,KAAA;MAAA,IAAAiV,mBAAA,OAAAvQ,kBAAA,CAAAxC,OAAA,gBAAAyC,YAAA,CAAAzC,OAAA,CAAA0C,IAAA,CASA,SAAAsQ,UAAgC9L,MAAc;QAAA,IAAAC,KAAA;QAAA,OAAA1E,YAAA,CAAAzC,OAAA,CAAA6C,IAAA,UAAAoQ,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAAlQ,IAAA,GAAAkQ,UAAA,CAAA1U,IAAA;YAAA;cAC5C,IAAI,CAAC2T,gBAAgB,GAAG,KAAK;cAAC,IACzB,IAAI,CAAChK,kBAAkB,EAAE;gBAAA+K,UAAA,CAAA1U,IAAA;gBAAA;cAAA;cAAA,MACxB,IAAA8N,KAAA,CAAAtM,OAAA,EAAY,IAAI,CAACoB,WAAW,CAACmL,cAAc,EAAE,CAAC,CAAC/O,MAAM,KAAK,CAAC;gBAAA0V,UAAA,CAAA1U,IAAA;gBAAA;cAAA;cAAA0U,UAAA,CAAA1U,IAAA;cAAA,OACzC,IAAI,CAAC+I,2BAA2B,CAACL,MAAM,CAAC;YAAA;cAAtDC,KAAK,GAAA+L,UAAA,CAAA5N,IAAA;cAAA,MAEP,CAAC6B,KAAK,IAAI,CAAC,IAAI,CAACgB,kBAAkB,EAAE;gBAAA+K,UAAA,CAAA1U,IAAA;gBAAA;cAAA;cAAA0U,UAAA,CAAA1U,IAAA;cAAA,OAChC,IAAI,CAAC4J,mBAAmB,CAAClB,MAAM,CAAC;YAAA;cAAAgM,UAAA,CAAA1U,IAAA;cAAA;YAAA;cAGxC,IAAI,CAAC2T,gBAAgB,GAAG,IAAI;cAC5BtR,eAAG,CAACoB,IAAI,CAAC,+DAA+D,EAAE;gBACxEG,IAAI,EAAErB,4BAAiB;gBACvBoB,MAAM,EAAE,IAAI,CAAC4P,kBAAkB,CAAC7S;cAClC,CAAC,CAAC;YAAC;YAAA;cAAA,OAAAgU,UAAA,CAAArP,IAAA;UAAA;QAAA,GAAAmP,SAAA;MAAA,CAGR;MAAA,SAAAjB,mBAAAoB,IAAA;QAAA,OAAAJ,mBAAA,CAAA/O,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAA8N,kBAAA;IAAA;EAAA;EAAA,OAAAtS,YAAA;AAAA;AAGH;AACA;AADA2T,OAAA,CAAA3T,YAAA,GAAAA,YAAA;AAEO,IAAM4T,kBAAkB,GAAG,SAArBA,kBAAkBA,CAC7B3T,KAAe,EACfC,WAAwB,EACxBC,KAAY,EACZC,WAAgC,EAChCC,QAAgB;EAAA,OACE,IAAIL,YAAY,CAACC,KAAK,EAAEC,WAAW,EAAEC,KAAK,EAAEC,WAAW,EAAEC,QAAQ,CAAC;AAAA;AAACsT,OAAA,CAAAC,kBAAA,GAAAA,kBAAA"}
|
|
@@ -106,7 +106,7 @@ describe('Registration Tests', function () {
|
|
|
106
106
|
expect(webex.request).toBeCalledOnceWith(_objectSpread(_objectSpread({}, mockResponse), {}, {
|
|
107
107
|
method: 'POST'
|
|
108
108
|
}));
|
|
109
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
109
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
|
|
110
110
|
expect(lineEmitter).toBeCalledTimes(2);
|
|
111
111
|
expect(lineEmitter).toBeCalledWith(_types4.LINE_EVENTS.CONNECTING);
|
|
112
112
|
expect(lineEmitter).toBeCalledWith(_types4.LINE_EVENTS.REGISTERED, _registerFixtures.mockPostResponse);
|
|
@@ -131,8 +131,8 @@ describe('Registration Tests', function () {
|
|
|
131
131
|
expect(webex.request).toBeCalledOnceWith(_objectSpread(_objectSpread({}, mockResponse), {}, {
|
|
132
132
|
method: 'POST'
|
|
133
133
|
}));
|
|
134
|
-
error = (0, _LineError.createLineError)('User is unauthorized due to an expired token. Sign out, then sign back in.', {}, _types3.ERROR_TYPE.TOKEN_ERROR,
|
|
135
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
134
|
+
error = (0, _LineError.createLineError)('User is unauthorized due to an expired token. Sign out, then sign back in.', {}, _types3.ERROR_TYPE.TOKEN_ERROR, _types.RegistrationStatus.INACTIVE);
|
|
135
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.INACTIVE);
|
|
136
136
|
expect(lineEmitter).toBeCalledTimes(2);
|
|
137
137
|
expect(lineEmitter).nthCalledWith(1, _types4.LINE_EVENTS.CONNECTING);
|
|
138
138
|
expect(lineEmitter).nthCalledWith(2, _types4.LINE_EVENTS.ERROR, undefined, error);
|
|
@@ -164,7 +164,7 @@ describe('Registration Tests', function () {
|
|
|
164
164
|
}
|
|
165
165
|
});
|
|
166
166
|
});
|
|
167
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
167
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.IDLE);
|
|
168
168
|
_context3.next = 5;
|
|
169
169
|
return reg.triggerRegistration();
|
|
170
170
|
case 5:
|
|
@@ -179,7 +179,7 @@ describe('Registration Tests', function () {
|
|
|
179
179
|
expect(warnSpy).toBeCalledWith('User device limit exceeded', expect.anything());
|
|
180
180
|
expect(logSpy).toBeCalledWith('Registration restoration in progress.', expect.anything());
|
|
181
181
|
expect(logSpy).toBeCalledWith('Registration restored successfully.', expect.anything());
|
|
182
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
182
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
|
|
183
183
|
expect(lineEmitter).toBeCalledTimes(4);
|
|
184
184
|
expect(lineEmitter).nthCalledWith(1, _types4.LINE_EVENTS.CONNECTING);
|
|
185
185
|
expect(lineEmitter).nthCalledWith(2, _types4.LINE_EVENTS.UNREGISTERED);
|
|
@@ -199,7 +199,7 @@ describe('Registration Tests', function () {
|
|
|
199
199
|
jest.useFakeTimers();
|
|
200
200
|
// try the primary twice and register successfully with backup servers
|
|
201
201
|
webex.request.mockRejectedValueOnce(failurePayload).mockRejectedValueOnce(failurePayload).mockResolvedValueOnce(successPayload);
|
|
202
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
202
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.IDLE);
|
|
203
203
|
_context4.next = 5;
|
|
204
204
|
return reg.triggerRegistration();
|
|
205
205
|
case 5:
|
|
@@ -216,7 +216,7 @@ describe('Registration Tests', function () {
|
|
|
216
216
|
method: 'POST',
|
|
217
217
|
uri: "".concat(mobiusUris.backup[0], "device")
|
|
218
218
|
}));
|
|
219
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
219
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
|
|
220
220
|
/* Active Url must match with the backup url as per the test */
|
|
221
221
|
expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);
|
|
222
222
|
case 13:
|
|
@@ -232,7 +232,7 @@ describe('Registration Tests', function () {
|
|
|
232
232
|
jest.useFakeTimers();
|
|
233
233
|
// try the primary twice and register successfully with backup servers
|
|
234
234
|
webex.request.mockRejectedValue(failurePayload);
|
|
235
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
235
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.IDLE);
|
|
236
236
|
_context5.next = 5;
|
|
237
237
|
return reg.triggerRegistration();
|
|
238
238
|
case 5:
|
|
@@ -263,7 +263,7 @@ describe('Registration Tests', function () {
|
|
|
263
263
|
method: 'POST',
|
|
264
264
|
uri: "".concat(mobiusUris.backup[1], "device")
|
|
265
265
|
}));
|
|
266
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
266
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.INACTIVE);
|
|
267
267
|
case 17:
|
|
268
268
|
case "end":
|
|
269
269
|
return _context5.stop();
|
|
@@ -295,7 +295,7 @@ describe('Registration Tests', function () {
|
|
|
295
295
|
|
|
296
296
|
/* Active Url must match with the backup url as per the test */
|
|
297
297
|
expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);
|
|
298
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
298
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
|
|
299
299
|
case 13:
|
|
300
300
|
case "end":
|
|
301
301
|
return _context6.stop();
|
|
@@ -331,7 +331,7 @@ describe('Registration Tests', function () {
|
|
|
331
331
|
});
|
|
332
332
|
expect(failbackRetry429Spy).toBeCalledOnceWith();
|
|
333
333
|
expect(reg.failback429RetryAttempts).toBe(0);
|
|
334
|
-
expect(reg.getStatus()).toBe(_types.
|
|
334
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.INACTIVE);
|
|
335
335
|
expect(restoreSpy).toBeCalledOnceWith(_constants.FAILBACK_429_RETRY_UTIL);
|
|
336
336
|
expect(restartSpy).toBeCalledOnceWith(_constants.FAILBACK_429_RETRY_UTIL);
|
|
337
337
|
expect(reg.failbackTimer).toBe(undefined);
|
|
@@ -358,7 +358,7 @@ describe('Registration Tests', function () {
|
|
|
358
358
|
method: 'executeFailback',
|
|
359
359
|
file: _constants.REGISTRATION_FILE
|
|
360
360
|
});
|
|
361
|
-
expect(reg.getStatus()).toBe(_types.
|
|
361
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.INACTIVE);
|
|
362
362
|
expect(restoreSpy).toBeCalledOnceWith(_constants.FAILBACK_UTIL);
|
|
363
363
|
expect(restartSpy).toBeCalledOnceWith(_constants.FAILBACK_UTIL);
|
|
364
364
|
expect(reg.rehomingIntervalMin).toBe(_constants.DEFAULT_REHOMING_INTERVAL_MIN);
|
|
@@ -389,7 +389,7 @@ describe('Registration Tests', function () {
|
|
|
389
389
|
method: 'executeFailback',
|
|
390
390
|
file: _constants.REGISTRATION_FILE
|
|
391
391
|
});
|
|
392
|
-
expect(reg.getStatus()).toBe(_types.
|
|
392
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.INACTIVE);
|
|
393
393
|
expect(restoreSpy).toBeCalledOnceWith(_constants.FAILBACK_UTIL);
|
|
394
394
|
expect(restartSpy).not.toBeCalled();
|
|
395
395
|
expect(reg.failbackTimer).toBe(undefined);
|
|
@@ -418,7 +418,7 @@ describe('Registration Tests', function () {
|
|
|
418
418
|
});
|
|
419
419
|
/* Active Url should still match backup url */
|
|
420
420
|
expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);
|
|
421
|
-
expect(reg.getStatus()).toBe(_types.
|
|
421
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
|
|
422
422
|
expect(restoreSpy).toBeCalledOnceWith(_constants.FAILBACK_UTIL);
|
|
423
423
|
expect(restartSpy).not.toBeCalled();
|
|
424
424
|
expect(reg.rehomingIntervalMin).toBe(_constants.DEFAULT_REHOMING_INTERVAL_MIN);
|
|
@@ -447,7 +447,7 @@ describe('Registration Tests', function () {
|
|
|
447
447
|
|
|
448
448
|
/* Active Url must now match with the primary url */
|
|
449
449
|
expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.primary[0]);
|
|
450
|
-
expect(reg.getStatus()).toBe(_types.
|
|
450
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
|
|
451
451
|
expect(reg.failbackTimer).toBe(undefined);
|
|
452
452
|
expect(restoreSpy).not.toBeCalled();
|
|
453
453
|
expect(reg.rehomingIntervalMin).toBe(_registerFixtures.mockPostResponse.rehomingIntervalMin);
|
|
@@ -479,7 +479,7 @@ describe('Registration Tests', function () {
|
|
|
479
479
|
|
|
480
480
|
/* Active Url should still match backup url */
|
|
481
481
|
expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);
|
|
482
|
-
expect(reg.getStatus()).toBe(_types.
|
|
482
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
|
|
483
483
|
expect(restoreSpy).not.toBeCalled();
|
|
484
484
|
expect(restartSpy).not.toBeCalled();
|
|
485
485
|
expect(logSpy).toBeCalledWith('Active calls present, deferring failback to next cycle.', {
|
|
@@ -514,7 +514,7 @@ describe('Registration Tests', function () {
|
|
|
514
514
|
_context13.next = 4;
|
|
515
515
|
return reg.triggerRegistration();
|
|
516
516
|
case 4:
|
|
517
|
-
expect(reg.getStatus()).toBe(_types.
|
|
517
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
|
|
518
518
|
case 5:
|
|
519
519
|
case "end":
|
|
520
520
|
return _context13.stop();
|
|
@@ -581,7 +581,7 @@ describe('Registration Tests', function () {
|
|
|
581
581
|
method: 'startKeepaliveTimer',
|
|
582
582
|
file: _constants.REGISTRATION_FILE
|
|
583
583
|
});
|
|
584
|
-
expect(reg.getStatus()).toBe(_types.
|
|
584
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
|
|
585
585
|
expect(reg.keepaliveTimer).toBe(timer);
|
|
586
586
|
expect(lineEmitter).nthCalledWith(1, _types4.LINE_EVENTS.RECONNECTING);
|
|
587
587
|
expect(lineEmitter).nthCalledWith(2, _types4.LINE_EVENTS.RECONNECTED);
|
|
@@ -607,7 +607,7 @@ describe('Registration Tests', function () {
|
|
|
607
607
|
clearIntervalSpy = jest.spyOn(global, 'clearInterval');
|
|
608
608
|
lineEmitter.mockClear();
|
|
609
609
|
webex.request.mockRejectedValue(failurePayload);
|
|
610
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
610
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
|
|
611
611
|
timer = reg.keepaliveTimer;
|
|
612
612
|
jest.advanceTimersByTime(5 * _registerFixtures.mockPostResponse.keepaliveInterval * _constants.SEC_TO_MSEC_MFACTOR);
|
|
613
613
|
_context16.next = 12;
|
|
@@ -618,7 +618,7 @@ describe('Registration Tests', function () {
|
|
|
618
618
|
// sendKeepAlive tries to retry 5 times before accepting failure
|
|
619
619
|
// later 2 attempts to register with primary server
|
|
620
620
|
expect(handleErrorSpy).toBeCalledTimes(7);
|
|
621
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
621
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.INACTIVE);
|
|
622
622
|
expect(reg.reconnectPending).toStrictEqual(false);
|
|
623
623
|
expect(reconnectSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
|
|
624
624
|
expect(restoreSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
|
|
@@ -663,7 +663,7 @@ describe('Registration Tests', function () {
|
|
|
663
663
|
/* successful registration */
|
|
664
664
|
// webex.request.mockResolvedValue(successPayload);
|
|
665
665
|
|
|
666
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
666
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
|
|
667
667
|
url = 'https://mobius.asydm-m-1.prod.infra.webex.com/api/v1';
|
|
668
668
|
/* set active Url and expect the registration to restore to this url */
|
|
669
669
|
reg.setActiveMobiusUrl(url);
|
|
@@ -674,7 +674,7 @@ describe('Registration Tests', function () {
|
|
|
674
674
|
case 14:
|
|
675
675
|
expect(clearIntervalSpy).toBeCalledOnceWith(timer);
|
|
676
676
|
expect(handleErrorSpy).toBeCalledTimes(5);
|
|
677
|
-
expect(reg.getStatus()).toEqual(_types.
|
|
677
|
+
expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
|
|
678
678
|
expect(reconnectSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
|
|
679
679
|
expect(restoreSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
|
|
680
680
|
expect(restartRegSpy).not.toBeCalled();
|
|
@@ -703,14 +703,14 @@ describe('Registration Tests', function () {
|
|
|
703
703
|
};
|
|
704
704
|
clearIntervalSpy = jest.spyOn(global, 'clearInterval');
|
|
705
705
|
webex.request.mockRejectedValueOnce(failurePayload).mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);
|
|
706
|
-
expect(reg.getStatus()).toBe(_types.
|
|
706
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
|
|
707
707
|
timer = reg.keepaliveTimer; // sendKeepAlive tries to retry 3 times and receiving success on third time
|
|
708
708
|
jest.advanceTimersByTime(3 * _registerFixtures.mockPostResponse.keepaliveInterval * _constants.SEC_TO_MSEC_MFACTOR);
|
|
709
709
|
_context18.next = 9;
|
|
710
710
|
return flushPromises();
|
|
711
711
|
case 9:
|
|
712
712
|
expect(webex.request).toBeCalledTimes(3);
|
|
713
|
-
expect(reg.getStatus()).toBe(_types.
|
|
713
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
|
|
714
714
|
expect(handleErrorSpy).toBeCalledTimes(2);
|
|
715
715
|
expect(clearIntervalSpy).not.toBeCalled();
|
|
716
716
|
expect(reg.keepaliveTimer).toBe(timer);
|
|
@@ -734,7 +734,7 @@ describe('Registration Tests', function () {
|
|
|
734
734
|
};
|
|
735
735
|
clearIntervalSpy = jest.spyOn(global, 'clearInterval');
|
|
736
736
|
webex.request.mockRejectedValue(failurePayload);
|
|
737
|
-
expect(reg.getStatus()).toBe(_types.
|
|
737
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
|
|
738
738
|
|
|
739
739
|
/* send one keepalive */
|
|
740
740
|
jest.advanceTimersByTime(_registerFixtures.mockPostResponse.keepaliveInterval * _constants.SEC_TO_MSEC_MFACTOR);
|
|
@@ -742,7 +742,7 @@ describe('Registration Tests', function () {
|
|
|
742
742
|
return flushPromises();
|
|
743
743
|
case 10:
|
|
744
744
|
expect(clearIntervalSpy).toBeCalledTimes(1);
|
|
745
|
-
expect(reg.getStatus()).toBe(_types.
|
|
745
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.INACTIVE);
|
|
746
746
|
expect(reconnectSpy).not.toBeCalled();
|
|
747
747
|
expect(restoreSpy).not.toBeCalled();
|
|
748
748
|
expect(restartRegSpy).not.toBeCalled();
|
|
@@ -801,7 +801,7 @@ describe('Registration Tests', function () {
|
|
|
801
801
|
expect(handleErrorSpy).toBeCalledTimes(5);
|
|
802
802
|
expect(reg.keepaliveTimer).toStrictEqual(undefined);
|
|
803
803
|
expect(reg.failbackTimer).toStrictEqual(undefined);
|
|
804
|
-
expect(reg.getStatus()).toBe(_types.
|
|
804
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.INACTIVE);
|
|
805
805
|
expect(lineEmitter).lastCalledWith(_types4.LINE_EVENTS.UNREGISTERED);
|
|
806
806
|
expect(reconnectSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
|
|
807
807
|
expect(restoreSpy).not.toBeCalled();
|
|
@@ -819,7 +819,7 @@ describe('Registration Tests', function () {
|
|
|
819
819
|
return reg.reconnectOnFailure(_constants.CALLS_CLEARED_HANDLER_UTIL);
|
|
820
820
|
case 31:
|
|
821
821
|
expect((0, _keys.default)(reg.callManager.getActiveCalls()).length).toBe(0);
|
|
822
|
-
expect(reg.getStatus()).toBe(_types.
|
|
822
|
+
expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
|
|
823
823
|
expect(reconnectSpy).toBeCalledOnceWith(_constants.CALLS_CLEARED_HANDLER_UTIL);
|
|
824
824
|
expect(restoreSpy).toBeCalledOnceWith(_constants.CALLS_CLEARED_HANDLER_UTIL);
|
|
825
825
|
expect(restartRegSpy).not.toBeCalled();
|