@webex/calling 3.12.0-next.51 → 3.12.0-next.53
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/dist/CallingClient/CallingClient.js +25 -78
- package/dist/CallingClient/CallingClient.js.map +1 -1
- package/dist/CallingClient/CallingClient.test.js +322 -122
- package/dist/CallingClient/CallingClient.test.js.map +1 -1
- package/dist/CallingClient/calling/callManager.js +29 -2
- package/dist/CallingClient/calling/callManager.js.map +1 -1
- package/dist/CallingClient/calling/callManager.test.js +88 -0
- package/dist/CallingClient/calling/callManager.test.js.map +1 -1
- package/dist/CallingClient/constants.js +1 -0
- package/dist/CallingClient/constants.js.map +1 -1
- package/dist/CallingClient/registration/register.js +10 -0
- package/dist/CallingClient/registration/register.js.map +1 -1
- package/dist/CallingClient/registration/register.test.js +69 -0
- package/dist/CallingClient/registration/register.test.js.map +1 -1
- package/dist/CallingClient/utils/request.js +20 -0
- package/dist/CallingClient/utils/request.js.map +1 -1
- package/dist/CallingClient/utils/request.test.js +31 -0
- package/dist/CallingClient/utils/request.test.js.map +1 -1
- package/dist/SDKConnector/types.js.map +1 -1
- package/dist/common/Utils.js +18 -7
- package/dist/common/Utils.js.map +1 -1
- package/dist/common/Utils.test.js +79 -0
- package/dist/common/Utils.test.js.map +1 -1
- package/dist/index.js +25 -5
- package/dist/index.js.map +1 -1
- package/dist/module/CallingClient/CallingClient.js +17 -39
- package/dist/module/CallingClient/calling/callManager.js +13 -1
- package/dist/module/CallingClient/constants.js +1 -0
- package/dist/module/CallingClient/registration/register.js +3 -0
- package/dist/module/CallingClient/utils/request.js +7 -0
- package/dist/module/common/Utils.js +8 -5
- package/dist/module/index.js +2 -1
- package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/callManager.d.ts +1 -0
- package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
- package/dist/types/CallingClient/constants.d.ts +1 -0
- package/dist/types/CallingClient/constants.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
- package/dist/types/CallingClient/utils/request.d.ts +1 -0
- package/dist/types/CallingClient/utils/request.d.ts.map +1 -1
- package/dist/types/SDKConnector/types.d.ts +26 -25
- package/dist/types/SDKConnector/types.d.ts.map +1 -1
- package/dist/types/common/Utils.d.ts +2 -1
- package/dist/types/common/Utils.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -98,6 +98,26 @@ var APIRequest = exports.APIRequest = /*#__PURE__*/function () {
|
|
|
98
98
|
return this.isMobiusSocketEnabled;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
+
/**
|
|
102
|
+
* Overrides the active Mobius transport for subsequent requests.
|
|
103
|
+
*
|
|
104
|
+
* The constructor seeds this from the `webrtc-calling-over-ws` feature flag, but
|
|
105
|
+
* registration may need to fall back to HTTP for a Mobius server group that has no
|
|
106
|
+
* WSS URL (even while the feature is enabled). Toggling this keeps all transport-gated
|
|
107
|
+
* paths (connect, teardown, makeRequest) consistent for the group being registered.
|
|
108
|
+
*
|
|
109
|
+
* @param enabled - `true` to route over the Mobius WebSocket, `false` for HTTP.
|
|
110
|
+
*/
|
|
111
|
+
}, {
|
|
112
|
+
key: "setSocketEnabled",
|
|
113
|
+
value: function setSocketEnabled(enabled) {
|
|
114
|
+
this.isMobiusSocketEnabled = enabled;
|
|
115
|
+
_Logger.default.info("APIRequest transport set to: ".concat(enabled ? 'WSS' : 'HTTP'), {
|
|
116
|
+
file: _constants2.REQUEST_FILE,
|
|
117
|
+
method: _constants2.METHODS.SET_SOCKET_ENABLED
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
101
121
|
/**
|
|
102
122
|
* Ensures the Mobius WebSocket is connected before sending API requests.
|
|
103
123
|
* If the socket is already connected, resolves immediately. Otherwise,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","require","_mobiusSocket","_Logger","_interopRequireDefault","_mobiusSocketMapper","_constants","_wsFeatureFlag","_constants2","_Metrics","_types","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","normalizeWsResponse","wsResponse","_ref","_ref2","statusCode","body","data","undefined","headers","trackingid","trackingId","metadata","normalizeWsError","err","_ref3","_wsErr$response","_ref4","_wsErr$trackingId","_wsErr$response2","_ref5","_wsErr$response3","wsErr","response","APIRequest","exports","config","_classCallCheck2","logContext","file","REQUEST_FILE","method","METHODS","CONSTRUCTOR","webex","log","error","Error","isMobiusSocketEnabled","isMobiusWssEnabled","mobiusSocket","getMobiusSocketInstance","metricManager","getMetricManager","info","concat","_createClass2","key","value","isSocketEnabled","_connectToMobiusSocket","_asyncToGenerator2","_regenerator","mark","_callee","wssUrl","_this$metricManager","_this$metricManager2","_t","wrap","_context","prev","next","CONNECT_TO_MOBIUS_SOCKET","isConnected","abrupt","getConnectedWebSocketUrl","connect","submitMobiusSocketMetric","METRIC_EVENT","MOBIUS_SOCKET","MOBIUS_SOCKET_ACTION","CONNECT","METRIC_TYPE","BEHAVIORAL","warn","String","MOBIUS_SOCKET_ERROR","stop","connectToMobiusSocket","_x","_disconnectFromMobiusSocket","_callee2","options","_this$metricManager3","_this$metricManager4","_t2","_context2","DISCONNECT_FROM_MOBIUS_SOCKET","disconnect","DISCONNECT","disconnectFromMobiusSocket","_x2","_makeRequest","_callee3","request","socketType","isSupplementaryService","_t3","_t4","_t5","_t6","_t7","_t8","_t9","_t0","_t1","_t10","_t11","_t12","_t13","_t14","_context3","MAKE_REQUEST","uuid","deriveMobiusSocketMessageType","uri","MOBIUS_SOCKET_MESSAGE_TYPE","UNKNOWN","isSupplementaryServiceMessageType","CALLING_USER_AGENT","credentials","getUserToken","sent","call","userAgent","authorization","sendWssRequest","type","makeRequest","_x3","registerMobiusSocketListener","cb","_this$metricManager5","REGISTER_MOBIUS_SOCKET_LISTENER","on","_data$data$eventType","_data$data","trace","eventType","LISTENER_REGISTERED","unregisterMobiusSocketListener","_this$metricManager6","UNREGISTER_MOBIUS_SOCKET_LISTENER","off","LISTENER_UNREGISTERED","registerMobiusSocketConnectionListener","listener","REGISTER_MOBIUS_SOCKET_CONNECTION_LISTENER","onConnected","onDisconnected","MOBIUS_SOCKET_DISCONNECT_REASON","PERMANENT","TRANSIENT","REPLACED","isSocketConnected","unregisterMobiusSocketConnectionListener","UNREGISTER_MOBIUS_SOCKET_CONNECTION_LISTENER","getInstance","instance","resetInstance","createAPIRequest"],"sources":["request.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport {getMobiusSocketInstance} from '../../mobius-socket';\nimport {WebexRequestPayload} from '../../common/types';\nimport {WebexSDK} from '../../SDKConnector/types';\nimport log from '../../Logger';\nimport {\n APIRequestConfig,\n APIRequestOptions,\n MobiusAsyncEvent,\n MobiusSocketConnectionListener,\n MobiusSocketResponse,\n} from './types';\nimport {\n deriveMobiusSocketMessageType,\n isSupplementaryServiceMessageType,\n} from './mobiusSocketMapper';\nimport {MOBIUS_SOCKET_DISCONNECT_REASON, MOBIUS_SOCKET_MESSAGE_TYPE} from './constants';\nimport {isMobiusWssEnabled} from './wsFeatureFlag';\nimport {CALLING_USER_AGENT, METHODS, REQUEST_FILE} from '../constants';\nimport {getMetricManager} from '../../Metrics';\nimport {IMetricManager, METRIC_EVENT, METRIC_TYPE, MOBIUS_SOCKET_ACTION} from '../../Metrics/types';\n\n/**\n * Converts a MobiusSocketResponse into the WebexRequestPayload shape that\n * all callers (registration, call, keepalive error-handlers) expect.\n */\nfunction normalizeWsResponse(wsResponse: MobiusSocketResponse): WebexRequestPayload {\n return {\n statusCode: wsResponse.statusCode,\n body: (wsResponse.data as object) ?? undefined,\n headers: {\n trackingid: wsResponse.trackingId,\n ...((wsResponse.metadata as Record<string, string>) ?? {}),\n },\n };\n}\n\n/**\n * Converts a MobiusSocketResponseError rejection into a WebexRequestPayload-shaped\n * error so handleRegistrationErrors / handleCallErrors can process it identically.\n */\nfunction normalizeWsError(err: unknown): WebexRequestPayload {\n const wsErr = err as {\n statusCode?: number;\n statusMessage?: string;\n response?: MobiusSocketResponse;\n trackingId?: string;\n };\n\n return {\n statusCode: wsErr.statusCode,\n body: (wsErr.response?.data as object) ?? undefined,\n headers: {\n trackingid: wsErr.trackingId ?? wsErr.response?.trackingId ?? '',\n ...((wsErr.response?.metadata as Record<string, string>) ?? {}),\n },\n };\n}\n\n/**\n * APIRequest routes Mobius traffic over HTTP (`webex.request`) or the Mobius WebSocket path\n * (`mobiusSocketRequest`). `isMobiusSocketEnabled` is set in the constructor from WDM\n * `webrtc-calling-over-ws` and/or SDK config (interim until WDM is fully in prod).\n */\nexport class APIRequest {\n // eslint-disable-next-line no-use-before-define\n private static instance: APIRequest | undefined;\n private isMobiusSocketEnabled: boolean;\n private webex: WebexSDK;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private mobiusSocket: any;\n private metricManager: IMetricManager;\n\n static getInstance(config: APIRequestConfig): APIRequest {\n if (!APIRequest.instance) {\n APIRequest.instance = new APIRequest(config);\n }\n\n return APIRequest.instance;\n }\n\n static resetInstance(): void {\n APIRequest.instance = undefined;\n }\n\n /**\n * @param config - Webex instance plus optional SDK Mobius-socket override\n */\n constructor(config: APIRequestConfig) {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.CONSTRUCTOR,\n };\n\n if (!config.webex) {\n log.error('APIRequest instantiation failed: WebexSDK instance is required', logContext);\n throw new Error('WebexSDK instance is required');\n }\n\n this.webex = config.webex;\n this.isMobiusSocketEnabled = isMobiusWssEnabled(config.webex) || false;\n this.mobiusSocket = getMobiusSocketInstance(this.webex);\n this.metricManager = getMetricManager(this.webex);\n\n log.info(\n `APIRequest initialized with transport: ${this.isMobiusSocketEnabled ? 'WSS' : 'HTTP'}`,\n logContext\n );\n }\n\n /**\n * Whether the Mobius WebSocket transport is active for this instance.\n */\n public isSocketEnabled(): boolean {\n return this.isMobiusSocketEnabled;\n }\n\n /**\n * Ensures the Mobius WebSocket is connected before sending API requests.\n * If the socket is already connected, resolves immediately. Otherwise,\n * initiates a new connection to the provided WebSocket URL.\n * On failure, throws a normalized WebexRequestPayload-shaped error.\n *\n * @param wssUrl - The Mobius WebSocket URL to connect to.\n */\n public async connectToMobiusSocket(wssUrl: string): Promise<string | undefined> {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.CONNECT_TO_MOBIUS_SOCKET,\n };\n\n if (this.mobiusSocket.isConnected()) {\n log.info('Mobius WebSocket already connected', logContext);\n\n return this.mobiusSocket.getConnectedWebSocketUrl();\n }\n\n log.info('Mobius WebSocket not connected, initiating connection', logContext);\n\n try {\n await this.mobiusSocket.connect(wssUrl);\n log.log('Mobius WebSocket connected successfully', logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl\n );\n\n return wssUrl;\n } catch (err) {\n log.warn(`Mobius WebSocket connection failed: ${String(err)}`, logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl,\n undefined,\n String(err)\n );\n\n throw normalizeWsError(err);\n }\n }\n\n public getConnectedWebSocketUrl() {\n return this.mobiusSocket.getConnectedWebSocketUrl();\n }\n\n /**\n * Disconnects the default session from the Mobius WebSocket.\n */\n public async disconnectFromMobiusSocket(options?: {code: number; reason: string}): Promise<void> {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.DISCONNECT_FROM_MOBIUS_SOCKET,\n };\n\n log.info('Disconnecting from Mobius WebSocket', logContext);\n\n const wssUrl = this.mobiusSocket.getConnectedWebSocketUrl();\n\n try {\n await this.mobiusSocket.disconnect(options);\n log.log('Mobius WebSocket disconnected successfully', logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl\n );\n } catch (err) {\n // silent error - no need to throw an error\n log.warn(`Mobius WebSocket disconnection failed: ${String(err)}`, logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl,\n undefined, // add trackingId\n String(err)\n );\n }\n }\n\n /**\n * Makes a request using HTTP or WebSocket transport per the flag set in the constructor.\n * When using WebSocket, the response is normalized to the WebexRequestPayload shape\n * so callers do not need to know which transport was used.\n * @param request - Request options (uri, method, body, headers, service)\n * @returns Promise resolving to WebexRequestPayload\n */\n public async makeRequest(request: APIRequestOptions): Promise<WebexRequestPayload> {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.MAKE_REQUEST,\n };\n log.info(`Dispatching request via ${this.isMobiusSocketEnabled ? 'WSS' : 'HTTP'} `, logContext);\n\n if (this.isMobiusSocketEnabled) {\n const trackingId = `webex-js-sdk_${uuid()}`;\n const socketType = deriveMobiusSocketMessageType(request.uri, request.method);\n\n if (socketType === MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN) {\n log.error(\n `Unknown Mobius Socket message type for uri: ${request.uri}, httpMethod: ${request.method}`,\n logContext\n );\n throw new Error(`Unknown Mobius Socket message type: ${socketType}`);\n }\n\n const isSupplementaryService = isSupplementaryServiceMessageType(socketType);\n\n try {\n const wsResponse: MobiusSocketResponse = await this.mobiusSocket.sendWssRequest({\n type: socketType,\n trackingId,\n metadata: {\n ...request.headers,\n userAgent: CALLING_USER_AGENT,\n authorization: `${\n (isSupplementaryService && (await this.webex.credentials.getUserToken())) || ''\n }`,\n },\n data: request.body,\n });\n\n log.log(\n `WSS request succeeded - socketType: ${socketType}, trackingId: ${trackingId}, statusCode: ${wsResponse.statusCode}`,\n logContext\n );\n\n return normalizeWsResponse(wsResponse);\n } catch (err) {\n log.error(\n `WSS request failed - socketType: ${socketType}, trackingId: ${trackingId}, error: ${String(\n err\n )}`,\n logContext\n );\n throw normalizeWsError(err);\n }\n }\n\n return this.webex.request(request) as Promise<WebexRequestPayload>;\n }\n\n public registerMobiusSocketListener(cb: (data?: MobiusAsyncEvent) => void): void {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.REGISTER_MOBIUS_SOCKET_LISTENER,\n };\n\n log.info('Attaching Mobius async event listener', logContext);\n\n this.mobiusSocket.on('event:async_event', (data: MobiusAsyncEvent) => {\n log.trace(\n `Mobius async event received - eventType: ${data?.data?.eventType ?? 'unknown'}`,\n logContext\n );\n cb(data);\n });\n\n log.log('Mobius async event listener attached', logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_REGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n }\n\n public unregisterMobiusSocketListener(): void {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.UNREGISTER_MOBIUS_SOCKET_LISTENER,\n };\n\n log.info('Detaching Mobius async event listener', logContext);\n this.mobiusSocket.off('event:async_event');\n log.log('Mobius async event listener detached', logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_UNREGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n }\n\n /**\n * Bridges the underlying Mobius socket connect/disconnect lifecycle to the caller.\n * The socket emits `online` on every successful (re)connect and `offline.*` on close,\n * where the suffix distinguishes the disconnect reason.\n *\n * @param listener - Callbacks invoked on connect and disconnect transitions.\n */\n public registerMobiusSocketConnectionListener(listener: MobiusSocketConnectionListener): void {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.REGISTER_MOBIUS_SOCKET_CONNECTION_LISTENER,\n };\n\n log.info('Attaching Mobius socket connection listener', logContext);\n\n this.mobiusSocket.on('online', () => {\n log.log('Mobius socket connected', logContext);\n listener.onConnected();\n });\n\n this.mobiusSocket.on('offline.permanent', () => {\n log.log('Mobius socket disconnected (permanent)', logContext);\n listener.onDisconnected(MOBIUS_SOCKET_DISCONNECT_REASON.PERMANENT);\n });\n\n this.mobiusSocket.on('offline.transient', () => {\n log.log('Mobius socket disconnected (transient)', logContext);\n listener.onDisconnected(MOBIUS_SOCKET_DISCONNECT_REASON.TRANSIENT);\n });\n\n this.mobiusSocket.on('offline.replaced', () => {\n log.log('Mobius socket disconnected (replaced)', logContext);\n listener.onDisconnected(MOBIUS_SOCKET_DISCONNECT_REASON.REPLACED);\n });\n\n log.log('Mobius socket connection listener attached', logContext);\n }\n\n /**\n * Whether the underlying Mobius WebSocket is currently connected.\n *\n * Useful for consumers that subscribe to connection events after the socket may\n * already be up (the socket only emits `online` on a fresh (re)connect), so they\n * can reconcile the initial connected state instead of waiting for the next event.\n */\n public isSocketConnected(): boolean {\n return this.mobiusSocket.isConnected();\n }\n\n public unregisterMobiusSocketConnectionListener(): void {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.UNREGISTER_MOBIUS_SOCKET_CONNECTION_LISTENER,\n };\n\n log.info('Detaching Mobius socket connection listener', logContext);\n this.mobiusSocket.off('online');\n this.mobiusSocket.off('offline.permanent');\n this.mobiusSocket.off('offline.transient');\n this.mobiusSocket.off('offline.replaced');\n log.log('Mobius socket connection listener detached', logContext);\n }\n}\n\n/**\n * Factory function to create a singleton APIRequest instance\n * @param config - Configuration object for APIRequest\n * @returns APIRequest instance\n */\nexport const createAPIRequest = (config: APIRequestConfig): APIRequest =>\n APIRequest.getInstance(config);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_uuid","require","_mobiusSocket","_Logger","_interopRequireDefault","_mobiusSocketMapper","_constants","_wsFeatureFlag","_constants2","_Metrics","_types","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","normalizeWsResponse","wsResponse","_ref","_ref2","statusCode","body","data","undefined","headers","trackingid","trackingId","metadata","normalizeWsError","err","_ref3","_wsErr$response","_ref4","_wsErr$trackingId","_wsErr$response2","_ref5","_wsErr$response3","wsErr","response","APIRequest","exports","config","_classCallCheck2","logContext","file","REQUEST_FILE","method","METHODS","CONSTRUCTOR","webex","log","error","Error","isMobiusSocketEnabled","isMobiusWssEnabled","mobiusSocket","getMobiusSocketInstance","metricManager","getMetricManager","info","concat","_createClass2","key","value","isSocketEnabled","setSocketEnabled","enabled","SET_SOCKET_ENABLED","_connectToMobiusSocket","_asyncToGenerator2","_regenerator","mark","_callee","wssUrl","_this$metricManager","_this$metricManager2","_t","wrap","_context","prev","next","CONNECT_TO_MOBIUS_SOCKET","isConnected","abrupt","getConnectedWebSocketUrl","connect","submitMobiusSocketMetric","METRIC_EVENT","MOBIUS_SOCKET","MOBIUS_SOCKET_ACTION","CONNECT","METRIC_TYPE","BEHAVIORAL","warn","String","MOBIUS_SOCKET_ERROR","stop","connectToMobiusSocket","_x","_disconnectFromMobiusSocket","_callee2","options","_this$metricManager3","_this$metricManager4","_t2","_context2","DISCONNECT_FROM_MOBIUS_SOCKET","disconnect","DISCONNECT","disconnectFromMobiusSocket","_x2","_makeRequest","_callee3","request","socketType","isSupplementaryService","_t3","_t4","_t5","_t6","_t7","_t8","_t9","_t0","_t1","_t10","_t11","_t12","_t13","_t14","_context3","MAKE_REQUEST","uuid","deriveMobiusSocketMessageType","uri","MOBIUS_SOCKET_MESSAGE_TYPE","UNKNOWN","isSupplementaryServiceMessageType","CALLING_USER_AGENT","credentials","getUserToken","sent","call","userAgent","authorization","sendWssRequest","type","makeRequest","_x3","registerMobiusSocketListener","cb","_this$metricManager5","REGISTER_MOBIUS_SOCKET_LISTENER","on","_data$data$eventType","_data$data","trace","eventType","LISTENER_REGISTERED","unregisterMobiusSocketListener","_this$metricManager6","UNREGISTER_MOBIUS_SOCKET_LISTENER","off","LISTENER_UNREGISTERED","registerMobiusSocketConnectionListener","listener","REGISTER_MOBIUS_SOCKET_CONNECTION_LISTENER","onConnected","onDisconnected","MOBIUS_SOCKET_DISCONNECT_REASON","PERMANENT","TRANSIENT","REPLACED","isSocketConnected","unregisterMobiusSocketConnectionListener","UNREGISTER_MOBIUS_SOCKET_CONNECTION_LISTENER","getInstance","instance","resetInstance","createAPIRequest"],"sources":["request.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport {getMobiusSocketInstance} from '../../mobius-socket';\nimport {WebexRequestPayload} from '../../common/types';\nimport {WebexSDK} from '../../SDKConnector/types';\nimport log from '../../Logger';\nimport {\n APIRequestConfig,\n APIRequestOptions,\n MobiusAsyncEvent,\n MobiusSocketConnectionListener,\n MobiusSocketResponse,\n} from './types';\nimport {\n deriveMobiusSocketMessageType,\n isSupplementaryServiceMessageType,\n} from './mobiusSocketMapper';\nimport {MOBIUS_SOCKET_DISCONNECT_REASON, MOBIUS_SOCKET_MESSAGE_TYPE} from './constants';\nimport {isMobiusWssEnabled} from './wsFeatureFlag';\nimport {CALLING_USER_AGENT, METHODS, REQUEST_FILE} from '../constants';\nimport {getMetricManager} from '../../Metrics';\nimport {IMetricManager, METRIC_EVENT, METRIC_TYPE, MOBIUS_SOCKET_ACTION} from '../../Metrics/types';\n\n/**\n * Converts a MobiusSocketResponse into the WebexRequestPayload shape that\n * all callers (registration, call, keepalive error-handlers) expect.\n */\nfunction normalizeWsResponse(wsResponse: MobiusSocketResponse): WebexRequestPayload {\n return {\n statusCode: wsResponse.statusCode,\n body: (wsResponse.data as object) ?? undefined,\n headers: {\n trackingid: wsResponse.trackingId,\n ...((wsResponse.metadata as Record<string, string>) ?? {}),\n },\n };\n}\n\n/**\n * Converts a MobiusSocketResponseError rejection into a WebexRequestPayload-shaped\n * error so handleRegistrationErrors / handleCallErrors can process it identically.\n */\nfunction normalizeWsError(err: unknown): WebexRequestPayload {\n const wsErr = err as {\n statusCode?: number;\n statusMessage?: string;\n response?: MobiusSocketResponse;\n trackingId?: string;\n };\n\n return {\n statusCode: wsErr.statusCode,\n body: (wsErr.response?.data as object) ?? undefined,\n headers: {\n trackingid: wsErr.trackingId ?? wsErr.response?.trackingId ?? '',\n ...((wsErr.response?.metadata as Record<string, string>) ?? {}),\n },\n };\n}\n\n/**\n * APIRequest routes Mobius traffic over HTTP (`webex.request`) or the Mobius WebSocket path\n * (`mobiusSocketRequest`). `isMobiusSocketEnabled` is set in the constructor from WDM\n * `webrtc-calling-over-ws` and/or SDK config (interim until WDM is fully in prod).\n */\nexport class APIRequest {\n // eslint-disable-next-line no-use-before-define\n private static instance: APIRequest | undefined;\n private isMobiusSocketEnabled: boolean;\n private webex: WebexSDK;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private mobiusSocket: any;\n private metricManager: IMetricManager;\n\n static getInstance(config: APIRequestConfig): APIRequest {\n if (!APIRequest.instance) {\n APIRequest.instance = new APIRequest(config);\n }\n\n return APIRequest.instance;\n }\n\n static resetInstance(): void {\n APIRequest.instance = undefined;\n }\n\n /**\n * @param config - Webex instance plus optional SDK Mobius-socket override\n */\n constructor(config: APIRequestConfig) {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.CONSTRUCTOR,\n };\n\n if (!config.webex) {\n log.error('APIRequest instantiation failed: WebexSDK instance is required', logContext);\n throw new Error('WebexSDK instance is required');\n }\n\n this.webex = config.webex;\n this.isMobiusSocketEnabled = isMobiusWssEnabled(config.webex) || false;\n this.mobiusSocket = getMobiusSocketInstance(this.webex);\n this.metricManager = getMetricManager(this.webex);\n\n log.info(\n `APIRequest initialized with transport: ${this.isMobiusSocketEnabled ? 'WSS' : 'HTTP'}`,\n logContext\n );\n }\n\n /**\n * Whether the Mobius WebSocket transport is active for this instance.\n */\n public isSocketEnabled(): boolean {\n return this.isMobiusSocketEnabled;\n }\n\n /**\n * Overrides the active Mobius transport for subsequent requests.\n *\n * The constructor seeds this from the `webrtc-calling-over-ws` feature flag, but\n * registration may need to fall back to HTTP for a Mobius server group that has no\n * WSS URL (even while the feature is enabled). Toggling this keeps all transport-gated\n * paths (connect, teardown, makeRequest) consistent for the group being registered.\n *\n * @param enabled - `true` to route over the Mobius WebSocket, `false` for HTTP.\n */\n public setSocketEnabled(enabled: boolean): void {\n this.isMobiusSocketEnabled = enabled;\n\n log.info(`APIRequest transport set to: ${enabled ? 'WSS' : 'HTTP'}`, {\n file: REQUEST_FILE,\n method: METHODS.SET_SOCKET_ENABLED,\n });\n }\n\n /**\n * Ensures the Mobius WebSocket is connected before sending API requests.\n * If the socket is already connected, resolves immediately. Otherwise,\n * initiates a new connection to the provided WebSocket URL.\n * On failure, throws a normalized WebexRequestPayload-shaped error.\n *\n * @param wssUrl - The Mobius WebSocket URL to connect to.\n */\n public async connectToMobiusSocket(wssUrl: string): Promise<string | undefined> {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.CONNECT_TO_MOBIUS_SOCKET,\n };\n\n if (this.mobiusSocket.isConnected()) {\n log.info('Mobius WebSocket already connected', logContext);\n\n return this.mobiusSocket.getConnectedWebSocketUrl();\n }\n\n log.info('Mobius WebSocket not connected, initiating connection', logContext);\n\n try {\n await this.mobiusSocket.connect(wssUrl);\n log.log('Mobius WebSocket connected successfully', logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl\n );\n\n return wssUrl;\n } catch (err) {\n log.warn(`Mobius WebSocket connection failed: ${String(err)}`, logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl,\n undefined,\n String(err)\n );\n\n throw normalizeWsError(err);\n }\n }\n\n public getConnectedWebSocketUrl() {\n return this.mobiusSocket.getConnectedWebSocketUrl();\n }\n\n /**\n * Disconnects the default session from the Mobius WebSocket.\n */\n public async disconnectFromMobiusSocket(options?: {code: number; reason: string}): Promise<void> {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.DISCONNECT_FROM_MOBIUS_SOCKET,\n };\n\n log.info('Disconnecting from Mobius WebSocket', logContext);\n\n const wssUrl = this.mobiusSocket.getConnectedWebSocketUrl();\n\n try {\n await this.mobiusSocket.disconnect(options);\n log.log('Mobius WebSocket disconnected successfully', logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl\n );\n } catch (err) {\n // silent error - no need to throw an error\n log.warn(`Mobius WebSocket disconnection failed: ${String(err)}`, logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl,\n undefined, // add trackingId\n String(err)\n );\n }\n }\n\n /**\n * Makes a request using HTTP or WebSocket transport per the flag set in the constructor.\n * When using WebSocket, the response is normalized to the WebexRequestPayload shape\n * so callers do not need to know which transport was used.\n * @param request - Request options (uri, method, body, headers, service)\n * @returns Promise resolving to WebexRequestPayload\n */\n public async makeRequest(request: APIRequestOptions): Promise<WebexRequestPayload> {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.MAKE_REQUEST,\n };\n log.info(`Dispatching request via ${this.isMobiusSocketEnabled ? 'WSS' : 'HTTP'} `, logContext);\n\n if (this.isMobiusSocketEnabled) {\n const trackingId = `webex-js-sdk_${uuid()}`;\n const socketType = deriveMobiusSocketMessageType(request.uri, request.method);\n\n if (socketType === MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN) {\n log.error(\n `Unknown Mobius Socket message type for uri: ${request.uri}, httpMethod: ${request.method}`,\n logContext\n );\n throw new Error(`Unknown Mobius Socket message type: ${socketType}`);\n }\n\n const isSupplementaryService = isSupplementaryServiceMessageType(socketType);\n\n try {\n const wsResponse: MobiusSocketResponse = await this.mobiusSocket.sendWssRequest({\n type: socketType,\n trackingId,\n metadata: {\n ...request.headers,\n userAgent: CALLING_USER_AGENT,\n authorization: `${\n (isSupplementaryService && (await this.webex.credentials.getUserToken())) || ''\n }`,\n },\n data: request.body,\n });\n\n log.log(\n `WSS request succeeded - socketType: ${socketType}, trackingId: ${trackingId}, statusCode: ${wsResponse.statusCode}`,\n logContext\n );\n\n return normalizeWsResponse(wsResponse);\n } catch (err) {\n log.error(\n `WSS request failed - socketType: ${socketType}, trackingId: ${trackingId}, error: ${String(\n err\n )}`,\n logContext\n );\n throw normalizeWsError(err);\n }\n }\n\n return this.webex.request(request) as Promise<WebexRequestPayload>;\n }\n\n public registerMobiusSocketListener(cb: (data?: MobiusAsyncEvent) => void): void {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.REGISTER_MOBIUS_SOCKET_LISTENER,\n };\n\n log.info('Attaching Mobius async event listener', logContext);\n\n this.mobiusSocket.on('event:async_event', (data: MobiusAsyncEvent) => {\n log.trace(\n `Mobius async event received - eventType: ${data?.data?.eventType ?? 'unknown'}`,\n logContext\n );\n cb(data);\n });\n\n log.log('Mobius async event listener attached', logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_REGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n }\n\n public unregisterMobiusSocketListener(): void {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.UNREGISTER_MOBIUS_SOCKET_LISTENER,\n };\n\n log.info('Detaching Mobius async event listener', logContext);\n this.mobiusSocket.off('event:async_event');\n log.log('Mobius async event listener detached', logContext);\n\n this.metricManager?.submitMobiusSocketMetric(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_UNREGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n }\n\n /**\n * Bridges the underlying Mobius socket connect/disconnect lifecycle to the caller.\n * The socket emits `online` on every successful (re)connect and `offline.*` on close,\n * where the suffix distinguishes the disconnect reason.\n *\n * @param listener - Callbacks invoked on connect and disconnect transitions.\n */\n public registerMobiusSocketConnectionListener(listener: MobiusSocketConnectionListener): void {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.REGISTER_MOBIUS_SOCKET_CONNECTION_LISTENER,\n };\n\n log.info('Attaching Mobius socket connection listener', logContext);\n\n this.mobiusSocket.on('online', () => {\n log.log('Mobius socket connected', logContext);\n listener.onConnected();\n });\n\n this.mobiusSocket.on('offline.permanent', () => {\n log.log('Mobius socket disconnected (permanent)', logContext);\n listener.onDisconnected(MOBIUS_SOCKET_DISCONNECT_REASON.PERMANENT);\n });\n\n this.mobiusSocket.on('offline.transient', () => {\n log.log('Mobius socket disconnected (transient)', logContext);\n listener.onDisconnected(MOBIUS_SOCKET_DISCONNECT_REASON.TRANSIENT);\n });\n\n this.mobiusSocket.on('offline.replaced', () => {\n log.log('Mobius socket disconnected (replaced)', logContext);\n listener.onDisconnected(MOBIUS_SOCKET_DISCONNECT_REASON.REPLACED);\n });\n\n log.log('Mobius socket connection listener attached', logContext);\n }\n\n /**\n * Whether the underlying Mobius WebSocket is currently connected.\n *\n * Useful for consumers that subscribe to connection events after the socket may\n * already be up (the socket only emits `online` on a fresh (re)connect), so they\n * can reconcile the initial connected state instead of waiting for the next event.\n */\n public isSocketConnected(): boolean {\n return this.mobiusSocket.isConnected();\n }\n\n public unregisterMobiusSocketConnectionListener(): void {\n const logContext = {\n file: REQUEST_FILE,\n method: METHODS.UNREGISTER_MOBIUS_SOCKET_CONNECTION_LISTENER,\n };\n\n log.info('Detaching Mobius socket connection listener', logContext);\n this.mobiusSocket.off('online');\n this.mobiusSocket.off('offline.permanent');\n this.mobiusSocket.off('offline.transient');\n this.mobiusSocket.off('offline.replaced');\n log.log('Mobius socket connection listener detached', logContext);\n }\n}\n\n/**\n * Factory function to create a singleton APIRequest instance\n * @param config - Configuration object for APIRequest\n * @returns APIRequest instance\n */\nexport const createAPIRequest = (config: APIRequestConfig): APIRequest =>\n APIRequest.getInstance(config);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -163,6 +163,37 @@ describe('APIRequest', function () {
|
|
|
163
163
|
expect(result).toBe(true);
|
|
164
164
|
});
|
|
165
165
|
});
|
|
166
|
+
describe('setSocketEnabled', function () {
|
|
167
|
+
it.each([[true, 'WSS'], [false, 'HTTP']])('overrides the active transport to %s and logs it', function (enabled, transport) {
|
|
168
|
+
var apiRequest = _request.APIRequest.getInstance({
|
|
169
|
+
webex: webex
|
|
170
|
+
});
|
|
171
|
+
apiRequest.setSocketEnabled(enabled);
|
|
172
|
+
expect(apiRequest.isSocketEnabled()).toBe(enabled);
|
|
173
|
+
expect(infoSpy).toHaveBeenCalledWith("APIRequest transport set to: ".concat(transport), {
|
|
174
|
+
file: 'REQUEST',
|
|
175
|
+
method: 'setSocketEnabled'
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
it('can flip the feature-flag seeded transport from WSS to HTTP', function () {
|
|
179
|
+
_wsFeatureFlag.isMobiusWssEnabled.mockReturnValue(true);
|
|
180
|
+
var apiRequest = _request.APIRequest.getInstance({
|
|
181
|
+
webex: webex
|
|
182
|
+
});
|
|
183
|
+
expect(apiRequest.isSocketEnabled()).toBe(true);
|
|
184
|
+
apiRequest.setSocketEnabled(false);
|
|
185
|
+
expect(apiRequest.isSocketEnabled()).toBe(false);
|
|
186
|
+
});
|
|
187
|
+
it('can flip the feature-flag seeded transport from HTTP to WSS', function () {
|
|
188
|
+
_wsFeatureFlag.isMobiusWssEnabled.mockReturnValue(false);
|
|
189
|
+
var apiRequest = _request.APIRequest.getInstance({
|
|
190
|
+
webex: webex
|
|
191
|
+
});
|
|
192
|
+
expect(apiRequest.isSocketEnabled()).toBe(false);
|
|
193
|
+
apiRequest.setSocketEnabled(true);
|
|
194
|
+
expect(apiRequest.isSocketEnabled()).toBe(true);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
166
197
|
describe('isSocketConnected', function () {
|
|
167
198
|
it.each([true, false])('should delegate to the Mobius socket isConnected() and return %s', function (connected) {
|
|
168
199
|
mockMobiusSocket.isConnected.mockReturnValue(connected);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","require","_testUtil","_types","_Logger","_interopRequireDefault","_request","_mobiusSocket","_Metrics","_types2","_wsFeatureFlag","_constants","jest","mock","getMobiusSocketInstance","fn","getMetricManager","isMobiusWssEnabled","v4","describe","webex","mockMobiusSocket","mockMetricManager","infoSpy","logSpy","warnSpy","errorSpy","beforeEach","APIRequest","resetInstance","getTestUtilsWebex","clearAllMocks","connect","mockResolvedValue","undefined","disconnect","sendWssRequest","statusCode","trackingId","data","deviceId","isConnected","mockReturnValue","getConnectedWebSocketUrl","on","off","submitMobiusSocketMetric","uuid","spyOn","log","afterEach","it","apiRequest","getInstance","expect","toBeDefined","toHaveBeenCalledWith","file","method","toThrow","instance1","instance2","toBe","not","createAPIRequest","toBeInstanceOf","result","isSocketEnabled","each","connected","isSocketConnected","toHaveBeenCalled","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_context","prev","next","connectToMobiusSocket","sent","stop","_callee2","wssUrl","_context2","_callee3","_context3","METRIC_EVENT","MOBIUS_SOCKET","MOBIUS_SOCKET_ACTION","CONNECT","METRIC_TYPE","BEHAVIORAL","_callee4","connectionError","_context4","statusMessage","response","error","metadata","mockRejectedValue","rejects","toEqual","body","headers","trackingid","stringContaining","MOBIUS_SOCKET_ERROR","any","String","_callee5","minimalError","_context5","_callee6","_context6","disconnectFromMobiusSocket","_callee7","_context7","DISCONNECT","_callee8","options","_context8","code","reason","_callee9","_context9","Error","resolves","_callee0","_context0","_callee1","requestOptions","expectedResponse","_context1","uri","HTTP_METHODS","POST","userId","request","makeRequest","_callee10","_context10","GET","_callee11","_context11","_callee12","_context12","objectContaining","type","MOBIUS_SOCKET_MESSAGE_TYPE","REGISTER","_callee13","_context13","_callee14","_context14","_callee15","_context15","userAgent","authorization","_callee16","_context16","credentials","getUserToken","CALL_HOLD","_callee17","_context17","_callee18","wsResponse","_context18","correlationId","_callee19","wsError","_context19","callback","registerMobiusSocketListener","Function","mockEvent","eventId","eventType","attachedCallback","calls","LISTENER_REGISTERED","unregisterMobiusSocketListener","LISTENER_UNREGISTERED","getHandlerFor","eventName","call","find","_ref20","_ref21","_slicedToArray2","name","registerMobiusSocketConnectionListener","onConnected","onDisconnected","toHaveBeenCalledTimes","MOBIUS_SOCKET_DISCONNECT_REASON","PERMANENT","TRANSIENT","REPLACED","unregisterMobiusSocketConnectionListener"],"sources":["request.test.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport {getTestUtilsWebex} from '../../common/testUtil';\nimport {HTTP_METHODS, WebexRequestPayload} from '../../common/types';\nimport log from '../../Logger';\nimport {APIRequest, createAPIRequest} from './request';\nimport {getMobiusSocketInstance} from '../../mobius-socket';\nimport {getMetricManager} from '../../Metrics';\nimport {METRIC_EVENT, METRIC_TYPE, MOBIUS_SOCKET_ACTION} from '../../Metrics/types';\nimport {isMobiusWssEnabled} from './wsFeatureFlag';\nimport {MOBIUS_SOCKET_DISCONNECT_REASON, MOBIUS_SOCKET_MESSAGE_TYPE} from './constants';\nimport {MobiusSocketResponse, MobiusAsyncEvent} from './types';\n\n// Mock dependencies\njest.mock('../../mobius-socket', () => ({\n getMobiusSocketInstance: jest.fn(),\n}));\njest.mock('../../Metrics', () => ({\n getMetricManager: jest.fn(),\n}));\njest.mock('./wsFeatureFlag', () => ({\n isMobiusWssEnabled: jest.fn(),\n}));\njest.mock('uuid', () => ({\n v4: jest.fn(),\n}));\n\ndescribe('APIRequest', () => {\n let webex: ReturnType<typeof getTestUtilsWebex>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let mockMobiusSocket: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let mockMetricManager: any;\n let infoSpy: jest.SpyInstance;\n let logSpy: jest.SpyInstance;\n let warnSpy: jest.SpyInstance;\n let errorSpy: jest.SpyInstance;\n\n beforeEach(() => {\n APIRequest.resetInstance();\n webex = getTestUtilsWebex();\n jest.clearAllMocks();\n\n mockMobiusSocket = {\n connect: jest.fn().mockResolvedValue(undefined),\n disconnect: jest.fn().mockResolvedValue(undefined),\n sendWssRequest: jest.fn().mockResolvedValue({\n statusCode: 200,\n trackingId: 'test-tracking-id',\n data: {deviceId: 'test-device-id'},\n }),\n isConnected: jest.fn().mockReturnValue(false),\n getConnectedWebSocketUrl: jest.fn().mockReturnValue('wss://test.webex.com'),\n on: jest.fn(),\n off: jest.fn(),\n };\n\n mockMetricManager = {\n submitMobiusSocketMetric: jest.fn(),\n };\n\n (getMobiusSocketInstance as jest.Mock).mockReturnValue(mockMobiusSocket);\n (getMetricManager as jest.Mock).mockReturnValue(mockMetricManager);\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n (uuid as jest.Mock).mockReturnValue('mock-uuid-12345');\n\n infoSpy = jest.spyOn(log, 'info');\n logSpy = jest.spyOn(log, 'log');\n warnSpy = jest.spyOn(log, 'warn');\n errorSpy = jest.spyOn(log, 'error');\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n describe('Constructor and singleton pattern', () => {\n it('should create instance with webex config and HTTP transport', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n expect(apiRequest).toBeDefined();\n expect(getMobiusSocketInstance).toHaveBeenCalledWith(webex);\n expect(getMetricManager).toHaveBeenCalledWith(webex);\n expect(isMobiusWssEnabled).toHaveBeenCalledWith(webex);\n expect(infoSpy).toHaveBeenCalledWith('APIRequest initialized with transport: HTTP', {\n file: 'REQUEST',\n method: 'constructor',\n });\n });\n\n it('should create instance with webex config and WSS transport when feature flag enabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n\n const apiRequest = APIRequest.getInstance({webex});\n\n expect(apiRequest).toBeDefined();\n expect(infoSpy).toHaveBeenCalledWith('APIRequest initialized with transport: WSS', {\n file: 'REQUEST',\n method: 'constructor',\n });\n });\n\n it('should throw error if webex is missing from config', () => {\n expect(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n APIRequest.getInstance({webex: undefined as any});\n }).toThrow('WebexSDK instance is required');\n\n expect(errorSpy).toHaveBeenCalledWith(\n 'APIRequest instantiation failed: WebexSDK instance is required',\n {\n file: 'REQUEST',\n method: 'constructor',\n }\n );\n });\n\n it('should return same instance on subsequent getInstance() calls', () => {\n const instance1 = APIRequest.getInstance({webex});\n const instance2 = APIRequest.getInstance({webex});\n\n expect(instance1).toBe(instance2);\n });\n\n it('should clear singleton when resetInstance() is called', () => {\n const instance1 = APIRequest.getInstance({webex});\n\n APIRequest.resetInstance();\n\n const instance2 = APIRequest.getInstance({webex});\n\n expect(instance1).not.toBe(instance2);\n });\n });\n\n describe('createAPIRequest factory', () => {\n it('should create APIRequest instance using factory function', () => {\n const apiRequest = createAPIRequest({webex});\n\n expect(apiRequest).toBeDefined();\n expect(apiRequest).toBeInstanceOf(APIRequest);\n });\n });\n\n describe('isSocketEnabled', () => {\n it('should return false when WSS is disabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = apiRequest.isSocketEnabled();\n\n expect(result).toBe(false);\n });\n\n it('should return true when WSS is enabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = apiRequest.isSocketEnabled();\n\n expect(result).toBe(true);\n });\n });\n\n describe('isSocketConnected', () => {\n it.each([true, false])(\n 'should delegate to the Mobius socket isConnected() and return %s',\n (connected) => {\n mockMobiusSocket.isConnected.mockReturnValue(connected);\n const apiRequest = APIRequest.getInstance({webex});\n\n expect(apiRequest.isSocketConnected()).toBe(connected);\n expect(mockMobiusSocket.isConnected).toHaveBeenCalled();\n }\n );\n });\n\n describe('connectToMobiusSocket', () => {\n it('should return immediately if socket is already connected', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(true);\n mockMobiusSocket.getConnectedWebSocketUrl.mockReturnValue('wss://existing.webex.com');\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = await apiRequest.connectToMobiusSocket('wss://test.webex.com');\n\n expect(result).toBe('wss://existing.webex.com');\n expect(mockMobiusSocket.connect).not.toHaveBeenCalled();\n expect(infoSpy).toHaveBeenCalledWith('Mobius WebSocket already connected', {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n });\n expect(mockMetricManager.submitMobiusSocketMetric).not.toHaveBeenCalled();\n });\n\n it('should initiate new connection if not connected', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://test.webex.com/api/v1';\n\n const result = await apiRequest.connectToMobiusSocket(wssUrl);\n\n expect(mockMobiusSocket.connect).toHaveBeenCalledWith(wssUrl);\n expect(result).toBe(wssUrl);\n expect(infoSpy).toHaveBeenCalledWith(\n 'Mobius WebSocket not connected, initiating connection',\n {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n }\n );\n });\n\n it('should submit success metric on successful connection', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://mobius.webex.com/api/v1';\n\n await apiRequest.connectToMobiusSocket(wssUrl);\n\n expect(logSpy).toHaveBeenCalledWith('Mobius WebSocket connected successfully', {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n });\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl\n );\n });\n\n it('should throw normalized error on connection failure', async () => {\n const connectionError = {\n statusCode: 503,\n statusMessage: 'Service Unavailable',\n trackingId: 'error-tracking-id',\n response: {\n statusCode: 503,\n trackingId: 'error-tracking-id',\n data: {error: 'Connection failed'},\n metadata: {'x-error': 'true'},\n },\n };\n mockMobiusSocket.isConnected.mockReturnValue(false);\n mockMobiusSocket.connect.mockRejectedValue(connectionError);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://mobius.webex.com/api/v1';\n\n await expect(apiRequest.connectToMobiusSocket(wssUrl)).rejects.toEqual({\n statusCode: 503,\n body: {error: 'Connection failed'},\n headers: {\n trackingid: 'error-tracking-id',\n 'x-error': 'true',\n },\n });\n\n expect(warnSpy).toHaveBeenCalledWith(\n expect.stringContaining('Mobius WebSocket connection failed'),\n {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n }\n );\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl,\n undefined,\n expect.any(String)\n );\n });\n\n it('should handle connection error with minimal error object', async () => {\n const minimalError = {statusCode: 500};\n mockMobiusSocket.isConnected.mockReturnValue(false);\n mockMobiusSocket.connect.mockRejectedValue(minimalError);\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(apiRequest.connectToMobiusSocket('wss://test.webex.com')).rejects.toEqual({\n statusCode: 500,\n body: undefined,\n headers: {\n trackingid: '',\n },\n });\n });\n });\n\n describe('disconnectFromMobiusSocket', () => {\n it('should disconnect successfully', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMobiusSocket.disconnect).toHaveBeenCalledWith(undefined);\n expect(infoSpy).toHaveBeenCalledWith('Disconnecting from Mobius WebSocket', {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius WebSocket disconnected successfully', {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n });\n });\n\n it('should submit success metric after disconnect', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL,\n 'wss://test.webex.com'\n );\n });\n\n it('should disconnect with custom options', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const options = {code: 1000, reason: 'Normal closure'};\n\n await apiRequest.disconnectFromMobiusSocket(options);\n\n expect(mockMobiusSocket.disconnect).toHaveBeenCalledWith(options);\n });\n\n it('should handle disconnect error silently and log warning', async () => {\n mockMobiusSocket.disconnect.mockRejectedValue(new Error('Disconnect failed'));\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(apiRequest.disconnectFromMobiusSocket()).resolves.not.toThrow();\n\n expect(warnSpy).toHaveBeenCalledWith(\n 'Mobius WebSocket disconnection failed: Error: Disconnect failed',\n {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n }\n );\n });\n\n it('should submit error metric on disconnect failure', async () => {\n mockMobiusSocket.disconnect.mockRejectedValue(new Error('Disconnect failed'));\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL,\n 'wss://test.webex.com',\n undefined,\n 'Error: Disconnect failed'\n );\n });\n });\n\n describe('makeRequest - HTTP transport', () => {\n it('should route through webex.request when WSS is disabled', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n };\n const expectedResponse: WebexRequestPayload = {\n statusCode: 200,\n body: {deviceId: 'device-456'},\n };\n webex.request.mockResolvedValue(expectedResponse);\n\n const result = await apiRequest.makeRequest(requestOptions);\n\n expect(webex.request).toHaveBeenCalledWith(requestOptions);\n expect(result).toEqual(expectedResponse);\n expect(infoSpy).toHaveBeenCalledWith('Dispatching request via HTTP ', {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should pass request options unchanged to webex.request', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/devices/device-123',\n method: HTTP_METHODS.GET,\n headers: {'x-custom-header': 'value'},\n };\n webex.request.mockResolvedValue({statusCode: 200});\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.request).toHaveBeenCalledWith(requestOptions);\n });\n\n it('should return webex.request result directly', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const expectedResponse = {\n statusCode: 404,\n body: {error: 'Not found'},\n headers: {'x-tracking-id': 'track-123'},\n };\n webex.request.mockResolvedValue(expectedResponse);\n\n const result = await apiRequest.makeRequest({\n uri: '/api/v1/test',\n method: HTTP_METHODS.GET,\n });\n\n expect(result).toEqual(expectedResponse);\n });\n });\n\n describe('makeRequest - WebSocket transport', () => {\n beforeEach(() => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n });\n\n it('should derive socket message type from URI and method', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.REGISTER,\n })\n );\n expect(infoSpy).toHaveBeenCalledWith('Dispatching request via WSS ', {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should throw error if message type is UNKNOWN', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/unrecognized/path',\n method: HTTP_METHODS.POST,\n };\n\n await expect(apiRequest.makeRequest(requestOptions)).rejects.toThrow(\n 'Unknown Mobius Socket message type: UNKNOWN'\n );\n\n expect(errorSpy).toHaveBeenCalledWith(\n expect.stringContaining('Unknown Mobius Socket message type'),\n {\n file: 'REQUEST',\n method: 'makeRequest',\n }\n );\n });\n\n it('should generate tracking ID with webex-js-sdk prefix', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(uuid).toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n trackingId: 'webex-js-sdk_mock-uuid-12345',\n })\n );\n });\n\n it('should send WSS request with correct payload structure', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n headers: {'x-custom': 'header-value'},\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.REGISTER,\n trackingId: 'webex-js-sdk_mock-uuid-12345',\n metadata: {\n 'x-custom': 'header-value',\n userAgent: 'webex-calling/beta',\n authorization: '',\n },\n data: {userId: 'user-123'},\n });\n });\n\n it('should get user token for supplementary services (CALL_HOLD)', async () => {\n webex.credentials.getUserToken.mockResolvedValue('Bearer token-abc-123');\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/devices/device-123/services/callhold/hold',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.credentials.getUserToken).toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.CALL_HOLD,\n metadata: expect.objectContaining({\n authorization: 'Bearer token-abc-123',\n }),\n })\n );\n });\n\n it('should not get user token for non-supplementary services', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.credentials.getUserToken).not.toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n metadata: expect.objectContaining({\n authorization: '',\n }),\n })\n );\n });\n\n it('should normalize success response to WebexRequestPayload shape', async () => {\n const wsResponse: MobiusSocketResponse = {\n type: 'register.response',\n statusCode: 201,\n statusMessage: 'Created',\n trackingId: 'track-123',\n data: {deviceId: 'device-456', correlationId: 'corr-789'},\n metadata: {'x-response-header': 'value'},\n };\n mockMobiusSocket.sendWssRequest.mockResolvedValue(wsResponse);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = await apiRequest.makeRequest({\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n });\n\n expect(result).toEqual({\n statusCode: 201,\n body: {deviceId: 'device-456', correlationId: 'corr-789'},\n headers: {\n trackingid: 'track-123',\n 'x-response-header': 'value',\n },\n });\n expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('WSS request succeeded'), {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should normalize error to WebexRequestPayload shape', async () => {\n const wsError = {\n statusCode: 400,\n statusMessage: 'Bad Request',\n trackingId: 'error-track-456',\n response: {\n statusCode: 400,\n trackingId: 'error-track-456',\n data: {error: 'Invalid request'},\n metadata: {'x-error-code': 'ERR001'},\n },\n };\n mockMobiusSocket.sendWssRequest.mockRejectedValue(wsError);\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(\n apiRequest.makeRequest({\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n })\n ).rejects.toEqual({\n statusCode: 400,\n body: {error: 'Invalid request'},\n headers: {\n trackingid: 'error-track-456',\n 'x-error-code': 'ERR001',\n },\n });\n\n expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('WSS request failed'), {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n });\n\n describe('registerMobiusSocketListener', () => {\n it('should attach listener to event:async_event', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n\n apiRequest.registerMobiusSocketListener(callback);\n\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('event:async_event', expect.any(Function));\n expect(infoSpy).toHaveBeenCalledWith('Attaching Mobius async event listener', {\n file: 'REQUEST',\n method: 'registerMobiusSocketListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius async event listener attached', {\n file: 'REQUEST',\n method: 'registerMobiusSocketListener',\n });\n });\n\n it('should invoke callback with event data when async event received', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n const mockEvent: MobiusAsyncEvent = {\n type: 'event:async_event',\n eventId: 'evt-123',\n trackingId: 'track-456',\n data: {\n eventType: 'registration.down',\n } as any,\n };\n\n apiRequest.registerMobiusSocketListener(callback);\n\n const attachedCallback = mockMobiusSocket.on.mock.calls[0][1];\n attachedCallback(mockEvent);\n\n expect(callback).toHaveBeenCalledWith(mockEvent);\n });\n\n it('should submit LISTENER_REGISTERED metric', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n\n apiRequest.registerMobiusSocketListener(callback);\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_REGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n });\n });\n\n describe('unregisterMobiusSocketListener', () => {\n it('should detach listener from event:async_event', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.unregisterMobiusSocketListener();\n\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('event:async_event');\n expect(infoSpy).toHaveBeenCalledWith('Detaching Mobius async event listener', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius async event listener detached', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketListener',\n });\n });\n\n it('should submit LISTENER_UNREGISTERED metric', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.unregisterMobiusSocketListener();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_UNREGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n });\n });\n\n describe('registerMobiusSocketConnectionListener', () => {\n const getHandlerFor = (eventName: string): ((...args: unknown[]) => void) => {\n const call = mockMobiusSocket.on.mock.calls.find(([name]: [string]) => name === eventName);\n\n return call[1];\n };\n\n it('should attach listeners to online and offline.* socket events', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.registerMobiusSocketConnectionListener({\n onConnected: jest.fn(),\n onDisconnected: jest.fn(),\n });\n\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('online', expect.any(Function));\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('offline.permanent', expect.any(Function));\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('offline.transient', expect.any(Function));\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('offline.replaced', expect.any(Function));\n expect(infoSpy).toHaveBeenCalledWith('Attaching Mobius socket connection listener', {\n file: 'REQUEST',\n method: 'registerMobiusSocketConnectionListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius socket connection listener attached', {\n file: 'REQUEST',\n method: 'registerMobiusSocketConnectionListener',\n });\n });\n\n it('should invoke onConnected when the online event fires', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const onConnected = jest.fn();\n\n apiRequest.registerMobiusSocketConnectionListener({\n onConnected,\n onDisconnected: jest.fn(),\n });\n\n getHandlerFor('online')();\n\n expect(onConnected).toHaveBeenCalledTimes(1);\n });\n\n it.each([\n ['offline.permanent', MOBIUS_SOCKET_DISCONNECT_REASON.PERMANENT],\n ['offline.transient', MOBIUS_SOCKET_DISCONNECT_REASON.TRANSIENT],\n ['offline.replaced', MOBIUS_SOCKET_DISCONNECT_REASON.REPLACED],\n ])('should invoke onDisconnected with %s reason when %s fires', (eventName, reason) => {\n const apiRequest = APIRequest.getInstance({webex});\n const onDisconnected = jest.fn();\n\n apiRequest.registerMobiusSocketConnectionListener({\n onConnected: jest.fn(),\n onDisconnected,\n });\n\n getHandlerFor(eventName as string)();\n\n expect(onDisconnected).toHaveBeenCalledTimes(1);\n expect(onDisconnected).toHaveBeenCalledWith(reason);\n });\n });\n\n describe('unregisterMobiusSocketConnectionListener', () => {\n it('should detach listeners from online and offline.* socket events', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.unregisterMobiusSocketConnectionListener();\n\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('online');\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('offline.permanent');\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('offline.transient');\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('offline.replaced');\n expect(infoSpy).toHaveBeenCalledWith('Detaching Mobius socket connection listener', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketConnectionListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius socket connection listener detached', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketConnectionListener',\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_uuid","require","_testUtil","_types","_Logger","_interopRequireDefault","_request","_mobiusSocket","_Metrics","_types2","_wsFeatureFlag","_constants","jest","mock","getMobiusSocketInstance","fn","getMetricManager","isMobiusWssEnabled","v4","describe","webex","mockMobiusSocket","mockMetricManager","infoSpy","logSpy","warnSpy","errorSpy","beforeEach","APIRequest","resetInstance","getTestUtilsWebex","clearAllMocks","connect","mockResolvedValue","undefined","disconnect","sendWssRequest","statusCode","trackingId","data","deviceId","isConnected","mockReturnValue","getConnectedWebSocketUrl","on","off","submitMobiusSocketMetric","uuid","spyOn","log","afterEach","it","apiRequest","getInstance","expect","toBeDefined","toHaveBeenCalledWith","file","method","toThrow","instance1","instance2","toBe","not","createAPIRequest","toBeInstanceOf","result","isSocketEnabled","each","enabled","transport","setSocketEnabled","concat","connected","isSocketConnected","toHaveBeenCalled","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_context","prev","next","connectToMobiusSocket","sent","stop","_callee2","wssUrl","_context2","_callee3","_context3","METRIC_EVENT","MOBIUS_SOCKET","MOBIUS_SOCKET_ACTION","CONNECT","METRIC_TYPE","BEHAVIORAL","_callee4","connectionError","_context4","statusMessage","response","error","metadata","mockRejectedValue","rejects","toEqual","body","headers","trackingid","stringContaining","MOBIUS_SOCKET_ERROR","any","String","_callee5","minimalError","_context5","_callee6","_context6","disconnectFromMobiusSocket","_callee7","_context7","DISCONNECT","_callee8","options","_context8","code","reason","_callee9","_context9","Error","resolves","_callee0","_context0","_callee1","requestOptions","expectedResponse","_context1","uri","HTTP_METHODS","POST","userId","request","makeRequest","_callee10","_context10","GET","_callee11","_context11","_callee12","_context12","objectContaining","type","MOBIUS_SOCKET_MESSAGE_TYPE","REGISTER","_callee13","_context13","_callee14","_context14","_callee15","_context15","userAgent","authorization","_callee16","_context16","credentials","getUserToken","CALL_HOLD","_callee17","_context17","_callee18","wsResponse","_context18","correlationId","_callee19","wsError","_context19","callback","registerMobiusSocketListener","Function","mockEvent","eventId","eventType","attachedCallback","calls","LISTENER_REGISTERED","unregisterMobiusSocketListener","LISTENER_UNREGISTERED","getHandlerFor","eventName","call","find","_ref20","_ref21","_slicedToArray2","name","registerMobiusSocketConnectionListener","onConnected","onDisconnected","toHaveBeenCalledTimes","MOBIUS_SOCKET_DISCONNECT_REASON","PERMANENT","TRANSIENT","REPLACED","unregisterMobiusSocketConnectionListener"],"sources":["request.test.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport {getTestUtilsWebex} from '../../common/testUtil';\nimport {HTTP_METHODS, WebexRequestPayload} from '../../common/types';\nimport log from '../../Logger';\nimport {APIRequest, createAPIRequest} from './request';\nimport {getMobiusSocketInstance} from '../../mobius-socket';\nimport {getMetricManager} from '../../Metrics';\nimport {METRIC_EVENT, METRIC_TYPE, MOBIUS_SOCKET_ACTION} from '../../Metrics/types';\nimport {isMobiusWssEnabled} from './wsFeatureFlag';\nimport {MOBIUS_SOCKET_DISCONNECT_REASON, MOBIUS_SOCKET_MESSAGE_TYPE} from './constants';\nimport {MobiusSocketResponse, MobiusAsyncEvent} from './types';\n\n// Mock dependencies\njest.mock('../../mobius-socket', () => ({\n getMobiusSocketInstance: jest.fn(),\n}));\njest.mock('../../Metrics', () => ({\n getMetricManager: jest.fn(),\n}));\njest.mock('./wsFeatureFlag', () => ({\n isMobiusWssEnabled: jest.fn(),\n}));\njest.mock('uuid', () => ({\n v4: jest.fn(),\n}));\n\ndescribe('APIRequest', () => {\n let webex: ReturnType<typeof getTestUtilsWebex>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let mockMobiusSocket: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let mockMetricManager: any;\n let infoSpy: jest.SpyInstance;\n let logSpy: jest.SpyInstance;\n let warnSpy: jest.SpyInstance;\n let errorSpy: jest.SpyInstance;\n\n beforeEach(() => {\n APIRequest.resetInstance();\n webex = getTestUtilsWebex();\n jest.clearAllMocks();\n\n mockMobiusSocket = {\n connect: jest.fn().mockResolvedValue(undefined),\n disconnect: jest.fn().mockResolvedValue(undefined),\n sendWssRequest: jest.fn().mockResolvedValue({\n statusCode: 200,\n trackingId: 'test-tracking-id',\n data: {deviceId: 'test-device-id'},\n }),\n isConnected: jest.fn().mockReturnValue(false),\n getConnectedWebSocketUrl: jest.fn().mockReturnValue('wss://test.webex.com'),\n on: jest.fn(),\n off: jest.fn(),\n };\n\n mockMetricManager = {\n submitMobiusSocketMetric: jest.fn(),\n };\n\n (getMobiusSocketInstance as jest.Mock).mockReturnValue(mockMobiusSocket);\n (getMetricManager as jest.Mock).mockReturnValue(mockMetricManager);\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n (uuid as jest.Mock).mockReturnValue('mock-uuid-12345');\n\n infoSpy = jest.spyOn(log, 'info');\n logSpy = jest.spyOn(log, 'log');\n warnSpy = jest.spyOn(log, 'warn');\n errorSpy = jest.spyOn(log, 'error');\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n describe('Constructor and singleton pattern', () => {\n it('should create instance with webex config and HTTP transport', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n expect(apiRequest).toBeDefined();\n expect(getMobiusSocketInstance).toHaveBeenCalledWith(webex);\n expect(getMetricManager).toHaveBeenCalledWith(webex);\n expect(isMobiusWssEnabled).toHaveBeenCalledWith(webex);\n expect(infoSpy).toHaveBeenCalledWith('APIRequest initialized with transport: HTTP', {\n file: 'REQUEST',\n method: 'constructor',\n });\n });\n\n it('should create instance with webex config and WSS transport when feature flag enabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n\n const apiRequest = APIRequest.getInstance({webex});\n\n expect(apiRequest).toBeDefined();\n expect(infoSpy).toHaveBeenCalledWith('APIRequest initialized with transport: WSS', {\n file: 'REQUEST',\n method: 'constructor',\n });\n });\n\n it('should throw error if webex is missing from config', () => {\n expect(() => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n APIRequest.getInstance({webex: undefined as any});\n }).toThrow('WebexSDK instance is required');\n\n expect(errorSpy).toHaveBeenCalledWith(\n 'APIRequest instantiation failed: WebexSDK instance is required',\n {\n file: 'REQUEST',\n method: 'constructor',\n }\n );\n });\n\n it('should return same instance on subsequent getInstance() calls', () => {\n const instance1 = APIRequest.getInstance({webex});\n const instance2 = APIRequest.getInstance({webex});\n\n expect(instance1).toBe(instance2);\n });\n\n it('should clear singleton when resetInstance() is called', () => {\n const instance1 = APIRequest.getInstance({webex});\n\n APIRequest.resetInstance();\n\n const instance2 = APIRequest.getInstance({webex});\n\n expect(instance1).not.toBe(instance2);\n });\n });\n\n describe('createAPIRequest factory', () => {\n it('should create APIRequest instance using factory function', () => {\n const apiRequest = createAPIRequest({webex});\n\n expect(apiRequest).toBeDefined();\n expect(apiRequest).toBeInstanceOf(APIRequest);\n });\n });\n\n describe('isSocketEnabled', () => {\n it('should return false when WSS is disabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = apiRequest.isSocketEnabled();\n\n expect(result).toBe(false);\n });\n\n it('should return true when WSS is enabled', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = apiRequest.isSocketEnabled();\n\n expect(result).toBe(true);\n });\n });\n\n describe('setSocketEnabled', () => {\n it.each([\n [true, 'WSS'],\n [false, 'HTTP'],\n ])('overrides the active transport to %s and logs it', (enabled, transport) => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.setSocketEnabled(enabled);\n\n expect(apiRequest.isSocketEnabled()).toBe(enabled);\n expect(infoSpy).toHaveBeenCalledWith(`APIRequest transport set to: ${transport}`, {\n file: 'REQUEST',\n method: 'setSocketEnabled',\n });\n });\n\n it('can flip the feature-flag seeded transport from WSS to HTTP', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n const apiRequest = APIRequest.getInstance({webex});\n expect(apiRequest.isSocketEnabled()).toBe(true);\n\n apiRequest.setSocketEnabled(false);\n\n expect(apiRequest.isSocketEnabled()).toBe(false);\n });\n\n it('can flip the feature-flag seeded transport from HTTP to WSS', () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n expect(apiRequest.isSocketEnabled()).toBe(false);\n\n apiRequest.setSocketEnabled(true);\n\n expect(apiRequest.isSocketEnabled()).toBe(true);\n });\n });\n\n describe('isSocketConnected', () => {\n it.each([true, false])(\n 'should delegate to the Mobius socket isConnected() and return %s',\n (connected) => {\n mockMobiusSocket.isConnected.mockReturnValue(connected);\n const apiRequest = APIRequest.getInstance({webex});\n\n expect(apiRequest.isSocketConnected()).toBe(connected);\n expect(mockMobiusSocket.isConnected).toHaveBeenCalled();\n }\n );\n });\n\n describe('connectToMobiusSocket', () => {\n it('should return immediately if socket is already connected', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(true);\n mockMobiusSocket.getConnectedWebSocketUrl.mockReturnValue('wss://existing.webex.com');\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = await apiRequest.connectToMobiusSocket('wss://test.webex.com');\n\n expect(result).toBe('wss://existing.webex.com');\n expect(mockMobiusSocket.connect).not.toHaveBeenCalled();\n expect(infoSpy).toHaveBeenCalledWith('Mobius WebSocket already connected', {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n });\n expect(mockMetricManager.submitMobiusSocketMetric).not.toHaveBeenCalled();\n });\n\n it('should initiate new connection if not connected', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://test.webex.com/api/v1';\n\n const result = await apiRequest.connectToMobiusSocket(wssUrl);\n\n expect(mockMobiusSocket.connect).toHaveBeenCalledWith(wssUrl);\n expect(result).toBe(wssUrl);\n expect(infoSpy).toHaveBeenCalledWith(\n 'Mobius WebSocket not connected, initiating connection',\n {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n }\n );\n });\n\n it('should submit success metric on successful connection', async () => {\n mockMobiusSocket.isConnected.mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://mobius.webex.com/api/v1';\n\n await apiRequest.connectToMobiusSocket(wssUrl);\n\n expect(logSpy).toHaveBeenCalledWith('Mobius WebSocket connected successfully', {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n });\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl\n );\n });\n\n it('should throw normalized error on connection failure', async () => {\n const connectionError = {\n statusCode: 503,\n statusMessage: 'Service Unavailable',\n trackingId: 'error-tracking-id',\n response: {\n statusCode: 503,\n trackingId: 'error-tracking-id',\n data: {error: 'Connection failed'},\n metadata: {'x-error': 'true'},\n },\n };\n mockMobiusSocket.isConnected.mockReturnValue(false);\n mockMobiusSocket.connect.mockRejectedValue(connectionError);\n const apiRequest = APIRequest.getInstance({webex});\n const wssUrl = 'wss://mobius.webex.com/api/v1';\n\n await expect(apiRequest.connectToMobiusSocket(wssUrl)).rejects.toEqual({\n statusCode: 503,\n body: {error: 'Connection failed'},\n headers: {\n trackingid: 'error-tracking-id',\n 'x-error': 'true',\n },\n });\n\n expect(warnSpy).toHaveBeenCalledWith(\n expect.stringContaining('Mobius WebSocket connection failed'),\n {\n file: 'REQUEST',\n method: 'connectToMobiusSocket',\n }\n );\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.CONNECT,\n METRIC_TYPE.BEHAVIORAL,\n wssUrl,\n undefined,\n expect.any(String)\n );\n });\n\n it('should handle connection error with minimal error object', async () => {\n const minimalError = {statusCode: 500};\n mockMobiusSocket.isConnected.mockReturnValue(false);\n mockMobiusSocket.connect.mockRejectedValue(minimalError);\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(apiRequest.connectToMobiusSocket('wss://test.webex.com')).rejects.toEqual({\n statusCode: 500,\n body: undefined,\n headers: {\n trackingid: '',\n },\n });\n });\n });\n\n describe('disconnectFromMobiusSocket', () => {\n it('should disconnect successfully', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMobiusSocket.disconnect).toHaveBeenCalledWith(undefined);\n expect(infoSpy).toHaveBeenCalledWith('Disconnecting from Mobius WebSocket', {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius WebSocket disconnected successfully', {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n });\n });\n\n it('should submit success metric after disconnect', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL,\n 'wss://test.webex.com'\n );\n });\n\n it('should disconnect with custom options', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const options = {code: 1000, reason: 'Normal closure'};\n\n await apiRequest.disconnectFromMobiusSocket(options);\n\n expect(mockMobiusSocket.disconnect).toHaveBeenCalledWith(options);\n });\n\n it('should handle disconnect error silently and log warning', async () => {\n mockMobiusSocket.disconnect.mockRejectedValue(new Error('Disconnect failed'));\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(apiRequest.disconnectFromMobiusSocket()).resolves.not.toThrow();\n\n expect(warnSpy).toHaveBeenCalledWith(\n 'Mobius WebSocket disconnection failed: Error: Disconnect failed',\n {\n file: 'REQUEST',\n method: 'disconnectFromMobiusSocket',\n }\n );\n });\n\n it('should submit error metric on disconnect failure', async () => {\n mockMobiusSocket.disconnect.mockRejectedValue(new Error('Disconnect failed'));\n const apiRequest = APIRequest.getInstance({webex});\n\n await apiRequest.disconnectFromMobiusSocket();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET_ERROR,\n MOBIUS_SOCKET_ACTION.DISCONNECT,\n METRIC_TYPE.BEHAVIORAL,\n 'wss://test.webex.com',\n undefined,\n 'Error: Disconnect failed'\n );\n });\n });\n\n describe('makeRequest - HTTP transport', () => {\n it('should route through webex.request when WSS is disabled', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n };\n const expectedResponse: WebexRequestPayload = {\n statusCode: 200,\n body: {deviceId: 'device-456'},\n };\n webex.request.mockResolvedValue(expectedResponse);\n\n const result = await apiRequest.makeRequest(requestOptions);\n\n expect(webex.request).toHaveBeenCalledWith(requestOptions);\n expect(result).toEqual(expectedResponse);\n expect(infoSpy).toHaveBeenCalledWith('Dispatching request via HTTP ', {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should pass request options unchanged to webex.request', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/devices/device-123',\n method: HTTP_METHODS.GET,\n headers: {'x-custom-header': 'value'},\n };\n webex.request.mockResolvedValue({statusCode: 200});\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.request).toHaveBeenCalledWith(requestOptions);\n });\n\n it('should return webex.request result directly', async () => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(false);\n const apiRequest = APIRequest.getInstance({webex});\n const expectedResponse = {\n statusCode: 404,\n body: {error: 'Not found'},\n headers: {'x-tracking-id': 'track-123'},\n };\n webex.request.mockResolvedValue(expectedResponse);\n\n const result = await apiRequest.makeRequest({\n uri: '/api/v1/test',\n method: HTTP_METHODS.GET,\n });\n\n expect(result).toEqual(expectedResponse);\n });\n });\n\n describe('makeRequest - WebSocket transport', () => {\n beforeEach(() => {\n (isMobiusWssEnabled as jest.Mock).mockReturnValue(true);\n });\n\n it('should derive socket message type from URI and method', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.REGISTER,\n })\n );\n expect(infoSpy).toHaveBeenCalledWith('Dispatching request via WSS ', {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should throw error if message type is UNKNOWN', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/unrecognized/path',\n method: HTTP_METHODS.POST,\n };\n\n await expect(apiRequest.makeRequest(requestOptions)).rejects.toThrow(\n 'Unknown Mobius Socket message type: UNKNOWN'\n );\n\n expect(errorSpy).toHaveBeenCalledWith(\n expect.stringContaining('Unknown Mobius Socket message type'),\n {\n file: 'REQUEST',\n method: 'makeRequest',\n }\n );\n });\n\n it('should generate tracking ID with webex-js-sdk prefix', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(uuid).toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n trackingId: 'webex-js-sdk_mock-uuid-12345',\n })\n );\n });\n\n it('should send WSS request with correct payload structure', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n body: {userId: 'user-123'},\n headers: {'x-custom': 'header-value'},\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.REGISTER,\n trackingId: 'webex-js-sdk_mock-uuid-12345',\n metadata: {\n 'x-custom': 'header-value',\n userAgent: 'webex-calling/beta',\n authorization: '',\n },\n data: {userId: 'user-123'},\n });\n });\n\n it('should get user token for supplementary services (CALL_HOLD)', async () => {\n webex.credentials.getUserToken.mockResolvedValue('Bearer token-abc-123');\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/devices/device-123/services/callhold/hold',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.credentials.getUserToken).toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n type: MOBIUS_SOCKET_MESSAGE_TYPE.CALL_HOLD,\n metadata: expect.objectContaining({\n authorization: 'Bearer token-abc-123',\n }),\n })\n );\n });\n\n it('should not get user token for non-supplementary services', async () => {\n const apiRequest = APIRequest.getInstance({webex});\n const requestOptions = {\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n };\n\n await apiRequest.makeRequest(requestOptions);\n\n expect(webex.credentials.getUserToken).not.toHaveBeenCalled();\n expect(mockMobiusSocket.sendWssRequest).toHaveBeenCalledWith(\n expect.objectContaining({\n metadata: expect.objectContaining({\n authorization: '',\n }),\n })\n );\n });\n\n it('should normalize success response to WebexRequestPayload shape', async () => {\n const wsResponse: MobiusSocketResponse = {\n type: 'register.response',\n statusCode: 201,\n statusMessage: 'Created',\n trackingId: 'track-123',\n data: {deviceId: 'device-456', correlationId: 'corr-789'},\n metadata: {'x-response-header': 'value'},\n };\n mockMobiusSocket.sendWssRequest.mockResolvedValue(wsResponse);\n const apiRequest = APIRequest.getInstance({webex});\n\n const result = await apiRequest.makeRequest({\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n });\n\n expect(result).toEqual({\n statusCode: 201,\n body: {deviceId: 'device-456', correlationId: 'corr-789'},\n headers: {\n trackingid: 'track-123',\n 'x-response-header': 'value',\n },\n });\n expect(logSpy).toHaveBeenCalledWith(expect.stringContaining('WSS request succeeded'), {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n\n it('should normalize error to WebexRequestPayload shape', async () => {\n const wsError = {\n statusCode: 400,\n statusMessage: 'Bad Request',\n trackingId: 'error-track-456',\n response: {\n statusCode: 400,\n trackingId: 'error-track-456',\n data: {error: 'Invalid request'},\n metadata: {'x-error-code': 'ERR001'},\n },\n };\n mockMobiusSocket.sendWssRequest.mockRejectedValue(wsError);\n const apiRequest = APIRequest.getInstance({webex});\n\n await expect(\n apiRequest.makeRequest({\n uri: '/api/v1/calling/web/device',\n method: HTTP_METHODS.POST,\n })\n ).rejects.toEqual({\n statusCode: 400,\n body: {error: 'Invalid request'},\n headers: {\n trackingid: 'error-track-456',\n 'x-error-code': 'ERR001',\n },\n });\n\n expect(errorSpy).toHaveBeenCalledWith(expect.stringContaining('WSS request failed'), {\n file: 'REQUEST',\n method: 'makeRequest',\n });\n });\n });\n\n describe('registerMobiusSocketListener', () => {\n it('should attach listener to event:async_event', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n\n apiRequest.registerMobiusSocketListener(callback);\n\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('event:async_event', expect.any(Function));\n expect(infoSpy).toHaveBeenCalledWith('Attaching Mobius async event listener', {\n file: 'REQUEST',\n method: 'registerMobiusSocketListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius async event listener attached', {\n file: 'REQUEST',\n method: 'registerMobiusSocketListener',\n });\n });\n\n it('should invoke callback with event data when async event received', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n const mockEvent: MobiusAsyncEvent = {\n type: 'event:async_event',\n eventId: 'evt-123',\n trackingId: 'track-456',\n data: {\n eventType: 'registration.down',\n } as any,\n };\n\n apiRequest.registerMobiusSocketListener(callback);\n\n const attachedCallback = mockMobiusSocket.on.mock.calls[0][1];\n attachedCallback(mockEvent);\n\n expect(callback).toHaveBeenCalledWith(mockEvent);\n });\n\n it('should submit LISTENER_REGISTERED metric', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const callback = jest.fn();\n\n apiRequest.registerMobiusSocketListener(callback);\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_REGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n });\n });\n\n describe('unregisterMobiusSocketListener', () => {\n it('should detach listener from event:async_event', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.unregisterMobiusSocketListener();\n\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('event:async_event');\n expect(infoSpy).toHaveBeenCalledWith('Detaching Mobius async event listener', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius async event listener detached', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketListener',\n });\n });\n\n it('should submit LISTENER_UNREGISTERED metric', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.unregisterMobiusSocketListener();\n\n expect(mockMetricManager.submitMobiusSocketMetric).toHaveBeenCalledWith(\n METRIC_EVENT.MOBIUS_SOCKET,\n MOBIUS_SOCKET_ACTION.LISTENER_UNREGISTERED,\n METRIC_TYPE.BEHAVIORAL\n );\n });\n });\n\n describe('registerMobiusSocketConnectionListener', () => {\n const getHandlerFor = (eventName: string): ((...args: unknown[]) => void) => {\n const call = mockMobiusSocket.on.mock.calls.find(([name]: [string]) => name === eventName);\n\n return call[1];\n };\n\n it('should attach listeners to online and offline.* socket events', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.registerMobiusSocketConnectionListener({\n onConnected: jest.fn(),\n onDisconnected: jest.fn(),\n });\n\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('online', expect.any(Function));\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('offline.permanent', expect.any(Function));\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('offline.transient', expect.any(Function));\n expect(mockMobiusSocket.on).toHaveBeenCalledWith('offline.replaced', expect.any(Function));\n expect(infoSpy).toHaveBeenCalledWith('Attaching Mobius socket connection listener', {\n file: 'REQUEST',\n method: 'registerMobiusSocketConnectionListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius socket connection listener attached', {\n file: 'REQUEST',\n method: 'registerMobiusSocketConnectionListener',\n });\n });\n\n it('should invoke onConnected when the online event fires', () => {\n const apiRequest = APIRequest.getInstance({webex});\n const onConnected = jest.fn();\n\n apiRequest.registerMobiusSocketConnectionListener({\n onConnected,\n onDisconnected: jest.fn(),\n });\n\n getHandlerFor('online')();\n\n expect(onConnected).toHaveBeenCalledTimes(1);\n });\n\n it.each([\n ['offline.permanent', MOBIUS_SOCKET_DISCONNECT_REASON.PERMANENT],\n ['offline.transient', MOBIUS_SOCKET_DISCONNECT_REASON.TRANSIENT],\n ['offline.replaced', MOBIUS_SOCKET_DISCONNECT_REASON.REPLACED],\n ])('should invoke onDisconnected with %s reason when %s fires', (eventName, reason) => {\n const apiRequest = APIRequest.getInstance({webex});\n const onDisconnected = jest.fn();\n\n apiRequest.registerMobiusSocketConnectionListener({\n onConnected: jest.fn(),\n onDisconnected,\n });\n\n getHandlerFor(eventName as string)();\n\n expect(onDisconnected).toHaveBeenCalledTimes(1);\n expect(onDisconnected).toHaveBeenCalledWith(reason);\n });\n });\n\n describe('unregisterMobiusSocketConnectionListener', () => {\n it('should detach listeners from online and offline.* socket events', () => {\n const apiRequest = APIRequest.getInstance({webex});\n\n apiRequest.unregisterMobiusSocketConnectionListener();\n\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('online');\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('offline.permanent');\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('offline.transient');\n expect(mockMobiusSocket.off).toHaveBeenCalledWith('offline.replaced');\n expect(infoSpy).toHaveBeenCalledWith('Detaching Mobius socket connection listener', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketConnectionListener',\n });\n expect(logSpy).toHaveBeenCalledWith('Mobius socket connection listener detached', {\n file: 'REQUEST',\n method: 'unregisterMobiusSocketConnectionListener',\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {FailoverCacheState} from 'CallingClient/registration/types';\nimport {\n KmsKey,\n KmsResourceObject,\n LogsMetaData,\n PeopleListResponse,\n UploadLogsResponse,\n WebexRequestPayload,\n} from '../common/types';\n/* eslint-disable no-shadow */\n\ntype Listener = (e: string, data?: unknown) => void;\ntype ListenerOff = (e: string) => void;\n\nexport type ServiceHost = {\n host: string;\n ttl: number;\n priority: number;\n id: string;\n homeCluster?: boolean;\n};\n\nexport type Model = {\n _values: {\n key: string;\n };\n};\n\nexport type ServiceCatalog = {\n serviceGroups: {\n // cSpell:disable\n postauth: [\n {\n _values: {\n name: string;\n hosts: ServiceHost[];\n };\n }\n ];\n /* cSpell:enable */\n };\n};\n\nexport type ClientRegionInfo = {\n attribution: string;\n clientAddress: string;\n clientRegion: string;\n countryCode: string;\n disclaimer: string;\n regionCode: string;\n timezone: string;\n};\n\nexport type Logger = {\n config?: {\n level: string;\n bufferLogLevel: string;\n };\n log: (payload: string) => void;\n error: (payload: string) => void;\n warn: (payload: string) => void;\n info: (payload: string) => void;\n trace: (payload: string) => void;\n debug: (payload: string) => void;\n};\n\n// TODO: is there a way to import bindings from the Webex JS SDK without having to redefine expected methods and structure?\n// This defines the shape for the webex SDK, if a typing doesn't exist, it should be added here\nexport interface WebexSDK {\n boundedStorage: {\n get: (namespace: string, key: string) => Promise<FailoverCacheState>;\n put: (namespace: string, key: string, value: FailoverCacheState) => Promise<void>;\n del: (namespace: string, key: string) => Promise<void>;\n };\n // top level primitives/funcs\n config: {\n fedramp: boolean;\n defaultMobiusSocketOptions?: Record<string, unknown>;\n };\n version: string;\n canAuthorize: boolean;\n credentials: {\n getUserToken: () => Promise<string>;\n canRefresh?: boolean;\n refresh?: (options: {force: boolean}) => Promise<unknown>;\n };\n ready: boolean;\n sessionId?: string;\n request: <T>(payload: WebexRequestPayload) => Promise<T>;\n // internal plugins\n internal: {\n mercury: {\n on: Listener;\n off: ListenerOff;\n connected: boolean;\n connecting: boolean;\n };\n feature?: {\n updateFeature?: (featureToggle: unknown) => void;\n };\n calendar: unknown;\n device:
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {FailoverCacheState} from 'CallingClient/registration/types';\nimport {\n KmsKey,\n KmsResourceObject,\n LogsMetaData,\n PeopleListResponse,\n UploadLogsResponse,\n WebexRequestPayload,\n} from '../common/types';\n/* eslint-disable no-shadow */\n\ntype Listener = (e: string, data?: unknown) => void;\ntype ListenerOff = (e: string) => void;\n\nexport type ServiceHost = {\n host: string;\n ttl: number;\n priority: number;\n id: string;\n homeCluster?: boolean;\n};\n\nexport type Model = {\n _values: {\n key: string;\n };\n};\n\nexport type WDMDevice = {\n url: string;\n userId: string;\n orgId: string;\n version: string;\n callingBehavior: string;\n registered?: boolean;\n webSocketUrl?: string;\n register?: () => Promise<unknown>;\n refresh?: () => Promise<unknown>;\n /** WDM / device-registration settings (e.g. `webrtc-calling-over-ws`). */\n settings?: Record<string, {value?: boolean} | undefined>;\n features: {\n developer: {\n models: Model[];\n get: (key: string) => {value: boolean} | undefined;\n };\n entitlement: {\n models: Model[];\n };\n };\n};\n\nexport type ServiceCatalog = {\n serviceGroups: {\n // cSpell:disable\n postauth: [\n {\n _values: {\n name: string;\n hosts: ServiceHost[];\n };\n }\n ];\n /* cSpell:enable */\n };\n};\n\nexport type ClientRegionInfo = {\n attribution: string;\n clientAddress: string;\n clientRegion: string;\n countryCode: string;\n disclaimer: string;\n regionCode: string;\n timezone: string;\n};\n\nexport type Logger = {\n config?: {\n level: string;\n bufferLogLevel: string;\n };\n log: (payload: string) => void;\n error: (payload: string) => void;\n warn: (payload: string) => void;\n info: (payload: string) => void;\n trace: (payload: string) => void;\n debug: (payload: string) => void;\n};\n\n// TODO: is there a way to import bindings from the Webex JS SDK without having to redefine expected methods and structure?\n// This defines the shape for the webex SDK, if a typing doesn't exist, it should be added here\nexport interface WebexSDK {\n boundedStorage: {\n get: (namespace: string, key: string) => Promise<FailoverCacheState>;\n put: (namespace: string, key: string, value: FailoverCacheState) => Promise<void>;\n del: (namespace: string, key: string) => Promise<void>;\n };\n // top level primitives/funcs\n config: {\n fedramp: boolean;\n defaultMobiusSocketOptions?: Record<string, unknown>;\n };\n version: string;\n canAuthorize: boolean;\n credentials: {\n getUserToken: () => Promise<string>;\n canRefresh?: boolean;\n refresh?: (options: {force: boolean}) => Promise<unknown>;\n };\n ready: boolean;\n sessionId?: string;\n request: <T>(payload: WebexRequestPayload) => Promise<T>;\n // internal plugins\n internal: {\n mercury: {\n on: Listener;\n off: ListenerOff;\n connected: boolean;\n connecting: boolean;\n };\n feature?: {\n updateFeature?: (featureToggle: unknown) => void;\n };\n calendar: unknown;\n device: WDMDevice;\n encryption: {\n decryptText: (encryptionKeyUrl: string, encryptedData?: string) => Promise<string>;\n encryptText: (encryptionKeyUrl: string, text?: string) => Promise<string>;\n kms: {\n createUnboundKeys: (arg0: {count?: number}) => Promise<KmsKey[]>;\n createResource: (arg0: {keyUris: string[]}) => Promise<KmsResourceObject>;\n bindKey: (arg0: {kroUri: string; keyUri: string}) => Promise<KmsKey>;\n };\n };\n presence: unknown;\n support: {\n submitLogs: (\n metaData: LogsMetaData,\n logs?: string,\n options?: {\n type: 'diff' | 'full';\n }\n ) => Promise<UploadLogsResponse>;\n };\n services: {\n _hostCatalog: Record<string, ServiceHost[]>;\n _serviceUrls: {\n mobius: string;\n identity: string;\n janus: string;\n wdm: string;\n broadworksIdpProxy: string;\n hydra: string;\n mercuryApi: string;\n 'ucmgmt-gateway': string;\n contactsService: string;\n };\n _activeServices: {\n broadworksIdpProxy: string;\n contactsService: string;\n hydra: string;\n janus: string;\n mercuryApi: string;\n mobius: string;\n };\n get: (service: string) => string;\n getMobiusClusters: () => ServiceHost[];\n fetchClientRegionInfo: () => Promise<ClientRegionInfo>;\n invalidateCache?: (timestamp: unknown) => void;\n switchActiveClusterIds?: (activeClusters: unknown) => void;\n };\n metrics: {\n submitClientMetrics: (name: string, data: unknown) => void;\n };\n };\n // public plugins\n logger: Logger;\n messages: unknown;\n memberships: unknown;\n people: {\n list: (arg: object) => Promise<PeopleListResponse>;\n };\n rooms: unknown;\n teams: unknown;\n}\n\nexport interface ISDKConnector {\n setWebex: (webexInstance: WebexSDK) => void;\n getWebex: () => WebexSDK;\n get: () => ISDKConnector;\n registerListener: <T>(event: string, cb: (data?: T) => unknown) => void;\n unregisterListener: (event: string) => void;\n}\n"],"mappings":"","ignoreList":[]}
|
package/dist/common/Utils.js
CHANGED
|
@@ -33,6 +33,7 @@ exports.normalizeMobiusUris = normalizeMobiusUris;
|
|
|
33
33
|
exports.parseMediaQualityStatistics = parseMediaQualityStatistics;
|
|
34
34
|
exports.resolveCallerIdByName = resolveCallerIdByName;
|
|
35
35
|
exports.resolveCallerIdDisplay = resolveCallerIdDisplay;
|
|
36
|
+
exports.resolveCallingBackend = resolveCallingBackend;
|
|
36
37
|
exports.resolveContact = resolveContact;
|
|
37
38
|
exports.scimQuery = scimQuery;
|
|
38
39
|
exports.serviceErrorCodeHandler = serviceErrorCodeHandler;
|
|
@@ -970,15 +971,15 @@ var waitForMsecs = exports.waitForMsecs = function waitForMsecs(msec) {
|
|
|
970
971
|
};
|
|
971
972
|
|
|
972
973
|
/**
|
|
973
|
-
*
|
|
974
|
+
* Determine the calling backend from the device object.
|
|
974
975
|
*
|
|
975
|
-
* @param
|
|
976
|
+
* @param device - The device object containing callingBehavior and entitlement features.
|
|
976
977
|
* @returns CallingBackEnd.
|
|
977
978
|
*/
|
|
978
|
-
function
|
|
979
|
-
var entModels =
|
|
979
|
+
function resolveCallingBackend(device) {
|
|
980
|
+
var entModels = device.features.entitlement.models;
|
|
980
981
|
var callingBackend;
|
|
981
|
-
if (
|
|
982
|
+
if (device.callingBehavior === _constants2.NATIVE_WEBEX_TEAMS_CALLING) {
|
|
982
983
|
for (var i = 0; i < entModels.length; i += 1) {
|
|
983
984
|
if (entModels[i][_constants2.VALUES][_constants2.KEY] === _constants2.ENTITLEMENT_BASIC || entModels[i][_constants2.VALUES][_constants2.KEY] === _constants2.ENTITLEMENT_STANDARD) {
|
|
984
985
|
callingBackend = _types3.CALLING_BACKEND.WXC;
|
|
@@ -988,12 +989,22 @@ function getCallingBackEnd(webex) {
|
|
|
988
989
|
break;
|
|
989
990
|
}
|
|
990
991
|
}
|
|
991
|
-
} else if (
|
|
992
|
+
} else if (device.callingBehavior === _constants2.NATIVE_SIP_CALL_TO_UCM) {
|
|
992
993
|
callingBackend = _types3.CALLING_BACKEND.UCM;
|
|
993
994
|
} else {
|
|
994
995
|
callingBackend = _types3.CALLING_BACKEND.INVALID;
|
|
995
996
|
}
|
|
996
|
-
return callingBackend;
|
|
997
|
+
return callingBackend || _types3.CALLING_BACKEND.INVALID;
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
/**
|
|
1001
|
+
* Register calling backend.
|
|
1002
|
+
*
|
|
1003
|
+
* @param webex -.
|
|
1004
|
+
* @returns CallingBackEnd.
|
|
1005
|
+
*/
|
|
1006
|
+
function getCallingBackEnd(webex) {
|
|
1007
|
+
return resolveCallingBackend(webex.internal.device);
|
|
997
1008
|
}
|
|
998
1009
|
|
|
999
1010
|
/**
|