fix(v2.3.3): fallback to ws.close in browsers
This commit is contained in:
@@ -8,7 +8,7 @@ import {
|
||||
} from '../types/index';
|
||||
import { DefaultLogger } from './logger';
|
||||
import { isWsPong } from './requestUtils';
|
||||
import { getWsAuthSignature } from './websocket-util';
|
||||
import { getWsAuthSignature, safeTerminateWs } from './websocket-util';
|
||||
import WsStore from './WsStore';
|
||||
import { WsConnectionStateEnum } from './WsStore.types';
|
||||
|
||||
@@ -191,7 +191,7 @@ export abstract class BaseWebsocketClient<
|
||||
const ws = this.getWs(wsKey);
|
||||
ws?.close();
|
||||
if (force) {
|
||||
ws?.terminate();
|
||||
safeTerminateWs(ws);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -340,7 +340,7 @@ export abstract class BaseWebsocketClient<
|
||||
...LOGGER_CATEGORY,
|
||||
wsKey,
|
||||
});
|
||||
this.getWs(wsKey)?.terminate();
|
||||
safeTerminateWs(this.getWs(wsKey), true);
|
||||
delete this.wsStore.get(wsKey, true).activePongTimer;
|
||||
}, this.options.pongTimeout);
|
||||
}
|
||||
|
||||
@@ -178,3 +178,25 @@ export async function getWsAuthSignature(
|
||||
signature,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* #305: ws.terminate() is undefined in browsers.
|
||||
* This only works in node.js, not in browsers.
|
||||
* Does nothing if `ws` is undefined. Does nothing in browsers.
|
||||
*/
|
||||
export function safeTerminateWs(
|
||||
ws?: WebSocket | any,
|
||||
fallbackToClose?: boolean,
|
||||
): boolean {
|
||||
if (!ws) {
|
||||
return false;
|
||||
}
|
||||
if (typeof ws['terminate'] === 'function') {
|
||||
ws.terminate();
|
||||
return true;
|
||||
} else if (fallbackToClose) {
|
||||
ws.close();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import {
|
||||
isPrivateChannel,
|
||||
isWsPong,
|
||||
neverGuard,
|
||||
safeTerminateWs,
|
||||
WS_AUTH_ON_CONNECT_KEYS,
|
||||
WS_BASE_URL_MAP,
|
||||
WS_KEY_MAP,
|
||||
@@ -185,7 +186,7 @@ export class WebsocketClient extends EventEmitter {
|
||||
const ws = this.getWs(wsKey);
|
||||
ws?.close();
|
||||
if (force) {
|
||||
ws?.terminate();
|
||||
safeTerminateWs(ws);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -341,7 +342,7 @@ export class WebsocketClient extends EventEmitter {
|
||||
...LOGGER_CATEGORY,
|
||||
wsKey,
|
||||
});
|
||||
this.getWs(wsKey)?.terminate();
|
||||
safeTerminateWs(this.getWs(wsKey), true);
|
||||
delete this.wsStore.get(wsKey, true).activePongTimer;
|
||||
}, this.options.pongTimeout);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user