@fdm-monster/server
Version:
FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.
65 lines (64 loc) • 2.46 kB
JavaScript
import { socketIoConnectedEvent } from "../constants/event.constants.js";
import { getPassportJwtOptions, verifyUserCallback } from "../middleware/passport.js";
import { authorize } from "../middleware/socketio.middleware.js";
import { Server } from "socket.io";
import { Counter, Gauge } from "prom-client";
//#region src/state/socket-io.gateway.ts
const socketIoGatewaySessions = new Gauge({
name: "socketio_gateway_sessions",
help: "Gateway active sessions"
});
const socketIoGatewayDisconnects = new Counter({
name: "socketio_gateway_disconnects",
help: "Gateway connections closed"
});
const socketIoGatewayMessagesSent = new Counter({
name: "socketio_messages_sent",
help: "Gateway messages sent"
});
const socketIoGatewayMessageSentSize = new Gauge({
name: "socketio_message_size",
help: "Gateway message sent size"
});
var SocketIoGateway = class SocketIoGateway {
logger;
io;
constructor(loggerFactory, eventEmitter2, settingsStore, userService, configService) {
this.eventEmitter2 = eventEmitter2;
this.settingsStore = settingsStore;
this.userService = userService;
this.configService = configService;
this.logger = loggerFactory(SocketIoGateway.name);
}
attachServer(httpServer) {
this.io = new Server(httpServer, { cors: { origin: "*" } });
const opts = getPassportJwtOptions(this.settingsStore, this.configService, (value) => value.handshake.auth.token);
this.io.use(authorize(this.settingsStore, opts, this.logger, verifyUserCallback(this.userService)));
this.io.on("connection", (socket) => this.onConnect.bind(this)(socket));
}
onConnect(socket) {
this.logger.debug("SocketIO Client connected", { socketId: socket.id });
this.eventEmitter2.emit(socketIoConnectedEvent, socket.id);
socketIoGatewaySessions.inc();
socket.on("disconnect", () => {
this.logger.debug("SocketIO Client disconnected", { socketId: socket.id });
socketIoGatewaySessions.dec(1);
socketIoGatewayDisconnects.inc();
});
}
send(event, data) {
if (!this.io) {
this.logger.debug(`Cant send event ${event}, socketio gateway must be created first`);
return;
}
this.io.emit(event, data);
socketIoGatewayMessagesSent.inc();
const payload = JSON.stringify(data);
const sizeInBytes = Buffer.byteLength(payload);
socketIoGatewayMessageSentSize.set(sizeInBytes);
}
};
const IO_MESSAGES = { Update: "update" };
//#endregion
export { IO_MESSAGES, SocketIoGateway };
//# sourceMappingURL=socket-io.gateway.js.map