Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

home-assistant-js-websocket

Package Overview
Dependencies
Maintainers
1
Versions
102
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

home-assistant-js-websocket - npm Package Compare versions

Comparing version 3.2.2 to 3.2.4

2

dist/haws.es.js

@@ -1,2 +0,2 @@

function e(e,t,n,r){return new(n||(n=Promise))(function(s,o){function i(e){try{a(r.next(e))}catch(e){o(e)}}function c(e){try{a(r.throw(e))}catch(e){o(e)}}function a(e){e.done?s(e.value):new n(function(t){t(e.value)}).then(i,c)}a((r=r.apply(e,t||[])).next())})}function t(e,t){var n,r,s,o,i={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return o={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(o){return function(c){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(s=2&o[0]?r.return:o[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,o[1])).done)return s;switch(r=0,s&&(o=[2&o[0],s.value]),o[0]){case 0:case 1:s=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(s=(s=i.trys).length>0&&s[s.length-1])&&(6===o[0]||2===o[0])){i=0;continue}if(3===o[0]&&(!s||o[1]>s[0]&&o[1]<s[3])){i.label=o[1];break}if(6===o[0]&&i.label<s[1]){i.label=s[1],s=o;break}if(s&&i.label<s[2]){i.label=s[2],i.ops.push(o);break}s[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=s=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,c])}}}var n=1,r=2,s=3,o=4;var i="auth_invalid",c="auth_ok";var a=function(){function n(e,t){this.options=t,this.commandId=1,this.commands={},this.eventListeners={},this.closeRequested=!1,this.setSocket(e)}return n.prototype.setSocket=function(e){var t=this,n=this.socket;if(this.socket=e,e.addEventListener("message",function(e){return t._handleMessage(e)}),e.addEventListener("close",function(e){return t._handleClose(e)}),n){var r=this.commands;this.commandId=1,this.commands={},Object.keys(r).forEach(function(e){var n=r[e];"eventCallback"in n&&t.subscribeEvents(n.eventCallback,n.eventType).then(function(e){n.unsubscribe=e,n.resolve()})}),this.fireEvent("ready")}},n.prototype.addEventListener=function(e,t){var n=this.eventListeners[e];n||(n=this.eventListeners[e]=[]),n.push(t)},n.prototype.removeEventListener=function(e,t){var n=this.eventListeners[e];if(n){var r=n.indexOf(t);-1!==r&&n.splice(r,1)}},n.prototype.fireEvent=function(e,t){var n=this;(this.eventListeners[e]||[]).forEach(function(e){return e(n,t)})},n.prototype.close=function(){this.closeRequested=!0,this.socket.close()},n.prototype.subscribeEvents=function(n,r){return e(this,void 0,void 0,function(){var s,o,i=this;return t(this,function(c){switch(c.label){case 0:return s=this._genCmdId(),[4,new Promise(function(c,a){o=i.commands[s]={resolve:c,reject:a,eventCallback:n,eventType:r,unsubscribe:function(){return e(i,void 0,void 0,function(){return t(this,function(e){switch(e.label){case 0:return[4,this.sendMessagePromise((t=s,{type:"unsubscribe_events",subscription:t}))];case 1:return e.sent(),delete this.commands[s],[2]}var t})})}};try{i.sendMessage(function(e){var t={type:"subscribe_events"};return e&&(t.event_type=e),t}(r),s)}catch(e){}})];case 1:return c.sent(),[2,function(){return o.unsubscribe()}]}})})},n.prototype.ping=function(){return this.sendMessagePromise({type:"ping"})},n.prototype.sendMessage=function(e,t){t||(t=this._genCmdId()),e.id=t,this.socket.send(JSON.stringify(e))},n.prototype.sendMessagePromise=function(e){var t=this;return new Promise(function(n,r){var s=t._genCmdId();t.commands[s]={resolve:n,reject:r},t.sendMessage(e,s)})},n.prototype._handleMessage=function(e){var t=JSON.parse(e.data);switch(t.type){case"event":this.commands[t.id].eventCallback(t.event);break;case"result":if(t.id in this.commands){var n=this.commands[t.id];t.success?(n.resolve(t.result),"eventCallback"in n||delete this.commands[t.id]):(n.reject(t.error),delete this.commands[t.id])}break;case"pong":this.commands[t.id].resolve(),delete this.commands[t.id]}},n.prototype._handleClose=function(n){var s=this;if(Object.keys(this.commands).forEach(function(e){var t=s.commands[e];"eventCallback"in t||t.reject({type:"result",success:!1,error:{code:3,message:"Connection lost"}})}),!this.closeRequested){this.fireEvent("disconnected");var o=Object.assign({},this.options,{setupRetry:0}),i=function(n){setTimeout(function(){return e(s,void 0,void 0,function(){var e,s;return t(this,function(t){switch(t.label){case 0:t.label=1;case 1:return t.trys.push([1,3,,4]),[4,o.createSocket(o)];case 2:return e=t.sent(),this.setSocket(e),[3,4];case 3:return(s=t.sent())===r?this.fireEvent("reconnect-error",s):i(n+1),[3,4];case 4:return[2]}})})},1e3*Math.min(n,5))};i(0)}},n.prototype._genCmdId=function(){return++this.commandId},n}();var u=function(){return location.protocol+"//"+location.host+"/"},f=function(e){return 1e3*e+Date.now()};function d(e,t,n,r){n+=(n.includes("?")?"&":"?")+"auth_callback=1",document.location.href=function(e,t,n,r){var s=e+"/auth/authorize?response_type=code&client_id="+encodeURIComponent(t)+"&redirect_uri="+encodeURIComponent(n);return r&&(s+="&state="+encodeURIComponent(r)),s}(e,t,n,r)}function l(n,s,o){return e(this,void 0,void 0,function(){var e,i,c;return t(this,function(t){switch(t.label){case 0:return(e=new FormData).append("client_id",s),Object.keys(o).forEach(function(t){e.append(t,o[t])}),[4,fetch(n+"/auth/token",{method:"POST",credentials:"same-origin",body:e})];case 1:if(!(i=t.sent()).ok)throw 400===i.status||403===i.status?r:new Error("Unable to fetch tokens");return[4,i.json()];case 2:return(c=t.sent()).hassUrl=n,c.clientId=s,c.expires=f(c.expires_in),[2,c]}})})}var h=function(){function n(e,t){this.data=e,this._saveTokens=t}return Object.defineProperty(n.prototype,"wsUrl",{get:function(){return"ws"+this.data.hassUrl.substr(4)+"/api/websocket"},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"accessToken",{get:function(){return this.data.access_token},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"expired",{get:function(){return Date.now()>this.data.expires},enumerable:!0,configurable:!0}),n.prototype.refreshAccessToken=function(){return e(this,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return[4,l(this.data.hassUrl,this.data.clientId,{grant_type:"refresh_token",refresh_token:this.data.refresh_token})];case 1:return(e=t.sent()).refresh_token=this.data.refresh_token,this.data=e,this._saveTokens&&this._saveTokens(e),[2]}})})},n.prototype.revoke=function(){return e(this,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return(e=new FormData).append("action","revoke"),e.append("token",this.data.refresh_token),[4,fetch(this.data.hassUrl+"/auth/token",{method:"POST",credentials:"same-origin",body:e})];case 1:return t.sent(),this._saveTokens&&this._saveTokens(null),[2]}})})},n}();function v(n){return void 0===n&&(n={}),e(this,void 0,void 0,function(){var e,r,s,i,c,a,f;return t(this,function(t){switch(t.label){case 0:if(!("auth_callback"in(r=function(e){for(var t={},n=e.split("&"),r=0;r<n.length;r++){var s=n[r].split("="),o=decodeURIComponent(s[0]),i=s.length>1?decodeURIComponent(s[1]):void 0;t[o]=i}return t}(location.search.substr(1)))))return[3,4];s=JSON.parse(atob(r.state)),t.label=1;case 1:return t.trys.push([1,3,,4]),[4,function(e,t,n){return l(e,t,{code:n,grant_type:"authorization_code"})}(s.hassUrl,s.clientId,r.code)];case 2:return e=t.sent(),n.saveTokens&&n.saveTokens(e),[3,4];case 3:return i=t.sent(),console.log("Unable to fetch access token",i),[3,4];case 4:return e||!n.loadTokens?[3,6]:[4,n.loadTokens()];case 5:e=t.sent(),t.label=6;case 6:if(e)return[2,new h(e,n.saveTokens)];if(void 0===(c=n.hassUrl))throw o;return"/"===c[c.length-1]&&(c=c.substr(0,c.length-1)),a=n.clientId||u(),f=n.redirectUrl||location.protocol+"//"+location.host+location.pathname+location.search,d(c,a,f,function(e){return btoa(JSON.stringify(e))}({hassUrl:c,clientId:a})),[2,new Promise(function(){})]}})})}var p=function(e){var t=[];function n(n,r){e=r?n:Object.assign({},e,n);for(var s=t,o=0;o<s.length;o++)s[o](e)}return{get state(){return e},action:function(t){function r(e){n(e,!1)}return function(){for(var n=[e],s=0;s<arguments.length;s++)n.push(arguments[s]);var o=t.apply(this,n);if(null!=o)return o.then?o.then(r):r(o)}},setState:n,subscribe:function(e){return t.push(e),function(){!function(e){for(var n=[],r=0;r<t.length;r++)t[r]===e?e=null:n.push(t[r]);t=n}(e)}}}},b=function(e,t,n,r){if(e[t])return e[t];var s,o=0,i=p(),c=function(){return n(e).then(function(e){return i.setState(e,!0)})};return e[t]={get state(){return i.state},refresh:c,subscribe:function(t){o||(o++,r&&(s=r(e,i)),e.addEventListener("ready",c),c().catch(function(t){if(e.socket.readyState==e.socket.OPEN)throw t}));var n=i.subscribe(t);return function(){n(),--o||(s&&s.then(function(e){e()}),e.removeEventListener("ready",c))}}},e[t]},m=function(e,t,n,r,s){return b(r,e,t,n).subscribe(s)},y=function(e){return e.sendMessagePromise({type:"get_states"})},k=function(e){return e.sendMessagePromise({type:"get_services"})},g=function(e){return e.sendMessagePromise({type:"get_config"})},_=function(e){return e.sendMessagePromise({type:"auth/current_user"})},w=function(e,t,n,r){return e.sendMessagePromise(function(e,t,n){var r={type:"call_service",domain:e,service:t};return n&&(r.service_data=n),r}(t,n,r))};function E(e,t){return void 0===e?null:{components:e.components.concat(t.data.component)}}var S=function(e){return g(e)},O=function(e,t){return e.subscribeEvents(t.action(E),"component_loaded")},T=function(e,t){return function(e){return b(e,"_cnf",S,O)}(e).subscribe(t)};function L(e,t){var n,r;if(void 0===e)return null;var s=t.data,o=s.domain,i=Object.assign({},e[o],((n={})[s.service]={description:"",fields:{}},n));return(r={})[o]=i,r}function P(e,t){var n;if(void 0===e)return null;var r=t.data,s=r.domain,o=r.service,i=e[s];if(!(i&&o in i))return null;var c={};return Object.keys(i).forEach(function(e){e!==o&&(c[e]=i[e])}),(n={})[s]=c,n}var C=function(e){return k(e)},j=function(e,t){return Promise.all([e.subscribeEvents(t.action(L),"service_registered"),e.subscribeEvents(t.action(P),"service_removed")]).then(function(e){return function(){return e.forEach(function(e){return e()})}})},I=function(e,t){return function(e){return b(e,"_srv",C,j)}(e).subscribe(t)};function U(n){return e(this,void 0,void 0,function(){var e,r,s,o;return t(this,function(t){switch(t.label){case 0:return[4,y(n)];case 1:for(e=t.sent(),r={},s=0;s<e.length;s++)r[(o=e[s]).entity_id]=o;return[2,r]}})})}var M=function(e,t){return e.subscribeEvents(function(e){return function(e,t){var n,r=e.state;if(void 0!==r){var s=t.data,o=s.entity_id,i=s.new_state;if(i)e.setState(((n={})[i.entity_id]=i,n));else{var c=Object.assign({},r);delete c[o],e.setState(c,!0)}}}(t,e)},"state_changed")},x=function(e){return b(e,"_ent",U,M)},R=function(e,t){return x(e).subscribe(t)},N={setupRetry:0,createSocket:function(s){if(!s.auth)throw o;var a=s.auth,u=a.wsUrl;return new Promise(function(o,f){return function s(o,f,d){var l=this,h=new WebSocket(u),v=!1,p=function(){if(h.removeEventListener("close",p),v)d(r);else if(0!==o){var e=-1===o?-1:o-1;setTimeout(function(){return s(e,f,d)},1e3)}else d(n)},b=function(n){return e(l,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return t.trys.push([0,3,,4]),a.expired?[4,a.refreshAccessToken()]:[3,2];case 1:t.sent(),t.label=2;case 2:return h.send(JSON.stringify({type:"auth",access_token:a.accessToken})),[3,4];case 3:return e=t.sent(),v=e===r,h.close(),[3,4];case 4:return[2]}})})},m=function(n){return e(l,void 0,void 0,function(){return t(this,function(e){switch(JSON.parse(n.data).type){case i:v=!0,h.close();break;case c:h.removeEventListener("open",b),h.removeEventListener("message",m),h.removeEventListener("close",p),h.removeEventListener("error",p),f(h)}return[2]})})};h.addEventListener("open",b),h.addEventListener("message",m),h.addEventListener("close",p),h.addEventListener("error",p)}(s.setupRetry,o,f)})}};function J(n){return e(this,void 0,void 0,function(){var e,r;return t(this,function(t){switch(t.label){case 0:return[4,(e=Object.assign({},N,n)).createSocket(e)];case 1:return r=t.sent(),[2,new a(r,e)]}})})}export{J as createConnection,u as genClientId,f as genExpires,h as Auth,v as getAuth,b as getCollection,m as createCollection,a as Connection,T as subscribeConfig,I as subscribeServices,x as entitiesColl,R as subscribeEntities,n as ERR_CANNOT_CONNECT,r as ERR_INVALID_AUTH,s as ERR_CONNECTION_LOST,o as ERR_HASS_HOST_REQUIRED,y as getStates,k as getServices,g as getConfig,_ as getUser,w as callService};
function e(e,t,n,r){return new(n||(n=Promise))(function(s,o){function i(e){try{a(r.next(e))}catch(e){o(e)}}function c(e){try{a(r.throw(e))}catch(e){o(e)}}function a(e){e.done?s(e.value):new n(function(t){t(e.value)}).then(i,c)}a((r=r.apply(e,t||[])).next())})}function t(e,t){var n,r,s,o,i={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return o={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(o){return function(c){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(s=2&o[0]?r.return:o[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,o[1])).done)return s;switch(r=0,s&&(o=[2&o[0],s.value]),o[0]){case 0:case 1:s=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(s=(s=i.trys).length>0&&s[s.length-1])&&(6===o[0]||2===o[0])){i=0;continue}if(3===o[0]&&(!s||o[1]>s[0]&&o[1]<s[3])){i.label=o[1];break}if(6===o[0]&&i.label<s[1]){i.label=s[1],s=o;break}if(s&&i.label<s[2]){i.label=s[2],i.ops.push(o);break}s[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=s=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,c])}}}var n=1,r=2,s=3,o=4;var i="auth_invalid",c="auth_ok";var a=function(){function n(e,t){this.options=t,this.commandId=1,this.commands={},this.eventListeners={},this.closeRequested=!1,this.setSocket(e)}return n.prototype.setSocket=function(e){var t=this,n=this.socket;if(this.socket=e,e.addEventListener("message",function(e){return t._handleMessage(e)}),e.addEventListener("close",function(e){return t._handleClose(e)}),n){var r=this.commands;this.commandId=1,this.commands={},Object.keys(r).forEach(function(e){var n=r[e];"eventCallback"in n&&t.subscribeEvents(n.eventCallback,n.eventType).then(function(e){n.unsubscribe=e,n.resolve()})}),this.fireEvent("ready")}},n.prototype.addEventListener=function(e,t){var n=this.eventListeners[e];n||(n=this.eventListeners[e]=[]),n.push(t)},n.prototype.removeEventListener=function(e,t){var n=this.eventListeners[e];if(n){var r=n.indexOf(t);-1!==r&&n.splice(r,1)}},n.prototype.fireEvent=function(e,t){var n=this;(this.eventListeners[e]||[]).forEach(function(e){return e(n,t)})},n.prototype.close=function(){this.closeRequested=!0,this.socket.close()},n.prototype.subscribeEvents=function(n,r){return e(this,void 0,void 0,function(){var s,o,i=this;return t(this,function(c){switch(c.label){case 0:return s=this._genCmdId(),[4,new Promise(function(c,a){o=i.commands[s]={resolve:c,reject:a,eventCallback:n,eventType:r,unsubscribe:function(){return e(i,void 0,void 0,function(){return t(this,function(e){switch(e.label){case 0:return[4,this.sendMessagePromise((t=s,{type:"unsubscribe_events",subscription:t}))];case 1:return e.sent(),delete this.commands[s],[2]}var t})})}};try{i.sendMessage(function(e){var t={type:"subscribe_events"};return e&&(t.event_type=e),t}(r),s)}catch(e){}})];case 1:return c.sent(),[2,function(){return o.unsubscribe()}]}})})},n.prototype.ping=function(){return this.sendMessagePromise({type:"ping"})},n.prototype.sendMessage=function(e,t){t||(t=this._genCmdId()),e.id=t,this.socket.send(JSON.stringify(e))},n.prototype.sendMessagePromise=function(e){var t=this;return new Promise(function(n,r){var s=t._genCmdId();t.commands[s]={resolve:n,reject:r},t.sendMessage(e,s)})},n.prototype._handleMessage=function(e){var t=JSON.parse(e.data);switch(t.type){case"event":this.commands[t.id].eventCallback(t.event);break;case"result":if(t.id in this.commands){var n=this.commands[t.id];t.success?(n.resolve(t.result),"eventCallback"in n||delete this.commands[t.id]):(n.reject(t.error),delete this.commands[t.id])}break;case"pong":this.commands[t.id].resolve(),delete this.commands[t.id]}},n.prototype._handleClose=function(n){var s=this;if(Object.keys(this.commands).forEach(function(e){var t=s.commands[e];"eventCallback"in t||t.reject({type:"result",success:!1,error:{code:3,message:"Connection lost"}})}),!this.closeRequested){this.fireEvent("disconnected");var o=Object.assign({},this.options,{setupRetry:0}),i=function(n){setTimeout(function(){return e(s,void 0,void 0,function(){var e,s;return t(this,function(t){switch(t.label){case 0:t.label=1;case 1:return t.trys.push([1,3,,4]),[4,o.createSocket(o)];case 2:return e=t.sent(),this.setSocket(e),[3,4];case 3:return(s=t.sent())===r?this.fireEvent("reconnect-error",s):i(n+1),[3,4];case 4:return[2]}})})},1e3*Math.min(n,5))};i(0)}},n.prototype._genCmdId=function(){return++this.commandId},n}();var u=function(){return location.protocol+"//"+location.host+"/"},f=function(e){return 1e3*e+Date.now()};function d(e,t,n,r){n+=(n.includes("?")?"&":"?")+"auth_callback=1",document.location.href=function(e,t,n,r){var s=e+"/auth/authorize?response_type=code&client_id="+encodeURIComponent(t)+"&redirect_uri="+encodeURIComponent(n);return r&&(s+="&state="+encodeURIComponent(r)),s}(e,t,n,r)}function l(n,s,o){return e(this,void 0,void 0,function(){var e,i,c;return t(this,function(t){switch(t.label){case 0:return(e=new FormData).append("client_id",s),Object.keys(o).forEach(function(t){e.append(t,o[t])}),[4,fetch(n+"/auth/token",{method:"POST",credentials:"same-origin",body:e})];case 1:if(!(i=t.sent()).ok)throw 400===i.status||403===i.status?r:new Error("Unable to fetch tokens");return[4,i.json()];case 2:return(c=t.sent()).hassUrl=n,c.clientId=s,c.expires=f(c.expires_in),[2,c]}})})}var h=function(){function n(e,t){this.data=e,this._saveTokens=t}return Object.defineProperty(n.prototype,"wsUrl",{get:function(){return"ws"+this.data.hassUrl.substr(4)+"/api/websocket"},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"accessToken",{get:function(){return this.data.access_token},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"expired",{get:function(){return Date.now()>this.data.expires},enumerable:!0,configurable:!0}),n.prototype.refreshAccessToken=function(){return e(this,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return[4,l(this.data.hassUrl,this.data.clientId,{grant_type:"refresh_token",refresh_token:this.data.refresh_token})];case 1:return(e=t.sent()).refresh_token=this.data.refresh_token,this.data=e,this._saveTokens&&this._saveTokens(e),[2]}})})},n.prototype.revoke=function(){return e(this,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return(e=new FormData).append("action","revoke"),e.append("token",this.data.refresh_token),[4,fetch(this.data.hassUrl+"/auth/token",{method:"POST",credentials:"same-origin",body:e})];case 1:return t.sent(),this._saveTokens&&this._saveTokens(null),[2]}})})},n}();function v(n){return void 0===n&&(n={}),e(this,void 0,void 0,function(){var e,r,s,i,c,a,f;return t(this,function(t){switch(t.label){case 0:if(!("auth_callback"in(r=function(e){for(var t={},n=e.split("&"),r=0;r<n.length;r++){var s=n[r].split("="),o=decodeURIComponent(s[0]),i=s.length>1?decodeURIComponent(s[1]):void 0;t[o]=i}return t}(location.search.substr(1)))))return[3,4];s=JSON.parse(atob(r.state)),t.label=1;case 1:return t.trys.push([1,3,,4]),[4,function(e,t,n){return l(e,t,{code:n,grant_type:"authorization_code"})}(s.hassUrl,s.clientId,r.code)];case 2:return e=t.sent(),n.saveTokens&&n.saveTokens(e),[3,4];case 3:return i=t.sent(),console.log("Unable to fetch access token",i),[3,4];case 4:return e||!n.loadTokens?[3,6]:[4,n.loadTokens()];case 5:e=t.sent(),t.label=6;case 6:if(e)return[2,new h(e,n.saveTokens)];if(void 0===(c=n.hassUrl))throw o;return"/"===c[c.length-1]&&(c=c.substr(0,c.length-1)),a=n.clientId||u(),f=n.redirectUrl||location.protocol+"//"+location.host+location.pathname+location.search,d(c,a,f,function(e){return btoa(JSON.stringify(e))}({hassUrl:c,clientId:a})),[2,new Promise(function(){})]}})})}var p=function(e){var t=[];function n(n,r){e=r?n:Object.assign({},e,n);for(var s=t,o=0;o<s.length;o++)s[o](e)}return{get state(){return e},action:function(t){function r(e){n(e,!1)}return function(){for(var n=[e],s=0;s<arguments.length;s++)n.push(arguments[s]);var o=t.apply(this,n);if(null!=o)return o.then?o.then(r):r(o)}},setState:n,subscribe:function(e){return t.push(e),function(){!function(e){for(var n=[],r=0;r<t.length;r++)t[r]===e?e=null:n.push(t[r]);t=n}(e)}}}},b=function(e,t,n,r){if(e[t])return e[t];var s,o=0,i=p(),c=function(){return n(e).then(function(e){return i.setState(e,!0)})};return e[t]={get state(){return i.state},refresh:c,subscribe:function(t){o||(o++,r&&(s=r(e,i)),e.addEventListener("ready",c),c().catch(function(t){if(e.socket.readyState==e.socket.OPEN)throw t}));var n=i.subscribe(t);return void 0!==i.state&&t(i.state),function(){n(),--o||(s&&s.then(function(e){e()}),e.removeEventListener("ready",c))}}},e[t]},m=function(e,t,n,r,s){return b(r,e,t,n).subscribe(s)},y=function(e){return e.sendMessagePromise({type:"get_states"})},k=function(e){return e.sendMessagePromise({type:"get_services"})},g=function(e){return e.sendMessagePromise({type:"get_config"})},_=function(e){return e.sendMessagePromise({type:"auth/current_user"})},w=function(e,t,n,r){return e.sendMessagePromise(function(e,t,n){var r={type:"call_service",domain:e,service:t};return n&&(r.service_data=n),r}(t,n,r))};function E(e,t){return void 0===e?null:{components:e.components.concat(t.data.component)}}var S=function(e){return g(e)},O=function(e,t){return e.subscribeEvents(t.action(E),"component_loaded")},T=function(e,t){return function(e){return b(e,"_cnf",S,O)}(e).subscribe(t)};function L(e,t){var n,r;if(void 0===e)return null;var s=t.data,o=s.domain,i=Object.assign({},e[o],((n={})[s.service]={description:"",fields:{}},n));return(r={})[o]=i,r}function P(e,t){var n;if(void 0===e)return null;var r=t.data,s=r.domain,o=r.service,i=e[s];if(!(i&&o in i))return null;var c={};return Object.keys(i).forEach(function(e){e!==o&&(c[e]=i[e])}),(n={})[s]=c,n}var C=function(e){return k(e)},j=function(e,t){return Promise.all([e.subscribeEvents(t.action(L),"service_registered"),e.subscribeEvents(t.action(P),"service_removed")]).then(function(e){return function(){return e.forEach(function(e){return e()})}})},I=function(e,t){return function(e){return b(e,"_srv",C,j)}(e).subscribe(t)};function U(n){return e(this,void 0,void 0,function(){var e,r,s,o;return t(this,function(t){switch(t.label){case 0:return[4,y(n)];case 1:for(e=t.sent(),r={},s=0;s<e.length;s++)r[(o=e[s]).entity_id]=o;return[2,r]}})})}var M=function(e,t){return e.subscribeEvents(function(e){return function(e,t){var n,r=e.state;if(void 0!==r){var s=t.data,o=s.entity_id,i=s.new_state;if(i)e.setState(((n={})[i.entity_id]=i,n));else{var c=Object.assign({},r);delete c[o],e.setState(c,!0)}}}(t,e)},"state_changed")},x=function(e){return b(e,"_ent",U,M)},R=function(e,t){return x(e).subscribe(t)},N={setupRetry:0,createSocket:function(s){if(!s.auth)throw o;var a=s.auth,u=a.wsUrl;return new Promise(function(o,f){return function s(o,f,d){var l=this,h=new WebSocket(u),v=!1,p=function(){if(h.removeEventListener("close",p),v)d(r);else if(0!==o){var e=-1===o?-1:o-1;setTimeout(function(){return s(e,f,d)},1e3)}else d(n)},b=function(n){return e(l,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return t.trys.push([0,3,,4]),a.expired?[4,a.refreshAccessToken()]:[3,2];case 1:t.sent(),t.label=2;case 2:return h.send(JSON.stringify({type:"auth",access_token:a.accessToken})),[3,4];case 3:return e=t.sent(),v=e===r,h.close(),[3,4];case 4:return[2]}})})},m=function(n){return e(l,void 0,void 0,function(){return t(this,function(e){switch(JSON.parse(n.data).type){case i:v=!0,h.close();break;case c:h.removeEventListener("open",b),h.removeEventListener("message",m),h.removeEventListener("close",p),h.removeEventListener("error",p),f(h)}return[2]})})};h.addEventListener("open",b),h.addEventListener("message",m),h.addEventListener("close",p),h.addEventListener("error",p)}(s.setupRetry,o,f)})}};function J(n){return e(this,void 0,void 0,function(){var e,r;return t(this,function(t){switch(t.label){case 0:return[4,(e=Object.assign({},N,n)).createSocket(e)];case 1:return r=t.sent(),[2,new a(r,e)]}})})}export{J as createConnection,u as genClientId,f as genExpires,h as Auth,v as getAuth,b as getCollection,m as createCollection,a as Connection,T as subscribeConfig,I as subscribeServices,x as entitiesColl,R as subscribeEntities,n as ERR_CANNOT_CONNECT,r as ERR_INVALID_AUTH,s as ERR_CONNECTION_LOST,o as ERR_HASS_HOST_REQUIRED,y as getStates,k as getServices,g as getConfig,_ as getUser,w as callService};
//# sourceMappingURL=haws.es.js.map

