You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
979 B
45 lines
979 B
2 years ago
|
/**
|
||
|
* @typedef {Object} WDSMetaObj
|
||
|
* @property {boolean} enforceWs
|
||
|
* @property {number} version
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Derives WDS metadata from a compatible socket client.
|
||
|
* @param {Function} SocketClient A WDS socket client (SockJS/WebSocket).
|
||
|
* @returns {WDSMetaObj} The parsed WDS metadata object.
|
||
|
*/
|
||
|
function getWDSMetadata(SocketClient) {
|
||
|
let enforceWs = false;
|
||
|
if (
|
||
|
typeof SocketClient.name !== 'undefined' &&
|
||
|
SocketClient.name !== null &&
|
||
|
SocketClient.name.toLowerCase().includes('websocket')
|
||
|
) {
|
||
|
enforceWs = true;
|
||
|
}
|
||
|
|
||
|
let version;
|
||
|
// WDS versions <=3.5.0
|
||
|
if (!('onMessage' in SocketClient.prototype)) {
|
||
|
version = 3;
|
||
|
} else {
|
||
|
// WDS versions >=3.5.0 <4
|
||
|
if (
|
||
|
'getClientPath' in SocketClient ||
|
||
|
Object.getPrototypeOf(SocketClient).name === 'BaseClient'
|
||
|
) {
|
||
|
version = 3;
|
||
|
} else {
|
||
|
version = 4;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
enforceWs: enforceWs,
|
||
|
version: version,
|
||
|
};
|
||
|
}
|
||
|
|
||
|
module.exports = getWDSMetadata;
|