UNPKG

node-red-contrib-home-assistant-websocket

Version:
2 lines (1 loc) 3.59 kB
"use strict";var x=Object.create;var d=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var j=(e,t)=>{for(var r in t)d(e,r,{get:t[r],enumerable:!0})},g=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of E(t))!L.call(e,s)&&s!==r&&d(e,s,{get:()=>t[s],enumerable:!(o=I(t,s))||o.enumerable});return e};var i=(e,t,r)=>(r=e!=null?x(P(e)):{},g(t||!e||!e.__esModule?d(r,"default",{value:e,enumerable:!0}):r,e)),z=e=>g(d({},"__esModule",{value:!0}),e);var M={};j(M,{HaEvent:()=>U,SUPERVISOR_URL:()=>f,closeHomeAssistant:()=>K,createHomeAssistantClient:()=>k,getHomeAssistant:()=>W,hasCredentials:()=>S,homeAssistantConnections:()=>a});module.exports=z(M);var u=require("events"),h=require("url"),m=i(require("../common/events/ClientEvents")),p=require("../globals"),C=i(require("../nodes/config-server/Comms")),_=i(require("../nodes/config-server/ConnectionLog")),w=i(require("../nodes/config-server/EditorContext")),b=i(require("./HomeAssistant")),v=i(require("./Http")),l=i(require("./Websocket"));const a=new Map;var U=(n=>(n.AreaRegistryUpdated="areas_updated",n.AutomationTriggered="automation_triggered",n.DeviceRegistryUpdated="devices_updated",n.FloorRegistryUpdated="floors_updated",n.Integration="nodered",n.LabelRegistryUpdated="labels_updated",n.EntityRegistryUpdated="entity_registry_updated",n.ServicesUpdated="services_updated",n.StateChanged="state_changed",n.TagScanned="tag_scanned",n.ValueChange="value_change",n))(U||{});const f="http://supervisor/core";function S(e){return!!e.host&&!!e.access_token}function k(e){let t=a.get(e.id);if(t)return t;if(!S(e.credentials)&&!e.config.addon)throw new Error("No credentials provided");const r=new u.EventEmitter;r.setMaxListeners(0);const o=B(e.credentials,e.config),s=D(o,e.config),A=O(o,e.config),y=new v.default(s),R=new l.default(A,r);t=new b.default({websocketAPI:R,httpAPI:y,eventBus:r});const c=new m.default({node:e,emitter:t.eventBus});return c.addListener(l.ClientEvent.Connected,t.subscribeEvents.bind(t),{once:!0}),new C.default(e.id,t,c),new _.default(e,c),e.config.enableGlobalContextStore&&new w.default(e,c),t.websocket.connect().catch(N=>{e.error(N)}),a.set(e.id,t),t}function B(e,t){let r;if(!e)throw new Error("No credentials");let o=e.access_token;const s=["http://hassio/homeassistant",f];if(t.addon||s.includes(e.host)){if(!process.env.SUPERVISOR_TOKEN)throw new Error("Supervisor token not found.");r=f,o=process.env.SUPERVISOR_TOKEN}else r=T(e.host);return{host:r,access_token:o}}function D(e,t){return{access_token:e.access_token,host:e.host,rejectUnauthorizedCerts:t.rejectUnauthorizedCerts}}function O(e,t={rejectUnauthorizedCerts:!0,connectionDelay:!0}){const r=e.host!==f?!1:t.connectionDelay??!1,o=Number(t.heartbeatInterval)??0,s=t.heartbeat&&Number.isInteger(o)?o:0;return{access_token:e.access_token,host:e.host,rejectUnauthorizedCerts:t.rejectUnauthorizedCerts??!0,connectionDelay:r,heartbeatInterval:s}}function T(e){return V(e),e.trim()}function V(e){if(!e)throw new Error(p.RED._("config-server.errors.empty_base_url"));let t;try{t=new h.URL(e)}catch{throw new Error(p.RED._("config-server.errors.invalid_base_url"))}if(t.protocol!=="http:"&&t.protocol!=="https:")throw new Error(p.RED._("config-server.errors.invalid_protocol"))}function W(e){return a.get(e.id)??k(e)}function K(e){const t=a.get(e);t&&(t.close(),a.delete(e))}0&&(module.exports={HaEvent,SUPERVISOR_URL,closeHomeAssistant,createHomeAssistantClient,getHomeAssistant,hasCredentials,homeAssistantConnections});