@@ -1,2 +0,2 @@

function e(e,t,n,r){return new(n||(n=Promise))(function(s,o){function i(e){try{a(r.next(e))}catch(e){o(e)}}function c(e){try{a(r.throw(e))}catch(e){o(e)}}function a(e){e.done?s(e.value):new n(function(t){t(e.value)}).then(i,c)}a((r=r.apply(e,t||[])).next())})}function t(e,t){var n,r,s,o,i={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return o={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(o){return function(c){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(s=2&o[0]?r.return:o[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,o[1])).done)return s;switch(r=0,s&&(o=[2&o[0],s.value]),o[0]){case 0:case 1:s=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(s=(s=i.trys).length>0&&s[s.length-1])&&(6===o[0]||2===o[0])){i=0;continue}if(3===o[0]&&(!s||o[1]>s[0]&&o[1]<s[3])){i.label=o[1];break}if(6===o[0]&&i.label<s[1]){i.label=s[1],s=o;break}if(s&&i.label<s[2]){i.label=s[2],i.ops.push(o);break}s[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=s=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,c])}}}var n=1,r=2,s=4;var o="auth_invalid",i="auth_ok";var c=function(){function n(e,t){this.options=t,this.commandId=1,this.commands={},this.eventListeners={},this.closeRequested=!1,this.setSocket(e)}return n.prototype.setSocket=function(e){var t=this,n=this.socket;if(this.socket=e,e.addEventListener("message",function(e){return t._handleMessage(e)}),e.addEventListener("close",function(e){return t._handleClose(e)}),n){var r=this.commands;this.commandId=1,this.commands={},Object.keys(r).forEach(function(e){var n=r[e];"eventCallback"in n&&t.subscribeEvents(n.eventCallback,n.eventType).then(function(e){n.unsubscribe=e,n.resolve()})}),this.fireEvent("ready")}},n.prototype.addEventListener=function(e,t){var n=this.eventListeners[e];n||(n=this.eventListeners[e]=[]),n.push(t)},n.prototype.removeEventListener=function(e,t){var n=this.eventListeners[e];if(n){var r=n.indexOf(t);-1!==r&&n.splice(r,1)}},n.prototype.fireEvent=function(e,t){var n=this;(this.eventListeners[e]||[]).forEach(function(e){return e(n,t)})},n.prototype.close=function(){this.closeRequested=!0,this.socket.close()},n.prototype.subscribeEvents=function(n,r){return e(this,void 0,void 0,function(){var s,o,i=this;return t(this,function(c){switch(c.label){case 0:return s=this._genCmdId(),[4,new Promise(function(c,a){o=i.commands[s]={resolve:c,reject:a,eventCallback:n,eventType:r,unsubscribe:function(){return e(i,void 0,void 0,function(){return t(this,function(e){switch(e.label){case 0:return[4,this.sendMessagePromise((t=s,{type:"unsubscribe_events",subscription:t}))];case 1:return e.sent(),delete this.commands[s],[2]}var t})})}};try{i.sendMessage(function(e){var t={type:"subscribe_events"};return e&&(t.event_type=e),t}(r),s)}catch(e){}})];case 1:return c.sent(),[2,function(){return o.unsubscribe()}]}})})},n.prototype.ping=function(){return this.sendMessagePromise({type:"ping"})},n.prototype.sendMessage=function(e,t){t||(t=this._genCmdId()),e.id=t,this.socket.send(JSON.stringify(e))},n.prototype.sendMessagePromise=function(e){var t=this;return new Promise(function(n,r){var s=t._genCmdId();t.commands[s]={resolve:n,reject:r},t.sendMessage(e,s)})},n.prototype._handleMessage=function(e){var t=JSON.parse(e.data);switch(t.type){case"event":this.commands[t.id].eventCallback(t.event);break;case"result":if(t.id in this.commands){var n=this.commands[t.id];t.success?(n.resolve(t.result),"eventCallback"in n||delete this.commands[t.id]):(n.reject(t.error),delete this.commands[t.id])}break;case"pong":this.commands[t.id].resolve(),delete this.commands[t.id]}},n.prototype._handleClose=function(n){var s=this;if(Object.keys(this.commands).forEach(function(e){var t=s.commands[e];"eventCallback"in t||t.reject({type:"result",success:!1,error:{code:3,message:"Connection lost"}})}),!this.closeRequested){this.fireEvent("disconnected");var o=Object.assign({},this.options,{setupRetry:0}),i=function(n){setTimeout(function(){return e(s,void 0,void 0,function(){var e,s;return t(this,function(t){switch(t.label){case 0:t.label=1;case 1:return t.trys.push([1,3,,4]),[4,o.createSocket(o)];case 2:return e=t.sent(),this.setSocket(e),[3,4];case 3:return(s=t.sent())===r?this.fireEvent("reconnect-error",s):i(n+1),[3,4];case 4:return[2]}})})},1e3*Math.min(n,5))};i(0)}},n.prototype._genCmdId=function(){return++this.commandId},n}();var a=function(){return location.protocol+"//"+location.host+"/"},u=function(e){return 1e3*e+Date.now()};function f(e,t,n,r){n+=(n.includes("?")?"&":"?")+"auth_callback=1",document.location.href=function(e,t,n,r){var s=e+"/auth/authorize?response_type=code&client_id="+encodeURIComponent(t)+"&redirect_uri="+encodeURIComponent(n);return r&&(s+="&state="+encodeURIComponent(r)),s}(e,t,n,r)}function l(n,s,o){return e(this,void 0,void 0,function(){var e,i,c;return t(this,function(t){switch(t.label){case 0:return(e=new FormData).append("client_id",s),Object.keys(o).forEach(function(t){e.append(t,o[t])}),[4,fetch(n+"/auth/token",{method:"POST",credentials:"same-origin",body:e})];case 1:if(!(i=t.sent()).ok)throw 400===i.status||403===i.status?r:new Error("Unable to fetch tokens");return[4,i.json()];case 2:return(c=t.sent()).hassUrl=n,c.clientId=s,c.expires=u(c.expires_in),[2,c]}})})}var d=function(){function n(e,t){this.data=e,this._saveTokens=t}return Object.defineProperty(n.prototype,"wsUrl",{get:function(){return"ws"+this.data.hassUrl.substr(4)+"/api/websocket"},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"accessToken",{get:function(){return this.data.access_token},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"expired",{get:function(){return Date.now()>this.data.expires},enumerable:!0,configurable:!0}),n.prototype.refreshAccessToken=function(){return e(this,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return[4,l(this.data.hassUrl,this.data.clientId,{grant_type:"refresh_token",refresh_token:this.data.refresh_token})];case 1:return(e=t.sent()).refresh_token=this.data.refresh_token,this.data=e,this._saveTokens&&this._saveTokens(e),[2]}})})},n.prototype.revoke=function(){return e(this,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return(e=new FormData).append("action","revoke"),e.append("token",this.data.refresh_token),[4,fetch(this.data.hassUrl+"/auth/token",{method:"POST",credentials:"same-origin",body:e})];case 1:return t.sent(),this._saveTokens&&this._saveTokens(null),[2]}})})},n}();var h=function(e){var t=[];function n(n,r){e=r?n:Object.assign({},e,n);for(var s=t,o=0;o<s.length;o++)s[o](e)}return{get state(){return e},action:function(t){function r(e){n(e,!1)}return function(){for(var n=[e],s=0;s<arguments.length;s++)n.push(arguments[s]);var o=t.apply(this,n);if(null!=o)return o.then?o.then(r):r(o)}},setState:n,subscribe:function(e){return t.push(e),function(){!function(e){for(var n=[],r=0;r<t.length;r++)t[r]===e?e=null:n.push(t[r]);t=n}(e)}}}},v=function(e,t,n,r){if(e[t])return e[t];var s,o=0,i=h(),c=function(){return n(e).then(function(e){return i.setState(e,!0)})};return e[t]={get state(){return i.state},refresh:c,subscribe:function(t){o||(o++,r&&(s=r(e,i)),e.addEventListener("ready",c),c().catch(function(t){if(e.socket.readyState==e.socket.OPEN)throw t}));var n=i.subscribe(t);return function(){n(),--o||(s&&s.then(function(e){e()}),e.removeEventListener("ready",c))}}},e[t]},p=function(e){return e.sendMessagePromise({type:"get_states"})},b=function(e){return e.sendMessagePromise({type:"get_services"})},m=function(e){return e.sendMessagePromise({type:"get_config"})};function y(e,t){return void 0===e?null:{components:e.components.concat(t.data.component)}}var g=function(e){return m(e)},k=function(e,t){return e.subscribeEvents(t.action(y),"component_loaded")};function _(e,t){var n,r;if(void 0===e)return null;var s=t.data,o=s.domain,i=Object.assign({},e[o],((n={})[s.service]={description:"",fields:{}},n));return(r={})[o]=i,r}function E(e,t){var n;if(void 0===e)return null;var r=t.data,s=r.domain,o=r.service,i=e[s];if(!(i&&o in i))return null;var c={};return Object.keys(i).forEach(function(e){e!==o&&(c[e]=i[e])}),(n={})[s]=c,n}var w=function(e){return b(e)},x=function(e,t){return Promise.all([e.subscribeEvents(t.action(_),"service_registered"),e.subscribeEvents(t.action(E),"service_removed")]).then(function(e){return function(){return e.forEach(function(e){return e()})}})};function C(n){return e(this,void 0,void 0,function(){var e,r,s,o;return t(this,function(t){switch(t.label){case 0:return[4,p(n)];case 1:for(e=t.sent(),r={},s=0;s<e.length;s++)r[(o=e[s]).entity_id]=o;return[2,r]}})})}var S=function(e,t){return e.subscribeEvents(function(e){return function(e,t){var n,r=e.state;if(void 0!==r){var s=t.data,o=s.entity_id,i=s.new_state;if(i)e.setState(((n={})[i.entity_id]=i,n));else{var c=Object.assign({},r);delete c[o],e.setState(c,!0)}}}(t,e)},"state_changed")},O=function(e){return v(e,"_ent",C,S)},T={setupRetry:0,createSocket:function(c){if(!c.auth)throw s;var a=c.auth,u=a.wsUrl;return new Promise(function(s,f){return function s(c,f,l){var d=this,h=new WebSocket(u),v=!1,p=function(){if(h.removeEventListener("close",p),v)l(r);else if(0!==c){var e=-1===c?-1:c-1;setTimeout(function(){return s(e,f,l)},1e3)}else l(n)},b=function(n){return e(d,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return t.trys.push([0,3,,4]),a.expired?[4,a.refreshAccessToken()]:[3,2];case 1:t.sent(),t.label=2;case 2:return h.send(JSON.stringify({type:"auth",access_token:a.accessToken})),[3,4];case 3:return e=t.sent(),v=e===r,h.close(),[3,4];case 4:return[2]}})})},m=function(n){return e(d,void 0,void 0,function(){return t(this,function(e){switch(JSON.parse(n.data).type){case o:v=!0,h.close();break;case i:h.removeEventListener("open",b),h.removeEventListener("message",m),h.removeEventListener("close",p),h.removeEventListener("error",p),f(h)}return[2]})})};h.addEventListener("open",b),h.addEventListener("message",m),h.addEventListener("close",p),h.addEventListener("error",p)}(c.setupRetry,s,f)})}};exports.createConnection=function(n){return e(this,void 0,void 0,function(){var e,r;return t(this,function(t){switch(t.label){case 0:return[4,(e=Object.assign({},T,n)).createSocket(e)];case 1:return r=t.sent(),[2,new c(r,e)]}})})},exports.genClientId=a,exports.genExpires=u,exports.Auth=d,exports.getAuth=function(n){return void 0===n&&(n={}),e(this,void 0,void 0,function(){var e,r,o,i,c,u,h;return t(this,function(t){switch(t.label){case 0:if(!("auth_callback"in(r=function(e){for(var t={},n=e.split("&"),r=0;r<n.length;r++){var s=n[r].split("="),o=decodeURIComponent(s[0]),i=s.length>1?decodeURIComponent(s[1]):void 0;t[o]=i}return t}(location.search.substr(1)))))return[3,4];o=JSON.parse(atob(r.state)),t.label=1;case 1:return t.trys.push([1,3,,4]),[4,function(e,t,n){return l(e,t,{code:n,grant_type:"authorization_code"})}(o.hassUrl,o.clientId,r.code)];case 2:return e=t.sent(),n.saveTokens&&n.saveTokens(e),[3,4];case 3:return i=t.sent(),console.log("Unable to fetch access token",i),[3,4];case 4:return e||!n.loadTokens?[3,6]:[4,n.loadTokens()];case 5:e=t.sent(),t.label=6;case 6:if(e)return[2,new d(e,n.saveTokens)];if(void 0===(c=n.hassUrl))throw s;return"/"===c[c.length-1]&&(c=c.substr(0,c.length-1)),u=n.clientId||a(),h=n.redirectUrl||location.protocol+"//"+location.host+location.pathname+location.search,f(c,u,h,function(e){return btoa(JSON.stringify(e))}({hassUrl:c,clientId:u})),[2,new Promise(function(){})]}})})},exports.getCollection=v,exports.createCollection=function(e,t,n,r,s){return v(r,e,t,n).subscribe(s)},exports.Connection=c,exports.subscribeConfig=function(e,t){return function(e){return v(e,"_cnf",g,k)}(e).subscribe(t)},exports.subscribeServices=function(e,t){return function(e){return v(e,"_srv",w,x)}(e).subscribe(t)},exports.entitiesColl=O,exports.subscribeEntities=function(e,t){return O(e).subscribe(t)},exports.ERR_CANNOT_CONNECT=n,exports.ERR_INVALID_AUTH=r,exports.ERR_CONNECTION_LOST=3,exports.ERR_HASS_HOST_REQUIRED=s,exports.getStates=p,exports.getServices=b,exports.getConfig=m,exports.getUser=function(e){return e.sendMessagePromise({type:"auth/current_user"})},exports.callService=function(e,t,n,r){return e.sendMessagePromise(function(e,t,n){var r={type:"call_service",domain:e,service:t};return n&&(r.service_data=n),r}(t,n,r))};
function e(e,t,n,r){return new(n||(n=Promise))(function(s,o){function i(e){try{a(r.next(e))}catch(e){o(e)}}function c(e){try{a(r.throw(e))}catch(e){o(e)}}function a(e){e.done?s(e.value):new n(function(t){t(e.value)}).then(i,c)}a((r=r.apply(e,t||[])).next())})}function t(e,t){var n,r,s,o,i={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return o={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(o){return function(c){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(s=2&o[0]?r.return:o[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,o[1])).done)return s;switch(r=0,s&&(o=[2&o[0],s.value]),o[0]){case 0:case 1:s=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(s=(s=i.trys).length>0&&s[s.length-1])&&(6===o[0]||2===o[0])){i=0;continue}if(3===o[0]&&(!s||o[1]>s[0]&&o[1]<s[3])){i.label=o[1];break}if(6===o[0]&&i.label<s[1]){i.label=s[1],s=o;break}if(s&&i.label<s[2]){i.label=s[2],i.ops.push(o);break}s[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=s=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,c])}}}var n=1,r=2,s=4;var o="auth_invalid",i="auth_ok";var c=function(){function n(e,t){this.options=t,this.commandId=1,this.commands={},this.eventListeners={},this.closeRequested=!1,this.setSocket(e)}return n.prototype.setSocket=function(e){var t=this,n=this.socket;if(this.socket=e,e.addEventListener("message",function(e){return t._handleMessage(e)}),e.addEventListener("close",function(e){return t._handleClose(e)}),n){var r=this.commands;this.commandId=1,this.commands={},Object.keys(r).forEach(function(e){var n=r[e];"eventCallback"in n&&t.subscribeEvents(n.eventCallback,n.eventType).then(function(e){n.unsubscribe=e,n.resolve()})}),this.fireEvent("ready")}},n.prototype.addEventListener=function(e,t){var n=this.eventListeners[e];n||(n=this.eventListeners[e]=[]),n.push(t)},n.prototype.removeEventListener=function(e,t){var n=this.eventListeners[e];if(n){var r=n.indexOf(t);-1!==r&&n.splice(r,1)}},n.prototype.fireEvent=function(e,t){var n=this;(this.eventListeners[e]||[]).forEach(function(e){return e(n,t)})},n.prototype.close=function(){this.closeRequested=!0,this.socket.close()},n.prototype.subscribeEvents=function(n,r){return e(this,void 0,void 0,function(){var s,o,i=this;return t(this,function(c){switch(c.label){case 0:return s=this._genCmdId(),[4,new Promise(function(c,a){o=i.commands[s]={resolve:c,reject:a,eventCallback:n,eventType:r,unsubscribe:function(){return e(i,void 0,void 0,function(){return t(this,function(e){switch(e.label){case 0:return[4,this.sendMessagePromise((t=s,{type:"unsubscribe_events",subscription:t}))];case 1:return e.sent(),delete this.commands[s],[2]}var t})})}};try{i.sendMessage(function(e){var t={type:"subscribe_events"};return e&&(t.event_type=e),t}(r),s)}catch(e){}})];case 1:return c.sent(),[2,function(){return o.unsubscribe()}]}})})},n.prototype.ping=function(){return this.sendMessagePromise({type:"ping"})},n.prototype.sendMessage=function(e,t){t||(t=this._genCmdId()),e.id=t,this.socket.send(JSON.stringify(e))},n.prototype.sendMessagePromise=function(e){var t=this;return new Promise(function(n,r){var s=t._genCmdId();t.commands[s]={resolve:n,reject:r},t.sendMessage(e,s)})},n.prototype._handleMessage=function(e){var t=JSON.parse(e.data);switch(t.type){case"event":this.commands[t.id].eventCallback(t.event);break;case"result":if(t.id in this.commands){var n=this.commands[t.id];t.success?(n.resolve(t.result),"eventCallback"in n||delete this.commands[t.id]):(n.reject(t.error),delete this.commands[t.id])}break;case"pong":this.commands[t.id].resolve(),delete this.commands[t.id]}},n.prototype._handleClose=function(n){var s=this;if(Object.keys(this.commands).forEach(function(e){var t=s.commands[e];"eventCallback"in t||t.reject({type:"result",success:!1,error:{code:3,message:"Connection lost"}})}),!this.closeRequested){this.fireEvent("disconnected");var o=Object.assign({},this.options,{setupRetry:0}),i=function(n){setTimeout(function(){return e(s,void 0,void 0,function(){var e,s;return t(this,function(t){switch(t.label){case 0:t.label=1;case 1:return t.trys.push([1,3,,4]),[4,o.createSocket(o)];case 2:return e=t.sent(),this.setSocket(e),[3,4];case 3:return(s=t.sent())===r?this.fireEvent("reconnect-error",s):i(n+1),[3,4];case 4:return[2]}})})},1e3*Math.min(n,5))};i(0)}},n.prototype._genCmdId=function(){return++this.commandId},n}();var a=function(){return location.protocol+"//"+location.host+"/"},u=function(e){return 1e3*e+Date.now()};function f(e,t,n,r){n+=(n.includes("?")?"&":"?")+"auth_callback=1",document.location.href=function(e,t,n,r){var s=e+"/auth/authorize?response_type=code&client_id="+encodeURIComponent(t)+"&redirect_uri="+encodeURIComponent(n);return r&&(s+="&state="+encodeURIComponent(r)),s}(e,t,n,r)}function l(n,s,o){return e(this,void 0,void 0,function(){var e,i,c;return t(this,function(t){switch(t.label){case 0:return(e=new FormData).append("client_id",s),Object.keys(o).forEach(function(t){e.append(t,o[t])}),[4,fetch(n+"/auth/token",{method:"POST",credentials:"same-origin",body:e})];case 1:if(!(i=t.sent()).ok)throw 400===i.status||403===i.status?r:new Error("Unable to fetch tokens");return[4,i.json()];case 2:return(c=t.sent()).hassUrl=n,c.clientId=s,c.expires=u(c.expires_in),[2,c]}})})}var d=function(){function n(e,t){this.data=e,this._saveTokens=t}return Object.defineProperty(n.prototype,"wsUrl",{get:function(){return"ws"+this.data.hassUrl.substr(4)+"/api/websocket"},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"accessToken",{get:function(){return this.data.access_token},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"expired",{get:function(){return Date.now()>this.data.expires},enumerable:!0,configurable:!0}),n.prototype.refreshAccessToken=function(){return e(this,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return[4,l(this.data.hassUrl,this.data.clientId,{grant_type:"refresh_token",refresh_token:this.data.refresh_token})];case 1:return(e=t.sent()).refresh_token=this.data.refresh_token,this.data=e,this._saveTokens&&this._saveTokens(e),[2]}})})},n.prototype.revoke=function(){return e(this,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return(e=new FormData).append("action","revoke"),e.append("token",this.data.refresh_token),[4,fetch(this.data.hassUrl+"/auth/token",{method:"POST",credentials:"same-origin",body:e})];case 1:return t.sent(),this._saveTokens&&this._saveTokens(null),[2]}})})},n}();var h=function(e){var t=[];function n(n,r){e=r?n:Object.assign({},e,n);for(var s=t,o=0;o<s.length;o++)s[o](e)}return{get state(){return e},action:function(t){function r(e){n(e,!1)}return function(){for(var n=[e],s=0;s<arguments.length;s++)n.push(arguments[s]);var o=t.apply(this,n);if(null!=o)return o.then?o.then(r):r(o)}},setState:n,subscribe:function(e){return t.push(e),function(){!function(e){for(var n=[],r=0;r<t.length;r++)t[r]===e?e=null:n.push(t[r]);t=n}(e)}}}},v=function(e,t,n,r){if(e[t])return e[t];var s,o=0,i=h(),c=function(){return n(e).then(function(e){return i.setState(e,!0)})};return e[t]={get state(){return i.state},refresh:c,subscribe:function(t){o||(o++,r&&(s=r(e,i)),e.addEventListener("ready",c),c().catch(function(t){if(e.socket.readyState==e.socket.OPEN)throw t}));var n=i.subscribe(t);return void 0!==i.state&&t(i.state),function(){n(),--o||(s&&s.then(function(e){e()}),e.removeEventListener("ready",c))}}},e[t]},p=function(e){return e.sendMessagePromise({type:"get_states"})},b=function(e){return e.sendMessagePromise({type:"get_services"})},m=function(e){return e.sendMessagePromise({type:"get_config"})};function y(e,t){return void 0===e?null:{components:e.components.concat(t.data.component)}}var g=function(e){return m(e)},k=function(e,t){return e.subscribeEvents(t.action(y),"component_loaded")};function _(e,t){var n,r;if(void 0===e)return null;var s=t.data,o=s.domain,i=Object.assign({},e[o],((n={})[s.service]={description:"",fields:{}},n));return(r={})[o]=i,r}function E(e,t){var n;if(void 0===e)return null;var r=t.data,s=r.domain,o=r.service,i=e[s];if(!(i&&o in i))return null;var c={};return Object.keys(i).forEach(function(e){e!==o&&(c[e]=i[e])}),(n={})[s]=c,n}var w=function(e){return b(e)},x=function(e,t){return Promise.all([e.subscribeEvents(t.action(_),"service_registered"),e.subscribeEvents(t.action(E),"service_removed")]).then(function(e){return function(){return e.forEach(function(e){return e()})}})};function C(n){return e(this,void 0,void 0,function(){var e,r,s,o;return t(this,function(t){switch(t.label){case 0:return[4,p(n)];case 1:for(e=t.sent(),r={},s=0;s<e.length;s++)r[(o=e[s]).entity_id]=o;return[2,r]}})})}var S=function(e,t){return e.subscribeEvents(function(e){return function(e,t){var n,r=e.state;if(void 0!==r){var s=t.data,o=s.entity_id,i=s.new_state;if(i)e.setState(((n={})[i.entity_id]=i,n));else{var c=Object.assign({},r);delete c[o],e.setState(c,!0)}}}(t,e)},"state_changed")},O=function(e){return v(e,"_ent",C,S)},T={setupRetry:0,createSocket:function(c){if(!c.auth)throw s;var a=c.auth,u=a.wsUrl;return new Promise(function(s,f){return function s(c,f,l){var d=this,h=new WebSocket(u),v=!1,p=function(){if(h.removeEventListener("close",p),v)l(r);else if(0!==c){var e=-1===c?-1:c-1;setTimeout(function(){return s(e,f,l)},1e3)}else l(n)},b=function(n){return e(d,void 0,void 0,function(){var e;return t(this,function(t){switch(t.label){case 0:return t.trys.push([0,3,,4]),a.expired?[4,a.refreshAccessToken()]:[3,2];case 1:t.sent(),t.label=2;case 2:return h.send(JSON.stringify({type:"auth",access_token:a.accessToken})),[3,4];case 3:return e=t.sent(),v=e===r,h.close(),[3,4];case 4:return[2]}})})},m=function(n){return e(d,void 0,void 0,function(){return t(this,function(e){switch(JSON.parse(n.data).type){case o:v=!0,h.close();break;case i:h.removeEventListener("open",b),h.removeEventListener("message",m),h.removeEventListener("close",p),h.removeEventListener("error",p),f(h)}return[2]})})};h.addEventListener("open",b),h.addEventListener("message",m),h.addEventListener("close",p),h.addEventListener("error",p)}(c.setupRetry,s,f)})}};exports.createConnection=function(n){return e(this,void 0,void 0,function(){var e,r;return t(this,function(t){switch(t.label){case 0:return[4,(e=Object.assign({},T,n)).createSocket(e)];case 1:return r=t.sent(),[2,new c(r,e)]}})})},exports.genClientId=a,exports.genExpires=u,exports.Auth=d,exports.getAuth=function(n){return void 0===n&&(n={}),e(this,void 0,void 0,function(){var e,r,o,i,c,u,h;return t(this,function(t){switch(t.label){case 0:if(!("auth_callback"in(r=function(e){for(var t={},n=e.split("&"),r=0;r<n.length;r++){var s=n[r].split("="),o=decodeURIComponent(s[0]),i=s.length>1?decodeURIComponent(s[1]):void 0;t[o]=i}return t}(location.search.substr(1)))))return[3,4];o=JSON.parse(atob(r.state)),t.label=1;case 1:return t.trys.push([1,3,,4]),[4,function(e,t,n){return l(e,t,{code:n,grant_type:"authorization_code"})}(o.hassUrl,o.clientId,r.code)];case 2:return e=t.sent(),n.saveTokens&&n.saveTokens(e),[3,4];case 3:return i=t.sent(),console.log("Unable to fetch access token",i),[3,4];case 4:return e||!n.loadTokens?[3,6]:[4,n.loadTokens()];case 5:e=t.sent(),t.label=6;case 6:if(e)return[2,new d(e,n.saveTokens)];if(void 0===(c=n.hassUrl))throw s;return"/"===c[c.length-1]&&(c=c.substr(0,c.length-1)),u=n.clientId||a(),h=n.redirectUrl||location.protocol+"//"+location.host+location.pathname+location.search,f(c,u,h,function(e){return btoa(JSON.stringify(e))}({hassUrl:c,clientId:u})),[2,new Promise(function(){})]}})})},exports.getCollection=v,exports.createCollection=function(e,t,n,r,s){return v(r,e,t,n).subscribe(s)},exports.Connection=c,exports.subscribeConfig=function(e,t){return function(e){return v(e,"_cnf",g,k)}(e).subscribe(t)},exports.subscribeServices=function(e,t){return function(e){return v(e,"_srv",w,x)}(e).subscribe(t)},exports.entitiesColl=O,exports.subscribeEntities=function(e,t){return O(e).subscribe(t)},exports.ERR_CANNOT_CONNECT=n,exports.ERR_INVALID_AUTH=r,exports.ERR_CONNECTION_LOST=3,exports.ERR_HASS_HOST_REQUIRED=s,exports.getStates=p,exports.getServices=b,exports.getConfig=m,exports.getUser=function(e){return e.sendMessagePromise({type:"auth/current_user"})},exports.callService=function(e,t,n,r){return e.sendMessagePromise(function(e,t,n){var r={type:"call_service",domain:e,service:t};return n&&(r.service_data=n),r}(t,n,r))};
//# sourceMappingURL=haws.js.map

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.HAWS={})}(this,function(e){function t(e,t,n,r){return new(n||(n=Promise))(function(s,i){function o(e){try{a(r.next(e))}catch(e){i(e)}}function c(e){try{a(r.throw(e))}catch(e){i(e)}}function a(e){e.done?s(e.value):new n(function(t){t(e.value)}).then(o,c)}a((r=r.apply(e,t||[])).next())})}function n(e,t){var n,r,s,i,o={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(s=2&i[0]?r.return:i[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,i[1])).done)return s;switch(r=0,s&&(i=[2&i[0],s.value]),i[0]){case 0:case 1:s=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(s=(s=o.trys).length>0&&s[s.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!s||i[1]>s[0]&&i[1]<s[3])){o.label=i[1];break}if(6===i[0]&&o.label<s[1]){o.label=s[1],s=i;break}if(s&&o.label<s[2]){o.label=s[2],o.ops.push(i);break}s[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=s=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}var r=1,s=2,i=4;var o="auth_invalid",c="auth_ok";var a=function(){function e(e,t){this.options=t,this.commandId=1,this.commands={},this.eventListeners={},this.closeRequested=!1,this.setSocket(e)}return e.prototype.setSocket=function(e){var t=this,n=this.socket;if(this.socket=e,e.addEventListener("message",function(e){return t._handleMessage(e)}),e.addEventListener("close",function(e){return t._handleClose(e)}),n){var r=this.commands;this.commandId=1,this.commands={},Object.keys(r).forEach(function(e){var n=r[e];"eventCallback"in n&&t.subscribeEvents(n.eventCallback,n.eventType).then(function(e){n.unsubscribe=e,n.resolve()})}),this.fireEvent("ready")}},e.prototype.addEventListener=function(e,t){var n=this.eventListeners[e];n||(n=this.eventListeners[e]=[]),n.push(t)},e.prototype.removeEventListener=function(e,t){var n=this.eventListeners[e];if(n){var r=n.indexOf(t);-1!==r&&n.splice(r,1)}},e.prototype.fireEvent=function(e,t){var n=this;(this.eventListeners[e]||[]).forEach(function(e){return e(n,t)})},e.prototype.close=function(){this.closeRequested=!0,this.socket.close()},e.prototype.subscribeEvents=function(e,r){return t(this,void 0,void 0,function(){var s,i,o=this;return n(this,function(c){switch(c.label){case 0:return s=this._genCmdId(),[4,new Promise(function(c,a){i=o.commands[s]={resolve:c,reject:a,eventCallback:e,eventType:r,unsubscribe:function(){return t(o,void 0,void 0,function(){return n(this,function(e){switch(e.label){case 0:return[4,this.sendMessagePromise((t=s,{type:"unsubscribe_events",subscription:t}))];case 1:return e.sent(),delete this.commands[s],[2]}var t})})}};try{o.sendMessage(function(e){var t={type:"subscribe_events"};return e&&(t.event_type=e),t}(r),s)}catch(e){}})];case 1:return c.sent(),[2,function(){return i.unsubscribe()}]}})})},e.prototype.ping=function(){return this.sendMessagePromise({type:"ping"})},e.prototype.sendMessage=function(e,t){t||(t=this._genCmdId()),e.id=t,this.socket.send(JSON.stringify(e))},e.prototype.sendMessagePromise=function(e){var t=this;return new Promise(function(n,r){var s=t._genCmdId();t.commands[s]={resolve:n,reject:r},t.sendMessage(e,s)})},e.prototype._handleMessage=function(e){var t=JSON.parse(e.data);switch(t.type){case"event":this.commands[t.id].eventCallback(t.event);break;case"result":if(t.id in this.commands){var n=this.commands[t.id];t.success?(n.resolve(t.result),"eventCallback"in n||delete this.commands[t.id]):(n.reject(t.error),delete this.commands[t.id])}break;case"pong":this.commands[t.id].resolve(),delete this.commands[t.id]}},e.prototype._handleClose=function(e){var r=this;if(Object.keys(this.commands).forEach(function(e){var t=r.commands[e];"eventCallback"in t||t.reject({type:"result",success:!1,error:{code:3,message:"Connection lost"}})}),!this.closeRequested){this.fireEvent("disconnected");var i=Object.assign({},this.options,{setupRetry:0}),o=function(e){setTimeout(function(){return t(r,void 0,void 0,function(){var t,r;return n(this,function(n){switch(n.label){case 0:n.label=1;case 1:return n.trys.push([1,3,,4]),[4,i.createSocket(i)];case 2:return t=n.sent(),this.setSocket(t),[3,4];case 3:return(r=n.sent())===s?this.fireEvent("reconnect-error",r):o(e+1),[3,4];case 4:return[2]}})})},1e3*Math.min(e,5))};o(0)}},e.prototype._genCmdId=function(){return++this.commandId},e}();var u=function(){return location.protocol+"//"+location.host+"/"},f=function(e){return 1e3*e+Date.now()};function d(e,t,n,r){n+=(n.includes("?")?"&":"?")+"auth_callback=1",document.location.href=function(e,t,n,r){var s=e+"/auth/authorize?response_type=code&client_id="+encodeURIComponent(t)+"&redirect_uri="+encodeURIComponent(n);return r&&(s+="&state="+encodeURIComponent(r)),s}(e,t,n,r)}function l(e,r,i){return t(this,void 0,void 0,function(){var t,o,c;return n(this,function(n){switch(n.label){case 0:return(t=new FormData).append("client_id",r),Object.keys(i).forEach(function(e){t.append(e,i[e])}),[4,fetch(e+"/auth/token",{method:"POST",credentials:"same-origin",body:t})];case 1:if(!(o=n.sent()).ok)throw 400===o.status||403===o.status?s:new Error("Unable to fetch tokens");return[4,o.json()];case 2:return(c=n.sent()).hassUrl=e,c.clientId=r,c.expires=f(c.expires_in),[2,c]}})})}var h=function(){function e(e,t){this.data=e,this._saveTokens=t}return Object.defineProperty(e.prototype,"wsUrl",{get:function(){return"ws"+this.data.hassUrl.substr(4)+"/api/websocket"},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"accessToken",{get:function(){return this.data.access_token},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"expired",{get:function(){return Date.now()>this.data.expires},enumerable:!0,configurable:!0}),e.prototype.refreshAccessToken=function(){return t(this,void 0,void 0,function(){var e;return n(this,function(t){switch(t.label){case 0:return[4,l(this.data.hassUrl,this.data.clientId,{grant_type:"refresh_token",refresh_token:this.data.refresh_token})];case 1:return(e=t.sent()).refresh_token=this.data.refresh_token,this.data=e,this._saveTokens&&this._saveTokens(e),[2]}})})},e.prototype.revoke=function(){return t(this,void 0,void 0,function(){var e;return n(this,function(t){switch(t.label){case 0:return(e=new FormData).append("action","revoke"),e.append("token",this.data.refresh_token),[4,fetch(this.data.hassUrl+"/auth/token",{method:"POST",credentials:"same-origin",body:e})];case 1:return t.sent(),this._saveTokens&&this._saveTokens(null),[2]}})})},e}();var v=function(e){var t=[];function n(n,r){e=r?n:Object.assign({},e,n);for(var s=t,i=0;i<s.length;i++)s[i](e)}return{get state(){return e},action:function(t){function r(e){n(e,!1)}return function(){for(var n=[e],s=0;s<arguments.length;s++)n.push(arguments[s]);var i=t.apply(this,n);if(null!=i)return i.then?i.then(r):r(i)}},setState:n,subscribe:function(e){return t.push(e),function(){!function(e){for(var n=[],r=0;r<t.length;r++)t[r]===e?e=null:n.push(t[r]);t=n}(e)}}}},p=function(e,t,n,r){if(e[t])return e[t];var s,i=0,o=v(),c=function(){return n(e).then(function(e){return o.setState(e,!0)})};return e[t]={get state(){return o.state},refresh:c,subscribe:function(t){i||(i++,r&&(s=r(e,o)),e.addEventListener("ready",c),c().catch(function(t){if(e.socket.readyState==e.socket.OPEN)throw t}));var n=o.subscribe(t);return function(){n(),--i||(s&&s.then(function(e){e()}),e.removeEventListener("ready",c))}}},e[t]},b=function(e){return e.sendMessagePromise({type:"get_states"})},m=function(e){return e.sendMessagePromise({type:"get_services"})},y=function(e){return e.sendMessagePromise({type:"get_config"})};function g(e,t){return void 0===e?null:{components:e.components.concat(t.data.component)}}var k=function(e){return y(e)},_=function(e,t){return e.subscribeEvents(t.action(g),"component_loaded")};function E(e,t){var n,r;if(void 0===e)return null;var s=t.data,i=s.domain,o=Object.assign({},e[i],((n={})[s.service]={description:"",fields:{}},n));return(r={})[i]=o,r}function w(e,t){var n;if(void 0===e)return null;var r=t.data,s=r.domain,i=r.service,o=e[s];if(!(o&&i in o))return null;var c={};return Object.keys(o).forEach(function(e){e!==i&&(c[e]=o[e])}),(n={})[s]=c,n}var C=function(e){return m(e)},S=function(e,t){return Promise.all([e.subscribeEvents(t.action(E),"service_registered"),e.subscribeEvents(t.action(w),"service_removed")]).then(function(e){return function(){return e.forEach(function(e){return e()})}})};function O(e){return t(this,void 0,void 0,function(){var t,r,s,i;return n(this,function(n){switch(n.label){case 0:return[4,b(e)];case 1:for(t=n.sent(),r={},s=0;s<t.length;s++)r[(i=t[s]).entity_id]=i;return[2,r]}})})}var T=function(e,t){return e.subscribeEvents(function(e){return function(e,t){var n,r=e.state;if(void 0!==r){var s=t.data,i=s.entity_id,o=s.new_state;if(o)e.setState(((n={})[o.entity_id]=o,n));else{var c=Object.assign({},r);delete c[i],e.setState(c,!0)}}}(t,e)},"state_changed")},I=function(e){return p(e,"_ent",O,T)},L={setupRetry:0,createSocket:function(e){if(!e.auth)throw i;var a=e.auth,u=a.wsUrl;return new Promise(function(i,f){return function e(i,f,d){var l=this,h=new WebSocket(u),v=!1,p=function(){if(h.removeEventListener("close",p),v)d(s);else if(0!==i){var t=-1===i?-1:i-1;setTimeout(function(){return e(t,f,d)},1e3)}else d(r)},b=function(e){return t(l,void 0,void 0,function(){var e;return n(this,function(t){switch(t.label){case 0:return t.trys.push([0,3,,4]),a.expired?[4,a.refreshAccessToken()]:[3,2];case 1:t.sent(),t.label=2;case 2:return h.send(JSON.stringify({type:"auth",access_token:a.accessToken})),[3,4];case 3:return e=t.sent(),v=e===s,h.close(),[3,4];case 4:return[2]}})})},m=function(e){return t(l,void 0,void 0,function(){return n(this,function(t){switch(JSON.parse(e.data).type){case o:v=!0,h.close();break;case c:h.removeEventListener("open",b),h.removeEventListener("message",m),h.removeEventListener("close",p),h.removeEventListener("error",p),f(h)}return[2]})})};h.addEventListener("open",b),h.addEventListener("message",m),h.addEventListener("close",p),h.addEventListener("error",p)}(e.setupRetry,i,f)})}};e.createConnection=function(e){return t(this,void 0,void 0,function(){var t,r;return n(this,function(n){switch(n.label){case 0:return[4,(t=Object.assign({},L,e)).createSocket(t)];case 1:return r=n.sent(),[2,new a(r,t)]}})})},e.genClientId=u,e.genExpires=f,e.Auth=h,e.getAuth=function(e){return void 0===e&&(e={}),t(this,void 0,void 0,function(){var t,r,s,o,c,a,f;return n(this,function(n){switch(n.label){case 0:if(!("auth_callback"in(r=function(e){for(var t={},n=e.split("&"),r=0;r<n.length;r++){var s=n[r].split("="),i=decodeURIComponent(s[0]),o=s.length>1?decodeURIComponent(s[1]):void 0;t[i]=o}return t}(location.search.substr(1)))))return[3,4];s=JSON.parse(atob(r.state)),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,function(e,t,n){return l(e,t,{code:n,grant_type:"authorization_code"})}(s.hassUrl,s.clientId,r.code)];case 2:return t=n.sent(),e.saveTokens&&e.saveTokens(t),[3,4];case 3:return o=n.sent(),console.log("Unable to fetch access token",o),[3,4];case 4:return t||!e.loadTokens?[3,6]:[4,e.loadTokens()];case 5:t=n.sent(),n.label=6;case 6:if(t)return[2,new h(t,e.saveTokens)];if(void 0===(c=e.hassUrl))throw i;return"/"===c[c.length-1]&&(c=c.substr(0,c.length-1)),a=e.clientId||u(),f=e.redirectUrl||location.protocol+"//"+location.host+location.pathname+location.search,d(c,a,f,function(e){return btoa(JSON.stringify(e))}({hassUrl:c,clientId:a})),[2,new Promise(function(){})]}})})},e.getCollection=p,e.createCollection=function(e,t,n,r,s){return p(r,e,t,n).subscribe(s)},e.Connection=a,e.subscribeConfig=function(e,t){return function(e){return p(e,"_cnf",k,_)}(e).subscribe(t)},e.subscribeServices=function(e,t){return function(e){return p(e,"_srv",C,S)}(e).subscribe(t)},e.entitiesColl=I,e.subscribeEntities=function(e,t){return I(e).subscribe(t)},e.ERR_CANNOT_CONNECT=r,e.ERR_INVALID_AUTH=s,e.ERR_CONNECTION_LOST=3,e.ERR_HASS_HOST_REQUIRED=i,e.getStates=b,e.getServices=m,e.getConfig=y,e.getUser=function(e){return e.sendMessagePromise({type:"auth/current_user"})},e.callService=function(e,t,n,r){return e.sendMessagePromise(function(e,t,n){var r={type:"call_service",domain:e,service:t};return n&&(r.service_data=n),r}(t,n,r))}});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.HAWS={})}(this,function(e){function t(e,t,n,r){return new(n||(n=Promise))(function(s,i){function o(e){try{a(r.next(e))}catch(e){i(e)}}function c(e){try{a(r.throw(e))}catch(e){i(e)}}function a(e){e.done?s(e.value):new n(function(t){t(e.value)}).then(o,c)}a((r=r.apply(e,t||[])).next())})}function n(e,t){var n,r,s,i,o={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;o;)try{if(n=1,r&&(s=2&i[0]?r.return:i[0]?r.throw||((s=r.return)&&s.call(r),0):r.next)&&!(s=s.call(r,i[1])).done)return s;switch(r=0,s&&(i=[2&i[0],s.value]),i[0]){case 0:case 1:s=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(s=(s=o.trys).length>0&&s[s.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!s||i[1]>s[0]&&i[1]<s[3])){o.label=i[1];break}if(6===i[0]&&o.label<s[1]){o.label=s[1],s=i;break}if(s&&o.label<s[2]){o.label=s[2],o.ops.push(i);break}s[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=s=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}var r=1,s=2,i=4;var o="auth_invalid",c="auth_ok";var a=function(){function e(e,t){this.options=t,this.commandId=1,this.commands={},this.eventListeners={},this.closeRequested=!1,this.setSocket(e)}return e.prototype.setSocket=function(e){var t=this,n=this.socket;if(this.socket=e,e.addEventListener("message",function(e){return t._handleMessage(e)}),e.addEventListener("close",function(e){return t._handleClose(e)}),n){var r=this.commands;this.commandId=1,this.commands={},Object.keys(r).forEach(function(e){var n=r[e];"eventCallback"in n&&t.subscribeEvents(n.eventCallback,n.eventType).then(function(e){n.unsubscribe=e,n.resolve()})}),this.fireEvent("ready")}},e.prototype.addEventListener=function(e,t){var n=this.eventListeners[e];n||(n=this.eventListeners[e]=[]),n.push(t)},e.prototype.removeEventListener=function(e,t){var n=this.eventListeners[e];if(n){var r=n.indexOf(t);-1!==r&&n.splice(r,1)}},e.prototype.fireEvent=function(e,t){var n=this;(this.eventListeners[e]||[]).forEach(function(e){return e(n,t)})},e.prototype.close=function(){this.closeRequested=!0,this.socket.close()},e.prototype.subscribeEvents=function(e,r){return t(this,void 0,void 0,function(){var s,i,o=this;return n(this,function(c){switch(c.label){case 0:return s=this._genCmdId(),[4,new Promise(function(c,a){i=o.commands[s]={resolve:c,reject:a,eventCallback:e,eventType:r,unsubscribe:function(){return t(o,void 0,void 0,function(){return n(this,function(e){switch(e.label){case 0:return[4,this.sendMessagePromise((t=s,{type:"unsubscribe_events",subscription:t}))];case 1:return e.sent(),delete this.commands[s],[2]}var t})})}};try{o.sendMessage(function(e){var t={type:"subscribe_events"};return e&&(t.event_type=e),t}(r),s)}catch(e){}})];case 1:return c.sent(),[2,function(){return i.unsubscribe()}]}})})},e.prototype.ping=function(){return this.sendMessagePromise({type:"ping"})},e.prototype.sendMessage=function(e,t){t||(t=this._genCmdId()),e.id=t,this.socket.send(JSON.stringify(e))},e.prototype.sendMessagePromise=function(e){var t=this;return new Promise(function(n,r){var s=t._genCmdId();t.commands[s]={resolve:n,reject:r},t.sendMessage(e,s)})},e.prototype._handleMessage=function(e){var t=JSON.parse(e.data);switch(t.type){case"event":this.commands[t.id].eventCallback(t.event);break;case"result":if(t.id in this.commands){var n=this.commands[t.id];t.success?(n.resolve(t.result),"eventCallback"in n||delete this.commands[t.id]):(n.reject(t.error),delete this.commands[t.id])}break;case"pong":this.commands[t.id].resolve(),delete this.commands[t.id]}},e.prototype._handleClose=function(e){var r=this;if(Object.keys(this.commands).forEach(function(e){var t=r.commands[e];"eventCallback"in t||t.reject({type:"result",success:!1,error:{code:3,message:"Connection lost"}})}),!this.closeRequested){this.fireEvent("disconnected");var i=Object.assign({},this.options,{setupRetry:0}),o=function(e){setTimeout(function(){return t(r,void 0,void 0,function(){var t,r;return n(this,function(n){switch(n.label){case 0:n.label=1;case 1:return n.trys.push([1,3,,4]),[4,i.createSocket(i)];case 2:return t=n.sent(),this.setSocket(t),[3,4];case 3:return(r=n.sent())===s?this.fireEvent("reconnect-error",r):o(e+1),[3,4];case 4:return[2]}})})},1e3*Math.min(e,5))};o(0)}},e.prototype._genCmdId=function(){return++this.commandId},e}();var u=function(){return location.protocol+"//"+location.host+"/"},f=function(e){return 1e3*e+Date.now()};function d(e,t,n,r){n+=(n.includes("?")?"&":"?")+"auth_callback=1",document.location.href=function(e,t,n,r){var s=e+"/auth/authorize?response_type=code&client_id="+encodeURIComponent(t)+"&redirect_uri="+encodeURIComponent(n);return r&&(s+="&state="+encodeURIComponent(r)),s}(e,t,n,r)}function l(e,r,i){return t(this,void 0,void 0,function(){var t,o,c;return n(this,function(n){switch(n.label){case 0:return(t=new FormData).append("client_id",r),Object.keys(i).forEach(function(e){t.append(e,i[e])}),[4,fetch(e+"/auth/token",{method:"POST",credentials:"same-origin",body:t})];case 1:if(!(o=n.sent()).ok)throw 400===o.status||403===o.status?s:new Error("Unable to fetch tokens");return[4,o.json()];case 2:return(c=n.sent()).hassUrl=e,c.clientId=r,c.expires=f(c.expires_in),[2,c]}})})}var h=function(){function e(e,t){this.data=e,this._saveTokens=t}return Object.defineProperty(e.prototype,"wsUrl",{get:function(){return"ws"+this.data.hassUrl.substr(4)+"/api/websocket"},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"accessToken",{get:function(){return this.data.access_token},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"expired",{get:function(){return Date.now()>this.data.expires},enumerable:!0,configurable:!0}),e.prototype.refreshAccessToken=function(){return t(this,void 0,void 0,function(){var e;return n(this,function(t){switch(t.label){case 0:return[4,l(this.data.hassUrl,this.data.clientId,{grant_type:"refresh_token",refresh_token:this.data.refresh_token})];case 1:return(e=t.sent()).refresh_token=this.data.refresh_token,this.data=e,this._saveTokens&&this._saveTokens(e),[2]}})})},e.prototype.revoke=function(){return t(this,void 0,void 0,function(){var e;return n(this,function(t){switch(t.label){case 0:return(e=new FormData).append("action","revoke"),e.append("token",this.data.refresh_token),[4,fetch(this.data.hassUrl+"/auth/token",{method:"POST",credentials:"same-origin",body:e})];case 1:return t.sent(),this._saveTokens&&this._saveTokens(null),[2]}})})},e}();var v=function(e){var t=[];function n(n,r){e=r?n:Object.assign({},e,n);for(var s=t,i=0;i<s.length;i++)s[i](e)}return{get state(){return e},action:function(t){function r(e){n(e,!1)}return function(){for(var n=[e],s=0;s<arguments.length;s++)n.push(arguments[s]);var i=t.apply(this,n);if(null!=i)return i.then?i.then(r):r(i)}},setState:n,subscribe:function(e){return t.push(e),function(){!function(e){for(var n=[],r=0;r<t.length;r++)t[r]===e?e=null:n.push(t[r]);t=n}(e)}}}},p=function(e,t,n,r){if(e[t])return e[t];var s,i=0,o=v(),c=function(){return n(e).then(function(e){return o.setState(e,!0)})};return e[t]={get state(){return o.state},refresh:c,subscribe:function(t){i||(i++,r&&(s=r(e,o)),e.addEventListener("ready",c),c().catch(function(t){if(e.socket.readyState==e.socket.OPEN)throw t}));var n=o.subscribe(t);return void 0!==o.state&&t(o.state),function(){n(),--i||(s&&s.then(function(e){e()}),e.removeEventListener("ready",c))}}},e[t]},b=function(e){return e.sendMessagePromise({type:"get_states"})},m=function(e){return e.sendMessagePromise({type:"get_services"})},y=function(e){return e.sendMessagePromise({type:"get_config"})};function g(e,t){return void 0===e?null:{components:e.components.concat(t.data.component)}}var k=function(e){return y(e)},_=function(e,t){return e.subscribeEvents(t.action(g),"component_loaded")};function E(e,t){var n,r;if(void 0===e)return null;var s=t.data,i=s.domain,o=Object.assign({},e[i],((n={})[s.service]={description:"",fields:{}},n));return(r={})[i]=o,r}function w(e,t){var n;if(void 0===e)return null;var r=t.data,s=r.domain,i=r.service,o=e[s];if(!(o&&i in o))return null;var c={};return Object.keys(o).forEach(function(e){e!==i&&(c[e]=o[e])}),(n={})[s]=c,n}var C=function(e){return m(e)},S=function(e,t){return Promise.all([e.subscribeEvents(t.action(E),"service_registered"),e.subscribeEvents(t.action(w),"service_removed")]).then(function(e){return function(){return e.forEach(function(e){return e()})}})};function O(e){return t(this,void 0,void 0,function(){var t,r,s,i;return n(this,function(n){switch(n.label){case 0:return[4,b(e)];case 1:for(t=n.sent(),r={},s=0;s<t.length;s++)r[(i=t[s]).entity_id]=i;return[2,r]}})})}var T=function(e,t){return e.subscribeEvents(function(e){return function(e,t){var n,r=e.state;if(void 0!==r){var s=t.data,i=s.entity_id,o=s.new_state;if(o)e.setState(((n={})[o.entity_id]=o,n));else{var c=Object.assign({},r);delete c[i],e.setState(c,!0)}}}(t,e)},"state_changed")},I=function(e){return p(e,"_ent",O,T)},L={setupRetry:0,createSocket:function(e){if(!e.auth)throw i;var a=e.auth,u=a.wsUrl;return new Promise(function(i,f){return function e(i,f,d){var l=this,h=new WebSocket(u),v=!1,p=function(){if(h.removeEventListener("close",p),v)d(s);else if(0!==i){var t=-1===i?-1:i-1;setTimeout(function(){return e(t,f,d)},1e3)}else d(r)},b=function(e){return t(l,void 0,void 0,function(){var e;return n(this,function(t){switch(t.label){case 0:return t.trys.push([0,3,,4]),a.expired?[4,a.refreshAccessToken()]:[3,2];case 1:t.sent(),t.label=2;case 2:return h.send(JSON.stringify({type:"auth",access_token:a.accessToken})),[3,4];case 3:return e=t.sent(),v=e===s,h.close(),[3,4];case 4:return[2]}})})},m=function(e){return t(l,void 0,void 0,function(){return n(this,function(t){switch(JSON.parse(e.data).type){case o:v=!0,h.close();break;case c:h.removeEventListener("open",b),h.removeEventListener("message",m),h.removeEventListener("close",p),h.removeEventListener("error",p),f(h)}return[2]})})};h.addEventListener("open",b),h.addEventListener("message",m),h.addEventListener("close",p),h.addEventListener("error",p)}(e.setupRetry,i,f)})}};e.createConnection=function(e){return t(this,void 0,void 0,function(){var t,r;return n(this,function(n){switch(n.label){case 0:return[4,(t=Object.assign({},L,e)).createSocket(t)];case 1:return r=n.sent(),[2,new a(r,t)]}})})},e.genClientId=u,e.genExpires=f,e.Auth=h,e.getAuth=function(e){return void 0===e&&(e={}),t(this,void 0,void 0,function(){var t,r,s,o,c,a,f;return n(this,function(n){switch(n.label){case 0:if(!("auth_callback"in(r=function(e){for(var t={},n=e.split("&"),r=0;r<n.length;r++){var s=n[r].split("="),i=decodeURIComponent(s[0]),o=s.length>1?decodeURIComponent(s[1]):void 0;t[i]=o}return t}(location.search.substr(1)))))return[3,4];s=JSON.parse(atob(r.state)),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,function(e,t,n){return l(e,t,{code:n,grant_type:"authorization_code"})}(s.hassUrl,s.clientId,r.code)];case 2:return t=n.sent(),e.saveTokens&&e.saveTokens(t),[3,4];case 3:return o=n.sent(),console.log("Unable to fetch access token",o),[3,4];case 4:return t||!e.loadTokens?[3,6]:[4,e.loadTokens()];case 5:t=n.sent(),n.label=6;case 6:if(t)return[2,new h(t,e.saveTokens)];if(void 0===(c=e.hassUrl))throw i;return"/"===c[c.length-1]&&(c=c.substr(0,c.length-1)),a=e.clientId||u(),f=e.redirectUrl||location.protocol+"//"+location.host+location.pathname+location.search,d(c,a,f,function(e){return btoa(JSON.stringify(e))}({hassUrl:c,clientId:a})),[2,new Promise(function(){})]}})})},e.getCollection=p,e.createCollection=function(e,t,n,r,s){return p(r,e,t,n).subscribe(s)},e.Connection=a,e.subscribeConfig=function(e,t){return function(e){return p(e,"_cnf",k,_)}(e).subscribe(t)},e.subscribeServices=function(e,t){return function(e){return p(e,"_srv",C,S)}(e).subscribe(t)},e.entitiesColl=I,e.subscribeEntities=function(e,t){return I(e).subscribe(t)},e.ERR_CANNOT_CONNECT=r,e.ERR_INVALID_AUTH=s,e.ERR_CONNECTION_LOST=3,e.ERR_HASS_HOST_REQUIRED=i,e.getStates=b,e.getServices=m,e.getConfig=y,e.getUser=function(e){return e.sendMessagePromise({type:"auth/current_user"})},e.callService=function(e,t,n,r){return e.sendMessagePromise(function(e,t,n){var r={type:"call_service",domain:e,service:t};return n&&(r.service_data=n),r}(t,n,r))}});
//# sourceMappingURL=haws.umd.js.map

@@ -5,3 +5,3 @@ {

"sideEffects": false,
"version": "3.2.2",
"version": "3.2.4",
"description": "Home Assistant websocket client",

@@ -8,0 +8,0 @@ "source": "lib/index.ts",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc