@webex/calling 3.12.0-mobius-socket.18 → 3.12.0-mobius-socket.20
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/utils/request.js +6 -3
- package/dist/CallingClient/utils/request.js.map +1 -1
- package/dist/CallingClient/utils/request.test.js +2 -2
- package/dist/CallingClient/utils/request.test.js.map +1 -1
- package/dist/CallingClient/utils/types.js.map +1 -1
- package/dist/mobius-socket/config.js +7 -44
- package/dist/mobius-socket/config.js.map +1 -1
- package/dist/mobius-socket/errors.js +71 -26
- package/dist/mobius-socket/errors.js.map +1 -1
- package/dist/mobius-socket/index.js +4 -54
- package/dist/mobius-socket/index.js.map +1 -1
- package/dist/mobius-socket/mobius-socket-events.test.js +20 -48
- package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -1
- package/dist/mobius-socket/mobius-socket.js +359 -748
- package/dist/mobius-socket/mobius-socket.js.map +1 -1
- package/dist/mobius-socket/mobius-socket.test.js +452 -728
- package/dist/mobius-socket/mobius-socket.test.js.map +1 -1
- package/dist/mobius-socket/socket/constants.js +14 -0
- package/dist/mobius-socket/socket/constants.js.map +1 -1
- package/dist/mobius-socket/socket/socket-base.js +152 -205
- package/dist/mobius-socket/socket/socket-base.js.map +1 -1
- package/dist/mobius-socket/socket/types.js.map +1 -1
- package/dist/mobius-socket/socket.test.js +38 -63
- package/dist/mobius-socket/socket.test.js.map +1 -1
- package/dist/mobius-socket/types.js.map +1 -1
- package/dist/module/CallingClient/utils/request.js +3 -2
- package/dist/module/mobius-socket/config.js +7 -10
- package/dist/module/mobius-socket/errors.js +34 -0
- package/dist/module/mobius-socket/index.js +0 -3
- package/dist/module/mobius-socket/mobius-socket.js +237 -426
- package/dist/module/mobius-socket/socket/socket-base.js +79 -116
- package/dist/types/CallingClient/utils/request.d.ts.map +1 -1
- package/dist/types/CallingClient/utils/types.d.ts +1 -1
- package/dist/types/CallingClient/utils/types.d.ts.map +1 -1
- package/dist/types/mobius-socket/config.d.ts +7 -8
- package/dist/types/mobius-socket/config.d.ts.map +1 -1
- package/dist/types/mobius-socket/errors.d.ts +11 -1
- package/dist/types/mobius-socket/errors.d.ts.map +1 -1
- package/dist/types/mobius-socket/index.d.ts +1 -5
- package/dist/types/mobius-socket/index.d.ts.map +1 -1
- package/dist/types/mobius-socket/mobius-socket.d.ts +33 -35
- package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/socket-base.d.ts +9 -10
- package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/types.d.ts +0 -8
- package/dist/types/mobius-socket/socket/types.d.ts.map +1 -1
- package/dist/types/mobius-socket/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","require","_common","_commonTimers","_errors","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty3","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","sockets","_weakMap","UnknownResponseCtor","UnknownResponse","BadRequestCtor","BadRequest","NotAuthorizedCtor","NotAuthorized","ForbiddenCtor","Forbidden","ConnectionErrorCtor","ConnectionError","Socket","exports","_EventEmitter","_this","_classCallCheck2","_domain","_pendingResponses","_map","onmessage","bind","onclose","setMaxListeners","_inherits2","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","concat","SOCKET_READY_STATE","CLOSING","CLOSED","originalCode","code","originalReason","reason","resolvedOptions","_defaults2","Error","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","CONNECTING","closeEvent","open","_this3","URL","hostname","_unused","checkRequired","_keys","_defineProperty2","WebSocket","getWebSocketConstructor","_fixCloseCode","onopen","_authorize","token","then","catch","onerror","set","_rejectPendingResponses","emit","removeAllListeners","_this4","data","JSON","parse","processedEvent","type","_acknowledge","_handlePendingResponse","send","_this5","OPEN","_isObject2","_stringify","sendRequest","_this6","undefined","request","trackingId","_createTrackingId","timeout","wssResponseTimeout","matchesResponse","response","getStatusCode","statusCode","getStatusMessage","statusMessage","createError","createTimeoutError","has","timeoutId","_clearPendingResponse","_has2","MESSAGE_TYPES","EVENT_ACK","eventId","message","refresh","refreshedToken","toString","String","AUTH","subtype","crypto","randomUUID","pendingResponse","delete","size","_from","values","_this7","refreshToken","toLowerCase","EventEmitter"],"sources":["socket-base.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\n// @ts-expect-error `@webex/common` is still JS-only and does not ship declarations.\nimport {checkRequired} from '@webex/common';\n// @ts-expect-error `@webex/common-timers` is still JS-only and does not ship declarations.\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {defaults, has, isObject} from 'lodash';\n\nimport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from '../errors';\nimport {MESSAGE_TYPES, SOCKET_READY_STATE} from './constants';\nimport type {\n SocketCloseEvent,\n SocketLogger,\n SocketMessageEvent,\n PendingResponseEntry,\n SendRequestOptions,\n SocketOpenOptions,\n SocketResponse,\n SocketTransport,\n SocketTransportConstructor,\n} from './types';\n\nconst sockets = new WeakMap<Socket, SocketTransport>();\nconst UnknownResponseCtor = UnknownResponse as unknown as new (\n event?: SocketCloseEvent\n) => UnknownResponse;\nconst BadRequestCtor = BadRequest as unknown as new (event?: SocketCloseEvent) => BadRequest;\nconst NotAuthorizedCtor = NotAuthorized as unknown as new (\n event?: SocketCloseEvent\n) => NotAuthorized;\nconst ForbiddenCtor = Forbidden as unknown as new (event?: SocketCloseEvent) => Forbidden;\nconst ConnectionErrorCtor = ConnectionError as unknown as new (\n event?: SocketCloseEvent\n) => ConnectionError;\n\n/**\n * Generalized socket abstraction\n */\nexport default class Socket extends EventEmitter {\n _domain: string;\n\n _pendingResponses: Map<string, PendingResponseEntry>;\n\n forceCloseDelay!: number;\n\n logger!: SocketLogger;\n\n refreshToken?: (response: SocketResponse) => unknown;\n\n token!: string;\n\n trackingId!: string;\n\n wssResponseTimeout?: number;\n\n /**\n * constructor\n * @returns {Socket}\n */\n constructor() {\n super();\n this._domain = 'unknown-domain';\n this._pendingResponses = new Map();\n this.onmessage = this.onmessage.bind(this);\n this.onclose = this.onclose.bind(this);\n // Increase max listeners to avoid memory leak warning in tests\n this.setMaxListeners(10);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get binaryType() {\n return sockets.get(this)!.binaryType;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get bufferedAmount() {\n return sockets.get(this)!.bufferedAmount;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get extensions() {\n return sockets.get(this)!.extensions;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get protocol() {\n return sockets.get(this)!.protocol;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get readyState() {\n return sockets.get(this)!.readyState;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get url() {\n return sockets.get(this)!.url;\n }\n\n /**\n * Provides the environmentally appropriate constructor (ws in NodeJS,\n * WebSocket in browsers)\n * @returns {WebSocket}\n */\n static getWebSocketConstructor(): unknown {\n throw new Error(\n 'Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way'\n );\n }\n\n /**\n * Closes the socket\n * @param {Object} options\n * @param {string} options.reason\n * @param {number} options.code\n * @returns {Promise}\n */\n close(options?: {reason?: string; code?: number}) {\n return new Promise<SocketCloseEvent | void>((resolve, reject) => {\n const socket = sockets.get(this);\n\n if (!socket) {\n // Open has not been called yet so there is no socket to close\n resolve();\n\n return;\n }\n // logger is defined once open is called\n this.logger.info(`socket,${this._domain}: closing`);\n\n if (\n socket.readyState === SOCKET_READY_STATE.CLOSING ||\n socket.readyState === SOCKET_READY_STATE.CLOSED\n ) {\n this.logger.info(`socket,${this._domain}: already closed`);\n resolve();\n\n return;\n }\n\n const originalCode = options?.code;\n const originalReason = options?.reason;\n\n const resolvedOptions = defaults(options || {}, {\n code: 1000,\n reason: 'Done',\n }) as {code: number; reason: string};\n\n if (\n resolvedOptions.code &&\n resolvedOptions.code !== 1000 &&\n (resolvedOptions.code < 3000 || resolvedOptions.code > 4999)\n ) {\n reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));\n\n return;\n }\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info(`socket,${this._domain}: no close event received, forcing closure`);\n resolve(\n this.onclose(\n originalCode\n ? {code: originalCode, reason: originalReason || 'Done (unknown)'}\n : {\n code: 1000,\n reason: 'Done (forced)',\n }\n )\n );\n } catch (error) {\n this.logger.warn(`socket,${this._domain}: force-close failed`, error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info(`socket,${this._domain}: close event fired`, event.code, event.reason);\n clearTimeout(closeTimer);\n this.onclose(event);\n resolve(event);\n };\n\n // If socket is still connecting, manually trigger close handler with desired code\n // because calling close() on a CONNECTING socket may not preserve custom codes\n if (socket.readyState === SOCKET_READY_STATE.CONNECTING) {\n this.logger.info(\n `socket,${this._domain}: socket still connecting, triggering close manually`\n );\n clearTimeout(closeTimer);\n const closeEvent: SocketCloseEvent = {\n code: resolvedOptions.code,\n reason: resolvedOptions.reason,\n };\n this.onclose(closeEvent);\n resolve(closeEvent);\n try {\n socket.close(resolvedOptions.code, resolvedOptions.reason);\n } catch (error) {\n this.logger.info(\n `socket,${this._domain}: error while closing CONNECTING socket, likely due to browser incompatibility with custom close codes`,\n error\n );\n }\n } else {\n socket.close(resolvedOptions.code, resolvedOptions.reason);\n }\n });\n }\n\n /**\n * Opens a WebSocket\n * @param {string} url\n * @param {options} options\n * @param {number} options.forceCloseDelay (required)\n * @param {string} options.token (required)\n * @param {string} options.trackingId (required)\n * @param {Logger} options.logger (required)\n * @returns {Promise}\n */\n open(url: string, options?: SocketOpenOptions) {\n try {\n this._domain = new URL(url).hostname;\n } catch {\n this._domain = url;\n }\n\n return new Promise<void>((resolve, reject) => {\n /* eslint complexity: [0] */\n if (!url) {\n reject(new Error('`url` is required'));\n\n return;\n }\n\n if (sockets.get(this)) {\n reject(new Error('Socket#open() can only be called once per instance'));\n\n return;\n }\n\n const resolvedOptions = (options || {}) as SocketOpenOptions;\n\n checkRequired(['forceCloseDelay', 'token', 'trackingId', 'logger'], resolvedOptions);\n\n Object.keys(resolvedOptions).forEach((key) => {\n Reflect.defineProperty(this, key, {\n enumerable: false,\n value: resolvedOptions[key],\n });\n });\n\n const WebSocket = Socket.getWebSocketConstructor() as SocketTransportConstructor;\n\n this.logger.info(`socket,${this._domain}: creating WebSocket`);\n const socket = new WebSocket(url, [], resolvedOptions);\n\n socket.binaryType = 'arraybuffer';\n socket.onmessage = this.onmessage;\n\n socket.onclose = (event) => {\n event = this._fixCloseCode(event);\n this.logger.info(`socket,${this._domain}: closed before open`, event.code, event.reason);\n switch (event.code) {\n case 1005:\n // IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume\n // it's a bad websocket url. That'll trigger a device refresh; if it\n // turns out we had a bad token, the device refresh should 401 and\n // trigger a token refresh.\n return reject(new UnknownResponseCtor(event));\n case 4400:\n return reject(new BadRequestCtor(event));\n case 4401:\n return reject(new NotAuthorizedCtor(event));\n case 4403:\n return reject(new ForbiddenCtor(event));\n // case 4404:\n // return reject(new NotFound(event));\n default:\n return reject(new ConnectionErrorCtor(event));\n }\n };\n\n socket.onopen = () => {\n this.logger.info(`socket,${this._domain}: connected`);\n this._authorize(this.token)\n .then(() => {\n this.logger.info(`socket,${this._domain}: authorized`);\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n };\n\n socket.onerror = (event) => {\n this.logger.warn(`socket,${this._domain}: error event fired`, event);\n };\n\n sockets.set(this, socket);\n this.logger.info(`socket,${this._domain}: waiting for server`);\n });\n }\n\n /**\n * Handles incoming CloseEvents\n * @param {CloseEvent} event\n * @returns {undefined}\n */\n onclose(event: SocketCloseEvent) {\n this.logger.info(`socket,${this._domain}: closed`, event.code, event.reason);\n\n event = this._fixCloseCode(event);\n this._rejectPendingResponses(new ConnectionErrorCtor(event));\n this.emit('close', event);\n\n // Remove all listeners to (a) avoid reacting to late pongs and (b) ensure\n // we don't have a retain cycle.\n this.removeAllListeners();\n }\n\n /**\n * Handles incoming message events\n * @param {MessageEvent} event\n * @returns {undefined}\n */\n onmessage(event: SocketMessageEvent<string>) {\n try {\n const data = JSON.parse(event.data) as SocketResponse;\n const processedEvent = {data};\n\n if (data.type === 'async_event') {\n this._acknowledge(processedEvent).catch((error) => {\n this.logger.warn(`socket,${this._domain}: failed to acknowledge async event`, error);\n });\n }\n\n // Match pending request/response promises before emitting the public message event.\n // The message is still emitted afterward for any external listeners that care about it.\n this._handlePendingResponse(data);\n this.emit('message', processedEvent);\n } catch (error) {\n /* istanbul ignore next */\n this.logger.warn(`socket,${this._domain}: error while receiving WebSocket message`, error);\n }\n }\n\n /**\n * Sends a message up the socket\n * @param {mixed} data\n * @returns {Promise}\n */\n send(data: string | Record<string, unknown>) {\n return new Promise<void>((resolve, reject) => {\n if (this.readyState !== SOCKET_READY_STATE.OPEN) {\n reject(new Error('INVALID_STATE_ERROR'));\n\n return;\n }\n\n if (isObject(data)) {\n data = JSON.stringify(data);\n }\n\n const socket = sockets.get(this);\n\n if (!socket) {\n reject(new Error('INVALID_STATE_ERROR'));\n\n return;\n }\n\n socket.send(data);\n\n resolve();\n });\n }\n\n /**\n * Sends a request and resolves when the matching response arrives.\n * @param {Object} data\n * @param {Object} [options={}]\n * @param {Function} [options.matchesResponse]\n * @param {Function} [options.createError]\n * @param {Function} [options.createTimeoutError]\n * @param {Function} [options.getStatusCode]\n * @param {Function} [options.getStatusMessage]\n * @param {number} [options.timeout]\n * @returns {Promise<Object>}\n */\n sendRequest(data: SocketResponse, options: SendRequestOptions = {}) {\n if (!isObject(data)) {\n return Promise.reject(new Error('`data` is required'));\n }\n\n const request = {...data};\n const trackingId = request.trackingId || this._createTrackingId();\n const timeout = options.timeout || this.wssResponseTimeout || 10000;\n const matchesResponse =\n options.matchesResponse ||\n ((response) => response?.trackingId === trackingId && response?.type === 'response_event');\n const getStatusCode = options.getStatusCode || ((response) => response?.statusCode);\n const getStatusMessage = options.getStatusMessage || ((response) => response?.statusMessage);\n const createError =\n options.createError ||\n ((response, statusCode, statusMessage) =>\n new ConnectionErrorCtor({\n code: statusCode,\n reason: statusMessage || response?.reason || 'Socket request failed',\n }));\n const createTimeoutError =\n options.createTimeoutError ||\n (() =>\n new ConnectionErrorCtor({\n reason: 'Socket response not received before timeout',\n }));\n\n if (this._pendingResponses.has(trackingId)) {\n return Promise.reject(\n new Error(`socket request already pending for trackingId ${trackingId}`)\n );\n }\n\n request.trackingId = trackingId;\n\n return new Promise<SocketResponse>((resolve, reject) => {\n const timeoutId = safeSetTimeout(() => {\n this._clearPendingResponse(trackingId);\n reject(createTimeoutError(request));\n }, timeout);\n\n this._pendingResponses.set(trackingId, {\n request,\n matchesResponse,\n getStatusCode,\n getStatusMessage,\n createError,\n resolve: (response) => {\n this._clearPendingResponse(trackingId);\n resolve(response);\n },\n reject: (error) => {\n this._clearPendingResponse(trackingId);\n reject(error);\n },\n timeoutId,\n });\n\n this.send(request).catch((error) => {\n this._clearPendingResponse(trackingId);\n reject(error);\n });\n });\n }\n\n /**\n * Sends an acknowledgment for a specific event\n * @param {MessageEvent} event\n * @returns {Promise}\n */\n _acknowledge(event: SocketMessageEvent<SocketResponse>) {\n if (!event) {\n return Promise.reject(new Error('`event` is required'));\n }\n\n if (!has(event, 'data.eventId')) {\n return Promise.reject(new Error('`event.data.eventId` is required'));\n }\n\n // Don't try to acknowledge if socket is not in open state\n if (this.readyState !== SOCKET_READY_STATE.OPEN) {\n return Promise.resolve();\n }\n\n return this.send({\n type: MESSAGE_TYPES.EVENT_ACK,\n trackingId: event.data.trackingId || this._createTrackingId(),\n eventId: event.data.eventId,\n }).catch((error) => {\n if (error.message === 'INVALID_STATE_ERROR') {\n return Promise.resolve();\n }\n throw error;\n });\n }\n\n refresh(token: string | {toString(): string}) {\n if (!token) {\n return Promise.reject(new Error('`token` is required for Socket#refresh()'));\n }\n\n let refreshedToken;\n\n if (typeof token === 'string') {\n refreshedToken = token;\n } else if (token && typeof token.toString === 'function') {\n refreshedToken = token.toString();\n } else {\n refreshedToken = String(token);\n }\n\n return this._authorize(refreshedToken);\n }\n\n /**\n * Sends an auth message up the socket with a refreshed token.\n * @param {string} token\n * @returns {Promise}\n */\n _authorize(token: string) {\n this.logger.info(`socket,${this._domain}: authorizing`);\n\n return this.sendRequest(\n {\n type: MESSAGE_TYPES.AUTH,\n data: {\n token,\n },\n },\n {\n matchesResponse: (response, request) =>\n response?.type === 'response_event' &&\n response?.subtype === MESSAGE_TYPES.AUTH &&\n response?.trackingId === request.trackingId,\n getStatusCode: (response) => response?.statusCode,\n getStatusMessage: (response) => response?.statusMessage,\n createError: (response, statusCode, statusMessage) =>\n new NotAuthorizedCtor({\n code: statusCode,\n reason: statusMessage || 'Mobius auth failed',\n }),\n createTimeoutError: () =>\n new NotAuthorizedCtor({\n reason: 'Mobius auth response not received before timeout',\n }),\n }\n );\n }\n\n /**\n * Creates a unique tracking ID\n * @private\n * @returns {string}\n */\n _createTrackingId() {\n return `${this.trackingId}_${crypto.randomUUID()}`;\n }\n\n /**\n * Clears a pending response entry.\n * @param {string} trackingId\n * @returns {void}\n */\n _clearPendingResponse(trackingId: string) {\n const pendingResponse = this._pendingResponses.get(trackingId);\n\n if (pendingResponse?.timeoutId) {\n clearTimeout(pendingResponse.timeoutId);\n }\n\n this._pendingResponses.delete(trackingId);\n }\n\n /**\n * Rejects all pending responses with the provided error.\n * @param {Error} error\n * @returns {void}\n */\n _rejectPendingResponses(error: unknown) {\n if (!this._pendingResponses.size) {\n return;\n }\n\n Array.from(this._pendingResponses.values()).forEach((pendingResponse) => {\n pendingResponse.reject(error);\n });\n }\n\n /**\n * Handles incoming responses for pending requests.\n * @param {Object} response\n * @returns {boolean}\n */\n _handlePendingResponse(response: SocketResponse) {\n if (!response) {\n return false;\n }\n\n // Pending request correlation currently requires trackingId on the response.\n const pendingResponse = response.trackingId\n ? this._pendingResponses.get(response.trackingId)\n : undefined;\n\n if (!pendingResponse) {\n return false;\n }\n\n if (!pendingResponse.matchesResponse(response, pendingResponse.request)) {\n return false;\n }\n\n const statusCode = pendingResponse.getStatusCode(response);\n const statusMessage = pendingResponse.getStatusMessage(response);\n\n if (statusCode === 440 && response?.subtype !== MESSAGE_TYPES.AUTH) {\n if (typeof this.refreshToken === 'function') {\n Promise.resolve(this.refreshToken(response)).catch((error) => {\n this.logger.warn(`socket,${this._domain}: failed token-expiry re-auth`, error);\n });\n } else {\n this.logger.warn(\n `socket,${this._domain}: refreshToken callback is unavailable for statusCode 440`\n );\n }\n }\n\n if (statusCode === undefined) {\n pendingResponse.reject(\n pendingResponse.createError(\n response,\n statusCode,\n statusMessage || 'Socket response missing status code'\n )\n );\n } else if (statusCode >= 200 && statusCode < 300) {\n pendingResponse.resolve(response);\n } else {\n pendingResponse.reject(pendingResponse.createError(response, statusCode, statusMessage));\n }\n\n return true;\n }\n\n /**\n * Deals with the fact that some browsers drop some close codes (but not\n * close reasons).\n * @param {CloseEvent} event\n * @private\n * @returns {CloseEvent}\n */\n _fixCloseCode(event: SocketCloseEvent) {\n if (event.code === 1005 && event.reason) {\n switch (event.reason.toLowerCase()) {\n case 'replaced':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 4000;\n break;\n case 'authentication failed':\n case 'authentication did not happen within the timeout window of 30000 seconds.':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 1008;\n break;\n default:\n // do nothing\n }\n }\n\n return event;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_events","require","_common","_commonTimers","_errors","_constants","_createForOfIteratorHelper","r","e","t","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty3","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","Boolean","prototype","valueOf","sockets","_weakMap","createTrackingId","concat","crypto","randomUUID","Socket","exports","_EventEmitter","_this","_classCallCheck2","domain","pendingResponses","_map","onmessage","bind","onclose","setMaxListeners","_inherits2","_createClass2","key","get","_sockets$get","binaryType","_sockets$get2","bufferedAmount","_sockets$get3","extensions","_sockets$get4","protocol","_sockets$get5","readyState","_sockets$get6","url","close","options","_this2","_promise","resolve","reject","socket","logger","info","SOCKET_READY_STATE","CLOSING","CLOSED","originalCode","code","originalReason","reason","resolvedOptions","_defaults2","Error","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","CONNECTING","closeEvent","open","_this3","URL","hostname","_unused","checkRequired","_keys","_defineProperty2","WebSocket","getWebSocketConstructor","fixCloseCode","UnknownResponse","BadRequest","NotAuthorized","Forbidden","ConnectionError","onopen","authorize","token","then","catch","onerror","set","rejectPendingResponses","emit","removeAllListeners","_this4","data","JSON","parse","processedEvent","type","acknowledge","handlePendingResponse","send","_this5","OPEN","_isObject2","_stringify","sendRequest","_this6","undefined","request","trackingId","timeout","wssResponseTimeout","has","timeoutId","clearPendingResponse","createTimeoutError","pendingResponse","response","_has2","MESSAGE_TYPES","EVENT_ACK","eventId","message","refresh","refreshedToken","String","AUTH","delete","size","_iterator","values","_step","err","_this7","subtype","statusCode","statusMessage","refreshToken","createWssResponseError","toLowerCase","EventEmitter"],"sources":["socket-base.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\n// @ts-ignore - type not available\nimport {checkRequired} from '@webex/common';\n// @ts-ignore - type not available\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {defaults, has, isObject} from 'lodash';\n\nimport {\n BadRequest,\n ConnectionError,\n createTimeoutError,\n createWssResponseError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n} from '../errors';\nimport {MESSAGE_TYPES, SOCKET_READY_STATE} from './constants';\nimport type {\n SocketCloseEvent,\n SocketLogger,\n SocketMessageEvent,\n PendingResponseEntry,\n SendRequestOptions,\n SocketOpenOptions,\n SocketResponse,\n SocketTransport,\n SocketTransportConstructor,\n} from './types';\n\nconst sockets = new WeakMap<Socket, SocketTransport>();\n\nfunction createTrackingId() {\n return `webex-js-sdk_${crypto.randomUUID()}`;\n}\n\n/**\n * Generalized socket abstraction\n */\nexport default class Socket extends EventEmitter {\n private domain: string;\n\n private pendingResponses: Map<string, PendingResponseEntry>;\n\n forceCloseDelay!: number;\n\n logger!: SocketLogger;\n\n refreshToken?: (response: SocketResponse) => unknown;\n\n token!: string;\n\n trackingId!: string;\n\n wssResponseTimeout?: number;\n\n /**\n * Creates a new Socket instance.\n */\n public constructor() {\n super();\n this.domain = 'unknown-domain';\n this.pendingResponses = new Map();\n this.onmessage = this.onmessage.bind(this);\n this.onclose = this.onclose.bind(this);\n this.setMaxListeners(10);\n }\n\n // TODO: Circle back and check if we are using binaryType and related getters. If not, we can remove these.\n /**\n * Gets the binary type of the WebSocket connection.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n */\n public get binaryType() {\n return sockets.get(this)?.binaryType || '';\n }\n\n /**\n * Gets the number of bytes of data that have been queued but not yet transmitted.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n */\n public get bufferedAmount() {\n return sockets.get(this)?.bufferedAmount || 0;\n }\n\n /**\n * Gets the extensions selected by the server.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n */\n public get extensions() {\n return sockets.get(this)?.extensions || '';\n }\n\n /**\n * Gets the sub-protocol selected by the server.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n */\n public get protocol() {\n return sockets.get(this)?.protocol || '';\n }\n\n /**\n * Gets the current state of the WebSocket connection.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n */\n public get readyState() {\n return sockets.get(this)?.readyState || 0;\n }\n\n /**\n * Gets the URL of the WebSocket connection.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n */\n public get url() {\n return sockets.get(this)?.url || '';\n }\n\n /**\n * Provides the environmentally appropriate WebSocket constructor.\n *\n * @returns The WebSocket constructor (ws in NodeJS, WebSocket in browsers)\n */\n public static getWebSocketConstructor(): unknown {\n throw new Error(\n 'Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way'\n );\n }\n\n /**\n * Closes the socket.\n * @param options - Close options containing code and reason\n * @returns Promise that resolves when the socket is closed\n */\n public close(options?: {reason?: string; code?: number}) {\n return new Promise<SocketCloseEvent | void>((resolve, reject) => {\n const socket = sockets.get(this);\n\n if (!socket) {\n // Open has not been called yet so there is no socket to close\n resolve();\n\n return;\n }\n // logger is defined once open is called\n this.logger.info(`socket,${this.domain}: closing`);\n\n if (\n socket.readyState === SOCKET_READY_STATE.CLOSING ||\n socket.readyState === SOCKET_READY_STATE.CLOSED\n ) {\n this.logger.info(`socket,${this.domain}: already closed`);\n resolve();\n\n return;\n }\n\n const originalCode = options?.code;\n const originalReason = options?.reason;\n\n const resolvedOptions = defaults(options || {}, {\n code: 1000,\n reason: 'Done',\n }) as {code: number; reason: string};\n\n if (\n resolvedOptions.code &&\n resolvedOptions.code !== 1000 &&\n (resolvedOptions.code < 3000 || resolvedOptions.code > 4999)\n ) {\n reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));\n\n return;\n }\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info(`socket,${this.domain}: no close event received, forcing closure`);\n resolve(\n this.onclose(\n originalCode\n ? {code: originalCode, reason: originalReason || 'Done (unknown)'}\n : {\n code: 1000,\n reason: 'Done (forced)',\n }\n )\n );\n } catch (error) {\n this.logger.warn(`socket,${this.domain}: force-close failed`, error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info(`socket,${this.domain}: close event fired`, event.code, event.reason);\n clearTimeout(closeTimer);\n this.onclose(event);\n resolve(event);\n };\n\n // If socket is still connecting, manually trigger close handler with desired code\n // because calling close() on a CONNECTING socket may not preserve custom codes\n if (socket.readyState === SOCKET_READY_STATE.CONNECTING) {\n this.logger.info(\n `socket,${this.domain}: socket still connecting, triggering close manually`\n );\n clearTimeout(closeTimer);\n const closeEvent: SocketCloseEvent = {\n code: resolvedOptions.code,\n reason: resolvedOptions.reason,\n };\n this.onclose(closeEvent);\n resolve(closeEvent);\n try {\n socket.close(resolvedOptions.code, resolvedOptions.reason);\n } catch (error) {\n this.logger.info(\n `socket,${this.domain}: error while closing CONNECTING socket, likely due to browser incompatibility with custom close codes`,\n error\n );\n }\n } else {\n socket.close(resolvedOptions.code, resolvedOptions.reason);\n }\n });\n }\n\n /**\n * Opens a WebSocket connection and performs authentication.\n *\n * @param url - WebSocket URL to connect to\n * @param options - Socket connection options including token, logger, and timeout settings\n * @returns Promise that resolves when socket is opened and authenticated\n */\n public open(url: string, options?: SocketOpenOptions) {\n try {\n this.domain = new URL(url).hostname;\n } catch {\n this.domain = url;\n }\n\n return new Promise<void>((resolve, reject) => {\n /* eslint complexity: [0] */\n if (!url) {\n reject(new Error('`url` is required'));\n\n return;\n }\n\n if (sockets.get(this)) {\n reject(new Error('Socket#open() can only be called once per instance'));\n\n return;\n }\n\n const resolvedOptions = (options || {}) as SocketOpenOptions;\n\n checkRequired(['forceCloseDelay', 'token', 'trackingId', 'logger'], resolvedOptions);\n\n Object.keys(resolvedOptions).forEach((key) => {\n Reflect.defineProperty(this, key, {\n enumerable: false,\n value: resolvedOptions[key],\n });\n });\n\n const WebSocket = Socket.getWebSocketConstructor() as SocketTransportConstructor;\n\n this.logger.info(`socket,${this.domain}: creating WebSocket`);\n const socket = new WebSocket(url, [], resolvedOptions);\n\n socket.binaryType = 'arraybuffer';\n socket.onmessage = this.onmessage;\n\n socket.onclose = (event) => {\n event = this.fixCloseCode(event);\n this.logger.info(`socket,${this.domain}: closed before open`, event.code, event.reason);\n switch (event.code) {\n case 1005:\n // IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume\n // it's a bad websocket url. That'll trigger a device refresh; if it\n // turns out we had a bad token, the device refresh should 401 and\n // trigger a token refresh.\n return reject(new UnknownResponse(event));\n case 4400:\n return reject(new BadRequest(event));\n case 4401:\n return reject(new NotAuthorized(event));\n case 4403:\n return reject(new Forbidden(event));\n default:\n return reject(new ConnectionError(event));\n }\n };\n\n socket.onopen = () => {\n this.logger.info(`socket,${this.domain}: connected`);\n this.authorize(this.token)\n .then(() => {\n this.logger.info(`socket,${this.domain}: authorized`);\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n };\n\n socket.onerror = (event) => {\n this.logger.warn(`socket,${this.domain}: error event fired`, event);\n };\n\n sockets.set(this, socket);\n this.logger.info(`socket,${this.domain}: waiting for server`);\n });\n }\n\n /**\n * Handles incoming CloseEvents.\n * @param event - The close event containing code and reason\n */\n public onclose(event: SocketCloseEvent) {\n this.logger.info(`socket,${this.domain}: closed`, event.code, event.reason);\n\n event = this.fixCloseCode(event);\n this.rejectPendingResponses(new ConnectionError(event));\n this.emit('close', event);\n\n // Remove all listeners to (a) avoid reacting to late pongs and (b) ensure\n // we don't have a retain cycle.\n this.removeAllListeners();\n }\n\n /**\n * Handles incoming message events from the WebSocket.\n * @param event - The message event containing the data\n */\n public onmessage(event: SocketMessageEvent<string>) {\n try {\n const data = JSON.parse(event.data) as SocketResponse;\n const processedEvent = {data};\n\n if (data.type === 'async_event') {\n this.acknowledge(processedEvent).catch((error) => {\n this.logger.warn(`socket,${this.domain}: failed to acknowledge async event`, error);\n });\n }\n\n // Match pending request/response promises before emitting the public message event.\n // The message is still emitted afterward for any external listeners that care about it.\n this.handlePendingResponse(data);\n this.emit('message', processedEvent);\n } catch (error) {\n /* istanbul ignore next */\n this.logger.warn(`socket,${this.domain}: error while receiving WebSocket message`, error);\n }\n }\n\n /**\n * Sends a message up the socket.\n * @param data - Data to send (string or object that will be JSON stringified)\n * @returns Promise that resolves when the message is sent\n */\n public send(data: string | Record<string, unknown>) {\n return new Promise<void>((resolve, reject) => {\n if (this.readyState !== SOCKET_READY_STATE.OPEN) {\n reject(new Error('INVALID_STATE_ERROR'));\n\n return;\n }\n\n if (isObject(data)) {\n data = JSON.stringify(data);\n }\n\n const socket = sockets.get(this);\n\n if (!socket) {\n reject(new Error('INVALID_STATE_ERROR'));\n\n return;\n }\n\n socket.send(data);\n\n resolve();\n });\n }\n\n /**\n * Sends a request and resolves when the matching response arrives.\n *\n * @param data - Request data to send over the socket\n * @param options - Request options including timeout and error handlers\n * @returns Promise that resolves with the response data\n */\n public sendRequest(data: SocketResponse, options: SendRequestOptions = {}) {\n if (!isObject(data)) {\n return Promise.reject(new Error('`data` is required'));\n }\n\n const request = {...data};\n const trackingId = request.trackingId || createTrackingId();\n const timeout = options.timeout || this.wssResponseTimeout || 10000;\n\n if (this.pendingResponses.has(trackingId)) {\n return Promise.reject(new Error(`socket request already sent for trackingId ${trackingId}`));\n }\n\n request.trackingId = trackingId;\n\n return new Promise<SocketResponse>((resolve, reject) => {\n const timeoutId = safeSetTimeout(() => {\n this.clearPendingResponse(trackingId);\n reject(createTimeoutError(request));\n }, timeout) as NodeJS.Timeout;\n\n const pendingResponse: PendingResponseEntry = {\n request,\n resolve: (response: SocketResponse) => {\n this.clearPendingResponse(trackingId);\n resolve(response);\n },\n reject: (error: unknown) => {\n this.clearPendingResponse(trackingId);\n reject(error);\n },\n timeoutId,\n };\n\n this.pendingResponses.set(trackingId, pendingResponse);\n\n this.send(request).catch((error) => {\n this.clearPendingResponse(trackingId);\n reject(error);\n });\n });\n }\n\n /**\n * Sends an acknowledgment for a specific async event.\n * @param event - Message event containing the async event to acknowledge\n * @returns Promise that resolves when acknowledgment is sent\n */\n private acknowledge(event: SocketMessageEvent<SocketResponse>) {\n if (!event) {\n return Promise.reject(new Error('`event` is required'));\n }\n\n if (!has(event, 'data.eventId')) {\n return Promise.reject(new Error('`event.data.eventId` is required'));\n }\n\n // Don't try to acknowledge if socket is not in open state\n if (this.readyState !== SOCKET_READY_STATE.OPEN) {\n return Promise.resolve();\n }\n\n return this.send({\n type: MESSAGE_TYPES.EVENT_ACK,\n trackingId: event.data.trackingId || createTrackingId(),\n eventId: event.data.eventId,\n }).catch((error) => {\n if (error.message === 'INVALID_STATE_ERROR') {\n return Promise.resolve();\n }\n throw error;\n });\n }\n\n public refresh(token: string | {toString(): string}) {\n if (!token) {\n return Promise.reject(new Error('`token` is required for Socket#refresh()'));\n }\n\n let refreshedToken;\n\n if (typeof token === 'string') {\n refreshedToken = token;\n } else if (token && typeof token.toString === 'function') {\n refreshedToken = token.toString();\n } else {\n refreshedToken = String(token);\n }\n\n return this.authorize(refreshedToken);\n }\n\n /**\n * Sends an auth message up the socket with a refreshed token.\n * @param token - Authentication token to send\n * @returns Promise that resolves when authentication succeeds\n */\n private authorize(token: string) {\n this.logger.info(`socket,${this.domain}: authorizing`);\n\n return this.sendRequest({\n type: MESSAGE_TYPES.AUTH,\n data: {token},\n });\n }\n\n /**\n * Clears a pending response entry.\n * @param trackingId - Tracking ID of the response to clear\n */\n private clearPendingResponse(trackingId: string) {\n const pendingResponse = this.pendingResponses.get(trackingId);\n\n if (pendingResponse?.timeoutId) {\n clearTimeout(pendingResponse.timeoutId);\n }\n\n this.pendingResponses.delete(trackingId);\n }\n\n /**\n * Rejects all pending responses with the provided error.\n * @param error - Error to reject pending responses with\n */\n private rejectPendingResponses(error: unknown) {\n if (!this.pendingResponses.size) {\n return;\n }\n\n for (const pendingResponse of this.pendingResponses.values()) {\n pendingResponse.reject(error);\n }\n }\n\n /**\n * Handles incoming responses for pending requests.\n * @param response - Response data to match against pending requests\n * @returns True if a matching pending request was found and handled\n */\n private handlePendingResponse(response: SocketResponse) {\n if (!response) {\n return false;\n }\n\n // Pending request correlation currently requires trackingId on the response.\n const pendingResponse = this.pendingResponses.get(response.trackingId || '');\n\n if (!pendingResponse) {\n return false;\n }\n\n if (response.subtype !== pendingResponse.request.type) {\n return false;\n }\n\n const statusCode = response?.statusCode;\n const statusMessage = response?.statusMessage;\n\n if (statusCode === 440 && response?.subtype !== MESSAGE_TYPES.AUTH) {\n if (typeof this.refreshToken === 'function') {\n Promise.resolve(this.refreshToken(response)).catch((error) => {\n this.logger.warn(`socket,${this.domain}: failed token-expiry re-auth`, error);\n });\n } else {\n this.logger.warn(\n `socket,${this.domain}: refreshToken callback is unavailable for statusCode 440`\n );\n }\n }\n\n if (statusCode === undefined) {\n const error = createWssResponseError(\n response,\n statusCode,\n statusMessage || 'Socket response missing status code'\n );\n pendingResponse.reject(error);\n } else if (statusCode >= 200 && statusCode < 300) {\n pendingResponse.resolve(response);\n } else {\n pendingResponse.reject(createWssResponseError(response, statusCode, statusMessage));\n }\n\n return true;\n }\n\n /**\n * Deals with the fact that some browsers drop some close codes (but not close reasons).\n *\n * @param event - Close event to fix\n * @returns Fixed close event with corrected code if necessary\n */\n private fixCloseCode(event: SocketCloseEvent) {\n if (event.code === 1005 && event.reason) {\n switch (event.reason.toLowerCase()) {\n case 'replaced':\n this.logger.info(\n `socket,${this.domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 4000;\n break;\n case 'authentication failed':\n case 'authentication did not happen within the timeout window of 30000 seconds.':\n this.logger.info(\n `socket,${this.domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 1008;\n break;\n default:\n // do nothing\n }\n }\n\n return event;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["/**\n * Type for the browser WebSocket constructor.\n */\nexport type BrowserWebSocketConstructor = typeof WebSocket;\n\n/**\n * Global scope interface for accessing WebSocket constructors across environments.\n */\nexport type ShimGlobalScope = {\n /** Firefox's WebSocket constructor */\n MozWebSocket?: BrowserWebSocketConstructor;\n /** Standard WebSocket constructor */\n WebSocket?: BrowserWebSocketConstructor;\n};\n\n/**\n * Socket close event data.\n */\nexport type SocketCloseEvent = {\n /** WebSocket close code */\n code?: number;\n /** Human-readable close reason */\n reason?: string;\n};\n\n/**\n * Socket message event wrapper.\n */\nexport type SocketMessageEvent<T = unknown> = {\n /** Message data payload */\n data: T;\n};\n\n/**\n * Logger interface for socket operations.\n */\nexport type SocketLogger = {\n /** Log informational messages */\n info: (...args: unknown[]) => void;\n /** Log warning messages */\n warn: (...args: unknown[]) => void;\n};\n\n/**\n * Socket response/request message structure.\n */\nexport type SocketResponse = {\n /** Unique tracking ID for request/response correlation */\n trackingId?: string;\n /** Message type identifier */\n type?: string;\n /** Message subtype identifier */\n subtype?: string;\n /** HTTP-style status code */\n statusCode?: number;\n /** Human-readable status message */\n statusMessage?: string;\n /** Reason for error or closure */\n reason?: string;\n /** Event ID for async events */\n eventId?: string;\n /** Additional properties */\n [key: string]: unknown;\n};\n\n/**\n * Entry for tracking pending request/response pairs.\n */\nexport type PendingResponseEntry = {\n /** Original request data */\n request: SocketResponse;\n /** Resolve function for the pending promise */\n resolve: (response: SocketResponse) => void;\n /** Reject function for the pending promise */\n reject: (error: unknown) => void;\n /** Timeout handle for the request */\n timeoutId: ReturnType<typeof setTimeout>;\n};\n\n/**\n * Options for configuring socket requests.\n */\nexport type SendRequestOptions = {\n /** Optional custom timeout error factory */\n createTimeoutError?: (request: SocketResponse) => unknown;\n /** Request timeout in milliseconds */\n timeout?: number;\n};\n\n/**\n * Options required for opening a socket connection.\n */\nexport type SocketOpenOptions = {\n /** Milliseconds to wait for close frame before forcing closure */\n forceCloseDelay: number;\n /** Authentication token */\n token: string;\n /** Tracking ID for this connection */\n trackingId: string;\n /** Logger instance for socket operations */\n logger: SocketLogger;\n /** Optional timeout for websocket responses */\n wssResponseTimeout?: number;\n /** Optional token refresh callback */\n refreshToken?: (response: SocketResponse) => unknown;\n /** Additional options */\n [key: string]: unknown;\n};\n\n/**\n * Interface for the underlying WebSocket transport.\n */\nexport type SocketTransport = {\n /** Binary data type */\n binaryType: string;\n /** Number of bytes queued but not sent */\n bufferedAmount: number;\n /** Extensions negotiated with server */\n extensions: string;\n /** Sub-protocol negotiated with server */\n protocol: string;\n /** Current connection state */\n readyState: number;\n /** WebSocket URL */\n url: string;\n /** Message event handler */\n onmessage: ((event: SocketMessageEvent<string>) => void) | null;\n /** Close event handler */\n onclose: ((event: SocketCloseEvent) => void) | null;\n /** Open event handler */\n onopen: (() => void) | null;\n /** Error event handler */\n onerror: ((event: unknown) => void) | null;\n /** Close the connection */\n close: (code?: number, reason?: string) => void;\n /** Send data through the socket */\n send: (data: string) => void;\n};\n\n/**\n * Constructor type for creating socket transports.\n */\nexport type SocketTransportConstructor = new (...args: unknown[]) => SocketTransport;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -19,7 +19,9 @@ var _crypto = require("crypto");
|
|
|
19
19
|
var _testHelperChai = require("@webex/test-helper-chai");
|
|
20
20
|
var _testHelperMockWebSocket = _interopRequireDefault(require("@webex/test-helper-mock-web-socket"));
|
|
21
21
|
var _sinon = _interopRequireDefault(require("sinon"));
|
|
22
|
-
var
|
|
22
|
+
var _errors = require("./errors");
|
|
23
|
+
var _config = _interopRequireDefault(require("./config"));
|
|
24
|
+
var _socket = _interopRequireDefault(require("./socket"));
|
|
23
25
|
var _constants = require("./socket/constants");
|
|
24
26
|
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
25
27
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty3.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty2(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } /*!
|
|
@@ -40,7 +42,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
40
42
|
logger: console,
|
|
41
43
|
token: 'mocktoken',
|
|
42
44
|
trackingId: 'mocktrackingid'
|
|
43
|
-
},
|
|
45
|
+
}, _config.default.mobiusSocket);
|
|
44
46
|
var emitAuthResponse = function emitAuthResponse() {
|
|
45
47
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
46
48
|
_ref$statusCode = _ref.statusCode,
|
|
@@ -65,7 +67,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
65
67
|
usingFakeTimers = true;
|
|
66
68
|
});
|
|
67
69
|
beforeEach(function () {
|
|
68
|
-
_sinon.default.stub(
|
|
70
|
+
_sinon.default.stub(_socket.default, 'getWebSocketConstructor').callsFake(function () {
|
|
69
71
|
return function () {
|
|
70
72
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
71
73
|
args[_key] = arguments[_key];
|
|
@@ -74,7 +76,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
74
76
|
return mockWebSocket;
|
|
75
77
|
};
|
|
76
78
|
});
|
|
77
|
-
socket = new
|
|
79
|
+
socket = new _socket.default();
|
|
78
80
|
var promise = socket.open('ws://example.com', mockoptions);
|
|
79
81
|
mockWebSocket.open();
|
|
80
82
|
// Simulate Mobius auth response (MockWebSocket.open auto-sends mercury.buffer_state which Mobius ignores)
|
|
@@ -88,7 +90,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
88
90
|
jest.useRealTimers();
|
|
89
91
|
usingFakeTimers = false;
|
|
90
92
|
}
|
|
91
|
-
|
|
93
|
+
_socket.default.getWebSocketConstructor.restore();
|
|
92
94
|
return _promise.default.resolve(socket && socket.close()).then(function () {
|
|
93
95
|
mockWebSocket = undefined;
|
|
94
96
|
socket = undefined;
|
|
@@ -97,7 +99,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
97
99
|
describe('#open()', function () {
|
|
98
100
|
var freshSocket;
|
|
99
101
|
beforeEach(function () {
|
|
100
|
-
freshSocket = new
|
|
102
|
+
freshSocket = new _socket.default();
|
|
101
103
|
});
|
|
102
104
|
afterEach(function () {
|
|
103
105
|
return freshSocket.close().catch(function () {
|
|
@@ -189,7 +191,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
189
191
|
});
|
|
190
192
|
describe('#open()', function () {
|
|
191
193
|
it('requires a url parameter', function () {
|
|
192
|
-
var s = new
|
|
194
|
+
var s = new _socket.default();
|
|
193
195
|
return _testHelperChai.assert.isRejected(s.open(), /`url` is required/);
|
|
194
196
|
});
|
|
195
197
|
it('cannot be called more than once', function () {
|
|
@@ -200,7 +202,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
200
202
|
});
|
|
201
203
|
describe('when connection fails because this is a service account', function () {
|
|
202
204
|
it('rejects with a BadRequest', function () {
|
|
203
|
-
var s = new
|
|
205
|
+
var s = new _socket.default();
|
|
204
206
|
var promise = s.open('ws://example.com', mockoptions);
|
|
205
207
|
mockWebSocket.readyState = 1;
|
|
206
208
|
mockWebSocket.emit('open');
|
|
@@ -211,7 +213,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
211
213
|
reason: "Service accounts can't use this endpoint"
|
|
212
214
|
});
|
|
213
215
|
return _testHelperChai.assert.isRejected(promise).then(function (reason) {
|
|
214
|
-
_testHelperChai.assert.instanceOf(reason,
|
|
216
|
+
_testHelperChai.assert.instanceOf(reason, _errors.BadRequest);
|
|
215
217
|
_testHelperChai.assert.match(reason.code, 4400);
|
|
216
218
|
_testHelperChai.assert.match(reason.reason, /Service accounts can't use this endpoint/);
|
|
217
219
|
_testHelperChai.assert.match(reason.message, /Service accounts can't use this endpoint/);
|
|
@@ -221,7 +223,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
221
223
|
});
|
|
222
224
|
describe('when connection fails because of an invalid token', function () {
|
|
223
225
|
it('rejects with a NotAuthorized', function () {
|
|
224
|
-
var s = new
|
|
226
|
+
var s = new _socket.default();
|
|
225
227
|
var promise = s.open('ws://example.com', mockoptions);
|
|
226
228
|
mockWebSocket.readyState = 1;
|
|
227
229
|
mockWebSocket.emit('open');
|
|
@@ -232,7 +234,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
232
234
|
reason: 'Authorization Failed'
|
|
233
235
|
});
|
|
234
236
|
return _testHelperChai.assert.isRejected(promise).then(function (reason) {
|
|
235
|
-
_testHelperChai.assert.instanceOf(reason,
|
|
237
|
+
_testHelperChai.assert.instanceOf(reason, _errors.NotAuthorized);
|
|
236
238
|
_testHelperChai.assert.match(reason.code, 4401);
|
|
237
239
|
_testHelperChai.assert.match(reason.reason, /Authorization Failed/);
|
|
238
240
|
_testHelperChai.assert.match(reason.message, /Authorization Failed/);
|
|
@@ -242,7 +244,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
242
244
|
});
|
|
243
245
|
describe('when connection fails because of a missing entitlement', function () {
|
|
244
246
|
it('rejects with a Forbidden', function () {
|
|
245
|
-
var s = new
|
|
247
|
+
var s = new _socket.default();
|
|
246
248
|
var promise = s.open('ws://example.com', mockoptions);
|
|
247
249
|
mockWebSocket.readyState = 1;
|
|
248
250
|
mockWebSocket.emit('open');
|
|
@@ -253,7 +255,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
253
255
|
reason: 'Not entitled'
|
|
254
256
|
});
|
|
255
257
|
return _testHelperChai.assert.isRejected(promise).then(function (reason) {
|
|
256
|
-
_testHelperChai.assert.instanceOf(reason,
|
|
258
|
+
_testHelperChai.assert.instanceOf(reason, _errors.Forbidden);
|
|
257
259
|
_testHelperChai.assert.match(reason.code, 4403);
|
|
258
260
|
_testHelperChai.assert.match(reason.reason, /Not entitled/);
|
|
259
261
|
_testHelperChai.assert.match(reason.message, /Not entitled/);
|
|
@@ -261,43 +263,16 @@ describe('plugin-mobius-socket', function () {
|
|
|
261
263
|
});
|
|
262
264
|
});
|
|
263
265
|
});
|
|
264
|
-
|
|
265
|
-
// describe(`when connection fails because the websocket registation has expired`, () => {
|
|
266
|
-
// it(`rejects with a NotFound`, () => {
|
|
267
|
-
// const s = new Socket();
|
|
268
|
-
// const promise = s.open(`ws://example.com`, mockoptions);
|
|
269
|
-
// mockWebSocket.readyState = 1;
|
|
270
|
-
// mockWebSocket.emit(`open`);
|
|
271
|
-
//
|
|
272
|
-
// const firstCallArgs = JSON.parse(mockWebSocket.send.firstCall.args[0]);
|
|
273
|
-
// assert.equal(firstCallArgs.type, `authorization`);
|
|
274
|
-
//
|
|
275
|
-
// mockWebSocket.emit(`close`, {
|
|
276
|
-
// code: 4404,
|
|
277
|
-
// reason: `Expired registration`
|
|
278
|
-
// });
|
|
279
|
-
//
|
|
280
|
-
// return assert.isRejected(promise)
|
|
281
|
-
// .then((reason) => {
|
|
282
|
-
// assert.instanceOf(reason, NotFound);
|
|
283
|
-
// assert.match(reason.code, 4404);
|
|
284
|
-
// assert.match(reason.reason, /Expired registration/);
|
|
285
|
-
// assert.match(reason.message, /Expired registration/);
|
|
286
|
-
// return s.close();
|
|
287
|
-
// });
|
|
288
|
-
// });
|
|
289
|
-
// });
|
|
290
|
-
|
|
291
266
|
describe('when connection fails for non-authorization reasons', function () {
|
|
292
267
|
it("rejects with the close event's reason", function () {
|
|
293
|
-
var s = new
|
|
268
|
+
var s = new _socket.default();
|
|
294
269
|
var promise = s.open('ws://example.com', mockoptions);
|
|
295
270
|
mockWebSocket.emit('close', {
|
|
296
271
|
code: 4001,
|
|
297
272
|
reason: 'No'
|
|
298
273
|
});
|
|
299
274
|
return _testHelperChai.assert.isRejected(promise).then(function (reason) {
|
|
300
|
-
_testHelperChai.assert.instanceOf(reason,
|
|
275
|
+
_testHelperChai.assert.instanceOf(reason, _errors.ConnectionError);
|
|
301
276
|
_testHelperChai.assert.match(reason.code, 4001);
|
|
302
277
|
_testHelperChai.assert.match(reason.reason, /No/);
|
|
303
278
|
_testHelperChai.assert.match(reason.message, /No/);
|
|
@@ -316,7 +291,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
316
291
|
});
|
|
317
292
|
describe('when logLevelToken is set', function () {
|
|
318
293
|
it('includes auth payload with token', function () {
|
|
319
|
-
var s = new
|
|
294
|
+
var s = new _socket.default();
|
|
320
295
|
s.open('ws://example.com', {
|
|
321
296
|
forceCloseDelay: mockoptions.forceCloseDelay,
|
|
322
297
|
wssResponseTimeout: mockoptions.wssResponseTimeout,
|
|
@@ -337,7 +312,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
337
312
|
});
|
|
338
313
|
});
|
|
339
314
|
it('resolves upon receiving response_event auth response', function () {
|
|
340
|
-
var s = new
|
|
315
|
+
var s = new _socket.default();
|
|
341
316
|
var promise = s.open('ws://example.com', mockoptions);
|
|
342
317
|
mockWebSocket.readyState = 1;
|
|
343
318
|
mockWebSocket.emit('open');
|
|
@@ -347,7 +322,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
347
322
|
});
|
|
348
323
|
});
|
|
349
324
|
it('rejects upon receiving a non-2xx auth response_event', function () {
|
|
350
|
-
var s = new
|
|
325
|
+
var s = new _socket.default();
|
|
351
326
|
var promise = s.open('ws://example.com', mockoptions);
|
|
352
327
|
mockWebSocket.readyState = 1;
|
|
353
328
|
mockWebSocket.emit('open');
|
|
@@ -356,9 +331,9 @@ describe('plugin-mobius-socket', function () {
|
|
|
356
331
|
statusMessage: 'Unauthorized'
|
|
357
332
|
});
|
|
358
333
|
return _testHelperChai.assert.isRejected(promise).then(function (reason) {
|
|
359
|
-
_testHelperChai.assert.
|
|
360
|
-
_testHelperChai.assert.equal(reason.
|
|
361
|
-
_testHelperChai.assert.match(reason.
|
|
334
|
+
_testHelperChai.assert.equal(reason.name, 'MobiusSocketResponseError');
|
|
335
|
+
_testHelperChai.assert.equal(reason.statusCode, 401);
|
|
336
|
+
_testHelperChai.assert.match(reason.statusMessage, /Unauthorized/);
|
|
362
337
|
return s.close();
|
|
363
338
|
});
|
|
364
339
|
});
|
|
@@ -400,7 +375,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
400
375
|
return _promise.default.all([p1, p2]);
|
|
401
376
|
});
|
|
402
377
|
it('signals closure if no close frame is received within the specified window', function () {
|
|
403
|
-
var transientSocket = new
|
|
378
|
+
var transientSocket = new _socket.default();
|
|
404
379
|
var openPromise = transientSocket.open('ws://example.com', mockoptions);
|
|
405
380
|
mockWebSocket.readyState = 1;
|
|
406
381
|
mockWebSocket.emit('open');
|
|
@@ -426,7 +401,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
426
401
|
});
|
|
427
402
|
});
|
|
428
403
|
it('signals closure if no close frame is received within the specified window, but uses the initial options as 3050 if specified by options call', function () {
|
|
429
|
-
var transientSocket = new
|
|
404
|
+
var transientSocket = new _socket.default();
|
|
430
405
|
var openPromise = transientSocket.open('ws://example.com', mockoptions);
|
|
431
406
|
mockWebSocket.readyState = 1;
|
|
432
407
|
mockWebSocket.emit('open');
|
|
@@ -455,7 +430,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
455
430
|
});
|
|
456
431
|
});
|
|
457
432
|
it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', function () {
|
|
458
|
-
var transientSocket = new
|
|
433
|
+
var transientSocket = new _socket.default();
|
|
459
434
|
var openPromise = transientSocket.open('ws://example.com', mockoptions);
|
|
460
435
|
mockWebSocket.readyState = 1;
|
|
461
436
|
mockWebSocket.emit('open');
|
|
@@ -484,7 +459,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
484
459
|
});
|
|
485
460
|
});
|
|
486
461
|
it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', function () {
|
|
487
|
-
var transientSocket = new
|
|
462
|
+
var transientSocket = new _socket.default();
|
|
488
463
|
var openPromise = transientSocket.open('ws://example.com', mockoptions);
|
|
489
464
|
mockWebSocket.readyState = 1;
|
|
490
465
|
mockWebSocket.emit('open');
|
|
@@ -534,10 +509,10 @@ describe('plugin-mobius-socket', function () {
|
|
|
534
509
|
return _regenerator.default.wrap(function (_context) {
|
|
535
510
|
while (1) switch (_context.prev = _context.next) {
|
|
536
511
|
case 0:
|
|
537
|
-
s = new
|
|
512
|
+
s = new _socket.default();
|
|
538
513
|
// Save the current stub and replace it
|
|
539
|
-
previousStub =
|
|
540
|
-
|
|
514
|
+
previousStub = _socket.default.getWebSocketConstructor;
|
|
515
|
+
_socket.default.getWebSocketConstructor = _sinon.default.stub().callsFake(function () {
|
|
541
516
|
return function () {
|
|
542
517
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
543
518
|
args[_key2] = arguments[_key2];
|
|
@@ -576,7 +551,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
576
551
|
_testHelperChai.assert.calledWith(socketInstance.close, expectedCode, expectedReason);
|
|
577
552
|
|
|
578
553
|
// Restore the previous stub
|
|
579
|
-
|
|
554
|
+
_socket.default.getWebSocketConstructor = previousStub;
|
|
580
555
|
case 2:
|
|
581
556
|
case "end":
|
|
582
557
|
return _context.stop();
|
|
@@ -707,7 +682,7 @@ describe('plugin-mobius-socket', function () {
|
|
|
707
682
|
});
|
|
708
683
|
});
|
|
709
684
|
it('acknowledges async_event messages only', function () {
|
|
710
|
-
_sinon.default.spy(socket, '
|
|
685
|
+
_sinon.default.spy(socket, 'acknowledge');
|
|
711
686
|
mockWebSocket.emit('message', {
|
|
712
687
|
data: (0, _stringify.default)({
|
|
713
688
|
type: 'async_event',
|
|
@@ -715,25 +690,25 @@ describe('plugin-mobius-socket', function () {
|
|
|
715
690
|
trackingId: 'tracking-123'
|
|
716
691
|
})
|
|
717
692
|
});
|
|
718
|
-
_testHelperChai.assert.called(socket.
|
|
693
|
+
_testHelperChai.assert.called(socket.acknowledge);
|
|
719
694
|
});
|
|
720
695
|
it('does not acknowledge non-async_event messages', function () {
|
|
721
|
-
_sinon.default.spy(socket, '
|
|
696
|
+
_sinon.default.spy(socket, 'acknowledge');
|
|
722
697
|
mockWebSocket.emit('message', {
|
|
723
698
|
data: (0, _stringify.default)({
|
|
724
699
|
type: 'regular',
|
|
725
700
|
id: 'mockid'
|
|
726
701
|
})
|
|
727
702
|
});
|
|
728
|
-
_testHelperChai.assert.notCalled(socket.
|
|
703
|
+
_testHelperChai.assert.notCalled(socket.acknowledge);
|
|
729
704
|
});
|
|
730
705
|
});
|
|
731
|
-
describe('#
|
|
706
|
+
describe('#acknowledge', function () {
|
|
732
707
|
it('requires an event', function () {
|
|
733
|
-
return _testHelperChai.assert.isRejected(socket.
|
|
708
|
+
return _testHelperChai.assert.isRejected(socket.acknowledge(), /`event` is required/);
|
|
734
709
|
});
|
|
735
710
|
it('acknowledges async events using event_ack and eventId', function () {
|
|
736
|
-
return socket.
|
|
711
|
+
return socket.acknowledge({
|
|
737
712
|
data: {
|
|
738
713
|
eventId: 'event-123',
|
|
739
714
|
trackingId: 'tracking-123'
|