UNPKG

@cocalc/project

Version:
136 lines 6.03 kB
"use strict"; /* Handle a general message from the hub. These are the generic message, as opposed to the messages specific to "client" functionality such as database queries. */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const logger_1 = require("@cocalc/project/logger"); const message = __importStar(require("@cocalc/util/message")); const named_servers_1 = __importDefault(require("@cocalc/project/named-servers")); const { exec_shell_code } = require("@cocalc/project/exec_shell_code"); // Reading and writing files to/from project and sending over socket const { read_file_from_project, write_file_to_project, } = require("@cocalc/project/read_write_files"); const { print_to_pdf } = require("@cocalc/project/print_to_pdf"); const process_kill_1 = __importDefault(require("@cocalc/backend/misc/process-kill")); const { handle_save_blob_message } = require("@cocalc/project/blobs"); const client = require("@cocalc/project/client"); const smc_version_1 = require("@cocalc/util/smc-version"); const write_text_file_to_project_1 = __importDefault(require("./write-text-file-to-project")); const winston = (0, logger_1.getLogger)("handle-message-from-hub"); function handleMessage(socket, mesg) { winston.debug("received a message", { event: mesg.event, id: mesg.id, "...": "...", }); // We can't just log this in general, since it can be big. // So only uncomment this for low level debugging, unfortunately. // winston.debug("received ", mesg); if (client.client?.handle_mesg(mesg, socket)) { return; } switch (mesg.event) { case "heartbeat": winston.debug(`received heartbeat on socket '${socket.id}'`); // Update the last hearbeat timestamp, so we know socket is working. socket.heartbeat = new Date(); return; case "ping": // ping message is used only for debugging purposes. socket.write_mesg("json", message.pong({ id: mesg.id })); return; case "named_server_port": (0, named_servers_1.default)(socket, mesg); return; case "project_exec": // this is no longer used by web browser clients; however it *is* used by the HTTP api served // by the hub to api key users, so do NOT remove it! // The web browser clients use the websocket api, exec_shell_code(socket, mesg); return; case "read_file_from_project": read_file_from_project(socket, mesg); return; case "write_file_to_project": write_file_to_project(socket, mesg); return; case "write_text_file_to_project": (0, write_text_file_to_project_1.default)(socket, mesg); return; case "print_to_pdf": print_to_pdf(socket, mesg); return; case "send_signal": if (mesg.pid && (mesg.signal == 2 || mesg.signal == 3 || mesg.signal == 9)) { (0, process_kill_1.default)(mesg.pid, mesg.signal); } else { if (mesg.id) { socket.write_mesg("json", message.error({ id: mesg.id, error: "invalid pid or signal (must be 2,3,9)", })); } return; } if (mesg.id != null) { // send back confirmation that a signal was sent socket.write_mesg("json", message.signal_sent({ id: mesg.id })); } return; case "save_blob": handle_save_blob_message(mesg); return; case "error": winston.error(`ERROR from hub: ${mesg.error}`); return; case "hello": // No action -- this is used by the hub to send an initial control message that has no effect, so that // we know this socket will be used for control messages. winston.info(`hello from hub -- sending back our version = ${smc_version_1.version}`); socket.write_mesg("json", message.version({ version: smc_version_1.version })); return; default: if (mesg.id != null) { // only respond with error if there is an id -- otherwise response has no meaning to hub. const err = message.error({ id: mesg.id, error: `Project does not implement handling mesg with event='${mesg.event}'`, }); socket.write_mesg("json", err); } else { winston.debug(`Dropping unknown message with event='${mesg.event}'`); } } } exports.default = handleMessage; //# sourceMappingURL=handle-message.js.map