@atomist/automation-client
Version:
Atomist API for software low-level client
75 lines • 3.88 kB
JavaScript
"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