node-red-contrib-home-assistant-websocket
Version:
Node-RED integration with Home Assistant through websocket and REST API
2 lines (1 loc) • 4.82 kB
JavaScript
;var C=Object.create;var d=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var I=(e,s)=>{for(var t in s)d(e,t,{get:s[t],enumerable:!0})},p=(e,s,t,n)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of j(s))!q.call(e,o)&&o!==t&&d(e,o,{get:()=>s[o],enumerable:!(n=S(s,o))||n.enumerable});return e};var m=(e,s,t)=>(t=e!=null?C(w(e)):{},p(s||!e||!e.__esModule?d(t,"default",{value:e,enumerable:!0}):t,e)),k=e=>p(d({},"__esModule",{value:!0}),e);var M={};I(M,{createRoutes:()=>L});module.exports=k(M);var f=require("bonjour-service"),l=m(require("debug")),g=m(require("flat")),h=m(require("./common/services/IssueService")),R=require("./const"),c=require("./globals"),y=require("./helpers/diagnostics"),A=require("./helpers/node"),b=require("./homeAssistant");function T(e,s,t){c.RED.nodes.getNode(e.params.id)?.config?.cacheJson===!1&&(s.setHeader("Surrogate-Control","no-store"),s.setHeader("Cache-Control","no-store, no-cache, must-revalidate, proxy-revalidate"),s.setHeader("Pragma","no-cache"),s.setHeader("Expires","0")),t()}function v(e,s,t){try{const n=(0,A.getServerConfigNode)(e.params.serverId);e.homeAssistant=(0,b.getHomeAssistant)(n)}catch{const o=c.RED._("config-server.errors.no_server_selected");s.status(503).send({error:o});return}t()}async function P(e,s){let t,n=!0;const o=e.query.deviceId?.toString(),i=await e?.homeAssistant?.websocket.getDeviceActions(o).catch(a=>((0,l.default)(`Error getting device actions. ${JSON.stringify(a)}`),n=!1,t=a.message,[]));s.json({success:n,data:i??[],message:t})}async function H(e,s){let t=!0,n;const o=e.query.event;let i;try{i=JSON.parse(o)}catch{t=!1,n="Invalid event",s.json({success:t,data:[],message:n});return}const a=await e?.homeAssistant?.websocket.getDeviceActionCapabilities(i).catch(r=>(t=!1,n=r.message,[]));s.json({success:t,data:a??[],message:n})}async function N(e,s){let t=!0,n;const o=e.query.deviceId?.toString(),i=await e?.homeAssistant?.websocket.getDeviceTriggers(o).catch(a=>(t=!1,n=a.message,[]));s.json({success:t,data:i??[],message:n})}async function x(e,s){let t=!0,n;const o=e.query.event;let i;try{i=JSON.parse(o)}catch{t=!1,n="Invalid event",s.json({success:t,data:[],message:n});return}const a=await e?.homeAssistant?.websocket.getDeviceTriggerCapabilities(i).catch(r=>(t=!1,n=r.message,[]));s.json({success:t,data:a??[],message:n})}function E(e,s){const t=e?.homeAssistant?.getEntities();s.json(t??[])}function D(e,s){const t=e.query.entityId?.toString();if(t===void 0){s.json(e?.homeAssistant?.websocket.getStates());return}const n=e?.homeAssistant?.websocket.getState(t);s.json(n??[])}function O(e,s){const t=e?.homeAssistant?.websocket.getServices();s.json(t??[])}function _(e,s){let t=[];const n=e.query.entityId?.toString(),o=n?e?.homeAssistant?.websocket.getState(n):e?.homeAssistant?.websocket.getStates();if(Array.isArray(o))t=Object.keys((0,g.default)(o)).filter(r=>e?.query?.term&&r.indexOf(e.query.term.toString())!==-1);else{const r=e.homeAssistant?.websocket.getStates();if(!r){s.json([]);return}t=Object.values(r).map(u=>Object.keys((0,g.default)(u)))}const a=Array.from(new Set([].concat(...t))).sort((r,u)=>!r.includes(".")&&u.includes(".")?-1:r.includes(".")&&!u.includes(".")?1:r<u?-1:r>u?1:0);s.json(a)}async function J(e,s){const t=e?.homeAssistant,o=(e.query.update?await t?.websocket.updateTagList():t?.getTags())?.map(i=>{const a=t?.websocket.getEntity(i.id)?.name;return{id:i.id,name:a??i.name}});s.json(o??[])}async function $(e,s){const t=e.query.cat?.toString(),n=e.query.lang?.toString()??"en";if(!t){s.json({});return}const o=await e?.homeAssistant?.websocket.getTranslations(t,n);s.json(o??[])}function F(e,s){s.json({version:e?.homeAssistant?.integrationVersion??R.NO_VERSION})}function V(e,s){const t=e.body.issue;h.default.toggleIssueHiddenStatus(t),s.json({})}function B(e,s){const t=[],o=new f.Bonjour().find({type:"home-assistant"},i=>{t.push({label:i.name?`${i.name} (${i.txt.base_url})`:i.txt.base_url,value:i.txt.base_url})});setTimeout(()=>{s.json(t),o.stop()},3e3)}function L(){Object.entries({deviceActions:P,deviceActionCapabilities:H,deviceTriggers:N,deviceTriggerCapabilities:x,entities:E,properties:_,services:O,states:D,tags:J,translations:$}).forEach(([s,t])=>c.RED.httpAdmin.get(`/homeassistant/${s}/:serverId?`,c.RED.auth.needsPermission("server.read"),T,v,t)),c.RED.httpAdmin.get("/homeassistant/version/:serverId",c.RED.auth.needsPermission("server.read"),v,F),c.RED.httpAdmin.get("/homeassistant/discover",B),c.RED.httpAdmin.get("/homeassistant/diagnostics",c.RED.auth.needsPermission("server.read"),async(s,t)=>{t.send(await(0,y.getEnvironmentData)())}),c.RED.httpAdmin.post("/homeassistant/issues/hidden",V)}0&&(module.exports={createRoutes});