UNPKG

@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
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