UNPKG

node-red-contrib-home-assistant-websocket

Version:
119 lines (118 loc) 4.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.inputSchema = exports.inputs = void 0; exports.default = sentenceNode; const joi_1 = __importDefault(require("joi")); const helpers_1 = require("../../common/controllers/helpers"); const ClientEvents_1 = __importDefault(require("../../common/events/ClientEvents")); const Events_1 = __importDefault(require("../../common/events/Events")); const Integration_1 = require("../../common/integration/Integration"); const InputService_1 = __importDefault(require("../../common/services/InputService")); const State_1 = __importDefault(require("../../common/State")); const Status_1 = __importDefault(require("../../common/status/Status")); const const_1 = require("../../const"); const globals_1 = require("../../globals"); const migrate_1 = require("../../helpers/migrate"); const node_1 = require("../../helpers/node"); const index_1 = require("../../homeAssistant/index"); const const_2 = require("./const"); const SentenceInputController_1 = __importDefault(require("./SentenceInputController")); const SentenceIntegration_1 = __importDefault(require("./SentenceIntegration")); const SentenceOutputController_1 = __importDefault(require("./SentenceOutputController")); exports.inputs = { response: { messageProp: 'payload.response', configProp: 'response', default: 'payload', }, responseType: { messageProp: 'payload.responseType', configProp: 'responseType', default: 'msg', }, responseId: { messageProp: '_sentence_response_id', }, }; exports.inputSchema = joi_1.default.object({ response: joi_1.default.string().required(), responseType: joi_1.default.string() .valid(...Object.values(const_2.SentenceResponseType), ...Object.values(const_1.TypedInputTypes)) .required(), responseId: joi_1.default.number().required().messages({ 'any.required': '_sentence_response_id was not found in the message object', }), }); function sentenceNode(config) { globals_1.RED.nodes.createNode(this, config); this.config = (0, migrate_1.migrate)(config); const serverConfigNode = (0, node_1.getServerConfigNode)(this.config.server); const homeAssistant = (0, index_1.getHomeAssistant)(serverConfigNode); switch (this.config.mode) { case const_2.SentenceMode.Trigger: createTriggerNode(this, homeAssistant, serverConfigNode); break; case const_2.SentenceMode.Response: createResponseNode(this, homeAssistant, serverConfigNode); break; default: throw new Error('Invalid mode'); } } function createTriggerNode(node, homeAssistant, serverConfigNode) { const exposeAsConfigNode = (0, node_1.getExposeAsConfigNode)(node.config.exposeAsEntityConfig); const controllerDeps = (0, helpers_1.createExposeAsControllerDependences)({ exposeAsConfigNode, homeAssistant, node, serverConfigNode, }); const integration = new SentenceIntegration_1.default({ node, clientEvents: controllerDeps.clientEvents, homeAssistant, state: new State_1.default(node), }); integration.setStatus(controllerDeps.status); const controller = new SentenceOutputController_1.default({ node, ...controllerDeps, }); controller.setExposeAsConfigNode(exposeAsConfigNode); const nodeEvents = new Events_1.default({ node, emitter: node }); nodeEvents.addListener(Integration_1.IntegrationEvent.Trigger, controller.onReceivedMessage.bind(controller)); integration.init(); } function createResponseNode(node, homeAssistant, serverConfigNode) { const status = new Status_1.default({ config: serverConfigNode.config, node, }); const controllerDeps = (0, helpers_1.createControllerDependencies)(node, homeAssistant); const inputService = new InputService_1.default({ inputs: exports.inputs, nodeConfig: node.config, schema: exports.inputSchema, }); const clientEvents = new ClientEvents_1.default({ node, emitter: homeAssistant.eventBus, }); const integration = new SentenceIntegration_1.default({ node, clientEvents, homeAssistant, state: new State_1.default(node), }); // eslint-disable-next-line no-new new SentenceInputController_1.default({ inputService, node, status, integration, ...controllerDeps, }); }