node-red-contrib-home-assistant-websocket
Version:
Node-RED integration with Home Assistant through websocket and REST API
2 lines (1 loc) • 2.9 kB
JavaScript
;var S=Object.create;var c=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var B=(e,o)=>{for(var r in o)c(e,r,{get:o[r],enumerable:!0})},p=(e,o,r,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of x(o))!O.call(e,i)&&i!==r&&c(e,i,{get:()=>o[i],enumerable:!(a=w(o,i))||a.enumerable});return e};var s=(e,o,r)=>(r=e!=null?S(E(e)):{},p(o||!e||!e.__esModule?c(r,"default",{value:e,enumerable:!0}):r,e)),R=e=>p(c({},"__esModule",{value:!0}),e);var q={};B(q,{default:()=>b});module.exports=R(q);var t=s(require("joi")),l=require("../../common/controllers/helpers"),m=require("../../common/errors/inputErrorHandler"),u=s(require("../../common/events/ClientEvents")),n=s(require("../../common/services/InputService")),g=s(require("../../common/status/Status")),f=require("../../globals"),v=require("../../helpers/migrate"),P=require("../../helpers/node"),y=require("../../homeAssistant"),h=require("../../homeAssistant/Websocket"),N=s(require("./ActionController")),I=require("./const");const _={action:{messageProp:"payload.action",configProp:"action"},target:{messageProp:"payload.target"},data:{messageProp:"payload.data",configProp:"data",default:{}},domain:{messageProp:"payload.domain",configProp:"domain"},service:{messageProp:"payload.service",configProp:"service"}};function j(e){const{domain:o,service:r}=e;return(o.source===n.DataSource.Message||r.source===n.DataSource.Message)&&o.value&&r.value&&(e.action.value=`${o.value}.${r.value}`,e.action.source=n.DataSource.Transformed),e}const k=t.default.object({action:t.default.string().required(),data:t.default.alternatives(t.default.string().allow(""),t.default.object()).required(),target:t.default.object().keys({floor_id:t.default.alternatives(t.default.string(),t.default.array().optional()),area_id:t.default.alternatives(t.default.string(),t.default.array().optional()),device_id:t.default.alternatives(t.default.string(),t.default.array().optional()),entity_id:t.default.alternatives(t.default.string(),t.default.array().optional()),label_id:t.default.alternatives(t.default.string(),t.default.array().optional())})}).unknown(!0);function b(e){f.RED.nodes.createNode(this,e),this.config=(0,v.migrate)(e);const o=(0,P.getServerConfigNode)(this.config.server),r=(0,y.getHomeAssistant)(o),a=new g.default({config:o.config,node:this}),i=new n.default({inputs:_,nodeConfig:this.config,schema:k,transform:j});this.config.blockInputOverrides&&i.disableInputOverrides();const A=(0,l.createControllerDependencies)(this,r),d=new N.default({inputService:i,node:this,status:a,...A});if(this.config.queue!==I.Queue.None){if(r.isHomeAssistantRunning)try{d.onClientReady()}catch(C){(0,m.inputErrorHandler)(C,{status:a})}new u.default({node:this,emitter:r.eventBus}).addListener(h.ClientEvent.Ready,d.onClientReady.bind(d))}}