UNPKG

@atomist/automation-client

Version:

Atomist API for software low-level client

75 lines 3.88 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const stringify = require("json-stringify-safe"); const logger_1 = require("../../../util/logger"); const health_1 = require("../../util/health"); const poll_1 = require("../../util/poll"); const shutdown_1 = require("../../util/shutdown"); const AbstractRequestProcessor_1 = require("../AbstractRequestProcessor"); const RequestProcessor_1 = require("../RequestProcessor"); const WebSocketMessageClient_1 = require("./WebSocketMessageClient"); class DefaultWebSocketRequestProcessor extends AbstractRequestProcessor_1.AbstractRequestProcessor { constructor(automations, configuration, listeners = []) { super(automations, listeners); this.automations = automations; this.configuration = configuration; this.listeners = listeners; this.webSocketLifecycle = configuration.ws.lifecycle; health_1.registerHealthIndicator(() => { if (this.webSocketLifecycle.connected() && this.registration) { return { status: health_1.HealthStatus.Up, detail: "WebSocket connection established" }; } else { return { status: health_1.HealthStatus.Down, detail: "WebSocket disconnected" }; } }); shutdown_1.registerShutdownHook(() => __awaiter(this, void 0, void 0, function* () { if (!shutdown_1.terminationGraceful(this.configuration)) { return Promise.resolve(0); } logger_1.logger.debug("Waiting for any in-flight work"); yield poll_1.sleep(shutdown_1.terminationGracePeriod(this.configuration)); return 0; }), 0, "grace period"); } onRegistration(registration) { logger_1.logger.debug("Registration successful: %s", stringify(registration)); this.configuration.ws.session = registration; this.registration = registration; this.graphClients = this.configuration.graphql.client.factory; } onConnect(ws) { logger_1.logger.debug("WebSocket connection established. Listening for incoming messages"); this.webSocketLifecycle.set(ws); this.listeners.forEach(l => l.registrationSuccessful(this)); } onDisconnect() { this.webSocketLifecycle.reset(); this.registration = undefined; } sendStatusMessage(payload, ctx) { return Promise.resolve(this.webSocketLifecycle.send(payload)); } createGraphClient(event) { return this.graphClients.create(RequestProcessor_1.workspaceId(event), this.configuration); } createMessageClient(event) { if (RequestProcessor_1.isCommandIncoming(event)) { return new WebSocketMessageClient_1.WebSocketCommandMessageClient(event, this.webSocketLifecycle, this.configuration); } else if (RequestProcessor_1.isEventIncoming(event)) { return new WebSocketMessageClient_1.WebSocketEventMessageClient(event, this.webSocketLifecycle, this.configuration); } } } exports.DefaultWebSocketRequestProcessor = DefaultWebSocketRequestProcessor; //# sourceMappingURL=DefaultWebSocketRequestProcessor.js.map