@qrvey/websocket-client
Version:

75 lines • 2.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WebSocketClient = exports.SOCKET_STATUS = void 0;
const socket_io_client_1 = require("socket.io-client");
var SOCKET_STATUS;
(function (SOCKET_STATUS) {
SOCKET_STATUS["CONNECTED"] = "CONNECTED";
SOCKET_STATUS["ACTIVE"] = "ACTIVE";
SOCKET_STATUS["RECOVERED"] = "RECOVERED";
SOCKET_STATUS["DISCONNECTED"] = "DISCONNECTED";
SOCKET_STATUS["UNDEFINED"] = "UNDEFINED";
})(SOCKET_STATUS || (exports.SOCKET_STATUS = SOCKET_STATUS = {}));
class WebSocketClient {
constructor(auth,
// Options
{ domain, isAutoPingPongEnable = true, ignoreClientId = false, } = {}) {
var _a, _b;
const serverUrl = (_b = (_a = domain !== null && domain !== void 0 ? domain : process.env.PRIVATE_DOMAIN) !== null && _a !== void 0 ? _a : process.env.DOMAIN) !== null && _b !== void 0 ? _b : 'http://localhost:3000/';
this.socket = (0, socket_io_client_1.io)(serverUrl, {
auth,
path: '/websocket',
query: {
ignoreClientId,
},
});
if (isAutoPingPongEnable) {
const intervalTime = 60000; // 60000 ms = 1 minute;
this.intervalPingPongId = setInterval(() => {
this.publish({
eventName: 'ping',
data: {},
});
}, intervalTime);
}
}
publish({ eventName, data, isPublic = false, }) {
this.socket.emit(eventName, { isPublic, data });
}
publishAndDisconnect({ eventName, data, isPublic = false, }) {
this.socket.emit(eventName, { isPublic, data }, () => {
this.socket.disconnect();
});
}
subscribe(eventName, callback) {
this.socket.on(eventName, callback);
return this;
}
onError(callback) {
this.socket.on('connect_error', (error) => {
return callback(error);
});
}
status() {
if (this.socket.disconnected)
return SOCKET_STATUS.DISCONNECTED;
if (this.socket.connected)
return SOCKET_STATUS.CONNECTED;
if (this.socket.recovered)
return SOCKET_STATUS.RECOVERED;
if (this.socket.active)
return SOCKET_STATUS.ACTIVE;
return SOCKET_STATUS.UNDEFINED;
}
connect() {
this.socket.connect();
}
disconnect() {
this.socket.disconnect();
if (this.intervalPingPongId) {
clearInterval(this.intervalPingPongId);
}
}
}
exports.WebSocketClient = WebSocketClient;
//# sourceMappingURL=client.js.map