UNPKG

@solid/community-server

Version:

Community Solid Server: an open and modular implementation of the Solid specifications

38 lines 1.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebSocket2023Listener = void 0; const global_logger_factory_1 = require("global-logger-factory"); const NotImplementedHttpError_1 = require("../../../util/errors/NotImplementedHttpError"); const WebSocketHandler_1 = require("../../WebSocketHandler"); const WebSocket2023Util_1 = require("./WebSocket2023Util"); /** * Listens for WebSocket connections and verifies whether they are valid WebSocketChannel2023 connections, * in which case its {@link WebSocket2023Handler} will be alerted. */ class WebSocket2023Listener extends WebSocketHandler_1.WebSocketHandler { logger = (0, global_logger_factory_1.getLoggerFor)(this); storage; handler; baseUrl; constructor(storage, handler, baseUrl) { super(); this.storage = storage; this.handler = handler; this.baseUrl = baseUrl; } async canHandle({ upgradeRequest }) { const id = (0, WebSocket2023Util_1.parseWebSocketRequest)(this.baseUrl, upgradeRequest); const channel = await this.storage.get(id); if (!channel) { throw new NotImplementedHttpError_1.NotImplementedHttpError(`Unknown or expired WebSocket channel ${id}`); } } async handle({ webSocket, upgradeRequest }) { const id = (0, WebSocket2023Util_1.parseWebSocketRequest)(this.baseUrl, upgradeRequest); const channel = (await this.storage.get(id)); this.logger.info(`Accepted WebSocket connection listening to changes on ${channel.topic}`); await this.handler.handleSafe({ channel, webSocket }); } } exports.WebSocket2023Listener = WebSocket2023Listener; //# sourceMappingURL=WebSocket2023Listener.js.map