lavva.exalushome.portos
Version:
Library implementing communication and abstraction layers for Portos 433MHz API in ExalusHome system
2 lines • 469 kB
JavaScript
(()=>{"use strict";var e,t={d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),t.d({},{J:()=>om});class n{constructor(){this.handlers=[]}Subscribe(e){this.handlers.push(e)}Unsubscribe(e){this.handlers=this.handlers.filter((t=>t!==e))}Invoke(e){this.handlers.slice(0).forEach((t=>{var n;try{t(e)}catch(e){null===(n=o.Log)||void 0===n||n.Error(e)}}))}}!function(e){e[e.Debug=0]="Debug",e[e.Info=1]="Info",e[e.Warning=2]="Warning",e[e.Error=3]="Error",e[e.None=4]="None"}(e||(e={}));class r{constructor(){this._blockedServices=[],this._logLevel=e.Debug,void 0!==window.loglevel&&null!==window.loglevel&&(this._logLevel=window.loglevel),window.logger=this}EnableStackTrace(){r.DoesThrowStackTrace=!0}DisableStackTrace(){r.DoesThrowStackTrace=!1}IsBlocked(e){return void 0!==e&&this._blockedServices.any((t=>t==e))}DisableLogsFrom(e){this._blockedServices.all((t=>t!=e))&&this._blockedServices.push(e),this.Debug(r.ServiceName,`Disabling logs from ${e}`)}EnableLogsFrom(e){this._blockedServices.any((t=>t==e))&&(this._blockedServices=this._blockedServices.where((t=>t!=e)).toArray()),this.Debug(r.ServiceName,`Enaabling logs from ${e}`)}get LogLevel(){return this._logLevel}set LogLevel(e){this._logLevel=e}GetServiceName(){return r.ServiceName}GetTimeStamp(){const e=new Date;return`${e.getHours()}:${e.getMinutes()}:${e.getSeconds()}.${e.getMilliseconds()} | `}Warning(t,n){switch(this._logLevel){case e.Warning:case e.Info:case e.Debug:break;case e.None:default:return}void 0===t||this.IsBlocked(t)||null!=t&&(null==n?console.warn(`${this.GetTimeStamp()}[WARN] ${t}`):console.warn(`${this.GetTimeStamp()}[WARN] [${t}] ${n}`))}Error(t,n){switch(this._logLevel){case e.Warning:case e.Info:case e.Debug:case e.Error:break;case e.None:default:return}null!=t&&(null==n?console.error(`${this.GetTimeStamp()}[ERROR] ${t}`):console.error(`${this.GetTimeStamp()}[ERROR] [${t}] ${n}`))}Info(t,n){switch(this._logLevel){case e.Info:case e.Debug:break;case e.None:default:return}void 0===t||this.IsBlocked(t)||null!=t&&(null==n?console.info(`${this.GetTimeStamp()}[INFO] ${t}`):console.info(`${this.GetTimeStamp()}[INFO] [${t}] ${n}`))}Debug(t,n){switch(this._logLevel){case e.Debug:break;case e.None:default:return}void 0===t||this.IsBlocked(t)||null!=t&&(null==n?console.debug(`${this.GetTimeStamp()}[DEBUG] ${t}`):r.DoesThrowStackTrace||!0===window.stacktrace?console.debug(`${this.GetTimeStamp()}[DEBUG] [${t}] ${n} \nstack:\n${(new Error).stack}}`):console.debug(`${this.GetTimeStamp()}[DEBUG] [${t}] ${n}`))}Log(t,n){this._logLevel!==e.None&&(void 0===t||this.IsBlocked(t)||null!=t&&(null==n?console.log(`${this.GetTimeStamp()}[LOG] ${t}`):console.log(`${this.GetTimeStamp()}[LOG] [${t}] ${n}`)))}}r.ServiceName="LoggerService",r.DoesThrowStackTrace=!1;class o{constructor(){this._services={},this._serviceRegistrationEvent=new n}static get Instance(){return null!=o._instance||(o._instance=new o,this.Log=new r,this.Log.Warning("Initializing DependencyContainer"),o._instance.RegisterService(this.Log),this.IsInitialized=!0,window.services=this),o._instance}RegisterService(e){var t;null===(t=o.Log)||void 0===t||t.Debug("DependencyContainer",`Registering new service: ${e.GetServiceName()}`),this._services[e.GetServiceName()]=e,this._serviceRegistrationEvent.Invoke(e)}GetService(e){var t;return null===(t=o.Log)||void 0===t||t.Debug("DependencyContainer",`Getting service [${e}] by GetService<T>()`),this._services[e]}GetServiceAsync(e,t){var n,r;return null===(n=o.Log)||void 0===n||n.Debug("DependencyContainer",`Waiting for service availability [${e}] by GetServiceAsync<T>()`),this._services.hasOwnProperty(e)?(null===(r=o.Log)||void 0===r||r.Debug("DependencyContainer",`Got service [${e}] by GetServiceAsync<T>()`),Promise.resolve(this._services[e])):new Promise(((n,r)=>{var s=t=>{var r;(null==t?void 0:t.GetServiceName())===e&&(null===(r=o.Log)||void 0===r||r.Debug("DependencyContainer",`Got service [${e}] by GetServiceAsync<T>()`),this._serviceRegistrationEvent.Unsubscribe(s),n(t))},i=()=>{var n;null===(n=o.Log)||void 0===n||n.Debug("DependencyContainer",`Cancelled service [${e}] retrieval by GetServiceAsync<T>()`),this._serviceRegistrationEvent.Unsubscribe(s),null==t||t.CancellationEvent.Unsubscribe(i),r(new Error("Operation cancelled!"))};null==t||t.CancellationEvent.Subscribe(i),this._serviceRegistrationEvent.Subscribe(s)}))}GetServiceWithTimeoutAsync(e,t){var n,r;return null===(n=o.Log)||void 0===n||n.Debug("DependencyContainer",`Waiting for service[${e}] availability by GetServiceWithTimeoutAsync<T>()`),this._services.hasOwnProperty(e)?(null===(r=o.Log)||void 0===r||r.Debug("DependencyContainer",`Got service [${e}] by GetServiceWithTimeoutAsync<T>()`),Promise.resolve(this._services[e])):new Promise(((n,r)=>{let s=0,i=e=>{var t;(null==e?void 0:e.GetClassName())===e&&(null===(t=o.Log)||void 0===t||t.Debug("DependencyContainer",`Got service [${e}] by GetServiceWithTimeoutAsync<T>()`),window.clearTimeout(s),this._serviceRegistrationEvent.Unsubscribe(i),n(e))};s=window.setTimeout((()=>{var t;window.clearTimeout(s),this._serviceRegistrationEvent.Unsubscribe(i),null===(t=o.Log)||void 0===t||t.Error("DependencyContainer",`Failed to get service [${e}] in time by GetServiceWithTimeoutAsync<T>()`),r(new Error("Operation cancelled!"))}),t),this._serviceRegistrationEvent.Subscribe(i)}))}}o.IsInitialized=!1;class s{GetServiceName(){return s.ServiceName}GetResourceName(e,t){return`_exalus_${$v.WorksInContextOf}_${e}_${t}`}Remove(e,t){localStorage.removeItem(this.GetResourceName(e,t))}DropStorage(e){let t=`_exalus_${e}`;for(const e in localStorage)(null==e?void 0:e.startsWith(t))&&localStorage.removeItem(e)}Save(e,t,n){localStorage.setItem(this.GetResourceName(e,t),JSON.stringify(n))}Read(e,t){var n;try{let n=this.GetResourceName(e,t),r=localStorage.getItem(n);return null==r?null:JSON.parse(r)}catch(r){return null===(n=o.Log)||void 0===n||n.Error(s.ServiceName,`Exception has occurred while reading ${this.GetResourceName(e,t)}`),null}}}s.ServiceName="LocalStorageService";const i=[0,2e3,1e4,3e4,null];class a{constructor(e){this._retryDelays=void 0!==e?[...e,null]:i}nextRetryDelayInMilliseconds(e){return this._retryDelays[e.previousRetryCount]}}class c{}c.Authorization="Authorization",c.Cookie="Cookie";class u{constructor(e,t,n){this.statusCode=e,this.statusText=t,this.content=n}}class l{get(e,t){return this.send({...t,method:"GET",url:e})}post(e,t){return this.send({...t,method:"POST",url:e})}delete(e,t){return this.send({...t,method:"DELETE",url:e})}getCookieString(e){return""}}class d extends l{constructor(e,t){super(),this._innerClient=e,this._accessTokenFactory=t}async send(e){let t=!0;this._accessTokenFactory&&(!this._accessToken||e.url&&e.url.indexOf("/negotiate?")>0)&&(t=!1,this._accessToken=await this._accessTokenFactory()),this._setAuthorizationHeader(e);const n=await this._innerClient.send(e);return t&&401===n.statusCode&&this._accessTokenFactory?(this._accessToken=await this._accessTokenFactory(),this._setAuthorizationHeader(e),await this._innerClient.send(e)):n}_setAuthorizationHeader(e){e.headers||(e.headers={}),this._accessToken?e.headers[c.Authorization]=`Bearer ${this._accessToken}`:this._accessTokenFactory&&e.headers[c.Authorization]&&delete e.headers[c.Authorization]}getCookieString(e){return this._innerClient.getCookieString(e)}}class h extends Error{constructor(e,t){const n=new.target.prototype;super(`${e}: Status code '${t}'`),this.statusCode=t,this.__proto__=n}}class p extends Error{constructor(e="A timeout occurred."){const t=new.target.prototype;super(e),this.__proto__=t}}class g extends Error{constructor(e="An abort occurred."){const t=new.target.prototype;super(e),this.__proto__=t}}class f extends Error{constructor(e,t){const n=new.target.prototype;super(e),this.transport=t,this.errorType="UnsupportedTransportError",this.__proto__=n}}class v extends Error{constructor(e,t){const n=new.target.prototype;super(e),this.transport=t,this.errorType="DisabledTransportError",this.__proto__=n}}class m extends Error{constructor(e,t){const n=new.target.prototype;super(e),this.transport=t,this.errorType="FailedToStartTransportError",this.__proto__=n}}class y extends Error{constructor(e){const t=new.target.prototype;super(e),this.errorType="FailedToNegotiateWithServerError",this.__proto__=t}}class w extends Error{constructor(e,t){const n=new.target.prototype;super(e),this.innerErrors=t,this.__proto__=n}}var S,A,_,C,D;!function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Information=2]="Information",e[e.Warning=3]="Warning",e[e.Error=4]="Error",e[e.Critical=5]="Critical",e[e.None=6]="None"}(S||(S={}));class T{constructor(){}log(e,t){}}T.instance=new T;class k{static isRequired(e,t){if(null==e)throw new Error(`The '${t}' argument is required.`)}static isNotEmpty(e,t){if(!e||e.match(/^\s*$/))throw new Error(`The '${t}' argument should not be empty.`)}static isIn(e,t,n){if(!(e in t))throw new Error(`Unknown ${n} value: ${e}.`)}}class E{static get isBrowser(){return!E.isNode&&"object"==typeof window&&"object"==typeof window.document}static get isWebWorker(){return!E.isNode&&"object"==typeof self&&"importScripts"in self}static get isReactNative(){return!E.isNode&&"object"==typeof window&&void 0===window.document}static get isNode(){return"undefined"!=typeof process&&process.release&&"node"===process.release.name}}function G(e,t){let n="";return N(e)?(n=`Binary data of length ${e.byteLength}`,t&&(n+=`. Content: '${function(e){const t=new Uint8Array(e);let n="";return t.forEach((e=>{n+=`0x${e<16?"0":""}${e.toString(16)} `})),n.substr(0,n.length-1)}(e)}'`)):"string"==typeof e&&(n=`String data of length ${e.length}`,t&&(n+=`. Content: '${e}'`)),n}function N(e){return e&&"undefined"!=typeof ArrayBuffer&&(e instanceof ArrayBuffer||e.constructor&&"ArrayBuffer"===e.constructor.name)}async function b(e,t,n,r,o,s){const i={},[a,c]=P();i[a]=c,e.log(S.Trace,`(${t} transport) sending data. ${G(o,s.logMessageContent)}.`);const u=N(o)?"arraybuffer":"text",l=await n.post(r,{content:o,headers:{...i,...s.headers},responseType:u,timeout:s.timeout,withCredentials:s.withCredentials});e.log(S.Trace,`(${t} transport) request complete. Response status: ${l.statusCode}.`)}class I{constructor(e,t){this._subject=e,this._observer=t}dispose(){const e=this._subject.observers.indexOf(this._observer);e>-1&&this._subject.observers.splice(e,1),0===this._subject.observers.length&&this._subject.cancelCallback&&this._subject.cancelCallback().catch((e=>{}))}}class R{constructor(e){this._minLevel=e,this.out=console}log(e,t){if(e>=this._minLevel){const n=`[${(new Date).toISOString()}] ${S[e]}: ${t}`;switch(e){case S.Critical:case S.Error:this.out.error(n);break;case S.Warning:this.out.warn(n);break;case S.Information:this.out.info(n);break;default:this.out.log(n)}}}}function P(){let e="X-SignalR-User-Agent";return E.isNode&&(e="User-Agent"),[e,O("8.0.7",U(),E.isNode?"NodeJS":"Browser",M())]}function O(e,t,n,r){let o="Microsoft SignalR/";const s=e.split(".");return o+=`${s[0]}.${s[1]}`,o+=` (${e}; `,o+=t&&""!==t?`${t}; `:"Unknown OS; ",o+=`${n}`,o+=r?`; ${r}`:"; Unknown Runtime Version",o+=")",o}function U(){if(!E.isNode)return"";switch(process.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return process.platform}}function M(){if(E.isNode)return process.versions.node}function x(e){return e.stack?e.stack:e.message?e.message:`${e}`}class F extends l{constructor(e){if(super(),this._logger=e,"undefined"==typeof fetch||E.isNode){const e=require;this._jar=new(e("tough-cookie").CookieJar),"undefined"==typeof fetch?this._fetchType=e("node-fetch"):this._fetchType=fetch,this._fetchType=e("fetch-cookie")(this._fetchType,this._jar)}else this._fetchType=fetch.bind(function(){if("undefined"!=typeof globalThis)return globalThis;if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==t.g)return t.g;throw new Error("could not find global")}());if("undefined"==typeof AbortController){const e=require;this._abortControllerType=e("abort-controller")}else this._abortControllerType=AbortController}async send(e){if(e.abortSignal&&e.abortSignal.aborted)throw new g;if(!e.method)throw new Error("No method defined.");if(!e.url)throw new Error("No url defined.");const t=new this._abortControllerType;let n;e.abortSignal&&(e.abortSignal.onabort=()=>{t.abort(),n=new g});let r,o=null;if(e.timeout){const r=e.timeout;o=setTimeout((()=>{t.abort(),this._logger.log(S.Warning,"Timeout from HTTP request."),n=new p}),r)}""===e.content&&(e.content=void 0),e.content&&(e.headers=e.headers||{},N(e.content)?e.headers["Content-Type"]="application/octet-stream":e.headers["Content-Type"]="text/plain;charset=UTF-8");try{r=await this._fetchType(e.url,{body:e.content,cache:"no-cache",credentials:!0===e.withCredentials?"include":"same-origin",headers:{"X-Requested-With":"XMLHttpRequest",...e.headers},method:e.method,mode:"cors",redirect:"follow",signal:t.signal})}catch(e){if(n)throw n;throw this._logger.log(S.Warning,`Error from HTTP request. ${e}.`),e}finally{o&&clearTimeout(o),e.abortSignal&&(e.abortSignal.onabort=null)}if(!r.ok){const e=await L(r,"text");throw new h(e||r.statusText,r.status)}const s=L(r,e.responseType),i=await s;return new u(r.status,r.statusText,i)}getCookieString(e){let t="";return E.isNode&&this._jar&&this._jar.getCookies(e,((e,n)=>t=n.join("; "))),t}}function L(e,t){let n;switch(t){case"arraybuffer":n=e.arrayBuffer();break;case"text":default:n=e.text();break;case"blob":case"document":case"json":throw new Error(`${t} is not supported.`)}return n}class B extends l{constructor(e){super(),this._logger=e}send(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new g):e.method?e.url?new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),r.withCredentials=void 0===e.withCredentials||e.withCredentials,r.setRequestHeader("X-Requested-With","XMLHttpRequest"),""===e.content&&(e.content=void 0),e.content&&(N(e.content)?r.setRequestHeader("Content-Type","application/octet-stream"):r.setRequestHeader("Content-Type","text/plain;charset=UTF-8"));const o=e.headers;o&&Object.keys(o).forEach((e=>{r.setRequestHeader(e,o[e])})),e.responseType&&(r.responseType=e.responseType),e.abortSignal&&(e.abortSignal.onabort=()=>{r.abort(),n(new g)}),e.timeout&&(r.timeout=e.timeout),r.onload=()=>{e.abortSignal&&(e.abortSignal.onabort=null),r.status>=200&&r.status<300?t(new u(r.status,r.statusText,r.response||r.responseText)):n(new h(r.response||r.responseText||r.statusText,r.status))},r.onerror=()=>{this._logger.log(S.Warning,`Error from HTTP request. ${r.status}: ${r.statusText}.`),n(new h(r.statusText,r.status))},r.ontimeout=()=>{this._logger.log(S.Warning,"Timeout from HTTP request."),n(new p)},r.send(e.content)})):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}}class W extends l{constructor(e){if(super(),"undefined"!=typeof fetch||E.isNode)this._httpClient=new F(e);else{if("undefined"==typeof XMLHttpRequest)throw new Error("No usable HttpClient found.");this._httpClient=new B(e)}}send(e){return e.abortSignal&&e.abortSignal.aborted?Promise.reject(new g):e.method?e.url?this._httpClient.send(e):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}getCookieString(e){return this._httpClient.getCookieString(e)}}!function(e){e[e.None=0]="None",e[e.WebSockets=1]="WebSockets",e[e.ServerSentEvents=2]="ServerSentEvents",e[e.LongPolling=4]="LongPolling"}(A||(A={})),function(e){e[e.Text=1]="Text",e[e.Binary=2]="Binary"}(_||(_={}));class ${constructor(){this._isAborted=!1,this.onabort=null}abort(){this._isAborted||(this._isAborted=!0,this.onabort&&this.onabort())}get signal(){return this}get aborted(){return this._isAborted}}class q{get pollAborted(){return this._pollAbort.aborted}constructor(e,t,n){this._httpClient=e,this._logger=t,this._pollAbort=new $,this._options=n,this._running=!1,this.onreceive=null,this.onclose=null}async connect(e,t){if(k.isRequired(e,"url"),k.isRequired(t,"transferFormat"),k.isIn(t,_,"transferFormat"),this._url=e,this._logger.log(S.Trace,"(LongPolling transport) Connecting."),t===_.Binary&&"undefined"!=typeof XMLHttpRequest&&"string"!=typeof(new XMLHttpRequest).responseType)throw new Error("Binary protocols over XmlHttpRequest not implementing advanced features are not supported.");const[n,r]=P(),o={[n]:r,...this._options.headers},s={abortSignal:this._pollAbort.signal,headers:o,timeout:1e5,withCredentials:this._options.withCredentials};t===_.Binary&&(s.responseType="arraybuffer");const i=`${e}&_=${Date.now()}`;this._logger.log(S.Trace,`(LongPolling transport) polling: ${i}.`);const a=await this._httpClient.get(i,s);200!==a.statusCode?(this._logger.log(S.Error,`(LongPolling transport) Unexpected response code: ${a.statusCode}.`),this._closeError=new h(a.statusText||"",a.statusCode),this._running=!1):this._running=!0,this._receiving=this._poll(this._url,s)}async _poll(e,t){try{for(;this._running;)try{const n=`${e}&_=${Date.now()}`;this._logger.log(S.Trace,`(LongPolling transport) polling: ${n}.`);const r=await this._httpClient.get(n,t);204===r.statusCode?(this._logger.log(S.Information,"(LongPolling transport) Poll terminated by server."),this._running=!1):200!==r.statusCode?(this._logger.log(S.Error,`(LongPolling transport) Unexpected response code: ${r.statusCode}.`),this._closeError=new h(r.statusText||"",r.statusCode),this._running=!1):r.content?(this._logger.log(S.Trace,`(LongPolling transport) data received. ${G(r.content,this._options.logMessageContent)}.`),this.onreceive&&this.onreceive(r.content)):this._logger.log(S.Trace,"(LongPolling transport) Poll timed out, reissuing.")}catch(e){this._running?e instanceof p?this._logger.log(S.Trace,"(LongPolling transport) Poll timed out, reissuing."):(this._closeError=e,this._running=!1):this._logger.log(S.Trace,`(LongPolling transport) Poll errored after shutdown: ${e.message}`)}}finally{this._logger.log(S.Trace,"(LongPolling transport) Polling complete."),this.pollAborted||this._raiseOnClose()}}async send(e){return this._running?b(this._logger,"LongPolling",this._httpClient,this._url,e,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))}async stop(){this._logger.log(S.Trace,"(LongPolling transport) Stopping polling."),this._running=!1,this._pollAbort.abort();try{await this._receiving,this._logger.log(S.Trace,`(LongPolling transport) sending DELETE request to ${this._url}.`);const e={},[t,n]=P();e[t]=n;const r={headers:{...e,...this._options.headers},timeout:this._options.timeout,withCredentials:this._options.withCredentials};let o;try{await this._httpClient.delete(this._url,r)}catch(e){o=e}o?o instanceof h&&(404===o.statusCode?this._logger.log(S.Trace,"(LongPolling transport) A 404 response was returned from sending a DELETE request."):this._logger.log(S.Trace,`(LongPolling transport) Error sending a DELETE request: ${o}`)):this._logger.log(S.Trace,"(LongPolling transport) DELETE request accepted.")}finally{this._logger.log(S.Trace,"(LongPolling transport) Stop finished."),this._raiseOnClose()}}_raiseOnClose(){if(this.onclose){let e="(LongPolling transport) Firing onclose event.";this._closeError&&(e+=" Error: "+this._closeError),this._logger.log(S.Trace,e),this.onclose(this._closeError)}}}class V{constructor(e,t,n,r){this._httpClient=e,this._accessToken=t,this._logger=n,this._options=r,this.onreceive=null,this.onclose=null}async connect(e,t){return k.isRequired(e,"url"),k.isRequired(t,"transferFormat"),k.isIn(t,_,"transferFormat"),this._logger.log(S.Trace,"(SSE transport) Connecting."),this._url=e,this._accessToken&&(e+=(e.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(this._accessToken)}`),new Promise(((n,r)=>{let o,s=!1;if(t===_.Text){if(E.isBrowser||E.isWebWorker)o=new this._options.EventSource(e,{withCredentials:this._options.withCredentials});else{const t=this._httpClient.getCookieString(e),n={};n.Cookie=t;const[r,s]=P();n[r]=s,o=new this._options.EventSource(e,{withCredentials:this._options.withCredentials,headers:{...n,...this._options.headers}})}try{o.onmessage=e=>{if(this.onreceive)try{this._logger.log(S.Trace,`(SSE transport) data received. ${G(e.data,this._options.logMessageContent)}.`),this.onreceive(e.data)}catch(e){return void this._close(e)}},o.onerror=e=>{s?this._close():r(new Error("EventSource failed to connect. The connection could not be found on the server, either the connection ID is not present on the server, or a proxy is refusing/buffering the connection. If you have multiple servers check that sticky sessions are enabled."))},o.onopen=()=>{this._logger.log(S.Information,`SSE connected to ${this._url}`),this._eventSource=o,s=!0,n()}}catch(e){return void r(e)}}else r(new Error("The Server-Sent Events transport only supports the 'Text' transfer format"))}))}async send(e){return this._eventSource?b(this._logger,"SSE",this._httpClient,this._url,e,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))}stop(){return this._close(),Promise.resolve()}_close(e){this._eventSource&&(this._eventSource.close(),this._eventSource=void 0,this.onclose&&this.onclose(e))}}class H{constructor(e,t,n,r,o,s){this._logger=n,this._accessTokenFactory=t,this._logMessageContent=r,this._webSocketConstructor=o,this._httpClient=e,this.onreceive=null,this.onclose=null,this._headers=s}async connect(e,t){let n;return k.isRequired(e,"url"),k.isRequired(t,"transferFormat"),k.isIn(t,_,"transferFormat"),this._logger.log(S.Trace,"(WebSockets transport) Connecting."),this._accessTokenFactory&&(n=await this._accessTokenFactory()),new Promise(((r,o)=>{let s;e=e.replace(/^http/,"ws");const i=this._httpClient.getCookieString(e);let a=!1;if(E.isNode||E.isReactNative){const t={},[r,o]=P();t[r]=o,n&&(t[c.Authorization]=`Bearer ${n}`),i&&(t[c.Cookie]=i),s=new this._webSocketConstructor(e,void 0,{headers:{...t,...this._headers}})}else n&&(e+=(e.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(n)}`);s||(s=new this._webSocketConstructor(e)),t===_.Binary&&(s.binaryType="arraybuffer"),s.onopen=t=>{this._logger.log(S.Information,`WebSocket connected to ${e}.`),this._webSocket=s,a=!0,r()},s.onerror=e=>{let t=null;t="undefined"!=typeof ErrorEvent&&e instanceof ErrorEvent?e.error:"There was an error with the transport",this._logger.log(S.Information,`(WebSockets transport) ${t}.`)},s.onmessage=e=>{if(this._logger.log(S.Trace,`(WebSockets transport) data received. ${G(e.data,this._logMessageContent)}.`),this.onreceive)try{this.onreceive(e.data)}catch(e){return void this._close(e)}},s.onclose=e=>{if(a)this._close(e);else{let t=null;t="undefined"!=typeof ErrorEvent&&e instanceof ErrorEvent?e.error:"WebSocket failed to connect. The connection could not be found on the server, either the endpoint may not be a SignalR endpoint, the connection ID is not present on the server, or there is a proxy blocking WebSockets. If you have multiple servers check that sticky sessions are enabled.",o(new Error(t))}}}))}send(e){return this._webSocket&&this._webSocket.readyState===this._webSocketConstructor.OPEN?(this._logger.log(S.Trace,`(WebSockets transport) sending data. ${G(e,this._logMessageContent)}.`),this._webSocket.send(e),Promise.resolve()):Promise.reject("WebSocket is not in the OPEN state")}stop(){return this._webSocket&&this._close(void 0),Promise.resolve()}_close(e){this._webSocket&&(this._webSocket.onclose=()=>{},this._webSocket.onmessage=()=>{},this._webSocket.onerror=()=>{},this._webSocket.close(),this._webSocket=void 0),this._logger.log(S.Trace,"(WebSockets transport) socket closed."),this.onclose&&(!this._isCloseEvent(e)||!1!==e.wasClean&&1e3===e.code?e instanceof Error?this.onclose(e):this.onclose():this.onclose(new Error(`WebSocket closed with status code: ${e.code} (${e.reason||"no reason given"}).`)))}_isCloseEvent(e){return e&&"boolean"==typeof e.wasClean&&"number"==typeof e.code}}class K{constructor(e,t={}){var n;if(this._stopPromiseResolver=()=>{},this.features={},this._negotiateVersion=1,k.isRequired(e,"url"),this._logger=void 0===(n=t.logger)?new R(S.Information):null===n?T.instance:void 0!==n.log?n:new R(n),this.baseUrl=this._resolveUrl(e),(t=t||{}).logMessageContent=void 0!==t.logMessageContent&&t.logMessageContent,"boolean"!=typeof t.withCredentials&&void 0!==t.withCredentials)throw new Error("withCredentials option was not a 'boolean' or 'undefined' value");t.withCredentials=void 0===t.withCredentials||t.withCredentials,t.timeout=void 0===t.timeout?1e5:t.timeout;let r=null,o=null;if(E.isNode){const e=require;r=e("ws"),o=e("eventsource")}E.isNode||"undefined"==typeof WebSocket||t.WebSocket?E.isNode&&!t.WebSocket&&r&&(t.WebSocket=r):t.WebSocket=WebSocket,E.isNode||"undefined"==typeof EventSource||t.EventSource?E.isNode&&!t.EventSource&&void 0!==o&&(t.EventSource=o):t.EventSource=EventSource,this._httpClient=new d(t.httpClient||new W(this._logger),t.accessTokenFactory),this._connectionState="Disconnected",this._connectionStarted=!1,this._options=t,this.onreceive=null,this.onclose=null}async start(e){if(e=e||_.Binary,k.isIn(e,_,"transferFormat"),this._logger.log(S.Debug,`Starting connection with transfer format '${_[e]}'.`),"Disconnected"!==this._connectionState)return Promise.reject(new Error("Cannot start an HttpConnection that is not in the 'Disconnected' state."));if(this._connectionState="Connecting",this._startInternalPromise=this._startInternal(e),await this._startInternalPromise,"Disconnecting"===this._connectionState){const e="Failed to start the HttpConnection before stop() was called.";return this._logger.log(S.Error,e),await this._stopPromise,Promise.reject(new g(e))}if("Connected"!==this._connectionState){const e="HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!";return this._logger.log(S.Error,e),Promise.reject(new g(e))}this._connectionStarted=!0}send(e){return"Connected"!==this._connectionState?Promise.reject(new Error("Cannot send data if the connection is not in the 'Connected' State.")):(this._sendQueue||(this._sendQueue=new j(this.transport)),this._sendQueue.send(e))}async stop(e){return"Disconnected"===this._connectionState?(this._logger.log(S.Debug,`Call to HttpConnection.stop(${e}) ignored because the connection is already in the disconnected state.`),Promise.resolve()):"Disconnecting"===this._connectionState?(this._logger.log(S.Debug,`Call to HttpConnection.stop(${e}) ignored because the connection is already in the disconnecting state.`),this._stopPromise):(this._connectionState="Disconnecting",this._stopPromise=new Promise((e=>{this._stopPromiseResolver=e})),await this._stopInternal(e),void await this._stopPromise)}async _stopInternal(e){this._stopError=e;try{await this._startInternalPromise}catch(e){}if(this.transport){try{await this.transport.stop()}catch(e){this._logger.log(S.Error,`HttpConnection.transport.stop() threw error '${e}'.`),this._stopConnection()}this.transport=void 0}else this._logger.log(S.Debug,"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.")}async _startInternal(e){let t=this.baseUrl;this._accessTokenFactory=this._options.accessTokenFactory,this._httpClient._accessTokenFactory=this._accessTokenFactory;try{if(this._options.skipNegotiation){if(this._options.transport!==A.WebSockets)throw new Error("Negotiation can only be skipped when using the WebSocket transport directly.");this.transport=this._constructTransport(A.WebSockets),await this._startTransport(t,e)}else{let n=null,r=0;do{if(n=await this._getNegotiationResponse(t),"Disconnecting"===this._connectionState||"Disconnected"===this._connectionState)throw new g("The connection was stopped during negotiation.");if(n.error)throw new Error(n.error);if(n.ProtocolVersion)throw new Error("Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.");if(n.url&&(t=n.url),n.accessToken){const e=n.accessToken;this._accessTokenFactory=()=>e,this._httpClient._accessToken=e,this._httpClient._accessTokenFactory=void 0}r++}while(n.url&&r<100);if(100===r&&n.url)throw new Error("Negotiate redirection limit exceeded.");await this._createTransport(t,this._options.transport,n,e)}this.transport instanceof q&&(this.features.inherentKeepAlive=!0),"Connecting"===this._connectionState&&(this._logger.log(S.Debug,"The HttpConnection connected successfully."),this._connectionState="Connected")}catch(e){return this._logger.log(S.Error,"Failed to start the connection: "+e),this._connectionState="Disconnected",this.transport=void 0,this._stopPromiseResolver(),Promise.reject(e)}}async _getNegotiationResponse(e){const t={},[n,r]=P();t[n]=r;const o=this._resolveNegotiateUrl(e);this._logger.log(S.Debug,`Sending negotiation request: ${o}.`);try{const e=await this._httpClient.post(o,{content:"",headers:{...t,...this._options.headers},timeout:this._options.timeout,withCredentials:this._options.withCredentials});if(200!==e.statusCode)return Promise.reject(new Error(`Unexpected status code returned from negotiate '${e.statusCode}'`));const n=JSON.parse(e.content);return(!n.negotiateVersion||n.negotiateVersion<1)&&(n.connectionToken=n.connectionId),n.useStatefulReconnect&&!0!==this._options._useStatefulReconnect?Promise.reject(new y("Client didn't negotiate Stateful Reconnect but the server did.")):n}catch(e){let t="Failed to complete negotiation with the server: "+e;return e instanceof h&&404===e.statusCode&&(t+=" Either this is not a SignalR endpoint or there is a proxy blocking the connection."),this._logger.log(S.Error,t),Promise.reject(new y(t))}}_createConnectUrl(e,t){return t?e+(-1===e.indexOf("?")?"?":"&")+`id=${t}`:e}async _createTransport(e,t,n,r){let o=this._createConnectUrl(e,n.connectionToken);if(this._isITransport(t))return this._logger.log(S.Debug,"Connection was provided an instance of ITransport, using that directly."),this.transport=t,await this._startTransport(o,r),void(this.connectionId=n.connectionId);const s=[],i=n.availableTransports||[];let a=n;for(const n of i){const i=this._resolveTransportOrError(n,t,r,!0===(null==a?void 0:a.useStatefulReconnect));if(i instanceof Error)s.push(`${n.transport} failed:`),s.push(i);else if(this._isITransport(i)){if(this.transport=i,!a){try{a=await this._getNegotiationResponse(e)}catch(e){return Promise.reject(e)}o=this._createConnectUrl(e,a.connectionToken)}try{return await this._startTransport(o,r),void(this.connectionId=a.connectionId)}catch(e){if(this._logger.log(S.Error,`Failed to start the transport '${n.transport}': ${e}`),a=void 0,s.push(new m(`${n.transport} failed: ${e}`,A[n.transport])),"Connecting"!==this._connectionState){const e="Failed to select transport before stop() was called.";return this._logger.log(S.Debug,e),Promise.reject(new g(e))}}}}return s.length>0?Promise.reject(new w(`Unable to connect to the server with any of the available transports. ${s.join(" ")}`,s)):Promise.reject(new Error("None of the transports supported by the client are supported by the server."))}_constructTransport(e){switch(e){case A.WebSockets:if(!this._options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new H(this._httpClient,this._accessTokenFactory,this._logger,this._options.logMessageContent,this._options.WebSocket,this._options.headers||{});case A.ServerSentEvents:if(!this._options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new V(this._httpClient,this._httpClient._accessToken,this._logger,this._options);case A.LongPolling:return new q(this._httpClient,this._logger,this._options);default:throw new Error(`Unknown transport: ${e}.`)}}_startTransport(e,t){return this.transport.onreceive=this.onreceive,this.features.reconnect?this.transport.onclose=async n=>{let r=!1;if(this.features.reconnect){try{this.features.disconnected(),await this.transport.connect(e,t),await this.features.resend()}catch{r=!0}r&&this._stopConnection(n)}else this._stopConnection(n)}:this.transport.onclose=e=>this._stopConnection(e),this.transport.connect(e,t)}_resolveTransportOrError(e,t,n,r){const o=A[e.transport];if(null==o)return this._logger.log(S.Debug,`Skipping transport '${e.transport}' because it is not supported by this client.`),new Error(`Skipping transport '${e.transport}' because it is not supported by this client.`);if(!function(e,t){return!e||!!(t&e)}(t,o))return this._logger.log(S.Debug,`Skipping transport '${A[o]}' because it was disabled by the client.`),new v(`'${A[o]}' is disabled by the client.`,o);if(!(e.transferFormats.map((e=>_[e])).indexOf(n)>=0))return this._logger.log(S.Debug,`Skipping transport '${A[o]}' because it does not support the requested transfer format '${_[n]}'.`),new Error(`'${A[o]}' does not support ${_[n]}.`);if(o===A.WebSockets&&!this._options.WebSocket||o===A.ServerSentEvents&&!this._options.EventSource)return this._logger.log(S.Debug,`Skipping transport '${A[o]}' because it is not supported in your environment.'`),new f(`'${A[o]}' is not supported in your environment.`,o);this._logger.log(S.Debug,`Selecting transport '${A[o]}'.`);try{return this.features.reconnect=o===A.WebSockets?r:void 0,this._constructTransport(o)}catch(e){return e}}_isITransport(e){return e&&"object"==typeof e&&"connect"in e}_stopConnection(e){if(this._logger.log(S.Debug,`HttpConnection.stopConnection(${e}) called while in state ${this._connectionState}.`),this.transport=void 0,e=this._stopError||e,this._stopError=void 0,"Disconnected"!==this._connectionState){if("Connecting"===this._connectionState)throw this._logger.log(S.Warning,`Call to HttpConnection.stopConnection(${e}) was ignored because the connection is still in the connecting state.`),new Error(`HttpConnection.stopConnection(${e}) was called while the connection is still in the connecting state.`);if("Disconnecting"===this._connectionState&&this._stopPromiseResolver(),e?this._logger.log(S.Error,`Connection disconnected with error '${e}'.`):this._logger.log(S.Information,"Connection disconnected."),this._sendQueue&&(this._sendQueue.stop().catch((e=>{this._logger.log(S.Error,`TransportSendQueue.stop() threw error '${e}'.`)})),this._sendQueue=void 0),this.connectionId=void 0,this._connectionState="Disconnected",this._connectionStarted){this._connectionStarted=!1;try{this.onclose&&this.onclose(e)}catch(t){this._logger.log(S.Error,`HttpConnection.onclose(${e}) threw error '${t}'.`)}}}else this._logger.log(S.Debug,`Call to HttpConnection.stopConnection(${e}) was ignored because the connection is already in the disconnected state.`)}_resolveUrl(e){if(0===e.lastIndexOf("https://",0)||0===e.lastIndexOf("http://",0))return e;if(!E.isBrowser)throw new Error(`Cannot resolve '${e}'.`);const t=window.document.createElement("a");return t.href=e,this._logger.log(S.Information,`Normalizing '${e}' to '${t.href}'.`),t.href}_resolveNegotiateUrl(e){const t=new URL(e);t.pathname.endsWith("/")?t.pathname+="negotiate":t.pathname+="/negotiate";const n=new URLSearchParams(t.searchParams);return n.has("negotiateVersion")||n.append("negotiateVersion",this._negotiateVersion.toString()),n.has("useStatefulReconnect")?"true"===n.get("useStatefulReconnect")&&(this._options._useStatefulReconnect=!0):!0===this._options._useStatefulReconnect&&n.append("useStatefulReconnect","true"),t.search=n.toString(),t.toString()}}class j{constructor(e){this._transport=e,this._buffer=[],this._executing=!0,this._sendBufferedData=new z,this._transportResult=new z,this._sendLoopPromise=this._sendLoop()}send(e){return this._bufferData(e),this._transportResult||(this._transportResult=new z),this._transportResult.promise}stop(){return this._executing=!1,this._sendBufferedData.resolve(),this._sendLoopPromise}_bufferData(e){if(this._buffer.length&&typeof this._buffer[0]!=typeof e)throw new Error(`Expected data to be of type ${typeof this._buffer} but was of type ${typeof e}`);this._buffer.push(e),this._sendBufferedData.resolve()}async _sendLoop(){for(;;){if(await this._sendBufferedData.promise,!this._executing){this._transportResult&&this._transportResult.reject("Connection stopped.");break}this._sendBufferedData=new z;const e=this._transportResult;this._transportResult=void 0;const t="string"==typeof this._buffer[0]?this._buffer.join(""):j._concatBuffers(this._buffer);this._buffer.length=0;try{await this._transport.send(t),e.resolve()}catch(t){e.reject(t)}}}static _concatBuffers(e){const t=e.map((e=>e.byteLength)).reduce(((e,t)=>e+t)),n=new Uint8Array(t);let r=0;for(const t of e)n.set(new Uint8Array(t),r),r+=t.byteLength;return n.buffer}}class z{constructor(){this.promise=new Promise(((e,t)=>[this._resolver,this._rejecter]=[e,t]))}resolve(){this._resolver()}reject(e){this._rejecter(e)}}class J{static write(e){return`${e}${J.RecordSeparator}`}static parse(e){if(e[e.length-1]!==J.RecordSeparator)throw new Error("Message is incomplete.");const t=e.split(J.RecordSeparator);return t.pop(),t}}J.RecordSeparatorCode=30,J.RecordSeparator=String.fromCharCode(J.RecordSeparatorCode);class X{writeHandshakeRequest(e){return J.write(JSON.stringify(e))}parseHandshakeResponse(e){let t,n;if(N(e)){const r=new Uint8Array(e),o=r.indexOf(J.RecordSeparatorCode);if(-1===o)throw new Error("Message is incomplete.");const s=o+1;t=String.fromCharCode.apply(null,Array.prototype.slice.call(r.slice(0,s))),n=r.byteLength>s?r.slice(s).buffer:null}else{const r=e,o=r.indexOf(J.RecordSeparator);if(-1===o)throw new Error("Message is incomplete.");const s=o+1;t=r.substring(0,s),n=r.length>s?r.substring(s):null}const r=J.parse(t),o=JSON.parse(r[0]);if(o.type)throw new Error("Expected a handshake response from the server.");return[n,o]}}!function(e){e[e.Invocation=1]="Invocation",e[e.StreamItem=2]="StreamItem",e[e.Completion=3]="Completion",e[e.StreamInvocation=4]="StreamInvocation",e[e.CancelInvocation=5]="CancelInvocation",e[e.Ping=6]="Ping",e[e.Close=7]="Close",e[e.Ack=8]="Ack",e[e.Sequence=9]="Sequence"}(C||(C={}));class Y{constructor(){this.observers=[]}next(e){for(const t of this.observers)t.next(e)}error(e){for(const t of this.observers)t.error&&t.error(e)}complete(){for(const e of this.observers)e.complete&&e.complete()}subscribe(e){return this.observers.push(e),new I(this,e)}}class Q{constructor(e,t,n){this._bufferSize=1e5,this._messages=[],this._totalMessageCount=0,this._waitForSequenceMessage=!1,this._nextReceivingSequenceId=1,this._latestReceivedSequenceId=0,this._bufferedByteCount=0,this._reconnectInProgress=!1,this._protocol=e,this._connection=t,this._bufferSize=n}async _send(e){const t=this._protocol.writeMessage(e);let n=Promise.resolve();if(this._isInvocationMessage(e)){this._totalMessageCount++;let e=()=>{},r=()=>{};N(t)?this._bufferedByteCount+=t.byteLength:this._bufferedByteCount+=t.length,this._bufferedByteCount>=this._bufferSize&&(n=new Promise(((t,n)=>{e=t,r=n}))),this._messages.push(new Z(t,this._totalMessageCount,e,r))}try{this._reconnectInProgress||await this._connection.send(t)}catch{this._disconnected()}await n}_ack(e){let t=-1;for(let n=0;n<this._messages.length;n++){const r=this._messages[n];if(r._id<=e.sequenceId)t=n,N(r._message)?this._bufferedByteCount-=r._message.byteLength:this._bufferedByteCount-=r._message.length,r._resolver();else{if(!(this._bufferedByteCount<this._bufferSize))break;r._resolver()}}-1!==t&&(this._messages=this._messages.slice(t+1))}_shouldProcessMessage(e){if(this._waitForSequenceMessage)return e.type===C.Sequence&&(this._waitForSequenceMessage=!1,!0);if(!this._isInvocationMessage(e))return!0;const t=this._nextReceivingSequenceId;return this._nextReceivingSequenceId++,t<=this._latestReceivedSequenceId?(t===this._latestReceivedSequenceId&&this._ackTimer(),!1):(this._latestReceivedSequenceId=t,this._ackTimer(),!0)}_resetSequence(e){e.sequenceId>this._nextReceivingSequenceId?this._connection.stop(new Error("Sequence ID greater than amount of messages we've received.")):this._nextReceivingSequenceId=e.sequenceId}_disconnected(){this._reconnectInProgress=!0,this._waitForSequenceMessage=!0}async _resend(){const e=0!==this._messages.length?this._messages[0]._id:this._totalMessageCount+1;await this._connection.send(this._protocol.writeMessage({type:C.Sequence,sequenceId:e}));const t=this._messages;for(const e of t)await this._connection.send(e._message);this._reconnectInProgress=!1}_dispose(e){null!=e||(e=new Error("Unable to reconnect to server."));for(const t of this._messages)t._rejector(e)}_isInvocationMessage(e){switch(e.type){case C.Invocation:case C.StreamItem:case C.Completion:case C.StreamInvocation:case C.CancelInvocation:return!0;case C.Close:case C.Sequence:case C.Ping:case C.Ack:return!1}}_ackTimer(){void 0===this._ackTimerHandle&&(this._ackTimerHandle=setTimeout((async()=>{try{this._reconnectInProgress||await this._connection.send(this._protocol.writeMessage({type:C.Ack,sequenceId:this._latestReceivedSequenceId}))}catch{}clearTimeout(this._ackTimerHandle),this._ackTimerHandle=void 0}),1e3))}}class Z{constructor(e,t,n,r){this._message=e,this._id=t,this._resolver=n,this._rejector=r}}!function(e){e.Disconnected="Disconnected",e.Connecting="Connecting",e.Connected="Connected",e.Disconnecting="Disconnecting",e.Reconnecting="Reconnecting"}(D||(D={}));class ee{static create(e,t,n,r,o,s,i){return new ee(e,t,n,r,o,s,i)}constructor(e,t,n,r,o,s,i){this._nextKeepAlive=0,this._freezeEventListener=()=>{this._logger.log(S.Warning,"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://learn.microsoft.com/aspnet/core/signalr/javascript-client#bsleep")},k.isRequired(e,"connection"),k.isRequired(t,"logger"),k.isRequired(n,"protocol"),this.serverTimeoutInMilliseconds=null!=o?o:3e4,this.keepAliveIntervalInMilliseconds=null!=s?s:15e3,this._statefulReconnectBufferSize=null!=i?i:1e5,this._logger=t,this._protocol=n,this.connection=e,this._reconnectPolicy=r,this._handshakeProtocol=new X,this.connection.onreceive=e=>this._processIncomingData(e),this.connection.onclose=e=>this._connectionClosed(e),this._callbacks={},this._methods={},this._closedCallbacks=[],this._reconnectingCallbacks=[],this._reconnectedCallbacks=[],this._invocationId=0,this._receivedHandshakeResponse=!1,this._connectionState=D.Disconnected,this._connectionStarted=!1,this._cachedPingMessage=this._protocol.writeMessage({type:C.Ping})}get state(){return this._connectionState}get connectionId(){return this.connection&&this.connection.connectionId||null}get baseUrl(){return this.connection.baseUrl||""}set baseUrl(e){if(this._connectionState!==D.Disconnected&&this._connectionState!==D.Reconnecting)throw new Error("The HubConnection must be in the Disconnected or Reconnecting state to change the url.");if(!e)throw new Error("The HubConnection url must be a valid url.");this.connection.baseUrl=e}start(){return this._startPromise=this._startWithStateTransitions(),this._startPromise}async _startWithStateTransitions(){if(this._connectionState!==D.Disconnected)return Promise.reject(new Error("Cannot start a HubConnection that is not in the 'Disconnected' state."));this._connectionState=D.Connecting,this._logger.log(S.Debug,"Starting HubConnection.");try{await this._startInternal(),E.isBrowser&&window.document.addEventListener("freeze",this._freezeEventListener),this._connectionState=D.Connected,this._connectionStarted=!0,this._logger.log(S.Debug,"HubConnection connected successfully.")}catch(e){return this._connectionState=D.Disconnected,this._logger.log(S.Debug,`HubConnection failed to start successfully because of error '${e}'.`),Promise.reject(e)}}async _startInternal(){this._stopDuringStartError=void 0,this._receivedHandshakeResponse=!1;const e=new Promise(((e,t)=>{this._handshakeResolver=e,this._handshakeRejecter=t}));await this.connection.start(this._protocol.transferFormat);try{let t=this._protocol.version;this.connection.features.reconnect||(t=1);const n={protocol:this._protocol.name,version:t};if(this._logger.log(S.Debug,"Sending handshake request."),await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(n)),this._logger.log(S.Information,`Using HubProtocol '${this._protocol.name}'.`),this._cleanupTimeout(),this._resetTimeoutPeriod(),this._resetKeepAliveInterval(),await e,this._stopDuringStartError)throw this._stopDuringStartError;!!this.connection.features.reconnect&&(this._messageBuffer=new Q(this._protocol,this.connection,this._statefulReconnectBufferSize),this.connection.features.disconnected=this._messageBuffer._disconnected.bind(this._messageBuffer),this.connection.features.resend=()=>{if(this._messageBuffer)return this._messageBuffer._resend()}),this.connection.features.inherentKeepAlive||await this._sendMessage(this._cachedPingMessage)}catch(e){throw this._logger.log(S.Debug,`Hub handshake failed with error '${e}' during start(). Stopping HubConnection.`),this._cleanupTimeout(),this._cleanupPingTimer(),await this.connection.stop(e),e}}async stop(){const e=this._startPromise;this.connection.features.reconnect=!1,this._stopPromise=this._stopInternal(),await this._stopPromise;try{await e}catch(e){}}_stopInternal(e){if(this._connectionState===D.Disconnected)return this._logger.log(S.Debug,`Call to HubConnection.stop(${e}) ignored because it is already in the disconnected state.`),Promise.resolve();if(this._connectionState===D.Disconnecting)return this._logger.log(S.Debug,`Call to HttpConnection.stop(${e}) ignored because the connection is already in the disconnecting state.`),this._stopPromise;const t=this._connectionState;return this._connectionState=D.Disconnecting,this._logger.log(S.Debug,"Stopping HubConnection."),this._reconnectDelayHandle?(this._logger.log(S.Debug,"Connection stopped during reconnect delay. Done reconnecting."),clearTimeout(this._reconnectDelayHandle),this._reconnectDelayHandle=void 0,this._completeClose(),Promise.resolve()):(t===D.Connected&&this._sendCloseMessage(),this._cleanupTimeout(),this._cleanupPingTimer(),this._stopDuringStartError=e||new g("The connection was stopped before the hub handshake could complete."),this.connection.stop(e))}async _sendCloseMessage(){try{await this._sendWithProtocol(this._createCloseMessage())}catch{}}stream(e,...t){const[n,r]=this._replaceStreamingParams(t),o=this._createStreamInvocation(e,t,r);let s;const i=new Y;return i.cancelCallback=()=>{const e=this._createCancelInvocation(o.invocationId);return delete this._callbacks[o.invocationId],s.then((()=>this._sendWithProtocol(e)))},this._callbacks[o.invocationId]=(e,t)=>{t?i.error(t):e&&(e.type===C.Completion?e.error?i.error(new Error(e.error)):i.complete():i.next(e.item))},s=this._sendWithProtocol(o).catch((e=>{i.error(e),delete this._callbacks[o.invocationId]})),this._launchStreams(n,s),i}_sendMessage(e){return this._resetKeepAliveInterval(),this.connection.send(e)}_sendWithProtocol(e){return this._messageBuffer?this._messageBuffer._send(e):this._sendMessage(this._protocol.writeMessage(e))}send(e,...t){const[n,r]=this._replaceStreamingParams(t),o=this._sendWithProtocol(this._createInvocation(e,t,!0,r));return this._launchStreams(n,o),o}invoke(e,...t){const[n,r]=this._replaceStreamingParams(t),o=this._createInvocation(e,t,!1,r);return new Promise(((e,t)=>{this._callbacks[o.invocationId]=(n,r)=>{r?t(r):n&&(n.type===C.Completion?n.error?t(new Error(n.error)):e(n.result):t(new Error(`Unexpected message type: ${n.type}`)))};const r=this._sendWithProtocol(o).catch((e=>{t(e),delete this._callbacks[o.invocationId]}));this._launchStreams(n,r)}))}on(e,t){e&&t&&(e=e.toLowerCase(),this._methods[e]||(this._methods[e]=[]),-1===this._methods[e].indexOf(t)&&this._methods[e].push(t))}off(e,t){if(!e)return;e=e.toLowerCase();const n=this._methods[e];if(n)if(t){const r=n.indexOf(t);-1!==r&&(n.splice(r,1),0===n.length&&delete this._methods[e])}else delete this._methods[e]}onclose(e){e&&this._closedCallbacks.push(e)}onreconnecting(e){e&&this._reconnectingCallbacks.push(e)}onreconnected(e){e&&this._reconnectedCallbacks.push(e)}_processIncomingData(e){if(this._cleanupTimeout(),this._receivedHandshakeResponse||(e=this._processHandshakeResponse(e),this._receivedHandshakeResponse=!0),e){const t=this._protocol.parseMessages(e,this._logger);for(const e of t)if(!this._messageBuffer||this._messageBuffer._shouldProcessMessage(e))switch(e.type){case C.Invocation:this._invokeClientMethod(e).catch((e=>{this._logger.log(S.Error,`Invoke client method threw error: ${x(e)}`)}));break;case C.StreamItem:case C.Completion:{const t=this._callbacks[e.invocationId];if(t){e.type===C.Completion&&delete this._callbacks[e.invocationId];try{t(e)}catch(e){this._logger.log(S.Error,`Stream callback threw error: ${x(e)}`)}}break}case C.Ping:break;case C.Close:{this._logger.log(S.Information,"Close message received from server.");const t=e.error?new Error("Server returned an error on close: "+e.error):void 0;!0===e.allowReconnect?this.connection.stop(t):this._stopPromise=this._stopInternal(t);break}case C.Ack:this._messageBuffer&&this._messageBuffer._ack(e);break;case C.Sequence:this._messageBuffer&&this._messageBuffer._resetSequence(e);break;default:this._logger.log(S.Warning,`Invalid message type: ${e.type}.`)}}this._resetTimeoutPeriod()}_processHandshakeResponse(e){let t,n;try{[n,t]=this._handshakeProtocol.parseHandshakeResponse(e)}catch(e){const t="Error parsing handshake response: "+e;this._logger.log(S.Error,t);const n=new Error(t);throw this._handshakeRejecter(n),n}if(t.error){const e="Server returned handshake error: "+t.error;this._logger.log(S.Error,e);const n=new Error(e);throw this._handshakeRejecter(n),n}return this._logger.log(S.Debug,"Server handshake complete."),this._handshakeResolver(),n}_resetKeepAliveInterval(){this.connection.features.inherentKeepAlive||(this._nextKeepAlive=(new Date).getTime()+this.keepAliveIntervalInMilliseconds,this._cleanupPingTimer())}_resetTimeoutPeriod(){if(!(this.connection.features&&this.connection.features.inherentKeepAlive||(this._timeoutHandle=setTimeout((()=>this.serverTimeout()),this.serverTimeoutInMilliseconds),void 0!==this._pingServerHandle))){let e=this._nextKeepAlive-(new Date).getTime();e<0&&(e=0),this._pingServerHandle=setTimeout((async()=>{if(this._connectionState===D.Connected)try{await this._sendMessage(this._cachedPingMessage)}catch{this._cleanupPingTimer()}}),e)}}serverTimeout(){this.connection.stop(new Error("Server timeout elapsed without receiving a message from the server."))}async _invokeClientMethod(e){const t=e.target.toLowerCase(),n=this._methods[t];if(!n)return this._logger.log(S.Warning,`No client method with the name '${t}' found.`),void(e.invocationId&&(this._logger.log(S.Warning,`No result given for '${t}' method and invocation ID '${e.invocationId}'.`),await this._sendWithProtocol(this._createCompletionMessage(e.invocationId,"Client didn't provide a result.",null))));const r=n.slice(),o=!!e.invocationId;let s,i,a;for(const n of r)try{const r=s;s=await n.apply(this,e.arguments),o&&s&&r&&(this._logger.log(S.Error,`Multiple results provided for '${t}'. Sending error to server.`),a=this._createCompletionMessage(e.invocationId,"Client provided multiple results.",null)),i=void 0}catch(e){i=e,this._logger.log(S.Error,`A callback for the method '${t}' threw error '${e}'.`)}a?await this._sendWithProtocol(a):o?(i?a=this._createCompletionMessage(e.invocationId,`${i}`,null):void 0!==s?a=this._createCompletionMessage(e.invocationId,null,s):(this._logger.log(S.Warning,`No result given for '${t}' method and invocation ID '${e.invocationId}'.`),a=this._createCompletionMessage(e.invocationId,"Client didn't provide a result.",null)),await this._sendWithProtocol(a)):s&&this._logger.log(S.Error,`Result given for '${t}' method but server is not expecting a result.`)}_connectionClosed(e){this._logger.log(S.Debug,`HubConnection.connectionClosed(${e}) called while in state ${this._connectionState}.`),this._stopDuringStartError=this._stopDuringStartError||e||new g("The underlying connection was closed before the hub handshake could complete."),this._handshakeResolver&&this._handshakeResolver(),this._cancelCallbacksWithError(e||new Error("Invocation canceled due to the underlying connection being closed.")),this._cleanupTimeout(),this._cleanupPingTimer(),this._connectionState===D.Disconnecting?this._completeClose(e):this._connectionState===D.Connected&&this._reconnectPolicy?this._reconnect(e):this._connectionState===D.Connected&&this._completeClose(e)}_completeClose(e){if(this._connectionStarted){this._connectionState=D.Disconnected,this._connectionStarted=!1,this._messageBuffer&&(this._messageBuffer._dispose(null!=e?e:new Error("Connection closed.")),this._messageBuffer=void 0),E.isBrowser&&window.document.removeEventListener("freeze",this._freezeEventListener);try{this._closedCallbacks.forEach((t=>t.apply(this,[e])))}catch(t){this._logger.log(S.Error,`An onclose callback called with error '${e}' threw error '${t}'.`)}}}async _reconnect(e){const t=Date.now();let n=0,r=void 0!==e?e:new Error("Attempting to reconnect due to a unknown error."),o=this._getNextRetryDelay(n++,0,r);if(null===o)return this._logger.log(S.Debug,"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt."),void this._completeClose(e);if(this._connectionState=D.Reconnecting,e?this._logger.log(S.Information,`Connection reconnecting because of error '${e}'.`):this._logger.log(S.Information,"Connection reconnecting."),0!==this._reconnectingCallbacks.length){try{this._reconnectingCallbacks.forEach((t=>t.apply(this,[e])))}catch(t){this._logger.log(S.Error,`An onreconnecting callback called with error '${e}' threw error '${t}'.`)}if(this._connectionState!==D.Reconnecting)return void this._logger.log(S.Debug,"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.")}for(;null!==o;){if(this._logger.log(S.Information,`Reconnect attempt number ${n} will start in ${o} ms.`),await new Promise((e=>{this._reconnectDelayHandle=setTimeout(e,o)})),this._reconnectDelayHandle=void 0,this._connectionState!==D.Reconnecting)return void this._logger.log(S.Debug,"Connection left the reconnecting state during reconnect delay. Done reconnecting.");try{if(await this._startInternal(),this._connectionState=D.Connected,this._logger.log(S.Information,"HubConnection reconnected successfully."),0!==this._reconnectedCallbacks.length)try{this._reconnectedCallbacks.forEach((e=>e.apply(this,[this.connection.connectionId])))}catch(e){this._logger.log(S.Error,`An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${e}'.`)}return}catch(e){if(this._logger.log(S.Information,`Reconnect attempt failed because of error '${e}'.`),this._connectionState!==D.Reconnecting)return this._logger.log(S.Debug,`Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`),void(this._connectionState===D.Disconnecting&&this._completeClose());r=e instanceof Error?e:new Error(e.toString()),o=this._getNextRetryDelay(n++,Date.now()-t,r)}}this._logger.log(S.Information,`Reconnect retries have been exhausted after ${Date.now()-t} ms and ${n} failed attempts. Connection disconnecting.`),this._completeClose()}_getNextRetryDelay(e,t,n){try{return this._reconnectPolicy.nextRetryDelayInMilliseconds({elapsedMilliseconds:t,previousRetryCount:e,retryReason:n})}catch(n){return this._logger.log(S.Error,`IRetryPolicy.nextRetryDelayInMilliseconds(${e}, ${t}) threw error '${n}'.`),null}}_cancelCallbacksWithError(e){const t=this._callbacks;this._callbacks={},Object.keys(t).forEach((n=>{const r=t[n];try{r(null,e)}catch(t){this._logger.log(S.Error,`Stream 'error' callback called with '${e}' threw error: ${x(t)}`)}}))}_cleanupPingTimer(){this._pingServerHandle&&(clearTimeout(this._pingServerHandle),this._pingServerHandle=void 0)}_cleanupTimeout(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)}_createInvocation(e,t,n,r){if(n)return 0!==r.length?{arguments:t,streamIds:r,target:e,type:C.Invocation}:{arguments:t,target:e,type:C.Invocation};{const n=this._invocationId;return this._invocationId++,0!==r.length?{arguments:t,invocationId:n.toString(),streamIds:r,target:e,type:C.Invocation}:{arguments:t,invocationId:n.toString(),target:e,type:C.Invocation}}}_launchStreams(e,t){if(0!==e.length){t||(t=Promise.resolve());for(const n in e)e[n].subscribe({complete:()=>{t=t.then((()=>this._sendWithProtocol(this._createCompletionMessage(n))))},error:e=>{let r;r=e instanceof Error?e.message:e&&e.toString?e.toString():"Unknown error",t=t.then((()=>this._sendWithProtocol(this._createCompletionMessage(n,r))))},next:e=>{t=t.then((()=>this._sendWithProtocol(this._createStreamItemMessage(n,e))))}})}}_replaceStreamingParams(e){const t=[],n=[];for(let r=0;r<e.length;r++){const o=e[r];if(this._isObservable(o)){const s=this._invocationId;this._invocationId++,t[s]=o,n.push(s.toString()),e.splice(r,1)}}return[t,n]}_isObservable(e){return e&&e.subscribe&&"function"==typeof e.subscribe}_createStreamInvocation(e,t,n){const r=this._invocationId;return this._invocationId++,0!==n.length?{arguments:t,invocationId:r.toString(),streamIds:n,target:e,type:C.StreamInvocation}:{arguments:t,invocationId:r.toString(),target:e,type:C.StreamInvocation}}_createCancelInvocation(e){return{invocationId:e,type:C.CancelInvocation}}_createStreamItemMessage(e,t){return{invocationId:e,item:t,type:C.StreamItem}}_createCompletionMessage(e,t,n){return t?{error:t,invocationId:e,type:C.Completion}:{invocationId:e,result:n,type:C.Completion}}_createCloseMessage(){return{type:C.Close}}}class te{constructor(){this.name="json",this.version=2,this.transferFormat=_.Text}parseMessages(e,t){if("string"!=typeof e)throw new Error("Invalid input for JSON hub protocol. Expected a string.");if(!e)return[];null===t&&(t=T.instance);const n=J.parse(e),r=[];for(const e of n){const n=JSON.parse(e);if("number"!=typeof n.type)throw new Error("Invalid payload.");switch(n.type){case C.Invocation:this._isInvocationMessage(n);break;case C.StreamItem:this._isStreamItemMessage(n);break;case C.Completion:this._isCompletionMessage(n);break;case C.Ping:case C.Close:break;case C.Ack:this._isAckMessage(n);break;case C.Sequence:this._isSequenceMessage(n);break;default:t.log(S.Information,"Unknown message type '"+n.type+"' ignored.");continue}r.push(n)}return r}writeMessage(e){return J.write(JSON.stringify(e))}_isInvocationMessage(e){this._assertNotEmptyString(e.target,"Invalid payload for Invocation message."),void 0!==e.invocationId&&this._assertNotEmptyString(e.invocationId,"Invalid payload for Invocation message.")}_isStreamItemMessage(e){if(this._assertNotEmptyString(e.invocationId,"Invalid payload for StreamItem message."),void 0===e.item)throw new Error("Invalid payload for StreamItem message.")}_isCompletionMessage(e){if(e.result&&e.error)throw new Error("Invalid payload for Completion message.");!e.result&&e.error&&this._assertNotEmptyString(e.error,"Invalid payload for Completion message."),this._assertNotEmptyString(e.invocationId,"Invalid payload for Completion message.")}_isAckMessage(e){if("number"!=typeof e.sequenceId)throw new Error("Invalid SequenceId for Ack message.")}_isSequenceMessage(e){if("number"!=typeof e.sequenceId)throw new Error("Invalid SequenceId for Sequence message.")}_assertNotEmptyString(e,t){if("string"!=typeof e||""===e)throw new Error(t)}}const ne={trace:S.Trace,debug:S.Debug,info:S.Information,information:S.Information,warn:S.Warning,warning:S.Warning,error:S.Error,critical:S.Critical,none:S.None};class re{configureLogging(e){if(k.isRequired(e,"logging"),void 0!==e.log)this.logger=e;else if("string"==typeof e){const t=function(e){const t=ne[e.toLowerCase()];if(void 0!==t)return t;throw new Error(`Unknown log level: ${e}`)}(e);this.logger=new R(t)}else this.logger=new R(e);return this}withUrl(e,t){return k.isRequired(e,"url"),k.isNotEmpty(e,"url"),this.url=e,this.httpConnectionOptions="object"==typeof t?{...this.httpConnectionOptions,...t}:{...this.httpConnectionOptions,transport:t},this}withHubProtocol(e){return k.isRequired(e,"protocol"),this.protocol=e,this}withAutomaticReconnect(e){if(this.reconnectPolicy)throw new Error("A reconnectPolicy has already been set.");return e?Array.isArray(e)?this.reconnectPolicy=new a(e):this.reconnectPolicy=e:this.reconnectPolicy=new a,this}withServerTimeout(e){return k.isRequired(e,"milliseconds"),this._serverTimeoutInMilliseconds=e,this}withKeepAliveInterval(e){return k.isRequired(e,"milliseconds"),this._keepAliveIntervalInMilliseconds=e,this}withStatefulReconnect(e){return void 0===this.httpConnectionOptions&&(this.httpConnectionOptions={}),this.httpConnectionOptions._useStatefulReconnect=!0,this._statefulReconnectBufferSize=null==e?void 0:e.bufferSize,this}build(){const e=this.httpConnectionOptions||{};if(void 0===e.logger&&(e.logger=this.logger),!this.url)throw new Error("The 'HubConnectionBuilder.withUrl' method must be called before building the connection.");const t=new K(this.url,e);return ee.create(t,this.logger||T.instance,this.protocol||new te,this.reconnectPolicy,this._serverTimeoutInMilliseconds,this._keepAliveIntervalInMilliseconds,this._statefulReconnectBufferSize)}}class oe{static GenerateUUID(){var e=(new Date).getTime(),t="undefined"!=typeof performance&&performance.now&&1e3*performance.now()||0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(n){var r=16*Math.random();return e>0?(r=(e+r)%16|0,e=Math.floor(e/16)):(r=(t+r)%16|0,t=Math.floor(t/16)),("x"===n?r:3&r|8).toString(16)}))}static GenerateMd5(e){let t="0123456789abcdef";function n(e){let n,r="";for(n=0;n<=3;n++)r+=t.charAt(e>>8*n+4&15)+t.charAt(e>>8*n&15);return r}function r(e,t){let n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function o(e,t,n,o,s,i){return r(function(e,t){return e<<t|e>>>32-t}(r(r(t,e),r(o,i)),s),n)}function s(e,t,n,r,s,i,a){return o(t&n|~t&r,e,t,s,i,a)}function i(e,t,n,r,s,i,a){return o(t&r|n&~r,e,t,s,i,a)}function a(e,t,n,r,s,i,a){return o(t^n^r,e,t,s,i,a)}function c(e,t,n,r,s,i,a){return o(n^(t|~r),e,t,s,i,a)}let u,l,d,h,p,g=function(e){let t,n=1+(e.length+8>>6),r=new Array(16*n);for(t=0;t<16*n;t++)r[t]=0;for(t=0;t<e.length;t++)r[t>>2]|=e.charCodeAt(t)<<t%4*8;return r[t>>2]|=128<<t%4*8,r[16*n-2]=8*e.length,r}(""+e),f=1732584193,v=-271733879,m=-1732584194,y=271733878;for(u=0;u<g.length;u+=16)l=f,d=v,h=m,p=y,f=s(f,v,m,y,g[u+0],7,-680876936),y=s(y,f,v,m,g[u+1],12,-389564586),m=s(m,y,f,v,g[u+2],17,606105819),v=s(v,m,y,f,g[u+3],22,-1044525330),f=s(f,v,m,y,g[u+4],7,-176418897),y=s(y,f,v,m,g[u+5],12,1200080426),m=s(m,y,f,v,g[u+6],17,-1473231341),v=s(v,m,y,f,g[u+7],22,-45705983),f=s(f,v,m,y,g[u+8],7,1770035416),y=s(y,f,v,m,g[u+9],12,-1958414417),m=s(m,y,f,v,g[u+10],17,-42063),v=s(v,m,y,f,g[u+11],22,-1990404162),f=s(f,v,m,y,g[u+12],7,1804603682),y=s(y,f,v,m,g[u+13],12,-40341101),m=s(m,y,f,v,g[u+14],17,-1502002290),v=s(v,m,y,f,g[u+15],22,1236535329),f=i(f,v,m,y,g[u+1],5,-165796510),y=i(y,f,v,m,g[u+6],9,-1069501632),m=i(m,y,f,v,g[u+11],14,643717713),v=i(v,m,y,f,g[u+0],20,-373897302),f=i(f,v,m,y,g[u+5],5,-701558691),y=i(y,f,v,m,g[u+10],9,38016083),m=i(m,y,f,v,g[u+15],14,-660478335),v=i(v,m,y,f,g[u+4],20,-405537848),f=i(f,v,m,y,g[u+9],5,568446438),y=i(y,f,v,m,g[u+14],9,-1019803690),m=i(m,y,f,v,g[u+3],14,-187363961),v=i(v,m,y,f,g[u+8],20,1163531501),f=i(f,v,m,y,g[u+13],5,-1444681467),y=i(y,f,v,m,g[u+2],9,-51403784),m=i(m,y,f,v,g[u+7],14,1735328473),v=i(v,m,y,f,g[u+12],20,-1926607734),f=a(f,v,m,y,g[u+5],4,-378558),y=a(y,f,v,m,g[u+8],11,-2022574463),m=a(m,y,f,v,g[u+11],16,1839030562),v=a(v,m,y,f,g[u+14],23,-35309556),f=a(f,v,m,y,g[u+1],4,-1530992060),y=a(y,f,v,m,g[u+4],11,1272893353),m=a(m,y,f,v,g[u+7],16,-155497632),v=a(v,m,y,f,g[u+10],23,-1094730640),f=a(f,v,m,y,g[u+13],4,681279174),y=a(y,f,v,m,g[u+0],11,-358537222),m=a(m,y,f,v,g[u+3],16,-722521979),v=a(v,m,y,f,g[u+6],23,76029189),f=a(f,v,m,y,g[u+9],4,-640364487),y=a(y,f,v,m,g[u+12],11,-421815835),m=a(m,y,f,v,g[u+15],16,530742520),v=a(v,m,y,f,g[u+2],23,-995338651),f=c(f,v,m,y,g[u+0],6,-198630844),y=c(y,f,v,m,g[u+7],10,1126891415),m=c(m,y,f,v,g[u+14],15,-1416354905),v=c(v,m,y,f,g[u+5],21,-57434055),f=c(f,v,m,y,g[u+12],6,1700485571),y=c(y,f,v,m,g[u+3],10,-1894986606),m=c(m,y,f,v,g[u+10],15,-1051523),v=c(v,m,y,f,g[u+1],21,-2054922799),f=c(f,v,m,y,g[u+8],6,1873313359),y=c(y,f,v,m,g[u+15],10,-30611744),m=c(m,y,f,v,g[u+6],15,-1560198380),v=c(v,m,y,f,g[u+13],21,1309151649),f=c(f,v,m,y,g[u+4],6,-145523070),y=c(y,f,v,m,g[u+11],10,-1120210379),m=c(m,y,f,v,g[u+2],15,718787259),v=c(v,m,y,f,g[u+9],21,-343485551),f=r(f,l),v=r(v,d),m=r(m,h),y=r(y,p);return n(f)+n(v)+n(m)+n(y)}}class se{static Delay(e){return new Promise((t=>setTimeout(t,e)))}}function ie(e){return new Map(Object.entries(e))}class ae{constructor(){this.TransactionId=oe.GenerateUUID()}}var ce,ue,le,de,he,pe,ge,fe,ve,me,ye,we,Se,Ae,_e;(Se=ce||(ce={}))[Se.OK=0]="OK",Se[Se.UnknownError=1]="UnknownError",Se[Se.FatalError=2]="FatalError",Se[Se.WrongData=3]="WrongData",Se[Se.ResourceDoesNotExists=4]="ResourceDoesNotExists",Se[Se.NoPermissionToPerformThisOperation=5]="NoPermissionToPerformThisOperation",Se[Se.SessionHasAlreadyLoggedOnUser=6]="SessionHasAlreadyLoggedOnUser",Se[Se.OperationNotPermitted=7]="OperationNotPermitted",Se[Se.NoPermissionsToCallGivenResource=8]="NoPermissionsToCallGivenResource",Se[Se.ResourceIsNotAvailable=9]="ResourceIsNotAvailable",Se[Se.Error=10]="Error",Se[Se.NoData=11]="NoData",Se[Se.NotSupportedMethod=12]="NotSupportedMethod",Se[Se.UserIsNotLoggedIn=13]="UserIsNotLoggedIn",Se[Se.MultiDataResponseStart=14]="MultiDataResponseStart",Se[Se.MultiDataResponse=15]="MultiDataResponse",Se[Se.MultiDataResponseStop=16]="MultiDataResponseStop",function(e){e[e.Get=0]="Get",e[e.Post=1]="Post",e[e.Delete=2]="Delete",e[e.Put=3]="Put",e[e.Options=4]="Options",e[e.Head=5]="Head"}(ue||(ue={}));class Ce{constructor(e,t){this.serialNumber=e,this.pin=t,this.SerialNumber=e,this.PIN=t}}!function(e){e[e.ByCloud=0]="ByCloud",e[e.LocalNetwork=1]="LocalNetwork",e[e.P2P=2]="P2P"}(le||(le={})),function(e){e[e.FailedToConnect=0]="FailedToConnect",e[e.AuthorizationFailed=1]="AuthorizationFailed",e[e.FailedToConnectToServer=2]="FailedToConnectToServer",e[e.Connected=3]="Connected",e[e.ControllerIsNotConnected=4]="ControllerIsNotConnected"}(de||(de={})),function(e){e[e.Disconnected=0]="Disconnected",e[e.Connecting=1]="Connecting",e[e.Connected=3]="Connected",e[e.Disconnecting=4]="Disconnecting",e[e.Failed=5]="Failed",e[e.Reconnecting=6]="Reconnecting"}(he||(he={}));class De extends Error{constructor(e){super(e),this.name="StreamError"}}class Te{constructor(){this._log=$v.Get(r.ServiceName),this.handlers=[]}Subscribe(e){this.handlers.push(e)}Unsubscribe(e){this.handlers=this.handlers.filter((t=>t!==e))}Invoke(){this.handlers.slice(0).forEach((e=>{try{e()}catch(e){this._log.Error(e)}}))}}!function(e){e.CannotExportConfiguration="CannotExportConfiguration"}(pe||(pe={})),(_e=ge||(ge={}))[_e.Any=0]="Any",_e[_e.Guest=10]="Guest",_e[_e.Standard=20]="Standard",_e[_e.Admin=30]="Admin",_e[_e.Installator=40]="Installator",_e[_e.Support=50]="Support",(Ae=fe||(fe={}))[Ae.Unknown=0]="Unknown",Ae[Ae.Men=1]="Men",Ae[Ae.Woman=2]="Woman",Ae[Ae.Other=3]="Other",function(e){e[e.En_Us=0]="En_Us",e[e.Pl_Pl=1]="Pl_Pl"}(ve||(ve={})),function(e){e[e.Unknown=0]="Unknown",e[e.WrongAuthData=1]="WrongAuthData",e[e.NoResponseFromController=2]="NoResponseFromController",e[e.AuthDisabled=3]="AuthDisabled",e[e.MethodNotSupported=4]="MethodNotSupported"}(me||(me={}));class ke{constructor(e,t){this._type=ye.Unknown,this._data="",this._type=e,this._data=t}get Type(){return this._type}set Type(e){this._type=e}get Data(){return this._data}set Data(e){this._data=e}}class Ee{constructor(e,t){this._type=null,this._data="",this._type=e,this._data=t}get Type(){return this._type}set Type(e){this._type=e}get Data(){return this._data}set Data(e){this._data=e}}!function(e){e[e.ResourceDoesNotExists=-6]="ResourceDoesNotExists",e[e.UnknownError=-5]="UnknownError",e[e.NoPermissions=-4]="NoPermissions",e[e.WrongData=-3]="WrongData",e[e.ControllerResponseTimeout=-2]="ControllerResponseTimeout",e[e.Failed=-1]="Failed",e[e.Unknown=0]="Unknown",e[e.Changed=1]="Changed"}(ye||(ye={})),function(e){e[e.Device=1]="Device",e[e.Person=2]="Person",e[e.DevicesGroups=3]="DevicesGroups"}(we||(we={}));class Ge{constructor(){this._guid="",this._ownerGuid="",this._ownerIdentity="",this._base64Image="",this._imageType=we.Device,this._dateTime=""}get Guid(){return this._guid}get OwnerGuid(){return this._ownerGuid}get OwnerIdentity(){return this._ownerIdentity}get Base64Image(){return this._base64Image}get ImageType(){return this._imageType}get DateTime(){return this._dateTime}set Base64Image(e){this._base64Image=e}set Guid(e){this._guid=e}set OwnerGuid(e){this._ownerGuid=e}set OwnerIdentity(e){this._ownerIdentity=e}set ImageType(e){this._imageType=e}}var Ne=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class be{constructor(){this._imageExistsCaseNumber=0,this._connection=$v.Get(Ut.ServiceName),this._logger=$v.Get(r.ServiceName)}GetServiceName(){return be.ServiceName}AddPictureAsync(e){return Ne(this,void 0,void 0,(function*(){var t,n;try{if(e.Base64Image.length*(3/4)>=512e3)return this._logger.Error(be.ServiceName,"Cannot add picture - Base64Imgae size exceeded."),ce.WrongData;let r=new Image;const o=new Promise(((t,n)=>{r.src=e.Base64Image,r.onload=function(){t(!0)},setTimeout((()=>t(!1)),5e3)}));if(!(yield o))return this._logger.Error(be.ServiceName,"Cannot add picture - cannot load image - ensure that given base64 string is an image!"),ce.WrongData;if(0===r.height||0===r.width)return this._logger.Error(be.ServiceName,"Cannot add picture - cannot read width/height of image - ensure that given base64 string is an image!"),ce.WrongData;if(null!=e.Guid&&""!=e.Guid)return this._logger.Error(be.ServiceName,"Cannot add picture - Guid must be empty."),ce.WrongData;const s=new Re;s.Guid=oe.GenerateUUID(),s.DateTime=(new Date).toISOString(),s.ImageType=e.ImageType,s.OwnerGuid=`${e.OwnerGuid}_${e.OwnerIdentity}`,s.Base64Image=e.Base64Image;const i=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Oe(s.Guid),8e3,!1);if(null==i||null==i.Status)return this._logger.Error(be.ServiceName,"Cannot add picture - unknown error!"),ce.UnknownError;if(i.Status==ce.ResourceDoesNotExists){const e=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new xe(s),8e3,!1);return null==e||null==e.Status?(this._logger.Error(be.ServiceName,"Cannot add picture - unknown error!"),ce.UnknownError):e.Status}return i.Status==ce.OK?(this._logger.Warning(be.ServiceName,"Cannot add picture - picture already exists, trying to add with regenerated GUID."),this._imageExistsCaseNumber<2?(this._imageExistsCaseNumber++,this.AddPictureAsync(e)):ce.UnknownError):(this._logger.Error(be.ServiceName,"Cannot add picture - cannot get current picture status."),ce.Error)}catch(e){return this._logger.Error(be.ServiceName,`Cannot add picture! ${e}`),ce.FatalError}}))}EditPictureAsync(e){return Ne(this,void 0,void 0,(function*(){var t,n,r,s;try{if(""==e.Guid||null==e.Guid)return this._logger.Error(be.ServiceName,"Cannot edit picture - guid is empty."),ce.WrongData;if(e.Base64Image.length*(3/4)>=512e3)return this._logger.Error(be.ServiceName,"Cannot edit picture - Base64Imgae size exceeded."),ce.WrongData;let i=new Image;const a=new Promise(((t,n)=>{i.src=e.Base64Image,i.onload=function(){t(!0)},setTimeout((()=>t(!1)),5e3)}));if(!(yield a))return this._logger.Error(be.ServiceName,"Cannot edit picture - cannot load image - ensure that given base64 string is an image!"),ce.WrongData;if(0===i.height||0===i.width)return this._logger.Error(be.ServiceName,"Cannot edit picture - cannot read width/height of image - ensure that given base64 string is an image!"),ce.WrongData;const c=new Re;c.DateTime=(new Date).toISOString(),c.ImageType=e.ImageType,c.Base64Image=e.Base64Image,c.Guid=e.Guid,e.Guid.includes("profilePicture")||e.Guid.includes("devices_group")?c.OwnerGuid=e.OwnerGuid:c.OwnerGuid=`${e.OwnerGuid}_${e.OwnerIdentity}`;const u=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Oe(c.Guid),8e3,!1);if(null===(n=o.Log)||void 0===n||n.Error(be.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! EditPictureAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null==u||null==u.Status)return this._logger.Error(be.ServiceName,"Cannot edit picture - unknown error!"),ce.UnknownError;if(u.Status==ce.ResourceDoesNotExists)return this._logger.Error(be.ServiceName,"Cannot edit picture - picture not exists."),ce.OperationNotPermitted;if(u.Status==ce.OK){const e=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(new xe(c),8e3,!1);return null===(s=o.Log)||void 0===s||s.Error(be.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! EditPictureAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null==e||null==e.Status?(this._logger.Error(be.ServiceName,"Cannot edit picture - unknown error!"),ce.UnknownError):e.Status}return this._logger.Error(be.ServiceName,"Cannot edit picture - cannot get current picture status."),ce.Error}catch(e){return this._logger.Error(be.ServiceName,`Cannot edit picture! ${e}`),ce.FatalError}}))}DeletePictureAsync(e){return Ne(this,void 0,void 0,(function*(){var t,n;try{if(""==e.Guid||null==e.Guid)return this._logger.Error(be.ServiceName,"Cannot delete picture - guid is empty."),ce.WrongData;const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Fe(e.Guid),8e3,!1);return null===(n=o.Log)||void 0===n||n.Error(be.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! DeletePictureAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null==r||null==r.Status?(this._logger.Error(be.ServiceName,"Cannot delete picture - unknown error!"),ce.UnknownError):r.Status}catch(e){return this._logger.Error(be.ServiceName,`Cannot delete picture! ${e}`),ce.FatalError}}))}GetPicturesInfoAsync(){return Ne(this,void 0,void 0,(function*(){var e;try{const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Ue,8e3,!1);return null==t||null==t.Status?(this._logger.Error(be.ServiceName,"Cannot get pictures info - unknown error!"),new Ee(ce.UnknownError,"NoDataInResult")):t.Status!=ce.OK?(this._logger.Error(be.ServiceName,`Cannot get pictures info - controler responded with status ${t.Status}.`),new Ee(t.Status,"UnknownReason")):null==t.Data?(this._logger.Error(be.ServiceName,"Cannot get pictures info - controler responded with OK, but no data in result.}."),new Ee(ce.UnknownError,"NoDataInResult")):t.Data.map((e=>{const t=new Pe;return t.DateTime=e.DateTime,t.Guid=e.Guid,t.OwnerGuid=e.OwnerGuid,-1!=e.OwnerGuid.indexOf("_")?(t.OwnerGuid=e.OwnerGuid.substring(0,e.OwnerGuid.indexOf("_")),t.OwnerIdentity=e.OwnerGuid.substring(e.OwnerGuid.indexOf("_")+1)):e.Guid.includes("profilePicture")?(t.OwnerIdentity=e.Guid.substring(e.Guid.indexOf("_")+1),t.OwnerGuid=e.OwnerGuid):e.Guid.includes("devices_group")?(t.OwnerIdentity=e.Guid.substring(0,e.Guid.lastIndexOf("_")),t.OwnerGuid=e.OwnerGuid):(t.OwnerGuid=e.OwnerGuid,t.OwnerIdentity=""),t}))}catch(e){return this._logger.Error(be.ServiceName,`Cannot get picture info! ${e}`),new Ee(ce.FatalError,"ExceptionOccurred")}}))}GetPictureAsync(e){return Ne(this,void 0,void 0,(function*(){var t;try{const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Oe(e),8e3,!1);if(null==n||null==n.Status)return this._logger.Error(be.ServiceName,"Cannot get picture - unknown error!"),new Ee(ce.UnknownError,"NoDataInResult");switch(n.Status){case ce.ResourceDoesNotExists:return new Ee(ce.ResourceDoesNotExists,"PictureNotFound");case ce.OK:if(null==n.Data)return new Ee(ce.Error,"RespondedWithOKButNoData");const e=new Ie;return e.Base64Image=n.Data.Base64Image,e.DateTime=n.Data.DateTime,e.ImageType=n.Data.ImageType,e.Guid=n.Data.Guid,-1!=n.Data.OwnerGuid.indexOf("_")?(e.OwnerGuid=n.Data.OwnerGuid.substring(0,n.Data.OwnerGuid.indexOf("_")),e.OwnerIdentity=n.Data.OwnerGuid.substring(n.Data.OwnerGuid.indexOf("_")+1)):n.Data.Guid.includes("profilePicture")?(e.OwnerIdentity=n.Data.Guid.substring(n.Data.Guid.indexOf("_")+1),e.OwnerGuid=n.Data.OwnerGuid):n.Data.Guid.includes("devices_group")?(e.OwnerIdentity=n.Data.Guid.substring(0,n.Data.Guid.lastIndexOf("_")),e.OwnerGuid=n.Data.OwnerGuid):(e.OwnerGuid=n.Data.OwnerGuid,e.OwnerIdentity=""),e;default:return new Ee(n.Status,"UnknownReason")}}catch(e){return this._logger.Error(be.ServiceName,`Cannot get picture! ${e}`),new Ee(ce.FatalError,"ExceptionOccurred")}}))}GetPicturesListAsync(){return Ne(this,void 0,void 0,(function*(){var e;try{const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Me,8e3,!1);return null==t||null==t.Status?(this._logger.Error(be.ServiceName,"Cannot get pictures - unknown error!"),new Ee(ce.UnknownError,"NoDataInResult")):t.Status!=ce.OK?(this._logger.Error(be.ServiceName,`Cannot get pictures - controler responded with status ${t.Status}.`),new Ee(t.Status,"UnknownReason")):null==t.Data?(this._logger.Error(be.ServiceName,"Cannot get pictures - controler responded with OK, but no data in result.}."),new Ee(ce.UnknownError,"NoDataInResult")):t.Data.map((e=>{const t=new Ie;return t.Base64Image=e.Base64Image,t.DateTime=e.DateTime,t.Guid=e.Guid,t.ImageType=e.ImageType,-1!=e.OwnerGuid.indexOf("_")?(t.OwnerGuid=e.OwnerGuid.substring(0,e.OwnerGuid.indexOf("_")),t.OwnerIdentity=e.OwnerGuid.substring(e.OwnerGuid.indexOf("_")+1)):e.Guid.includes("profilePicture")?(t.OwnerIdentity=e.Guid.substring(e.Guid.indexOf("_")+1),t.OwnerGuid=e.OwnerGuid):e.Guid.includes("devices_group")?(t.OwnerIdentity=e.Guid.substring(0,e.Guid.lastIndexOf("_")),t.OwnerGuid=e.OwnerGuid):(t.OwnerGuid=e.OwnerGuid,t.OwnerIdentity=""),t}))}catch(e){return this._logger.Error(be.ServiceName,`Cannot get pictures! ${e}`),new Ee(ce.FatalError,"ExceptionOccurred")}}))}}be.ServiceName="PictureService";class Ie extends Ge{set DateTime(e){this._dateTime=e}}class Re{constructor(){this.Guid="",this.OwnerGuid="",this.Base64Image="",this.ImageType=we.Device,this.DateTime=""}}class Pe{constructor(){this._guid="",this._dateTime="",this._ownerGuid="",this._ownerIdentity=""}get Guid(){return this._guid}get DateTime(){return this._dateTime}get OwnerGuid(){return this._ownerGuid}get OwnerIdentity(){return this._ownerIdentity}set Guid(e){this._guid=e}set DateTime(e){this._dateTime=e}set OwnerGuid(e){this._ownerGuid=e}set OwnerIdentity(e){this._ownerIdentity=e}}class Oe extends ae{constructor(e){super(),this.Resource="/pictures/picture",this.Method=ue.Get,this.Data=e}}class Ue extends ae{constructor(){super(),this.Resource="/pictures/info",this.Method=ue.Get}}class Me extends ae{constructor(){super(),this.Resource="/pictures/list",this.Method=ue.Get}}class xe extends ae{constructor(e){super(),this.Resource="/pictures/picture",this.Method=ue.Put,this.Data=e}}class Fe extends ae{constructor(e){super(),this.Resource="/pictures/picture",this.Method=ue.Delete,this.Data=e}}class Le{constructor(){this._log=$v.Get(r.ServiceName),Le._localStorageService=$v.Get(s.ServiceName)}GetServiceName(){return Le.ServiceName}GetResourceName(e){return`${e.Resource}_${e.Method}`}Cache(e){var t;e.Status===ce.OK&&(this._log.Debug(Le.ServiceName,`Caching request: ${e.Resource} ${e.Method}`),null===(t=Le._localStorageService)||void 0===t||t.Save(this.GetServiceName(),this.GetResourceName(e),e))}GetCache(e){var t;let n=null===(t=Le._localStorageService)||void 0===t?void 0:t.Read(this.GetServiceName(),this.GetResourceName(e));return null!=n&&this._log.Debug(Le.ServiceName,`Got request response from cache: ${e.Resource} ${e.Method}`),n}ClearCache(){var e;null===(e=Le._localStorageService)||void 0===e||e.DropStorage(this.GetServiceName()),this._log.Debug(Le.ServiceName,`Clearing cache for ${this.GetServiceName()}`)}Remove(e){var t;null===(t=Le._localStorageService)||void 0===t||t.Remove(this.GetServiceName(),this.GetResourceName(e)),this._log.Debug(Le.ServiceName,`Clearing cache for cache: ${e.Resource} ${e.Method}`)}}Le._localStorageService=null,Le.ServiceName="WebApiCacheService";var Be=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class We{constructor(){this._connection=null,this._connection=$v.Get(Ut.ServiceName),this._pictureService=$v.Get(be.ServiceName),this._sessionService=$v.Get(Je.ServiceName)}CanEditUser(e){const t=this._sessionService.User;return e.Guid===(null==t?void 0:t.Guid)||this.CanEditUsersOfAccessLevel(e.AccessLevel)}CanEditUsersOfAccessLevel(e){var t;const n=null===(t=this._sessionService.User)||void 0===t?void 0:t.AccessLevel;if(void 0===n)return!1;switch(e){case ge.Support:return n===ge.Support;case ge.Installator:return n>=ge.Installator;case ge.Admin:default:return n>=ge.Admin}}GetServiceName(){return We.ServiceName}GetUsersAsync(){return Be(this,void 0,void 0,(function*(){var e,t;const n=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new He,2e4,!1);if(null==n)return Promise.resolve([]);if((null==n?void 0:n.Status)==ce.OK){if(null!=n.Data){const e=[];return n.Data.forEach((t=>{var n=new je;n.AccessLevel=t.AccessLevel,n.Email=t.Email,n.Gender=t.Gender,n.Guid=t.Guid,n.IsAccountOnline=t.IsAccountOnline,n.Name=t.Name,n.IsActive=t.IsActive,n.IsBanned=t.IsBanned,n.Phone=t.Phone,n.Surname=t.Surname,e.push(n)})),e}return Promise.resolve([])}if((null==n?void 0:n.Status)==ce.NoData)return Promise.resolve([]);throw null===(t=o.Log)||void 0===t||t.Debug(We.ServiceName,`Failed to retrieve users, error: ${n.Status}`),new Error(`Failed to retrieve users, error: ${n.Status}`)}))}GetUserAsync(e){return Be(this,void 0,void 0,(function*(){var t,n;if(""===e)return Promise.resolve(null);null==e&&(e="");const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new $e(e),2e4,!1);if(null==r||null==r.Data)return Promise.resolve(null);if(r.Status!=ce.OK)return null===(n=o.Log)||void 0===n||n.Debug(We.ServiceName,`Failed to retrieve user, error: ${r.Status}`),Promise.resolve(null);const s=new je;return s.AccessLevel=r.Data.AccessLevel,s.Email=r.Data.Email,s.Gender=r.Data.Gender,s.Guid=r.Data.Guid,s.IsAccountOnline=r.Data.IsAccountOnline,s.Name=r.Data.Name,s.IsActive=r.Data.IsActive,s.IsBanned=r.Data.IsBanned,s.Phone=r.Data.Phone,s.Surname=r.Data.Surname,s}))}CreateUserAsync(e,t){return Be(this,void 0,void 0,(function*(){var n;if(null!=e.Guid&&""!=e.Guid)return new Ee(ce.WrongData,"GuidMustBeEmpty");const r=new qe;r.Name=e.Name.trim(),r.Surname=e.Surname.trim(),r.Email=e.Email.trim(),r.Password=t.trim(),r.Phone=e.Phone.trim(),r.Gender=e.Gender,r.AccessLevel=e.AccessLevel;const o=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new Ve(r),2e4,!1);return $v.Get(Le.ServiceName).ClearCache(),null==o||null==o.Status?new Ee(ce.FatalError,"UnknownError"):(null==o.Data&&(o.Data=""),new Ee(o.Status,o.Data))}))}UpdateUserAsync(e){return Be(this,void 0,void 0,(function*(){var t;if(null==e.Guid||""==e.Guid)return new Ee(ce.WrongData,"GuidCannotBeEmpty");const n=new qe;n.Guid=e.Guid,n.Name=e.Name.trim(),n.Surname=e.Surname.trim(),n.Email=e.Email.trim(),n.Phone=e.Phone.trim(),n.Gender=e.Gender,n.AccessLevel=e.AccessLevel;const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Ve(n),2e4,!1);return $v.Get(Le.ServiceName).ClearCache(),null==r||null==r.Status?new Ee(ce.FatalError,"UnknownError"):(null==r.Data&&(r.Data=""),new Ee(r.Status,r.Data))}))}ChangePasswordAsync(e,t){return Be(this,void 0,void 0,(function*(){var n;if(null==e.Guid||""==e.Guid)return new Ee(ce.WrongData,"GuidCannotBeEmpty");const r=yield this.GetUserAsync(e.Guid);if(null==r)return new Ee(ce.ResourceIsNotAvailable,"CannotGetUser");const o=new qe;o.Guid=e.Guid,o.Password=t,o.AccessLevel=r.AccessLevel,o.Email=r.Email;const s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new Ve(o),2e4,!1);return null==s||null==s.Status?new Ee(ce.FatalError,"UnknownError"):(null==s.Data&&(s.Data=""),new Ee(s.Status,s.Data))}))}DeleteUserAsync(e){return Be(this,void 0,void 0,(function*(){var t,n;if(""===e)return ce.WrongData;null==e&&(e="");const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Ke(e),2e4,!1);return $v.Get(Le.ServiceName).ClearCache(),null==r||null==r.Status?ce.FatalError:(r.Status!=ce.OK&&(null===(n=o.Log)||void 0===n||n.Debug(We.ServiceName,`Failed to delete user, error: ${r.Status}`)),r.Status)}))}GetUserProfilePictureAsync(e){return Be(this,void 0,void 0,(function*(){if(null==e.Guid||""==e.Guid)return new Ee(ce.WrongData,"GuidCannotBeEmpty");const t=yield this._pictureService.GetPicturesInfoAsync();if(null!=t.Type)return t;const n=t.find((t=>"profilePicture"==t.OwnerIdentity&&t.OwnerGuid==e.Guid));if(null!=n){const e=yield this._pictureService.GetPictureAsync(n.Guid);return $v.Get(Le.ServiceName).ClearCache(),null!=e.Type?t:e}return new Ee(ce.ResourceDoesNotExists,"PictureNotFound")}))}SetUserProfilePictureAsync(e,t){return Be(this,void 0,void 0,(function*(){if(null==e.Guid||""==e.Guid)return new Ee(ce.WrongData,"GuidCannotBeEmpty");let n=new Ge;n.ImageType=we.Person,n.OwnerGuid=e.Guid,n.OwnerIdentity="profilePicture",n.Base64Image=t;const r=yield this.GetUserProfilePictureAsync(e);if($v.Get(Le.ServiceName).ClearCache(),r.Type==ce.ResourceDoesNotExists){const e=yield this._pictureService.AddPictureAsync(n);return e===ce.OK?new Ee(ce.OK,"PictureSet"):new Ee(e,"PictureServiceError")}if(null!=r.Type)return new Ee(ce.Error,"ErrorWhenTryingToCheckIfCurrentProfilePictureExists");{n.Guid=r.Guid,n.OwnerGuid=r.OwnerGuid;const e=yield this._pictureService.EditPictureAsync(n);return e===ce.OK?new Ee(ce.OK,"PictureSet"):new Ee(e,"PictureServiceError")}}))}}We.ServiceName="UsersService";class $e extends ae{constructor(e){super(),this.Resource="/users/user",this.Method=ue.Get,this.Data=e}}class qe{constructor(){this.Guid="",this.Name="",this.Surname="",this.Email="",this.Password="",this.Phone="",this.Gender=fe.Unknown,this.AccessLevel=ge.Any}}class Ve extends ae{constructor(e){super(),this.Resource="/users/user",this.Method=ue.Put,this.Data=e}}class He extends ae{constructor(){super(),this.Resource="/users/list",this.Method=ue.Get}}class Ke extends ae{constructor(e){super(),this.Resource="/users/user",this.Method=ue.Delete,this.Data=e}}class je{constructor(){this._guid="",this._cloudGuid="",this._name="",this._surname="",this._phone="",this._email="",this._isAccountOnline=!0,this._isAccountActive=!0,this._isAccountBanned=!0,this._notificationChannels=[],this._gender=fe.Unknown,this._accessLevel=ge.Any,this._localization=ve.En_Us,this._softwareVersion=""}get Guid(){return this._guid}set Guid(e){this._guid=e}get CloudGuid(){return this._cloudGuid}set CloudGuid(e){this._cloudGuid=e}get Name(){return this._name}set Name(e){this._name=e}get Surname(){return this._surname}set Surname(e){this._surname=e}get Phone(){return this._phone}set Phone(e){this._phone=e}get AccessLevel(){return this._accessLevel}set AccessLevel(e){this._accessLevel=e}get Email(){return this._email}set Email(e){this._email=e}get IsAccountOnline(){return this._isAccountOnline}set IsAccountOnline(e){this._isAccountOnline=e}get IsActive(){return this._isAccountActive}set IsActive(e){this._isAccountActive=e}get IsBanned(){return this._isAccountBanned}set IsBanned(e){this._isAccountBanned=e}get NotificationChannels(){return this._notificationChannels}set NotificationChannels(e){this._notificationChannels=e}get Gender(){return this._gender}set Gender(e){this._gender=e}get Localization(){return this._localization}set Localization(e){this._localization=e}get SoftwareVersion(){return this._softwareVersion}set SoftwareVersion(e){this._softwareVersion=e}GetUserProfilePictureAsync(){return $v.Get(We.ServiceName).GetUserProfilePictureAsync({Guid:this._guid})}SetUserProfilePictureAsync(e){return $v.Get(We.ServiceName).SetUserProfilePictureAsync({Guid:this._guid},e)}}var ze=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class Je{constructor(){this._onUserLoggedInEvent=new n,this._onUserLoggedOutEvent=new n,this._email="",this._password="",this._authToken="",this._loginTaskCompletionSource=this.CreateSessionCompletionSourceAsync(),this._alreadySubsribedToNetworkEvents=!1,this._user=null}CreateSessionCompletionSourceAsync(){return ze(this,void 0,void 0,(function*(){var e;null===(e=o.Log)||void 0===e||e.Debug(Je.ServiceName,"Creating _loginTaskCompletionSource"),this._loginTaskCompletionSource=new Promise((e=>{this.OnUserLoggedInEvent().Subscribe((t=>{var n;null===(n=o.Log)||void 0===n||n.Debug(Je.ServiceName,`Logged in as ${t.Name}, completing CreateSessionCompletionSourceAsync()`),e()}))}))}))}RestoreSessionAsync(){return ze(this,void 0,void 0,(function*(){var e;null===(e=o.Log)||void 0===e||e.Debug(Je.ServiceName,`Creating RestoreSessionAsync ${this._email} ${this._password}`),void 0!==this._user&&null!==this._user&&(yield this.UserLogInAsync(this._email,this._password))}))}WaitForSessionCreationAsync(){return ze(this,void 0,void 0,(function*(){return this._loginTaskCompletionSource}))}OnUserLoggedInEvent(){return this._onUserLoggedInEvent}OnUserLoggedOutEvent(){return this._onUserLoggedOutEvent}get User(){return this._user}UserLogOutAsync(){return ze(this,void 0,void 0,(function*(){var e,t,n=new ae;n.Resource="/users/user/logout",n.Method=ue.Put,this._email="",this._password="",(yield $v.Get(Ut.ServiceName).SendAndWaitForResponseAsync(n,2e4,!1)).Status==ce.OK?(this._onUserLoggedOutEvent.Invoke(this._user),null===(e=o.Log)||void 0===e||e.Debug(Je.ServiceName,"User has been logged out.")):null===(t=o.Log)||void 0===t||t.Debug(Je.ServiceName,"Failed to logout user!")}))}OnConnectionStateChanged(e){return ze(this,void 0,void 0,(function*(){switch(e){case he.Disconnected:case he.Failed:break;case he.Connected:$v.Get(Je.ServiceName).RestoreSessionAsync()}}))}AuthorizeAppAsync(e){return ze(this,void 0,void 0,(function*(){var t,n,r,s,i=$v.Get(Ut.ServiceName);const a=yield i.SendAndWaitForResponseAsync(new Ye(e),2e4,!1);if(a.Status==ce.OK&&null!=a.Data){this._authToken=e;var c=new je;return this._user=c,c.AccessLevel=a.Data.AccessLevel,c.Email=a.Data.Email,this._email=a.Data.Email,c.Gender=a.Data.Gender,c.Guid=a.Data.Guid,c.IsAccountOnline=a.Data.IsAccountOnline,c.Name=a.Data.Name,c.IsActive=a.Data.IsActive,c.IsBanned=a.Data.IsBanned,c.Phone=a.Data.Phone,c.Surname=a.Data.Surname,c.SoftwareVersion=a.Data.SoftwareVersion,this._alreadySubsribedToNetworkEvents||(this._alreadySubsribedToNetworkEvents=!0,i.OnConnectionStateChangedEvent().Subscribe(this.OnConnectionStateChanged),$v.Get(Ut.ServiceName).SubscribeTo("/info/users/user/loggedOut",(e=>ze(this,void 0,void 0,(function*(){var t,n;null===(t=o.Log)||void 0===t||t.Debug(Je.ServiceName,`User logged out: ${JSON.stringify(e.Data)}`),null===(n=this._onUserLoggedOutEvent)||void 0===n||n.Invoke(this._user)}))))),null===(t=o.Log)||void 0===t||t.Debug(Je.ServiceName,`Did logging in succeded?: ${a.Status==ce.OK}`),this._onUserLoggedInEvent.Invoke(this._user),c}return a.Status===ce.OperationNotPermitted?(null===(n=o.Log)||void 0===n||n.Debug(Je.ServiceName,`App login response: ${a.Data}`),me.AuthDisabled):a.Status===ce.ResourceDoesNotExists?(null===(r=o.Log)||void 0===r||r.Debug(Je.ServiceName,`App login response: ${a.Data}`),me.MethodNotSupported):(null===(s=o.Log)||void 0===s||s.Debug(Je.ServiceName,`App login response: ${a.Data}`),me.WrongAuthData)}))}UserLogInAsync(e,t){return ze(this,void 0,void 0,(function*(){var n,r,s=$v.Get(Ut.ServiceName);const i=yield s.SendAndWaitForResponseAsync(new Qe(e,t),2e4,!1);if(i.Status==ce.OK&&null!=i.Data){this._email=e,this._password=t;var a=new je;return this._user=a,a.AccessLevel=i.Data.AccessLevel,a.Email=i.Data.Email,a.Gender=i.Data.Gender,a.Guid=i.Data.Guid,a.IsAccountOnline=i.Data.IsAccountOnline,a.Name=i.Data.Name,a.IsActive=i.Data.IsActive,a.IsBanned=i.Data.IsBanned,a.Phone=i.Data.Phone,a.Surname=i.Data.Surname,a.SoftwareVersion=i.Data.SoftwareVersion,this._alreadySubsribedToNetworkEvents||(this._alreadySubsribedToNetworkEvents=!0,s.OnConnectionStateChangedEvent().Subscribe(this.OnConnectionStateChanged),$v.Get(Ut.ServiceName).SubscribeTo("/info/users/user/loggedOut",(e=>ze(this,void 0,void 0,(function*(){var t,n;null===(t=o.Log)||void 0===t||t.Debug(Je.ServiceName,`User logged out: ${JSON.stringify(e.Data)}`),null===(n=this._onUserLoggedOutEvent)||void 0===n||n.Invoke(this._user)}))))),null===(n=o.Log)||void 0===n||n.Debug(Je.ServiceName,`Did logging in succeded?: ${i.Status==ce.OK}`),this._onUserLoggedInEvent.Invoke(this._user),a}return null===(r=o.Log)||void 0===r||r.Debug(Je.ServiceName,`User login response: ${i.Data}`),me.WrongAuthData}))}GetServiceName(){return Je.ServiceName}}Je.ServiceName="SessionService";class Xe{constructor(e,t){this.Email="",this.Password="",this.Email=e,this.Password=t}}class Ye extends ae{constructor(e){super(),this.Data=e,this.Resource="/applications/app/auth",this.Method=ue.Put}}class Qe extends ae{constructor(e,t){super(),this.Data=new Xe(e,t),this.Resource="/users/user/login",this.Method=ue.Put}}class Ze{constructor(e){if(this.initialCount=e,this._running=0,this._waiting=[],this.Take=()=>{if(this._waiting.length>0&&this._running<this.initialCount){this._running++;const e=this._waiting.shift();null==e||e.Resolve({Release:this.Release})}},this.AcquireAsync=()=>this._running<this.initialCount?(this._running++,Promise.resolve({Release:this.Release})):new Promise(((e,t)=>{this._waiting.push({Resolve:e,Reject:t})})),this.Release=()=>{this._running--,this.Take()},this.Purge=()=>{this._waiting.forEach((e=>{e.Reject(new Error("The semaphore was purged and as a result this task has been cancelled"))})),this._running=0,this._waiting=[]},e<1)throw new Error(`The semaphore was created with a max value of ${e} but the max value cannot be less than 1`)}}var et=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class tt{constructor(){this._extensionInfoCache=new Map,this._protocolInfoCache=new Map,this._isExtensionInfoInitialized=!1,this._semaphore=new Ze(1)}GetServiceName(){return tt.ServiceName}GetExtensionsInfoAsync(e){return et(this,arguments,void 0,(function*(e,t=!1){var n;null===(n=o.Log)||void 0===n||n.Debug(tt.ServiceName,`Getting ExtensionsInfo, data loaded from cache: ${!t}`);var r=yield this._semaphore.AcquireAsync();if(this._isExtensionInfoInitialized&&!t||(yield this.GetExtensionInfoFromControllerAsync()),r.Release(),0==[...this._extensionInfoCache.values()].length)return[];if(null!=e){const t=this._extensionInfoCache.get(e);if(null==t)throw new ot("Cannot get ExtensionsInfo, extension not found.");return[t]}return[...this._extensionInfoCache.values()]}))}GetProtocolInfoAsync(e){return et(this,arguments,void 0,(function*(e,t=!1,n=!1){var r;if(null===(r=o.Log)||void 0===r||r.Debug(tt.ServiceName,`Getting ProtocolInfo, data loaded from cache: ${!t}`),t&&(yield this.GetProtocolExtensionInfoFromControllerAsync()),0!=[...this._protocolInfoCache.values()].length||n){if(0==[...this._protocolInfoCache.values()].length)throw new ot("Cannot get ProtocolInfo, controler may return empty list of Extensions or other unknown error occurs!")}else yield this.GetProtocolInfoAsync(e,!0,!0);if(null!=e){const t=this._protocolInfoCache.get(e);if(null==t)throw new ot("Cannot get ProtocolInfo, extension not found.");return[t]}return[...this._protocolInfoCache.values()]}))}GetExtensionInfoFromControllerAsync(){return et(this,void 0,void 0,(function*(){const e=new nt,t=yield $v.Get(Ut.ServiceName).SendAndWaitForResponseAsync(e,16e3,!1);if(null==t||null==t.Status)throw new ot("Cannot get ExtensionsInfo from controller, controller response does not contain data!");if(t.Status!=ce.OK)throw new ot(`Cannot get ExtensionsInfo from controller! Response status: ${t.Status}`);if(null==t.Data)throw new ot("Cannot get ExtensionsInfo from controller, controller response does not contain data!");t.Data.forEach((e=>{this._extensionInfoCache.set(e.ExtensionGuid,e)})),0!=[...this._extensionInfoCache.values()].length&&(this._isExtensionInfoInitialized=!0)}))}GetProtocolExtensionInfoFromControllerAsync(){return et(this,void 0,void 0,(function*(){var e;const t=new rt,n=yield $v.Get(Ut.ServiceName).SendAndWaitForResponseAsync(t,16e3,!1);if(null==n||null==n.Status)throw new ot("Cannot get ProtocolInfo from controller, controller response does not contain data!");switch(n.Status){case ce.OK:if(null==n.Data)throw new ot("Cannot get ProtocolInfo from controller, controller response does not contain data!");n.Data.forEach((e=>{this._protocolInfoCache.set(e.PublicGuid,e)}));break;case ce.ResourceDoesNotExists:null===(e=o.Log)||void 0===e||e.Debug(tt.ServiceName,"Cannot get ProtocolInfo from controller, controller software does not implement this yet, update controller to the newest software!");break;default:throw new ot(`Cannot get ProtocolInfo from controller! Response status: ${n.Status}`)}}))}}tt.ServiceName="StatisticsInfoService";class nt extends ae{constructor(){super(),this.Resource="/controller/extensions/",this.Method=ue.Get}}class rt extends ae{constructor(){super(),this.Resource="/controller/protocols/",this.Method=ue.Get}}class ot extends Error{constructor(e){super(e),this.message=e,this.name="CannotGetExtensions"}}var st=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class it{GetServiceName(){return it.ServiceName}constructor(){this._connection=null,this._session=null,this._localStorage=null,this._onEnteredConfigurationEvent=new Te,this._onExitedConfigurationEvent=new Te,this._onConfigurationTimeCheckedEvent=new n,this._configurationTime=new Date,this._appEnteredConfigurationMode=!1,this._didConfigurationChange=!1,this._synchronizationTaskCompletionSource=new Promise((e=>{$v.Get(Je.ServiceName).OnUserLoggedInEvent().Subscribe((t=>st(this,void 0,void 0,(function*(){this._didConfigurationChange=yield this.CheckIfConfigurationHasChangedAsync(),this._didConfigurationChange&&$v.Get(Le.ServiceName).ClearCache(),e()}))))})),this._connection=$v.Get(Ut.ServiceName),this._session=$v.Get(Je.ServiceName),this._localStorage=$v.Get(s.ServiceName),this._connection.SubscribeTo("/info/configuration/mode/entry",(e=>{$v.Get(Le.ServiceName).ClearCache(),this._appEnteredConfigurationMode||this._onEnteredConfigurationEvent.Invoke()})),this._connection.SubscribeTo("/info/configuration/mode/exit",(e=>{$v.Get(Le.ServiceName).ClearCache(),this._appEnteredConfigurationMode||this._onExitedConfigurationEvent.Invoke()}))}ImportControllerConfigurationAsync(e){return st(this,void 0,void 0,(function*(){var t,n,r;let o=yield e.text(),s=this.SplitStringBySize(o),i=new at("");i.Status=ce.MultiDataResponseStart;let a=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(i,6e3,!1);if(void 0===a||(null==a?void 0:a.Status)!=ce.OK)return ce.Error;for(const e of s){let t=new at(e);t.Status=ce.MultiDataResponse;let r=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(t,6e3,!1);if(void 0===r||(null==r?void 0:r.Status)!=ce.OK)return ce.Error}i.Status=ce.MultiDataResponseStop;let c=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(i,12e4,!1);return void 0===c||(null==c?void 0:c.Status)!=ce.OK?ce.Error:ce.OK}))}SplitStringBySize(e,t=1e5){const n=Math.floor(t/2),r=[];let o=0;for(;o<e.length;){let s=e.slice(o,o+n);for(;new Blob([s]).size>t;)s=s.slice(0,-1);r.push(s),o+=s.length}return r}GetControllerSystemTimeAsync(){return st(this,void 0,void 0,(function*(){var e,t;try{var n=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new ft,8e3,!1);return null==n||null==n.Status?ce.Error:n.Status!=ce.OK?n.Status:null==n.Data?ce.ResourceIsNotAvailable:new Date(n.Data)}catch(e){return null===(t=o.Log)||void 0===t||t.Error(it.ServiceName,`Cannot get current controller time! ${e}`),ce.FatalError}}))}SetControllerSystemTimeAsync(e){return st(this,void 0,void 0,(function*(){var t,n;try{var r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new vt(e.toISOString()),8e3,!1);return null==r||null==r.Status?ce.Error:r.Status}catch(e){return null===(n=o.Log)||void 0===n||n.Error(it.ServiceName,`Cannot set current controller time! ${e}`),ce.FatalError}}))}StartNtpTimeSynchronizationAsync(){return st(this,void 0,void 0,(function*(){var e,t;try{var n=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new mt,8e3,!1);return null==n||null==n.Status?ce.Error:n.Status}catch(e){return null===(t=o.Log)||void 0===t||t.Error(it.ServiceName,`Cannot set current controller time! ${e}`),ce.FatalError}}))}FactoryResetAsync(e){return st(this,void 0,void 0,(function*(){var t,n;try{$v.Get(Le.ServiceName).ClearCache();var r=null===(n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new lt,2e3,!1))||void 0===n?void 0:n.Status;if(r==ce.OK){let t=300,n=0,r=100/t,o=setInterval((()=>{n+=r,e(parseFloat(n.toPrecision(1)))}),1e3);return yield se.Delay(1e3*t),$v.Get(Le.ServiceName).ClearCache(),clearInterval(o),ce.OK}return r}catch(e){return ce.FatalError}}))}RollbackLastUpdateAsync(e){return st(this,void 0,void 0,(function*(){var t,n;try{$v.Get(Le.ServiceName).ClearCache();var r=null===(n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new dt,2e3,!1))||void 0===n?void 0:n.Status;if(r==ce.OK){let t=420,n=0,r=100/t,o=setInterval((()=>{n+=r,e(parseFloat(n.toPrecision(1)))}),1e3);return yield se.Delay(1e3*t),$v.Get(Le.ServiceName).ClearCache(),clearInterval(o),ce.OK}return r}catch(e){return ce.FatalError}}))}RestartControllerAsync(e){return st(this,void 0,void 0,(function*(){var t,n;try{$v.Get(Le.ServiceName).ClearCache();var r=null===(n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new ut,2e3,!1))||void 0===n?void 0:n.Status;if(r==ce.OK){let t=240,n=0,r=100/t,o=setInterval((()=>{n+=r,e(parseFloat(n.toPrecision(1)))}),1e3);return yield se.Delay(1e3*t),$v.Get(Le.ServiceName).ClearCache(),clearInterval(o),ce.OK}return r}catch(e){return ce.FatalError}}))}DidCofigurationChangeAsync(){return st(this,void 0,void 0,(function*(){return yield this._synchronizationTaskCompletionSource,Promise.resolve(this._didConfigurationChange)}))}GetLastKnownConfigurationChangeTime(){var e;const t=null===(e=this._localStorage)||void 0===e?void 0:e.Read(this.GetServiceName(),"last_configuration_time");return null!=t?new Date(t):new Date}SaveLastConfigurationChangeTime(e){var t;null===(t=this._localStorage)||void 0===t||t.Save(this.GetServiceName(),"last_configuration_time",e.toString())}EnterConfigurationModeAsync(){return st(this,void 0,void 0,(function*(){var e;this._appEnteredConfigurationMode=!0,$v.Get(Le.ServiceName).ClearCache(),yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new ht,2e4,!1)}))}ExitConfigurationModeAsync(){return st(this,void 0,void 0,(function*(){var e;this._appEnteredConfigurationMode=!0,$v.Get(Le.ServiceName).ClearCache(),yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new pt,2e4,!1),$v.Get(Le.ServiceName).ClearCache(),this._appEnteredConfigurationMode=!1}))}OnEnteredConfigurationEvent(){return this._onEnteredConfigurationEvent}OnExitedConfigurationEvent(){return this._onExitedConfigurationEvent}OnConfigurationTimeCheckedEvent(){return this._onConfigurationTimeCheckedEvent}GetLastConfigurationChangeTimeAsync(){return st(this,void 0,void 0,(function*(){var e;const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new gt,2e4,!1);if(null==t||(null==t?void 0:t.Status)!=ce.OK)throw new Error("Failed to get last configuration change time");return this._configurationTime=new Date(t.Data),this._configurationTime}))}CheckIfConfigurationHasChangedAsync(){return st(this,void 0,void 0,(function*(){const e=yield this.GetLastConfigurationChangeTimeAsync();return this.GetLastKnownConfigurationChangeTime().toString()!=e.toString()&&(this.SaveLastConfigurationChangeTime(e),this._onConfigurationTimeCheckedEvent.Invoke(e),$v.Get(Le.ServiceName).ClearCache(),!0)}))}CanExportOrImportControllerConfigurationAsync(){return st(this,void 0,void 0,(function*(){try{let e=yield $v.Get(tt.ServiceName).GetExtensionsInfoAsync(),t=$v.Get(Je.ServiceName).User;return null!=t&&null!=t.AccessLevel&&t.AccessLevel>=ge.Admin&&e.any((e=>"f4f0f066-7c43-46c6-a0bd-aedf93903dc0"==e.ExtensionGuid))}catch(e){return!1}}))}ExportControllerConfigurationAsync(){return st(this,void 0,void 0,(function*(){var e;let t=[],n=null;yield null===(e=this._connection)||void 0===e?void 0:e.SendAndHandleResponseAsync(new ct,3e4,(e=>{switch(e.Status){case ce.MultiDataResponseStart:break;case ce.MultiDataResponse:null!=e.Data&&void 0!==e.Data&&t.push(e.Data);break;case ce.MultiDataResponseStop:break;case ce.Error:case ce.FatalError:n=new Ee(pe.CannotExportConfiguration,"Cannot export configuration! Controller returned error!")}}),!0);let r=JSON.stringify(JSON.parse(t.join("")),null,2);return console.log(r),null!=n?n:$v.ExportStringAsFileToDownload(this.GetCurrentTimestampedFilename(),r)}))}GetCurrentTimestampedFilename(){var e,t;const n=new Date,r=n.getHours().toString().padStart(2,"0"),o=n.getMinutes().toString().padStart(2,"0"),s=n.getDate().toString().padStart(2,"0"),i=(n.getMonth()+1).toString().padStart(2,"0"),a=n.getFullYear().toString();return`${null===(t=null===(e=this._connection)||void 0===e?void 0:e.GetAuthorizationInfo())||void 0===t?void 0:t.SerialNumber}_${r}-${o}-${s}-${i}-${a}-config.cexp`}}it.ServiceName="ControllerConfigurationService";class at extends ae{constructor(e){super(),this.Resource="/configuration/backup/import",this.Method=ue.Put,this.Data=e}}class ct extends ae{constructor(){super(),this.Resource="/configuration/backup/export",this.Method=ue.Get}}class ut extends ae{constructor(){super(),this.Resource="/controller/restart",this.Method=ue.Post}}class lt extends ae{constructor(){super(),this.Resource="/controller/factory_reset",this.Method=ue.Post}}class dt extends ae{constructor(){super(),this.Resource="/controller/backups/restore/previous",this.Method=ue.Post}}class ht extends ae{constructor(){super(),this.Resource="/system/configuration/mode/entry",this.Method=ue.Put}}class pt extends ae{constructor(){super(),this.Resource="/system/configuration/mode/exit",this.Method=ue.Put}}class gt extends ae{constructor(){super(),this.Resource="/system/configuration/change/time",this.Method=ue.Get}}class ft extends ae{constructor(){super(),this.Resource="/system/time",this.Method=ue.Get}}class vt extends ae{constructor(e){super(),this.Resource="/system/time",this.Method=ue.Put,this.Data=e}}class mt extends ae{constructor(){super(),this.Resource="/system/time/ntp/update",this.Method=ue.Put}}var yt,wt,St,At,_t,Ct,Dt,Tt,kt,Et,Gt,Nt,bt,It,Rt,Pt,Ot=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class Ut{constructor(){this._logPackets=!1,this._pingInterval=5e3,this._disconnectedOnPurpose=!1,this._defaultPacketsBrokerAddress="packets-broker1.tr7.pl",this._serversBrokerAddress="https://servers-broker.tr7.pl",this._serversBrokerAddressList=["https://servers-broker.tr7.pl","https://broker.tr7.pl"],this._allBrokersChecked=!1,this._address="packets-broker1.tr7.pl",this._isEstabilished=!1,this._timeout=1e4,this._dataReceivedEvent=new n,this._pongReceivedEvent=new Te,this._authorizationReceivedEvent=new n,this._registrationReceivedEvent=new n,this._streamStartedEvent=new n,this._connectionStateChangedEvent=new n,this._errorOccuredEvent=new n,this._log=$v.Get(r.ServiceName),this._controllerConfiguration=null,this._cache=null,this._session=null,this._packetsBrokerServers=["packets-broker1.tr7.pl","br1.tr7.pl","br1.exala.pl"],this._lastReceivedPacketTime=Date.now(),this._connectedAtLeastOnce=!1}SubscribeTo(e,t){let n=n=>{n.Resource===e&&t(n)};return this.OnDataReceivedEvent().Subscribe(n),()=>this.OnDataReceivedEvent().Unsubscribe(n)}GetControllerSerialNumber(){return this._serialId}GetControllerPin(){return this._PIN}GetServiceName(){return Ut.ServiceName}EnablePacketsLogging(){this._logPackets=!0}DisablePacketsLogging(){this._logPackets=!1}InitializeConnection(){if(this._controllerConfiguration=$v.Get(it.ServiceName),this._cache=$v.Get(Le.ServiceName),this._session=$v.Get(Je.ServiceName),this._connection){try{this._connection.stop()}catch(e){}this._connection=void 0}if(!this._address)throw new Error("Domain is not set");if(!this._serialId)throw new Error("SerialId is not set");if(!this._PIN)throw new Error("PIN is not set");this._connection=(new re).withUrl(`https://${this._address}/broker`).build(),this._dataReceivedEvent.Subscribe((e=>{this._lastReceivedPacketTime=Date.now()})),setInterval((()=>Ot(this,void 0,void 0,(function*(){yield this.PingControllerAsync()}))),this._pingInterval)}GetAuthorizationInfo(){return null!=this._serialId&&null!=this._PIN?new Ce(this._serialId,this._PIN):null}SetServersBrokerAddress(e){this._serversBrokerAddress=e}SetDefaultPacketsBrokerAddress(e){this._defaultPacketsBrokerAddress=e,this._address=e}GetServerAddressAsync(){return Ot(this,void 0,void 0,(function*(){try{let e=yield fetch(`${this._serversBrokerAddress}/api/connections/broker/whichserver/${this._serialId}`);if(200===e.status){let t=yield e.text();return t?(this._log.Debug(Ut.ServiceName,`Got server address: ${t}`),t):(this._log.Error(Ut.ServiceName,`Failed to get server address, status: ${e.status}`),null)}return this._allBrokersChecked?(this._allBrokersChecked=!1,null):204===e.status?(this.swapBrokersAsync(!1),this.GetServerAddressAsync()):(this._log.Error(Ut.ServiceName,`Failed to get server address, status: ${e.status}`),null)}catch(e){return this._log.Error(Ut.ServiceName,e),null}}))}ConnectAsync(e){return Ot(this,void 0,void 0,(function*(){return this._connectedAtLeastOnce=!1,this._address=e,yield this.connectAsync()}))}AuthorizeAsync(e){return new Promise(((t,n)=>Ot(this,void 0,void 0,(function*(){var n;let r=0,o=e=>{window.clearTimeout(r),this._log.Debug(Ut.ServiceName,`Got authorization result: ${e}`),this._connectedAtLeastOnce=!0,t(e)};r=window.setTimeout((()=>{window.clearTimeout(r),this._authorizationReceivedEvent.Unsubscribe(o),t(!1)}),2e3),this._log.Debug(Ut.ServiceName,`Authorizing to cloud using: ${e.SerialNumber} PIN: ${e.PIN}`),this._authorizationReceivedEvent.Subscribe(o),yield null===(n=this._connection)||void 0===n?void 0:n.send("AuthorizeTo",e.SerialNumber,e.PIN)}))))}ConnectAndAuthorizeAsync(e){return Ot(this,void 0,void 0,(function*(){this._connectedAtLeastOnce=!1,$v.WorksInContextOf=e.SerialNumber,this._serialId=e.SerialNumber,this._PIN=e.PIN;var t=yield this.GetServerAddressAsync();if(t&&null!=t&&""!=t){this._log.Debug(Ut.ServiceName,`Got packets broker address: ${t}`),this.SetDefaultPacketsBrokerAddress(t);let r=yield this.connectAsync();if(r!=de.Connected)return r;var n=yield this.AuthorizeAsync(e);if(!n){if(this._connectedAtLeastOnce=!1,yield this.swapBrokersAsync(),!this._allBrokersChecked)return this.ConnectAndAuthorizeAsync(e);this._allBrokersChecked=!1}return n&&(this._connectedAtLeastOnce=!0),n?de.Connected:de.AuthorizationFailed}{let t=de.ControllerIsNotConnected;this._log.Warning(Ut.ServiceName,"Server did not return packets broker address, trying to connect to known brokers.");for(let n of this._packetsBrokerServers){this._log.Warning(Ut.ServiceName,`Testing connection to ${n}`),this.SetDefaultPacketsBrokerAddress(n);try{yield this.DisconnectAsync()}catch(e){}this._log.Warning(Ut.ServiceName,`Connecting to server: ${n}`);let r=yield this.connectAsync();if(this._log.Warning(Ut.ServiceName,`Connection result: ${r}`),r==de.Connected){if(yield this.AuthorizeAsync(e))return t=de.Connected,this._connectedAtLeastOnce=!0,t;this._log.Warning(Ut.ServiceName,`Failed to authorize in ${n}`)}}return t}}))}swapBrokersAsync(){return Ot(this,arguments,void 0,(function*(e=!0){e&&(yield this.DisconnectAsync());var t=this._serversBrokerAddressList.lastIndexOf(this._serversBrokerAddress);t+1<this._serversBrokerAddressList.length?(this._serversBrokerAddress=this._serversBrokerAddressList[t+1],this._log.Debug(`Changing address of next broker from: ${this._serversBrokerAddressList[t]} to: ${this._serversBrokerAddressList[t+1]}`)):(this._log.Debug(`All brokers checked, changing address to first one: ${this._serversBrokerAddressList[0]}`),this._allBrokersChecked=!0,this._serversBrokerAddress=this._serversBrokerAddressList[0])}))}connectAsync(){return Ot(this,void 0,void 0,(function*(){var e,t,n,r,o,s,i,a,c,u,l;if(de.FailedToConnect,!this._address)return Promise.resolve(de.ControllerIsNotConnected);this._disconnectedOnPurpose&&(this._disconnectedOnPurpose=!1),this._connectionStateChangedEvent,this.InitializeConnection(),null===(e=this._connection)||void 0===e||e.onclose((()=>Ot(this,void 0,void 0,(function*(){var e,t;if(this._disconnectedOnPurpose?this._log.Info(Ut.ServiceName,"Connection closed on demand."):this._log.Error(Ut.ServiceName,"Connection closed"),$v.Get(Je.ServiceName).CreateSessionCompletionSourceAsync(),this.FireConnectionStateChanged(),(null===(e=this._connection)||void 0===e?void 0:e.state)===D.Disconnected&&!this._disconnectedOnPurpose)return yield null===(t=this._connection)||void 0===t?void 0:t.start(),null!=this._connection&&(yield this.AuthorizeAsync(new Ce(this._serialId,this._PIN)))?(this._log.Info(Ut.ServiceName,"Reconnected from onClose"),this.FireConnectionStateChanged()):de.FailedToConnect})))),null===(t=this._connection)||void 0===t||t.onreconnected((()=>Ot(this,void 0,void 0,(function*(){if(yield this.AuthorizeAsync(new Ce(this._serialId,this._PIN)))return this._log.Info(Ut.ServiceName,"Reconnected from onreconnected"),this.FireConnectionStateChanged()})))),null===(n=this._connection)||void 0===n||n.onreconnecting((()=>(this._log.Warning(Ut.ServiceName,"Reconnecting..."),this.FireConnectionStateChanged()))),yield null===(r=this._connection)||void 0===r?void 0:r.start(),null===(o=this._connection)||void 0===o||o.on("Pong",(()=>{this._log.Debug(Ut.ServiceName,"Pong received <-"),this._pongReceivedEvent.Invoke()})),null===(s=this._connection)||void 0===s||s.on("Registration",(e=>{var t;null===(t=this._registrationReceivedEvent)||void 0===t||t.Invoke(e)})),null===(i=this._connection)||void 0===i||i.on("Authorization",(e=>{var t;null===(t=this._authorizationReceivedEvent)||void 0===t||t.Invoke(e)})),null===(a=this._connection)||void 0===a||a.on("SendError",((e,t)=>Ot(this,void 0,void 0,(function*(){e.startsWith("NotAuthorized:")?(this._log.Error(Ut.ServiceName,"Failed to authorize!"),yield this.AuthorizeAsync(new Ce(this._serialId,this._PIN))):(this._log.Error(Ut.ServiceName,`Server returned error: ${e} ${t}`),this._errorOccuredEvent.Invoke([e,t]))})))),null===(c=this._connection)||void 0===c||c.on("ControllerDisconnected",(e=>Ot(this,void 0,void 0,(function*(){this._serialId===e&&(this._log.Warning(Ut.ServiceName,`Controller disconnected: ${e}`),yield this.DisconnectAsync())})))),null===(u=this._connection)||void 0===u||u.on("StreamStarted",(e=>{var t;null===(t=this._streamStartedEvent)||void 0===t||t.Invoke(e)}));let d=this._dataReceivedEvent;return null===(l=this._connection)||void 0===l||l.on("Data",((e,t)=>{const n=JSON.parse(t);(this._logPackets||!0===window.packets)&&this._log.Debug(Ut.ServiceName,`Received data:\n${JSON.stringify(n,null,2)}`),d.Invoke(n)})),null!=this._connection?this.FireConnectionStateChanged():de.FailedToConnect}))}FireConnectionStateChanged(){var e;const t=this._connectionStateChangedEvent;switch(null===(e=this._connection)||void 0===e?void 0:e.state){case D.Connected:return t.Invoke(he.Connected),de.Connected;case D.Connecting:return t.Invoke(he.Connecting),de.Connected;case D.Disconnected:if(this._connectedAtLeastOnce)return t.Invoke(he.Disconnected),de.FailedToConnect;break;case D.Disconnecting:if(this._connectedAtLeastOnce)return t.Invoke(he.Disconnecting),de.FailedToConnect;break;case D.Reconnecting:return t.Invoke(he.Reconnecting),de.FailedToConnect}return de.FailedToConnect}DisconnectAsync(){return Ot(this,void 0,void 0,(function*(){var e;this._disconnectedOnPurpose=!0,yield null===(e=this._connection)||void 0===e?void 0:e.stop()}))}IsConnected(){var e;return(null===(e=this._connection)||void 0===e?void 0:e.state)===D.Connected}SendAndWaitForResponseAsync(e,t,n,r=!0){return this.SendAndWaitForResponseWithRepeatAsync(e,t,n,r)}SendAndWaitForResponseWithRepeatAsync(e,t,n){return Ot(this,arguments,void 0,(function*(e,t,n,r=!0,o=!0){var s,i,a;if(e.Method===ue.Get&&n&&!(yield null===(s=this._controllerConfiguration)||void 0===s?void 0:s.DidCofigurationChangeAsync())){let t=null===(i=this._cache)||void 0===i?void 0:i.GetCache(e);if(null!==t)return Promise.resolve(t)}let c=0;const u=Date.now();if(!this.IsConnected())throw new Error("Connection is not established");return"/users/user/login"!==e.Resource&&(yield null===(a=this._session)||void 0===a?void 0:a.WaitForSessionCreationAsync()),new Promise(((s,i)=>Ot(this,void 0,void 0,(function*(){let a=i=>Ot(this,void 0,void 0,(function*(){var l,d,h,p;if((null==i?void 0:i.TransactionId)==e.TransactionId){window.clearTimeout(c),this._dataReceivedEvent.Unsubscribe(a);const g=Date.now()-u;o&&this._log.Debug(Ut.ServiceName,`Received response for: ${null==i?void 0:i.Resource} ${null==i?void 0:i.Method} id: ${null==i?void 0:i.TransactionId} in ${g}ms`),e.Method===ue.Get&&n&&(null===(l=this._cache)||void 0===l||l.Cache(i)),!n&&(null==i?void 0:i.Status)===ce.UserIsNotLoggedIn&&r&&((null===(d=this._session)||void 0===d?void 0:d.OnUserLoggedOutEvent()).Invoke(null===(h=this._session)||void 0===h?void 0:h.User),yield null===(p=this._session)||void 0===p?void 0:p.RestoreSessionAsync(),s(yield this.SendAndWaitForResponseWithRepeatAsync(e,t,n,!1,o))),s(i)}}));if(this._dataReceivedEvent.Subscribe(a),c=window.setTimeout((()=>{this._dataReceivedEvent.Unsubscribe(a);let t=`Response timeout, resource: ${e.Resource} method: ${e.Method} transaction id: ${e.TransactionId}`;this._log.Error(Ut.ServiceName,t),i(new p(t))}),t),!(yield this.SendAsync(e,o))){let t=`Failed to send request, resource: ${e.Resource} method: ${e.Method} transaction id: ${e.TransactionId}`;i(new Error(t))}}))))}))}SendAndHandleResponseAsync(e,t,n){return Ot(this,arguments,void 0,(function*(e,t,n,r=!0){var o;let s=0;const i=Date.now();if(!this.IsConnected())throw new Error("Connection is not established");return"/users/user/login"!==e.Resource&&(yield null===(o=this._session)||void 0===o?void 0:o.WaitForSessionCreationAsync()),new Promise(((o,a)=>Ot(this,void 0,void 0,(function*(){const c=()=>window.setTimeout((()=>{this._dataReceivedEvent.Unsubscribe(u);let t=`Response timeout, resource: ${e.Resource} method: ${e.Method} transaction id: ${e.TransactionId}`;this._log.Error(Ut.ServiceName,t),a(new p(t))}),t);let u=l=>Ot(this,void 0,void 0,(function*(){var d,h,p;if((null==l?void 0:l.TransactionId)==e.TransactionId){window.clearTimeout(s);const g=Date.now()-i;switch((r||!0===window.packets)&&this._log.Debug(Ut.ServiceName,`Received response for: ${null==l?void 0:l.Resource} ${null==l?void 0:l.Method} id: ${null==l?void 0:l.TransactionId} in ${g}ms`),(null==l?void 0:l.Status)===ce.UserIsNotLoggedIn&&(this._dataReceivedEvent.Unsubscribe(u),(null===(d=this._session)||void 0===d?void 0:d.OnUserLoggedOutEvent()).Invoke(null===(h=this._session)||void 0===h?void 0:h.User),yield null===(p=this._session)||void 0===p?void 0:p.RestoreSessionAsync(),o(yield this.SendAndHandleResponseAsync(e,t,n,r))),null==l?void 0:l.Status){case ce.MultiDataResponseStart:case ce.MultiDataResponse:n(l),s=c();break;case ce.MultiDataResponseStop:case ce.FatalError:case ce.Error:n(l),this._dataReceivedEvent.Unsubscribe(u),o();break;default:let t=`Failed to process MultiDataResponse - recived incorrect response status: ${null==l?void 0:l.Status} method: ${e.Method} transaction id: ${e.TransactionId}\n make sure that the requested endpoint uses MultiDataResponse, otherwise use SendAndWaitForResponseAsync<T> method.`;a(new Error(t))}}}));if(this._dataReceivedEvent.Subscribe(u),s=c(),!(yield this.SendAsync(e,r))){let t=`Failed to send request, resource: ${e.Resource} method: ${e.Method} transaction id: ${e.TransactionId}`;a(new Error(t))}}))))}))}SendAndHandleStreamAsync(e,t){return Ot(this,arguments,void 0,(function*(e,t,n=!0){var r;let o=0;const s=Date.now();if(!this.IsConnected())throw new Error("Connection is not established");return"/users/user/login"!==e.Resource&&(yield null===(r=this._session)||void 0===r?void 0:r.WaitForSessionCreationAsync()),new Promise(((r,i)=>Ot(this,void 0,void 0,(function*(){if(!(yield this.SendAsync(e,n))){let t=`Failed to send request, resource: ${e.Resource} method: ${e.Method} transaction id: ${e.TransactionId}`;i(new Error(t))}let a=a=>Ot(this,void 0,void 0,(function*(){var c;if(a==e.TransactionId){window.clearTimeout(o);const u=Date.now()-s;(n||!0===window.packets)&&this._log.Debug(Ut.ServiceName,`Received stream registration message for stream ${a} in ${u}ms`),null===(c=this._connection)||void 0===c||c.stream("WatchStream",e.TransactionId).subscribe({next:e=>{t.Next(e),(n||!0===window.packets)&&this._log.Debug(Ut.ServiceName,`Received stream packet for stream ${a}`)},complete:()=>{t.Complete(),(n||!0===window.packets)&&this._log.Debug(Ut.ServiceName,`Received stream complete message for stream ${a}`),r()},error:n=>{t.Error(n);const r=`Failed to subscribe for stream: ${e.TransactionId}, error: ${n}`;i(new De(r))}})}}));this._streamStartedEvent.Subscribe(a),o=(()=>window.setTimeout((()=>{this._streamStartedEvent.Unsubscribe(a);let t=`Waiting for stream timeout occurs, stream was not registered in 8000ms, make sure that method supports streaming! Resource: ${e.Resource} method: ${e.Method} stream/transaction id: ${e.TransactionId}`;this._log.Error(Ut.ServiceName,t),i(new p(t))}),8e3))()}))))}))}PingControllerAsync(){return Ot(this,void 0,void 0,(function*(){var e;if((null===(e=this._connection)||void 0===e?void 0:e.state)!==D.Connected)return!1;if(null!==this._lastReceivedPacketTime&&Date.now()-this._lastReceivedPacketTime<this._pingInterval)return!1;let t=new ae;return t.Resource="/system/ping",t.Method=ue.Get,yield this.SendAndWaitForResponseAsync(t,2e3,!1,!1).then((()=>!0)).catch((()=>!1))}))}SendAsync(e,t=!1){if(!this.IsConnected())throw new Error("Connection is not established");return new Promise((n=>{var r;this._logPackets||!0===window.packets?this._log.Debug(Ut.ServiceName,`Sent DataFrame ${e.Resource} ${e.Method} transaction id: ${e.TransactionId} data:\n${JSON.stringify(e,null,2)}`):t&&this._log.Debug(Ut.ServiceName,`Sent DataFrame ${e.Resource} ${e.Method} transaction id: ${e.TransactionId}`),null===(r=this._connection)||void 0===r||r.invoke("SendTo",this._serialId,e).then((()=>{n(!0)})).catch((e=>{this._log.Error(Ut.ServiceName,`${e}`),n(!1)}))}))}OnDataReceivedEvent(){return this._dataReceivedEvent}OnConnectionStateChangedEvent(){return this._connectionStateChangedEvent}OnErrorOccuredEvent(){return this._errorOccuredEvent}}Ut.ServiceName="ExalusConnectionService",function(e){e[e.NoTasksExecuting=0]="NoTasksExecuting",e[e.ExecutingTasks=1]="ExecutingTasks"}(yt||(yt={})),(Nt=wt||(wt={}))[Nt.Default=0]="Default",Nt[Nt.Monostable=1]="Monostable",Nt[Nt.Bistable=2]="Bistable",Nt[Nt.Gate=3]="Gate",Nt[Nt.Gateway=4]="Gateway",function(e){e[e.None=0]="None",e[e.OnOff=1]="OnOff",e[e.OnOffLights=2]="OnOffLights",e[e.OnOffWithDelay=3]="OnOffWithDelay",e[e.GateSwitchState=4]="GateSwitchState",e[e.GatePulse=5]="GatePulse",e[e.GateOpenClose=6]="GateOpenClose",e[e.GatewayOpenClose=7]="GatewayOpenClose",e[e.GatewayPulse=8]="GatewayPulse",e[e.Monostable=9]="Monostable",e[e.Dimmer=10]="Dimmer",e[e.Blind=11]="Blind",e[e.Roller=12]="Roller",e[e.TemperatureSensor=13]="TemperatureSensor",e[e.BrightnessSensor=14]="BrightnessSensor",e[e.HumiditySensor=15]="HumiditySensor",e[e.PowerMeter=16]="PowerMeter",e[e.RGBLight=17]="RGBLight",e[e.RGBWLight=18]="RGBWLight",e[e.LightsWarmth=19]="LightsWarmth",e[e.TemperatureControl=20]="TemperatureControl",e[e.BlindsWithPrecisePosition=21]="BlindsWithPrecisePosition",e[e.MovementSensor=21]="MovementSensor",e[e.SimpleRemote=22]="SimpleRemote",e[e.BlindsRemote=23]="BlindsRemote",e[e.DistanceSensor=24]="DistanceSensor",e[e.Multisensor=25]="Multisensor",e[e.IOTransmitter=26]="IOTransmitter",e[e.DoorOpenClose=27]="DoorOpenClose",e[e.WindSensor=28]="WindSensor",e[e.BatterySensor=29]="BatterySensor",e[e.PressureSensor=30]="PressureSensor"}(St||(St={}));class Mt{constructor(){this._type=_t.Unknown,this._interfaceType=""}get Type(){return this._type}get InterfaceType(){return this._interfaceType}set InterfaceType(e){this._interfaceType=e,this._type=e}}(bt=At||(At={}))[bt.Unknown=0]="Unknown",bt[bt.BlindMotor=1]="BlindMotor",bt[bt.DinModule=2]="DinModule",bt[bt.DinModuleWithAntenna=3]="DinModuleWithAntenna",bt[bt.Remote=4]="Remote",bt[bt.RemoteForBlinds=5]="RemoteForBlinds",bt[bt.RemoteForFacadeBlinds=6]="RemoteForFacadeBlinds",bt[bt.MovementSensor=7]="MovementSensor",bt[bt.TemperatureSensor=8]="TemperatureSensor",bt[bt.HumiditySensor=9]="HumiditySensor",bt[bt.DinPowerMeter=10]="DinPowerMeter",bt[bt.Intercom=11]="Intercom",bt[bt.SecurityCamera=12]="SecurityCamera",bt[bt.Multisensor=13]="Multisensor",bt[bt.FloodSensor=14]="FloodSensor",bt[bt.FlushMountedReceiver=15]="FlushMountedReceiver",bt[bt.FlushMountedBlindController=16]="FlushMountedBlindController",bt[bt.FlushMountedDimmer=17]="FlushMountedDimmer",bt[bt.FlushMountedRelay=18]="FlushMountedRelay",bt[bt.FlushMountedGateController=19]="FlushMountedGateController",bt[bt.WindSensor=20]="WindSensor",bt[bt.FlushMountedGateAndGatewayController=21]="FlushMountedGateAndGatewayController",bt[bt.AirPressureSensor=22]="AirPressureSensor",bt[bt.LightBrightnessSensor=23]="LightBrightnessSensor",bt[bt.ReedSensor=24]="ReedSensor",bt[bt.FlushMountedTransceiver=25]="FlushMountedTransceiver",bt[bt.FlushMountedRGBLightController=26]="FlushMountedRGBLightController",bt[bt.WallMountedThermoregulator=27]="WallMountedThermoregulator",bt[bt.ImpulseCounter=28]="ImpulseCounter",bt[bt.FlushMountedFacadeController=29]="FlushMountedFacadeController",bt[bt.WallMountedGateController=30]="WallMountedGateController",bt[bt.WallMountedRGBLightController=31]="WallMountedRGBLightController",bt[bt.WallMountedDimmer=32]="WallMountedDimmer",bt[bt.WallMountedRemote=33]="WallMountedRemote",bt[bt.DinRelay=34]="DinRelay",bt[bt.DinReceiver=35]="DinReceiver",bt[bt.DinBlindController=36]="DinBlindController",bt[bt.DinTransceiver=37]="DinTransceiver",bt[bt.SocketPlugIn=38]="SocketPlugIn",bt[bt.WallMountedRelay=39]="WallMountedRelay",bt[bt.Retransmitter=40]="Retransmitter",function(e){e.Unknown="Unknown",e.SetBlindPosition="IBlindPosition",e.SetBlindPositionSimple="IBlindPositionSimple",e.SetBlindMicroventilation="IMicroventilation",e.TurnOff="IChannelOff",e.TurnOn="IChannelOn",e.TurnOnWithTime="IChannelOnWithTime",e.TogleState="IChannelSwitchState",e.SetLightBrightnessDynamicly="IDynamicLightBrightness",e.SetLightBrightness="ILightBrightness",e.SetLightColor="ILightColor",e.SetLightTemperature="ILightTemperature",e.PairDevice="IPair",e.UnpairDevice="IUnpair",e.IdentifyDevice="IIdentifyDevice",e.GetChannelsState="IGetDeviceState",e.GetPowerMeasurements="IGetPowerMeasurements",e.GetAvailableData="IGetAvailableData",e.MultipleDataRequest="IMultipleDataRequest",e.SetBlindOpenCloseTime="ISetBlindOpenCloseTime",e.SetTemperature="IChangeTemperature",e.SetGatePosition="IGatePosition",e.SetGatewayPosition="IGatewayPosition",e.ChangeGatePositionPulse="IGatePulse",e.ChangeGatewayPositionPulse="IGatewayPulse",e.SetFacadePosition="IFacadePosition",e.GetFacadeType="IGetFacadeType",e.LightRGBW="ILightRGBW",e.PreciseGateControl="IPreciseGateControl"}(_t||(_t={}));class xt{constructor(){this._type=Ct.Unknown,this._interfaceType=""}get Type(){return this._type}get InterfaceType(){return this._interfaceType}set InterfaceType(e){this._interfaceType=e,this._type=e}}!function(e){e.Unknown="Unknown",e.BatteryState="IBatteryState",e.BinarySensorState="IBinarySensor",e.BlindOpenCloseTime="IBlindOpenCloseTime",e.BlindPosition="IBlindPosition",e.BlindRemoteButtonState="IBlindsControlButton",e.BlindErrorState="IBlindError",e.MeasuredBrightness="IBrightness",e.RemoteButtonState="IButtonState",e.ChannelOnOffState="IChannelOnOff",e.IntercomState="IIntercom",e.DoorBellState="IDoorBell",e.FacadeRemoteButtonState="IFacadeControlButton",e.FacadePosition="IFacadeState",e.FacadeType="IFacadeType",e.FloodSensorState="IFloodSensor",e.GatePosition="IGatePosition",e.GatewayPosition="IGatewayPosition",e.GateControllerHealth="IGateControllerHealth",e.HumiditySensorState="IHumiditySensor",e.LightBrightness="ILightBrightness",e.LightColor="ILightColor",e.LightWarmth="ILightTemperature",e.LightTreshold="ILightTreshold",e.MovementSensorState="IMovementSensor",e.OnlineCamera="IOnlineCamera",e.OvercurrentProtectionState="IOvercurrentProtection",e.OvercurrentProtectionThreshold="IOvercurrentProtectionThreshold",e.ReedState="IReedState",e.SignalStrength="ISignalStrength",e.SmokeSensorState="ISmokeSensor",e.MeasuredTemperature="ITemperature",e.VibrationSensorState="IVibrationSensor",e.MeasuredWindSpeed="IWindSpeed",e.WindThreshold="IWindThreshold",e.MeasuredEnergy="IEnergy",e.MeasuredDistance="DistanceSensor",e.BlindCalibration="BlindCalibration",e.ConfigurationState="ConfigurationState",e.CurrentWindThreshold="CurrentWindThreshold",e.CurrentLightThreshold="CurrentLightThreshold",e.WindSpeedState="WindSpeed",e.TamperProtectionState="ITamperProtection",e.PressureSensorState="IPressureSensor",e.LightRGBWState="ILightRGBW"}(Ct||(Ct={})),(Pt=Dt||(Dt={}))[Pt.NotResponding=0]="NotResponding",Pt[Pt.Working=1]="Working",Pt[Pt.Broken=2]="Broken",Pt[Pt.FirmareUpgradeMode=3]="FirmareUpgradeMode",(Rt=Tt||(Tt={}))[Rt.TwoWay=1]="TwoWay",Rt[Rt.OneWay=2]="OneWay",Rt[Rt.ConditionalTwoWay=3]="ConditionalTwoWay",(It=kt||(kt={}))[It.Unknown=-1]="Unknown",It[It.Multipurpose=0]="Multipurpose",It[It.Controller=1]="Controller",It[It.Driver=2]="Driver",It[It.Receiver=3]="Receiver",It[It.Remote=4]="Remote",It[It.Sensor=5]="Sensor",It[It.Scene=6]="Scene";class Ft{constructor(){this.DeviceGuid="",this.Channel=0,this.Status=yt.NoTasksExecuting}}!function(e){e[e.Unknown=0]="Unknown",e[e.Executed=1]="Executed",e[e.ResponseTimeout=2]="ResponseTimeout",e[e.TaskRepeatedAndExecuted=3]="TaskRepeatedAndExecuted",e[e.TaskRepeatedResponseTimeout=4]="TaskRepeatedResponseTimeout",e[e.FlowControlNotAvailable=5]="FlowControlNotAvailable",e[e.ExecutionError=6]="ExecutionError"}(Et||(Et={})),function(e){e[e.ControllerResponseTimeout=-4]="ControllerResponseTimeout",e[e.DeviceNotFound=-3]="DeviceNotFound",e[e.DeviceResponseTimeout=-2]="DeviceResponseTimeout",e[e.Failed=-1]="Failed",e[e.Unknown=0]="Unknown",e[e.Executed=1]="Executed"}(Gt||(Gt={}));class Lt{constructor(){this.Device=null,this.Channel=0,this.Task=null,this.Result=Gt.Unknown}}var Bt,Wt,$t,qt,Vt,Ht,Kt,jt,zt,Jt,Xt,Yt,Qt,Zt,en,tn,nn,rn,on,sn,an,cn,un,ln,dn,hn,pn,gn,fn,vn,mn;class yn{constructor(){this._type="",this._data=null,this._typeAsEnum=Ct.Unknown,this._serializedDataWithoutTime=""}get Data(){return this._data}set Data(e){this._data=e;let{Time:t}=e,n=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(e,["Time"]);this._serializedDataWithoutTime=JSON.stringify(n)}get Type(){return this._type}set Type(e){this._type=e}get TypeAsEnum(){return this._typeAsEnum}set TypeAsEnum(e){this._typeAsEnum=e}get StatesComparisonData(){return this._serializedDataWithoutTime}}(mn=Bt||(Bt={}))[mn.Confident=0]="Confident",mn[mn.Unconfident=1]="Unconfident";class wn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.ChannelOnOffState,this.Type="ChannelOnOffState",this.Data=e.state}}class Sn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.State=Wt.Unknown,this.Time=""}}!function(e){e[e.On=0]="On",e[e.Off=1]="Off",e[e.Unknown=2]="Unknown"}(Wt||(Wt={})),function(e){e[e.Idle=0]="Idle",e[e.IncomingCall=1]="IncomingCall",e[e.AnsweringCall=2]="AnsweringCall",e[e.Busy=3]="Busy",e[e.NoAnswerToCall=4]="NoAnswerToCall",e[e.Unknown=5]="Unknown"}($t||($t={}));class An extends yn{constructor(e){super(),this.TypeAsEnum=Ct.OnlineCamera,this.Type="OnlineCameraState",this.Data=e.state}}class _n extends yn{constructor(e){super(),this.TypeAsEnum=Ct.DoorBellState,this.Type="DoorBellState",this.Data=e.state}}class Cn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.State=qt.Relased,this.Time=""}}!function(e){e[e.Pressed=0]="Pressed",e[e.Relased=1]="Relased",e[e.PressedAndRelased=2]="PressedAndRelased"}(qt||(qt={}));class Dn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.ReedState,this.Type="ReedState",this.Data=e.state}}class Tn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.State=!1,this.Time=""}}class kn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.BlindPosition,this.Type="BlindPostionState",this.Data=e.state}GetBlindStatus(){switch(this.Data.Position){case 200:return Vt.UnableToMove;case 201:return Vt.MotorOverheatedPleaseWait;default:return Vt.Working}}}!function(e){e[e.Unknown=0]="Unknown",e[e.Working=1]="Working",e[e.UnableToMove=200]="UnableToMove",e[e.MotorOverheatedPleaseWait=201]="MotorOverheatedPleaseWait"}(Vt||(Vt={}));class En{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.Position=0,this.RawPosition=0,this.Time=""}}class Gn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.RemoteButtonState,this.Type="RemoteButtonState",this.Data=e.state}}class Nn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.State=Ht.Relased,this.Time=""}}!function(e){e[e.Pressed=1]="Pressed",e[e.Relased=2]="Relased",e[e.PressedAndRelased=3]="PressedAndRelased"}(Ht||(Ht={}));class bn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.LightColor,this.Type="LightColorState",this.Data=e.state}}class In{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.R=0,this.G=0,this.B=0,this.Time=""}}class Rn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.LightWarmth,this.Type="LightWarmthState",this.Data=e.state}}class Pn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.Temperature=0,this.Time=""}}class On extends yn{constructor(e){super(),this.TypeAsEnum=Ct.LightBrightness,this.Type="LightBrightnessState",this.Data=e.state}}class Un{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.Brightness=0,this.Time=""}}class Mn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.MeasuredTemperature,this.Type="MeasuredTemperatureState",this.Data=e.state}}class xn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.Temperature=0,this.Type=Kt.InsideTemperature,this.Time=""}}!function(e){e[e.AirTemperature=0]="AirTemperature",e[e.InsideTemperature=1]="InsideTemperature",e[e.OutsideTemperature=2]="OutsideTemperature",e[e.FloorTemperature=3]="FloorTemperature",e[e.SafetyTemperature=4]="SafetyTemperature",e[e.SetTemperature=5]="SetTemperature"}(Kt||(Kt={}));class Fn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.BatteryState,this.Type="BatteryState",this.Data=e.state}}class Ln{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.State=jt.Half,this.Percentage=-1,this.Time=""}}!function(e){e[e.Unknown=-1]="Unknown",e[e.Full=0]="Full",e[e.Empty=1]="Empty",e[e.Half=2]="Half",e[e.Percentage=3]="Percentage",e[e.Low=4]="Low",e[e.ExternalPower=5]="ExternalPower"}(jt||(jt={}));class Bn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.MeasuredBrightness,this.Type="MeasuredBrightnessState",this.Data=e.state}}class Wn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.Brightness=0,this.Time=""}}class $n extends yn{constructor(e){super(),this.TypeAsEnum=Ct.MeasuredEnergy,this.Type="MeasuredEnergyState",this.Data=e.state,this.Data.MeasurementParameters=new Map(Object.entries(e.state.MeasurementParameters))}}class qn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.Time="",this.MeasurementParameters=new Map}}!function(e){e.Voltage="Voltage",e.Current="Current",e.PhaseShift="PhaseShift",e.ActivePower="ActivePower",e.ReactivePower="ReactivePower",e.ApparentPower="ApparentPower",e.PowerFactor="PowerFactor",e.ActiveForwardEnergy="ActiveForwardEnergy",e.ActiveReverseEnergy="ActiveReverseEnergy",e.ApparentEnergy="ApparentEnergy",e.ReactiveForwardEnergy="ReactiveForwardEnergy",e.ReactiveReverseEnergy="ReactiveReverseEnergy",e.Frequency="Frequency",e.SPIErrorRate="SPIErrorRate",e.CRCErrorRate="CRCErrorRate",e.Timestamp="Timestamp",e.FailedMeasurementsRate="FailedMeasurementsRate",e.FundamentalActivePower="FundamentalActivePower",e.HarmonicActivePower="HarmonicActivePower"}(zt||(zt={}));class Vn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.MeasuredDistance,this.Type="MeasuredDistanceState",this.Data=e.state}}!function(e){e[e.No=0]="No",e[e.Yes=1]="Yes"}(Jt||(Jt={}));class Hn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.MovementSensorState,this.Type="MovementSensorState",this.Data=e.state}}class Kn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.Intensity=0,this.Movement=Xt.No,this.Time=""}}!function(e){e[e.No=0]="No",e[e.Yes=1]="Yes"}(Xt||(Xt={}));class jn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.BlindRemoteButtonState,this.Type="BlindRemoteButtonState",this.Data=e.state}}class zn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.State=Yt.StopReleased,this.Time=""}}!function(e){e[e.OpenPressed=1]="OpenPressed",e[e.OpenReleased=2]="OpenReleased",e[e.StopPressed=3]="StopPressed",e[e.StopReleased=4]="StopReleased",e[e.ClosePressed=5]="ClosePressed",e[e.CloseReleased=6]="CloseReleased"}(Yt||(Yt={}));class Jn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.FacadeRemoteButtonState,this.Type="FacadeRemoteButtonState",this.Data=e.state}}class Xn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.State=Qt.StopReleased,this.Time=""}}!function(e){e[e.OpenPressed=1]="OpenPressed",e[e.OpenReleased=2]="OpenReleased",e[e.StopPressed=3]="StopPressed",e[e.StopReleased=4]="StopReleased",e[e.ClosePressed=5]="ClosePressed",e[e.CloseReleased=6]="CloseReleased"}(Qt||(Qt={}));class Yn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.SignalStrength,this.Type="SignalStrenghtState",this.Data=e.state}}!function(e){e[e.Unknown=0]="Unknown",e[e.Excellent=1]="Excellent",e[e.Good=2]="Good",e[e.Acceptable=3]="Acceptable",e[e.Low=4]="Low",e[e.Terrible=5]="Terrible",e[e.NoLink=6]="NoLink"}(Zt||(Zt={}));class Qn extends yn{constructor(e){super(),this.TypeAsEnum=Ct.GatePosition,this.Type="GatePositionState",this.Data=e.state}}class Zn{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.PositionType=en.Unknown,this.Position=0,this.Time=""}}!function(e){e[e.Unknown=0]="Unknown",e[e.Open=1]="Open",e[e.PartiallyOpen=2]="PartiallyOpen",e[e.Close=3]="Close",e[e.On=4]="On",e[e.Off=5]="Off",e[e.Percentage=6]="Percentage"}(en||(en={}));class er extends yn{constructor(e){super(),this.TypeAsEnum=Ct.GatewayPosition,this.Type="GatewayPositionState",this.Data=e.state}}!function(e){e[e.Unknown=0]="Unknown",e[e.Open=1]="Open",e[e.PartiallyOpen=2]="PartiallyOpen",e[e.Close=3]="Close",e[e.On=4]="On",e[e.Off=5]="Off"}(tn||(tn={}));class tr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.GateControllerHealth,this.Type="GateControllerHealthState",this.Data=e.state}}!function(e){e[e.Unknown=-1]="Unknown",e[e.Inactive=0]="Inactive",e[e.Active=1]="Active",e[e.UnconnectedOrMalfunction=2]="UnconnectedOrMalfunction"}(nn||(nn={}));class nr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.BlindCalibration,this.Type="BlindCalibrationState",this.Data=e.state}}!function(e){e[e.AutoLernIdle=0]="AutoLernIdle",e[e.AutoLernInProgress=1]="AutoLernInProgress",e[e.AutoLernSuccessfull=2]="AutoLernSuccessfull",e[e.AutoLernCancelled=4]="AutoLernCancelled"}(rn||(rn={}));class rr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.HumiditySensorState,this.Type="HumiditySensorState",this.Data=e.state}}class or{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.Type=on.AirHumidity,this.Humidity=0,this.Time=""}}!function(e){e[e.AirHumidity=0]="AirHumidity",e[e.InsideHumidity=1]="InsideHumidity",e[e.OutsideHumidity=2]="OutsideHumidity",e[e.SafetyHumidity=3]="SafetyHumidity",e[e.SetHumidity=4]="SetHumidity"}(on||(on={}));class sr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.VibrationSensorState,this.Type="VibrationSensorState",this.Data=e.state}}!function(e){e[e.No=0]="No",e[e.Yes=1]="Yes"}(sn||(sn={}));class ir extends yn{constructor(e){super(),this.TypeAsEnum=Ct.BinarySensorState,this.Type="BinarySensorState",this.Data=e.state}}class ar{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.State=an.Low,this.Time=""}}!function(e){e[e.High=1]="High",e[e.Low=0]="Low"}(an||(an={}));class cr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.ConfigurationState,this.Type="ConfigurationState",this.Data=e.state}}!function(e){e[e.Unknown=0]="Unknown",e[e.OngoingConfiguration=1]="OngoingConfiguration",e[e.NotConfigured=2]="NotConfigured",e[e.Configured=3]="Configured",e[e.PartiallyConfigured=4]="PartiallyConfigured"}(cn||(cn={}));class ur extends yn{constructor(e){super(),this.TypeAsEnum=Ct.BlindOpenCloseTime,this.Type="BlindOpenCloseTimeState",this.Data=e.state}}class lr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.OvercurrentProtectionState,this.Type="OvercurrentProtectionState",this.Data=e.state}}class dr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.OvercurrentProtectionThreshold,this.Type="OvercurrentProtectionThresholdState",this.Data=e.state}}class hr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.FacadePosition,this.Type="FacadePositionState",this.Data=e.state}}class pr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.FacadeType,this.Type="FacadeTypeState",this.Data=e.state}}class gr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.CurrentWindThreshold,this.Type="CurrentWindThresholdState",this.Data=e.state}}class fr{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.WindThreshold=un.Unknown,this.Time=""}}!function(e){e[e.Unknown=0]="Unknown",e[e.Below=1]="Below",e[e.Exceeded=2]="Exceeded",e[e.Inactive=3]="Inactive"}(un||(un={}));class vr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.CurrentLightThreshold,this.Type="CurrentLightThresholdState",this.Data=e.state}}!function(e){e[e.Unknown=0]="Unknown",e[e.Below=1]="Below",e[e.Exceeded=2]="Exceeded"}(ln||(ln={}));class mr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.WindSpeedState,this.Type="WindSpeedState",this.Data=e.state}}class yr{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.Value=0,this.Time=""}}class wr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.FloodSensorState,this.Type="FloodSensorState",this.Data=e.state}}class Sr{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.State=dn.NoFloodDetected,this.Time=""}}!function(e){e[e.FloodDetected=1]="FloodDetected",e[e.NoFloodDetected=0]="NoFloodDetected"}(dn||(dn={})),function(e){e[e.AirHumidity=0]="AirHumidity",e[e.InsideHumidity=1]="InsideHumidity",e[e.OutsideHumidity=2]="OutsideHumidity",e[e.SafetyHumidity=3]="SafetyHumidity",e[e.SetHumidity=4]="SetHumidity"}(hn||(hn={}));class Ar extends yn{constructor(e){super(),this.TypeAsEnum=Ct.PressureSensorState,this.Type="PressureSensorState",this.Data=e.state}}class _r{constructor(){this.Channel=0,this.StateReliability=Bt.Unconfident,this.Pressure=0,this.Time="",this.PressureType=pn.OutsidePressure}}!function(e){e[e.InsidePressure=0]="InsidePressure",e[e.OutsidePressure=1]="OutsidePressure",e[e.SetPressure=2]="SetPressure"}(pn||(pn={})),function(e){e[e.Facade90=0]="Facade90",e[e.Facade180=1]="Facade180"}(gn||(gn={}));class Cr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.TamperProtectionState,this.Type="TamperProtection",this.Data=e.state}}!function(e){e[e.OK=0]="OK",e[e.Breach=1]="Breach"}(fn||(fn={}));class Dr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.LightRGBWState,this.Type="LightRGBW",this.Data=e.state}}class Tr extends yn{constructor(e){super(),this.TypeAsEnum=Ct.BlindErrorState,this.Type="BlindError",this.Data=e.state}}!function(e){e[e.Unknown=0]="Unknown",e[e.ObstacleDetected=1]="ObstacleDetected",e[e.MotorFailure=2]="MotorFailure"}(vn||(vn={}));class kr{constructor(){this._onDeviceStateChangedEvent=new n,this._onDeviceStateRefreshedOrChangedEvent=new n,this._onDeviceTasksExecutionChangedOnChannelsEvent=new n,this._onDeviceFirmwareVersionChangedEvent=new n,this._iconType=At.Unknown,this._serialNumber=null,this._model=null,this._modelGuid=null,this._manufacturerGuid=null,this._isVirtual=!1,this._isEnabled=!1,this._deviceState=Dt.Working,this._deviceType=kt.Unknown,this._communicationWay=Tt.OneWay,this._availableTasksTypes=[],this._availableResponseTypes=[],this._channels=[],this._protocolGuid=null,this._softwareVersion=null,null==kr._devicesService&&(kr._devicesService=$v.Get(Bs.ServiceName));const e=this._onDeviceStateChangedEvent,t=this._onDeviceTasksExecutionChangedOnChannelsEvent;kr._devicesService.OnDeviceStateChangedEvent().Subscribe((t=>{t.Device.Guid==this._guid&&e.Invoke(t.State)})),kr._devicesService.OnDeviceStateRefreshedOrChangedEvent().Subscribe((e=>{e.Device.Guid==this._guid&&this._onDeviceStateRefreshedOrChangedEvent.Invoke(e.State)})),kr._devicesService.OnDevicesTasksExecutionChangeEvent().Subscribe((e=>{t.Invoke(e.filter((e=>e.DeviceGuid==this._guid)).map((e=>e.Channel)))}))}OnDeviceFirmwareVersionChangedEvent(){return this._onDeviceFirmwareVersionChangedEvent}OnDeviceStateRefreshedOrChangedEvent(){return this._onDeviceStateRefreshedOrChangedEvent}get ShouldChannelsBeGrouped(){if(this._deviceType===kt.Remote)switch(this._modelGuid){case"afea26ac-d5de-4aa9-8e74-ff69679d097b":case"908a71ec-ca46-4431-9504-05b7801e77f8":case"d8fea502-541e-42d9-8ece-a1bcfaaa93f9":return!1;default:return this._availableTasksTypes.all((e=>e.Type!==_t.SetBlindPositionSimple))}return!1}get States(){return r.DoesThrowStackTrace?$v.Get(Bs.ServiceName).GetDeviceStates(this).selectMany((e=>e.States)).toArray():kr._devicesService.GetDeviceStates(this).selectMany((e=>e.States)).toArray()}RemoveDeviceAsync(){return kr._devicesService.RemoveDeviceAsync(this)}ExecuteDeviceTaskAsync(e){return kr._devicesService.ExecuteDeviceTaskAsync(this,e)}OnDeviceTasksExecutionChangedOnChannelsEvent(){return this._onDeviceTasksExecutionChangedOnChannelsEvent}OnDeviceStateChangedEvent(){return this._onDeviceStateChangedEvent}get Guid(){return null==this._guid?"":this._guid}set Guid(e){this._guid=e}get IconType(){return this._iconType}set IconType(e){this._iconType=e}get Name(){return null==this._name?"":this._name}set Name(e){this._name=e}set SoftwareVersion(e){this._softwareVersion=e}get SoftwareVersion(){return this._softwareVersion}get ChannelsAmount(){return null==this._channelsAmount?0:this._channelsAmount}set ChannelsAmount(e){this._channelsAmount=e}get SerialNumber(){return this._serialNumber}set SerialNumber(e){this._serialNumber=e}get Model(){return this._model}set Model(e){this._model=e}get ModelGuid(){return this._modelGuid}set ModelGuid(e){this._modelGuid=e}get ManufacturerGuid(){return this._manufacturerGuid}set ManufacturerGuid(e){this._manufacturerGuid=e}get IsVirtual(){return this._isVirtual}set IsVirtual(e){this._isVirtual=e}get IsEnabled(){return this._isEnabled}set IsEnabled(e){this._isEnabled=e}get DeviceState(){return this._deviceState}set DeviceState(e){this._deviceState=e}get DeviceType(){return this._deviceType}set DeviceType(e){this._deviceType=e}get CommunicationWay(){return this._communicationWay}set CommunicationWay(e){this._communicationWay=e}get AvailableTaskTypes(){return this._availableTasksTypes}set AvailableTaskTypes(e){this._availableTasksTypes=e}get AvailableResponseTypes(){return this._availableResponseTypes}set AvailableResponseTypes(e){this._availableResponseTypes=e}get Channels(){return this._channels}get ProtocolGuid(){return this._protocolGuid}set ProtocolGuid(e){this._protocolGuid=e}ChangeDeviceNameAsync(e){return t=this,n=void 0,s=function*(){var t;try{const n=yield $v.Get(Ut.ServiceName).SendAndWaitForResponseAsync(new Er(this,e),2e4,!1);switch(n.Status){case ce.OK:return this._name=e,null===(t=o.Log)||void 0===t||t.Error("Device","EXIT CONFIGURATION MODE WILL BE FIRED! ChangeDeviceNameAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),new ke(ye.Changed,"");case ce.WrongData:if("DeviceNotFound"==n.Data)return new ke(ye.Failed,"DeviceNotFound");break;case ce.NoPermissionsToCallGivenResource:return new ke(ye.NoPermissions,"")}}catch(e){return e.message.includes("timeout")?new ke(ye.ControllerResponseTimeout,""):new ke(ye.UnknownError,"")}return new ke(ye.Unknown,"")},new((r=void 0)||(r=Promise))((function(e,o){function i(e){try{c(s.next(e))}catch(e){o(e)}}function a(e){try{c(s.throw(e))}catch(e){o(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r((function(e){e(n)}))).then(i,a)}c((s=s.apply(t,n||[])).next())}));var t,n,r,s}ExecuteTaskAsync(e){return kr._devicesService.ExecuteDeviceTaskAsync(this,e)}}class Er extends ae{constructor(e,t){super(),this.Resource="/devices/device/name",this.Method=ue.Put;const n=new Gr;n.DeviceGuid=e.Guid,n.Name=t,this.Data=n}}class Gr{constructor(){this.DeviceGuid="",this.Name=""}}var Nr,br,Ir,Rr,Pr,Or=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class Ur{constructor(){this._device=new kr,this._number=0,this._name="",this._iconName="",this._channelId="",this._mode=wt.Default,this._channelGroups=[],this._isHidden=!1,this._availableTasksTypes=[],this._availableResponseTypes=[],this._customData={},this._roles=[],this._configurations={},this.CustomDataAndRolesSupported=!1,this._onTasksExecutionChangedEvent=new n,this._onChannelStateChangedEvent=new n,this._onChannelStateRefreshedOrChangedEvent=new n,null==Ur._devicesService&&(Ur._devicesService=$v.Get(Bs.ServiceName))}OnChannelStateChangedEvent(){return this._onChannelStateChangedEvent}OnChannelStateRefreshedOrChangedEvent(){return this._onChannelStateRefreshedOrChangedEvent}get Configurations(){return this._configurations}set Configurations(e){this._configurations=e}IsCustomDataAndRolesSupported(){return this.CustomDataAndRolesSupported}get CustomData(){return this._customData}set CustomData(e){this._customData=e}get Roles(){return this._roles}set Roles(e){this._roles=e}get ChannelId(){return this._channelId}SetDevice(e){this._device=e,this._channelId=`${e.Guid}_${this.Number}`,this._device.OnDeviceStateChangedEvent().Subscribe((e=>{e.Data.Channel==this.Number&&this._onChannelStateChangedEvent.Invoke(e)})),this._device.OnDeviceStateRefreshedOrChangedEvent().Subscribe((e=>{e.Data.Channel==this.Number&&this._onChannelStateRefreshedOrChangedEvent.Invoke(e)}))}GetDevice(){return this._device}SetCustomDataAsync(e,t){return Or(this,void 0,void 0,(function*(){const n=this.GetChannelConfigurationData();n.CustomData[e]=t,this._customData[e]=t;const r=new Mr;return r.DeviceGuid=this._device.Guid,r.ChannelConfiguration=n,this.ChangeConfigurationAsync(r)}))}RemoveCustomDataAsync(e){const t=this.GetChannelConfigurationData();delete t.CustomData[e],delete this._customData[e];const n=new Mr;return n.DeviceGuid=this._device.Guid,n.ChannelConfiguration=t,this.ChangeConfigurationAsync(n)}GetChannelConfigurationData(){const e=new xr;return e.Channel=this._number,e.ChannelName=this._name,e.Configuration=this._mode,e.CustomData=this._customData,e.GroupsGuids=this._channelGroups,e.Hidden=this._isHidden,e.IconName=this._iconName,e}HideAsync(){const e=this.GetChannelConfigurationData();this._isHidden=!0,e.Hidden=!0;const t=new Mr;return t.DeviceGuid=this._device.Guid,t.ChannelConfiguration=e,this.ChangeConfigurationAsync(t)}ShowAsync(){const e=this.GetChannelConfigurationData();e.Hidden=!1,this._isHidden=!1;const t=new Mr;return t.DeviceGuid=this._device.Guid,t.ChannelConfiguration=e,this.ChangeConfigurationAsync(t)}ChangeNameAsync(e){const t=this.GetChannelConfigurationData(),n=new Mr;return n.DeviceGuid=this._device.Guid,n.ChannelConfiguration=t,t.ChannelName=e,this._name=e,this.ChangeConfigurationAsync(n)}ChangeIconNameAsync(e){const t=this.GetChannelConfigurationData();t.IconName=e;const n=new Mr;return n.DeviceGuid=this._device.Guid,n.ChannelConfiguration=t,this._iconName=e,this.ChangeConfigurationAsync(n)}ChangeGroupsAsync(e){const t=this.GetChannelConfigurationData();t.GroupsGuids=e;const n=new Mr;return n.DeviceGuid=this._device.Guid,n.ChannelConfiguration=t,this._channelGroups=e,this.ChangeConfigurationAsync(n)}ChangeConfigurationAsync(e){return Or(this,void 0,void 0,(function*(){var t,n;try{const r=yield $v.Get(Ut.ServiceName).SendAndWaitForResponseAsync(new Fr(e),2e4,!1);switch(null===(t=o.Log)||void 0===t||t.Error("Device","EXIT CONFIGURATION MODE WILL BE FIRED! ChangeConfigurationAsync()"),yield $v.Get(it.ServiceName).ExitConfigurationModeAsync(),r.Status){case ce.OK:return this._name=e.ChannelConfiguration.ChannelName,this._iconName=e.ChannelConfiguration.IconName,this._channelGroups=e.ChannelConfiguration.GroupsGuids,this._isHidden=e.ChannelConfiguration.Hidden,this._mode=e.ChannelConfiguration.Configuration,this._customData=e.ChannelConfiguration.CustomData,this._roles=e.ChannelConfiguration.Roles,this._configurations=e.ChannelConfiguration.Configurations,new ke(ye.Changed,"");case ce.WrongData:if("DeviceNotFound"===r.Data)return null===(n=o.Log)||void 0===n||n.Error("Failed to change channel configuration, referenced device does not exist!"),new ke(ye.WrongData,"DeviceNotFound");break;case ce.FatalError:return new ke(ye.UnknownError,"")}}catch(e){if(e.message.includes("timeout"))return new ke(ye.ControllerResponseTimeout,"")}return new ke(ye.Unknown,"")}))}get Number(){return this._number}set Number(e){this._number=e}get Name(){return this._name}set Name(e){this._name=e}get IconName(){return this._iconName}set IconName(e){this._iconName=e}get States(){return r.DoesThrowStackTrace?$v.Get(Bs.ServiceName).GetDeviceStates(this.GetDevice()).where((e=>e.Channel==this.Number)).selectMany((e=>e.States)).toArray():Ur._devicesService.GetDeviceStates(this.GetDevice()).where((e=>e.Channel==this.Number)).selectMany((e=>e.States)).toArray()}get Mode(){return this._mode}set Mode(e){this._mode=e}get ChannelGroups(){return this._channelGroups}set ChannelGroups(e){this._channelGroups=e}get IsHidden(){return this._isHidden}set IsHidden(e){this._isHidden=e}get AvailableTaskTypes(){return this._availableTasksTypes}set AvailableTaskTypes(e){this._availableTasksTypes=e}get AvailableResponseTypes(){return this._availableResponseTypes}set AvailableResponseTypes(e){this._availableResponseTypes=e}OnTasksExecutionChangeEvent(){return this._onTasksExecutionChangedEvent}ExecuteTaskAsync(e){return null!=this._device?(e.Channel=this.Number,e.DeviceGuid=this._device.Guid,Ur._devicesService.ExecuteDeviceTaskAsync(this._device,e)):Promise.resolve(Gt.Failed)}}Ur._devicesService=null;class Mr{constructor(){this.DeviceGuid="",this.ChannelConfiguration=new xr}}class xr{constructor(){this.Channel=0,this.ChannelName="",this.Configuration=wt.Default,this.GroupsGuids=[],this.IconName="",this.Hidden=!1,this.Configurations={},this.CustomData={},this.Roles=[]}}class Fr extends ae{constructor(e){super(),this.Resource="/devices/device/channel/configuration",this.Method=ue.Put,this.Data=e}}!function(e){e[e.TurnOn=0]="TurnOn",e[e.TurnOff=1]="TurnOff",e[e.ToggleState=2]="ToggleState",e[e.SetBlindPosition=3]="SetBlindPosition",e[e.SetLightColor=4]="SetLightColor",e[e.SetLightTemperature=5]="SetLightTemperature",e[e.SetLightBrightness=6]="SetLightBrightness",e[e.SetTemperature=7]="SetTemperature",e[e.GetState=8]="GetState",e[e.TurnOnWithTimeout=9]="TurnOnWithTimeout",e[e.SetLightBrightnessDynamicly=10]="SetLightBrightnessDynamicly",e[e.IdentifyDevice=11]="IdentifyDevice",e[e.SetBlindOpenCloseTime=12]="SetBlindOpenCloseTime",e[e.SetBlindMicroventilation=13]="SetBlindMicroventilation",e[e.GatewayPulse=25]="GatewayPulse",e[e.GatePulse=26]="GatePulse",e[e.SetFacadePositionAndTilt=29]="SetFacadePositionAndTilt",e[e.GetFacadeType=30]="GetFacadeType",e[e.LightRGBW=31]="LightRGBW",e[e.SetGatePositionPrecise=32]="SetGatePositionPrecise"}(Nr||(Nr={}));class Lr{static NewGuid(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))}}class Br{constructor(){this._taskType=_t.GetChannelsState,this._featureType=Nr.GetState,this._channel=0,this._guid=Lr.NewGuid(),this._deviceGuid=""}get TaskType(){return this._taskType}set TaskType(e){this._taskType=e}get FeatureType(){return this._featureType}set FeatureType(e){this._featureType=e}get Guid(){return this._guid}set Guid(e){this._guid=e}get DeviceGuid(){return this._deviceGuid}set DeviceGuid(e){this._deviceGuid=e}get Channel(){return this._channel}set Channel(e){this._channel=e}}class Wr extends Br{constructor(){super(),this.Temperature=0,this.FeatureType=Nr.SetTemperature,this.TaskType=_t.SetTemperature}}class $r extends Br{constructor(){super(),this.FeatureType=Nr.TurnOff,this.TaskType=_t.TurnOff}}class qr extends Br{constructor(){super(),this.FeatureType=Nr.TurnOn,this.TaskType=_t.TurnOn}}class Vr extends Br{constructor(){super(),this.SwitchOffDelaySeconds=0,this.FeatureType=Nr.TurnOnWithTimeout,this.TaskType=_t.TurnOnWithTime}}class Hr extends Br{constructor(){super(),this.Brightness=0,this.FeatureType=Nr.SetLightBrightness,this.TaskType=_t.SetLightBrightness}}class Kr extends Br{constructor(){super(),this.FeatureType=Nr.ToggleState,this.TaskType=_t.TogleState}}class jr extends Br{constructor(){super(),this.R=0,this.G=0,this.B=0,this.FeatureType=Nr.SetLightColor,this.TaskType=_t.SetLightColor}}class zr extends Br{constructor(){super(),this.Temperature=0,this.FeatureType=Nr.SetLightTemperature,this.TaskType=_t.SetLightTemperature}}class Jr extends Br{constructor(){super(),this.Action=br.Stop,this.Position=0,this.FeatureType=Nr.SetBlindPosition,this.TaskType=_t.SetBlindPosition}}!function(e){e[e.Open=0]="Open",e[e.Close=1]="Close",e[e.Stop=2]="Stop",e[e.Percentage=3]="Percentage"}(br||(br={})),function(e){e[e.Open=0]="Open",e[e.Close=1]="Close",e[e.Stop=2]="Stop",e[e.Percentage=3]="Percentage"}(Ir||(Ir={}));class Xr extends Br{constructor(){super(),this.Action=Rr.Stop,this.Position=0,this.FeatureType=Nr.SetBlindPosition,this.TaskType=_t.SetBlindPositionSimple}}!function(e){e[e.Open=0]="Open",e[e.Close=1]="Close",e[e.Stop=2]="Stop"}(Rr||(Rr={}));class Yr extends Br{constructor(){super(),this.Brightness=0,this.FeatureType=Nr.SetLightBrightnessDynamicly,this.TaskType=_t.SetLightBrightnessDynamicly}}class Qr extends Br{constructor(){super(),this.FeatureType=Nr.IdentifyDevice,this.TaskType=_t.IdentifyDevice}}class Zr extends Br{constructor(){super(),this.Data=new eo,this.FeatureType=Nr.SetBlindOpenCloseTime,this.TaskType=_t.SetBlindOpenCloseTime}}class eo{constructor(){this.Channel=0,this.CloseTime=0,this.OpenTime=0}}class to extends Br{constructor(){super(),this.FeatureType=Nr.GetState,this.TaskType=_t.GetChannelsState}}class no extends Br{constructor(){super(),this.Position=0,this.FeatureType=Nr.SetBlindMicroventilation,this.TaskType=_t.SetBlindMicroventilation}}class ro extends Br{constructor(){super(),this.FeatureType=Nr.GatePulse,this.TaskType=_t.ChangeGatewayPositionPulse}}class oo extends Br{constructor(){super(),this.FeatureType=Nr.GatewayPulse,this.TaskType=_t.ChangeGatewayPositionPulse}}class so extends Br{constructor(){super(),this.FacadeAction=Pr.Stop,this.Tilt=0,this.Position=0,this.FeatureType=Nr.SetFacadePositionAndTilt,this.TaskType=_t.SetFacadePosition}}class io extends Br{constructor(){super(),this.FeatureType=Nr.GetFacadeType,this.TaskType=_t.GetFacadeType}}!function(e){e[e.Open=0]="Open",e[e.Close=1]="Close",e[e.Stop=2]="Stop",e[e.Percentage=3]="Percentage",e[e.Tilt=4]="Tilt",e[e.TiltAndPercentage=5]="TiltAndPercentage"}(Pr||(Pr={}));class ao{constructor(){this.R=0,this.G=0,this.B=0,this.W=0,this.Brightness=0,this.Channel=0}}class co extends Br{constructor(){super(),this.Data=new ao,this.FeatureType=Nr.LightRGBW,this.TaskType=_t.LightRGBW}}var uo=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class lo{constructor(){this._manualDeviceProtocolServices=new Map}GetServiceName(){return lo.ServiceName}RegisterManuallyPairedDevicesProtocol(e){var t,n;null===(t=o.Log)||void 0===t||t.Debug(lo.ServiceName,`Registering new manual device protocol service: ${e.GetServiceName()}`),null===(n=o.Log)||void 0===n||n.Error(lo.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! RegisterManuallyPairedDevicesProtocol()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),this._manualDeviceProtocolServices.set(e.GetServiceName(),e)}GetDevicesForManualPairingAsync(e){return uo(this,void 0,void 0,(function*(){const t=[...this._manualDeviceProtocolServices.values()],n=[];if(null!=e)if(Array.isArray(e))for(let r=0;r<t.length;r++)e.any((e=>e==t[r].ProtocolExtensionGuid))&&n.push(...yield t[r].GetDevicesForManualPairingAsync());else{const r=t.find((t=>t.ProtocolExtensionGuid==e));null!=r&&n.push(...yield r.GetDevicesForManualPairingAsync())}else for(let e=0;e<t.length;e++)n.push(...yield t[e].GetDevicesForManualPairingAsync());return n}))}AddManuallyPairedDeviceAsync(e){return uo(this,void 0,void 0,(function*(){var t;const n=[...this._manualDeviceProtocolServices.values()].find((t=>t.ProtocolExtensionGuid==e.ProtocolExtensionGuid));return null!=n?n.AddManuallyPairedDeviceAsync(e):(null===(t=o.Log)||void 0===t||t.Error(lo.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! AddManuallyPairedDeviceAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),Gt.Failed)}))}GetRegisteredProtocolGuids(){return[...this._manualDeviceProtocolServices.values()].map((e=>e.ProtocolExtensionGuid))}}lo.ServiceName="ManualDeviceService";class ho{constructor(){this.ResourceGuid="",this.Data=null,this.IsGlobal=!1,this.InsertTime=new Date}}var po,go=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class fo{constructor(){this._connection=null,this._localDb=null,this._connection=$v.Get(Ut.ServiceName),this._localDb=$v.Get(s.ServiceName)}GetLocalDbName(e,t){return`${e}_${t}`}SaveAsync(e,t,n){return go(this,void 0,void 0,(function*(){let r=new vo(e,t,n),o=yield this._connection.SendAndWaitForResponseAsync(r,35e3,!1);if(o.Status===ce.OK){const r=new wo;r.ResourceGuid=e,r.Data=JSON.stringify(n),r.IsGlobal=t,this._localDb.Save(fo.ServiceName,this.GetLocalDbName(e,t),r)}return o.Status}))}ReadAsync(e,t,n){return go(this,void 0,void 0,(function*(){let r=new mo(e,t);if(!n){const n=this._localDb.Read(fo.ServiceName,this.GetLocalDbName(e,t));if(null!=n){const e=n,t=new ho;return t.Data=JSON.parse(e.Data),t.IsGlobal=e.IsGlobal,t.ResourceGuid=e.ResourceGuid,t}}let o=yield this._connection.SendAndWaitForResponseAsync(r,35e3,!1);if(o.Status===ce.OK){const e=new ho;return e.ResourceGuid=o.ResourceGuid,e.Data=JSON.parse(o.Data),e.IsGlobal=o.IsGlobal,e}return o.Status}))}RemoveAsync(e,t){return go(this,void 0,void 0,(function*(){let n=new yo(e,t);return(yield this._connection.SendAndWaitForResponseAsync(n,35e3,!1)).Status}))}GetServiceName(){return fo.ServiceName}}fo.ServiceName="RemoteStorageService";class vo extends ae{constructor(e,t,n){super(),this.ResourceGuid="",this.Global=!1,this.Resource="/sync/config/",this.Method=ue.Put,this.ResourceGuid=e,this.Global=t,this.Data=JSON.stringify(n)}}class mo extends ae{constructor(e,t){super(),this.ResourceGuid="",this.Global=!1,this.Resource="/sync/config/",this.Method=ue.Get,this.ResourceGuid=e,this.Global=t}}class yo extends ae{constructor(e,t){super(),this.ResourceGuid="",this.Global=!1,this.Resource="/sync/config/",this.Method=ue.Delete,this.ResourceGuid=e,this.Global=t}}class wo extends ae{constructor(){super(...arguments),this.ResourceGuid="",this.Data="",this.IsGlobal=!1,this.InsertTime=new Date}}class So{constructor(){this.Longitude=0,this.Latitude=0}}class Ao{constructor(){this.Longitude=0,this.Latitude=0,this.IsNetworkBased=!1}}!function(e){e[e.OK=0]="OK",e[e.NoPermissions=1]="NoPermissions",e[e.UserIsNotLoggedIn=2]="UserIsNotLoggedIn",e[e.UnknownError=3]="UnknownError"}(po||(po={}));var _o,Co,Do=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class To{IsControllerGeolocationSetAsync(){return Do(this,void 0,void 0,(function*(){let e=new ko,t=yield $v.Get(Ut.ServiceName).SendAndWaitForResponseAsync(e,15e3,!0);return(null==t?void 0:t.Status)===ce.OK?null==t?void 0:t.Data:null==t?void 0:t.Status}))}GetCurrentGeolocationAsync(){return Do(this,void 0,void 0,(function*(){return new Promise(((e,t)=>Do(this,void 0,void 0,(function*(){window.navigator.geolocation.getCurrentPosition((t=>{e(t)}),(t=>{e(t)}))}))))}))}SetControllerGeolocationAsync(e){return Do(this,void 0,void 0,(function*(){var t,n,r;let s=new Go;s.Data.Latitude=e.Latitude,s.Data.Longitude=e.Longitude,null===(t=o.Log)||void 0===t||t.Warning(To.ServiceName,`SetControllerGeolocationAsync() ${JSON.stringify(s)}`);let i=yield $v.Get(Ut.ServiceName).SendAndWaitForResponseAsync(s,15e3,!1);switch(null===(n=o.Log)||void 0===n||n.Warning(To.ServiceName,`${JSON.stringify(i)}`),null===(r=o.Log)||void 0===r||r.Error(To.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! SetControllerGeolocationAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null==i?void 0:i.Status){case ce.OK:return new Ee(po.OK,"");case ce.NoPermissionToPerformThisOperation:case ce.NoPermissionsToCallGivenResource:return new Ee(po.NoPermissions,"");case ce.UserIsNotLoggedIn:return new Ee(po.UserIsNotLoggedIn,"");default:return new Ee(po.UnknownError,"")}}))}GetControlllerGeolocationAsync(){return Do(this,void 0,void 0,(function*(){var e,t;let n=new Eo;null===(e=o.Log)||void 0===e||e.Warning(To.ServiceName,`GetControlllerGeolocationAsync(): ${JSON.stringify(n)}`);let r=yield $v.Get(Ut.ServiceName).SendAndWaitForResponseAsync(n,15e3,!0);if(null===(t=o.Log)||void 0===t||t.Warning(To.ServiceName,`${JSON.stringify(r)}`),(null==r?void 0:r.Status)===ce.OK){let e=new Ao;return e.IsNetworkBased=(null==r?void 0:r.Data).IsNetworkBased,e.Latitude=(null==r?void 0:r.Data).Latitude,e.Longitude=(null==r?void 0:r.Data).Longitude,e}return null==r?void 0:r.Status}))}GetServiceName(){return To.ServiceName}}To.ServiceName="GeolocationService";class ko extends ae{constructor(){super(),this.Resource="/geolocation/isset",this.Method=ue.Get}}class Eo extends ae{constructor(){super(),this.Resource="/geolocation/get",this.Method=ue.Get}}class Go extends ae{constructor(){super(),this.Data=new So,this.Resource="/geolocation/save",this.Method=ue.Put}}!function(e){e[e.Device=0]="Device",e[e.Controller=1]="Controller"}(_o||(_o={}));class No{constructor(){this.UpdateGuid="",this.Channel="",this.Version="",this.CurrentVersion="",this.DownloadUri="",this.Download="",this.Name="",this.Description="",this.UpdateType=Co.Unknown,this.ResourceGuid=""}}class bo{constructor(){this.UpdateDescription=new Map,this.Update=new No,this.UpdatedResourceName="",this.CurrentResourceVersion=""}}!function(e){e[e.Unknown=0]="Unknown",e[e.Container=1]="Container",e[e.RadioFirmware=2]="RadioFirmware",e[e.DeviceFirmware=3]="DeviceFirmware",e[e.Configuration=4]="Configuration",e[e.ContainerScript=5]="ContainerScript",e[e.ContainerSoftware=6]="ContainerSoftware",e[e.RuntimeSoftware=7]="RuntimeSoftware",e[e.RuntimeScript=8]="RuntimeScript",e[e.RuntimeFixingScript=9]="RuntimeFixingScript"}(Co||(Co={}));class Io extends Error{constructor(e){super(e),this.message=e,this.name="UpdateProviderNotFound"}}var Ro,Po,Oo,Uo,Mo,xo,Fo,Lo,Bo,Wo,$o,qo,Vo,Ho,Ko,jo,zo,Jo,Xo=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class Yo{constructor(){this._services=new Map,this._runtimeInfo=new Qo,this._hardwareInfo=new es,this._semaphore=new Ze(1),this._isRuntimeInfoInitialized=!1,this._isHardwareInfoInitialized=!1}GetServiceName(){return Yo.ServiceName}RegisterUpdatesProvider(e){var t;null===(t=o.Log)||void 0===t||t.Debug(Yo.ServiceName,`Registering new update provider: ${e.GetUpdateProviderName()}`),this._services.set(e.GetUpdateProviderName(),e)}GetUpdatesProviderAsync(e){return Xo(this,void 0,void 0,(function*(){var t;null===(t=o.Log)||void 0===t||t.Debug(Yo.ServiceName,`Getting update provider [${e}] by GetUpdateProviderAsync<T>()`);const n=this._services.get(e);if(null==n)throw new Io("Cannot get update provider! Requested update provider has not been registered.");return n}))}GetUpdatesProvidersAsync(e){return Xo(this,void 0,void 0,(function*(){var t;null===(t=o.Log)||void 0===t||t.Debug(Yo.ServiceName,`Getting update providers with type ${e} by GetUpdateProvidersAsync<T>()`);let n=[];if(n=[...this._services.values()].filter((t=>t.ProviderType==e)),0==n.length)throw new Io("Cannot get update providers! Requested update providers has not been registered.");return n}))}GetUpdatesProvidersByProtocolAsync(e,t,n){return Xo(this,void 0,void 0,(function*(){var r;if(new RegExp("^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$").test(e)){null===(r=o.Log)||void 0===r||r.Debug(Yo.ServiceName,`Getting update providers with protocol guid: [${e}] by GetUpdateProvidersByProtocolAsync<T>()`);let s=[];if(s=null!=n?[...this._services.values()].filter((r=>r.ProtocolGuid==e&&r.ProviderType==t&&r.AvailableExtensionVersion==n)):[...this._services.values()].filter((n=>n.ProtocolGuid==e&&n.ProviderType==t)),0==s.length)throw new Io("Cannot get update providers! Requested update providers has not been registered.");return s}throw new Io("Cannot get update providers! Bad parameters.")}))}GetUpdatesProvidersByExtensionAsync(e,t,n){return Xo(this,void 0,void 0,(function*(){var r;if(new RegExp("^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$").test(e)){null===(r=o.Log)||void 0===r||r.Debug(Yo.ServiceName,`Getting update providers with extension guid: [${e}] by GetUpdateProvidersByExtensionAsync<T>()`);let s=[];if(s=null!=n?[...this._services.values()].filter((r=>r.ExtensionGuid==e&&r.ProviderType==t&&r.AvailableExtensionVersion==n)):[...this._services.values()].filter((n=>n.ExtensionGuid==e&&n.ProviderType==t)),0==s.length)throw new Io("Cannot get update providers! Requested update providers has not been registered.");return s}throw new Io("Cannot get update providers! Bad parameters.")}))}GetSoftwareRuntimeInfoAsync(){return Xo(this,arguments,void 0,(function*(e=!1){var t=yield this._semaphore.AcquireAsync();return!this._isRuntimeInfoInitialized||e?(yield this.GetRuntimeControllerInfoAsync(),t.Release(),this._runtimeInfo):(t.Release(),this._runtimeInfo)}))}GetRuntimeControllerInfoAsync(){return Xo(this,void 0,void 0,(function*(){var e;null===(e=o.Log)||void 0===e||e.Debug(Yo.ServiceName,"Getting runtime version info from controller.");try{const e=yield $v.Get(Ut.ServiceName).SendAndWaitForResponseAsync(new Zo,16e3,!1);if(null==e||null==e.Status)throw new ns('Cannot get runtime info, controller response result is empty."',Ro.EmptyResponse);if(e.Status!=ce.OK)throw new ns(`Cannot get runtime info, controller responded with status ${e.Status}.`,Ro.WrongResponseStatus);if(null==e.Data)throw new ns("Cannot get runtime info, controller responded with status OK but response does not contains data.",Ro.NoDataInResponse);this._runtimeInfo=e.Data,this._isRuntimeInfoInitialized=!0}catch(e){throw e instanceof p?new ns("Cannot get runtime info, controller response timeout.",Ro.Timeout):e}}))}GetHardwareInfoAsync(){return Xo(this,arguments,void 0,(function*(e=!1){return!this._isHardwareInfoInitialized||e?(yield this.GetHardwareControllerInfoAsync(),this._hardwareInfo):this._hardwareInfo}))}GetHardwareControllerInfoAsync(){return Xo(this,void 0,void 0,(function*(){var e;null===(e=o.Log)||void 0===e||e.Debug(Yo.ServiceName,"Getting hardware info from controller.");const t=yield $v.Get(Ut.ServiceName).SendAndWaitForResponseAsync(new ts,8e3,!1);if(null==t||null==t.Status)throw new ns('Cannot get hardware info, controller response result is empty."',Ro.EmptyResponse);if(t.Status!=ce.OK)throw new ns(`Cannot get hardware info, controller responded with status ${t.Status}.`,Ro.WrongResponseStatus);if(null==t.Data)throw new ns("Cannot get hardware info, controller responded with status OK but response does not contains data.",Ro.NoDataInResponse);this._hardwareInfo=t.Data,this._isRuntimeInfoInitialized=!0}))}}Yo.ServiceName="UpdateProvider";class Qo{constructor(){this.BaseLinuxVersion="",this.BaseMonoVersion="",this.RuntimeVersion="",this.UpdateChannel="",this.SoftwareVersion=""}}class Zo extends ae{constructor(){super(),this.Resource="/controller/software/info",this.Method=ue.Get}}class es{constructor(){this.GetControllerHardwareVersion=0,this.DevicePIN="",this.GetControllerSerialNumber="",this.HostnamePrefix="",this.DefaultStaticIpAddress="",this.GetAvailableHardware=[],this.ControllerSecret=""}}class ts extends ae{constructor(){super(),this.Resource="/controller/hardware/info",this.Method=ue.Get}}class ns extends Error{constructor(e,t){super(e),this.message=e,this.code=0,this.name="CannotGetRuntimeInfo",this.code=t}}!function(e){e[e.Unknown=0]="Unknown",e[e.EmptyResponse=1]="EmptyResponse",e[e.NoDataInResponse=2]="NoDataInResponse",e[e.WrongResponseStatus=3]="WrongResponseStatus",e[e.Timeout=4]="Timeout"}(Ro||(Ro={})),function(e){e.OtherError="OtherError",e.FatalError="FatalError",e.NoData="NoData",e.InvalidSceneGuid="InvalidSceneGuid"}(Po||(Po={}));class rs{constructor(){this._comparisonParams=new Map,this.Type=Ct.Unknown,this.DeviceGuid="",this.ComparisonMethod=Oo.Default}GetCheckDeviceState(){return this._checkDeviceState}SetCheckDeviceState(e){this._checkDeviceState=e,e instanceof Ln&&(this.Type=Ct.BatteryState),e instanceof ar&&(this.Type=Ct.BinarySensorState),e instanceof En&&(this.Type=Ct.BlindPosition),e instanceof Un&&(this.Type=Ct.LightBrightness),e instanceof Wn&&(this.Type=Ct.MeasuredBrightness),e instanceof Nn&&(this.Type=Ct.RemoteButtonState),e instanceof Sn&&(this.Type=Ct.ChannelOnOffState),e instanceof Cn&&(this.Type=Ct.DoorBellState),e instanceof qn&&(this.Type=Ct.MeasuredEnergy),e instanceof Sr&&(this.Type=Ct.FloodSensorState),e instanceof Zn&&(this.Type=Ct.GatePosition),e instanceof In&&(this.Type=Ct.LightColor),e instanceof Pn&&(this.Type=Ct.LightWarmth),e instanceof Tn&&(this.Type=Ct.ReedState),e instanceof xn&&(this.Type=Ct.MeasuredTemperature),e instanceof or&&(this.Type=Ct.HumiditySensorState),e instanceof zn&&(this.Type=Ct.BlindRemoteButtonState),e instanceof Xn&&(this.Type=Ct.FacadeRemoteButtonState),e instanceof Kn&&(this.Type=Ct.MovementSensorState),e instanceof qn&&(this.Type=Ct.MeasuredEnergy),e instanceof _r&&(this.Type=Ct.PressureSensorState),e instanceof yr&&(this.Type=Ct.WindSpeedState),e instanceof fr&&(this.Type=Ct.CurrentWindThreshold)}GetComparisonParam(e){return this._comparisonParams.get(e)}GetComparisonParams(){return this._comparisonParams}SetComparisonParam(e,t){this._comparisonParams.set(e,t)}}class os{constructor(e){this._value=e}get Value(){return this._value}set Value(e){this._value=e}}class ss{constructor(...e){this._value="00:00:00",e.length>1?this.SetTimeSpan(e[0],e[1],e[2],e[3]):this._value=e[0]}SetTimeSpan(e,t,n,r){this._value=r<=0?`${n.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}:${e.toString().padStart(2,"0")}`:`${r}.${n.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}:${e.toString().padStart(2,"0")}`}get Value(){return this._value}}!function(e){e[e.Default=0]="Default",e[e.Delta=1]="Delta",e[e.StateRepeat=2]="StateRepeat"}(Oo||(Oo={})),function(e){e[e.DeltaValue=0]="DeltaValue",e[e.DeltaCalculationTimeRange=1]="DeltaCalculationTimeRange",e[e.StateRepeatCount=2]="StateRepeatCount",e[e.StateRepeatTimeRange=3]="StateRepeatTimeRange"}(Uo||(Uo={})),function(e){e[e.SunRise=1]="SunRise",e[e.SunSet=2]="SunSet"}(Mo||(Mo={}));class is{constructor(){this.DeviceGuid=""}}!function(e){e[e.Unknown=-1]="Unknown",e[e.DeviceTask=0]="DeviceTask",e[e.DelayTask=1]="DelayTask",e[e.NotifyTask=2]="NotifyTask",e[e.LockExecution=3]="LockExecution"}(xo||(xo={})),function(e){e.Unknown="Unknown",e.DeviceTask="DeviceTask",e.DelayTask="DelayTask",e.NotifyTask="NotifyTask",e.LockExecution="LockExecution"}(Fo||(Fo={})),(Jo=Lo||(Lo={}))[Jo.Unknown=0]="Unknown",Jo[Jo.Second=1]="Second",Jo[Jo.Minute=2]="Minute",Jo[Jo.Hour=3]="Hour",Jo[Jo.Day=4]="Day",Jo[Jo.DayOfWeek=5]="DayOfWeek",Jo[Jo.Month=6]="Month",Jo[Jo.Year=7]="Year",Jo[Jo.Date=8]="Date",Jo[Jo.Time=9]="Time",Jo[Jo.WeatherType=11]="WeatherType",Jo[Jo.CompareNumbers=12]="CompareNumbers",Jo[Jo.CompareBooleans=13]="CompareBooleans",Jo[Jo.DeviceState=14]="DeviceState",Jo[Jo.Timer=15]="Timer",Jo[Jo.Temperature=17]="Temperature",Jo[Jo.DaysOfWeek=18]="DaysOfWeek",Jo[Jo.AstronomicalClockWithOffset=19]="AstronomicalClockWithOffset",Jo[Jo.SceneExecuted=20]="SceneExecuted",(zo=Bo||(Bo={}))[zo.Unknown=0]="Unknown",zo[zo.Equal=1]="Equal",zo[zo.NotEqueal=2]="NotEqueal",zo[zo.BiggerThan=3]="BiggerThan",zo[zo.SmallerThan=4]="SmallerThan",zo[zo.BiggerThanOrEqual=5]="BiggerThanOrEqual",zo[zo.SmallerThanOrEqual=6]="SmallerThanOrEqual",zo[zo.OneOfBothIsTrue=7]="OneOfBothIsTrue",zo[zo.BothAreTrue=8]="BothAreTrue",function(e){e[e.Unknown=0]="Unknown",e[e.BatteryState=1]="BatteryState",e[e.BinarySensor=2]="BinarySensor",e[e.BlindPosition=3]="BlindPosition",e[e.Brightness=4]="Brightness",e[e.ButtonState=5]="ButtonState",e[e.ChannelOnOff=6]="ChannelOnOff",e[e.DoorBell=7]="DoorBell",e[e.Energy=8]="Energy",e[e.FloodSensor=9]="FloodSensor",e[e.GatePosition=10]="GatePosition",e[e.HeatSensor=11]="HeatSensor",e[e.LightBrightness=12]="LightBrightness",e[e.LightColor=13]="LightColor",e[e.LightTemperature=14]="LightTemperature",e[e.MeasuredCurrent=15]="MeasuredCurrent",e[e.MeasuredPower=16]="MeasuredPower",e[e.MeasuredVoltage=17]="MeasuredVoltage",e[e.ReedState=18]="ReedState",e[e.SmokeSensor=19]="SmokeSensor",e[e.Temperature=20]="Temperature",e[e.BlindsControlButton=21]="BlindsControlButton",e[e.Movement=22]="Movement",e[e.WindSpeed=24]="WindSpeed",e[e.Humidity=25]="Humidity",e[e.AirPressure=26]="AirPressure",e[e.WindThreshold=31]="WindThreshold",e[e.FacadeControlButton=36]="FacadeControlButton"}(Wo||(Wo={})),function(e){e[e.Null=0]="Null",e[e.Condition=1]="Condition",e[e.ConditionGroup=2]="ConditionGroup",e[e.ArgumentAsInt=3]="ArgumentAsInt",e[e.ArgumentAsTimeSpan=4]="ArgumentAsTimeSpan",e[e.ArgumentAsBoolean=5]="ArgumentAsBoolean",e[e.ArgumentAsTimeout=6]="ArgumentAsTimeout",e[e.ArgumentAsDayOfWeek=7]="ArgumentAsDayOfWeek",e[e.ArgumentAsDaysOfWeek=8]="ArgumentAsDaysOfWeek",e[e.ArgumentAsAstronomicalClock=9]="ArgumentAsAstronomicalClock",e[e.ArgumentAsTime=10]="ArgumentAsTime",e[e.ArgumentAsDeviceState=11]="ArgumentAsDeviceState",e[e.ArgumentAsNumber=12]="ArgumentAsNumber",e[e.ArgumentAsAstronomicalClockWithOffset=13]="ArgumentAsAstronomicalClockWithOffset",e[e.ArgumentAsConditionInfo=14]="ArgumentAsConditionInfo"}($o||($o={})),(jo=qo||(qo={})).Null="Null",jo.Condition="Condition",jo.ConditionGroup="ConditionGroup",jo.ArgumentAsInt="ArgumentAsInt",jo.ArgumentAsTimeSpan="ArgumentAsTimeSpan",jo.ArgumentAsBoolean="ArgumentAsBoolean",jo.ArgumentAsTimeout="ArgumentAsTimeout",jo.ArgumentAsDayOfWeek="ArgumentAsDayOfWeek",jo.ArgumentAsDaysOfWeek="ArgumentAsDaysOfWeek",jo.ArgumentAsAstronomicalClock="ArgumentAsAstronomicalClock",jo.ArgumentAsTime="ArgumentAsTime",jo.ArgumentAsDeviceState="ArgumentAsDeviceState",jo.ArgumentAsNumber="ArgumentAsNumber",jo.ArgumentAsAstronomicalClockWithOffset="ArgumentAsAstronomicalClockWithOffset",jo.ArgumentAsConditionInfo="ArgumentAsConditionInfo",function(e){e.DeviceTask="DeviceTask",e.DelayTask="DelayTask",e.LockExecutionTask="LockExecutionTask",e.NotifyTaskAppNotify="NotifyTaskAppNotify",e.NotifyTaskEmailNotify="NotifyTaskEmailNotify"}(Vo||(Vo={}));class as extends Error{constructor(e){super(e),this.message=e,this.name="UnsupportedScenesDeviceState"}}!function(e){e[e.None=0]="None",e[e.AppNotification=1]="AppNotification",e[e.Email=2]="Email"}(Ho||(Ho={})),function(e){e[e.Timeout=0]="Timeout",e[e.TimeRange=1]="TimeRange"}(Ko||(Ko={}));var cs,us,ls;class ds{constructor(e,t="Cube"){this._result=null,this._tmp=new hs,this._tmpTask=null,this._prevSeqGuid="",this._currentSeqGuid="",this._editingExistingSequence=!1,this._rawExistingSequenceTasks=null,this._sequenceName="",this._sequenceIcon="",this._service=$v.Get(Gs.ServiceName),e&&(this._sequenceName=e,this._sequenceIcon=t,this._tmp.Guid=Lr.NewGuid())}SetSequenceName(e){const t=n=>{if(n.RightArgumentType!=ls.Null)return t(n.RightArgument);n.Tasks.ControllerTasks.where((e=>e.TaskType==xo.NotifyTask)).toArray().forEach((t=>{t.Title=e}))};this._sequenceName=e,this._editingExistingSequence&&null!=this._result&&(this._result.Name=e,t(this._result))}SetSequenceIcon(e){this._sequenceIcon=e,this._editingExistingSequence&&null!=this._result&&(this._result.Icon=e)}GetNext(){if(null==this._result)return null;if(""==this._currentSeqGuid)return this._currentSeqGuid=this._result.Guid,this._service.MapSequence(JSON.parse(JSON.stringify(this._result)),!0);{const e=this.FindArgumentWithGuid(this._result,this._currentSeqGuid);return null==e?null:e.RightArgumentType==ls.Condition?(this._prevSeqGuid=this._currentSeqGuid,this._currentSeqGuid=e.RightArgument.Guid,this._service.MapSequence(JSON.parse(JSON.stringify(e.RightArgument)),!0)):null}}CloneCurrentBuilder(){var e=new ds;return e._currentSeqGuid="",e._prevSeqGuid="",e._editingExistingSequence=structuredClone(this._editingExistingSequence),e._rawExistingSequenceTasks=structuredClone(this._rawExistingSequenceTasks),e._result=structuredClone(this._result),e._sequenceIcon=structuredClone(this._sequenceIcon),e._sequenceName=structuredClone(this._sequenceName),e._tmp=structuredClone(this._tmp),(e=>{const t=e=>{e.Guid=Lr.NewGuid(),e.RightArgumentType==ls.Condition&&t(e.RightArgument)};null!=e._result&&t(e._result),null!=this._tmp&&(this._tmp.Guid=Lr.NewGuid())})(e),e}GetPrevious(){let e="";const t=(n,r)=>n.Guid==r?{sequence:n,prevGuid:e}:n.RightArgumentType==ls.Condition?(e=n.Guid,t(n.RightArgument,r)):null;if(null==this._result)return null;if(""==this._currentSeqGuid||""==this._prevSeqGuid)return null;const n=t(this._result,this._prevSeqGuid);return null==n?null:(this._currentSeqGuid=n.sequence.Guid,this._prevSeqGuid=n.prevGuid,this._service.MapSequence(JSON.parse(JSON.stringify(n.sequence)),!0))}GetByGuid(e){if(null==this._result)return null;const t=this.FindArgumentWithGuid(this._result,e);return null==t?null:this._service.MapSequence(t)}EditCurrentSequence(e){const t=e=>{if(e.RightArgumentType!=ls.Null)return t(e.RightArgument);this._rawExistingSequenceTasks=JSON.parse(JSON.stringify(e.Tasks))};return this._editingExistingSequence=!0,t(e._rawRequestData),Object.hasOwn(e._rawRequestData,"Condition")?this._result=e._rawRequestData.Condition:this._result=e._rawRequestData,{GetNext:()=>this.GetNext(),GetPrevious:()=>this.GetPrevious(),GetByGuid:e=>this.GetByGuid(e),GetAllowedArguments:()=>this.GetAllowedArguments(),RemoveSequence:e=>this.RemoveSequenceByGuid(e),ArgumentAsAstronomicalClockWithOffset:(e,t,n)=>this.ArgumentAsAstronomicalClockWithOffset(e,t,n),ArgumentAsDaysOfWeek:(e,t,n)=>this.ArgumentAsDaysOfWeek(e,t,n),ArgumentAsDeviceState:(e,t,n,r=Bo.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Bo.Equal)=>this.ArgumentAsTime(e,t,n),ArgumentAsTimeSpan:(e,t)=>this.ArgumentAsTimeSpan(e,t),ArgumentAsSceneExecuted:e=>this.ArgumentAsSceneExecuted(e),RemoveTask:e=>this.RemoveTask(e)}}ArgumentAsAstronomicalClockWithOffset(e,t,n){if(this._tmp.Guid=Lr.NewGuid(),this._tmp.HandledType=Lo.AstronomicalClockWithOffset,this._tmp.LeftArgumentType=ls.ArgumentAsAstronomicalClockWithOffset,this._tmp.AtMeetCondition=t,t&&null!=n&&n!=Bo.Equal)throw new _s("AtmeetCondition supports only comparation type 'Equal'.");if(e.Offset<-3600||e.Offset>3600)throw new _s("Offset must be in range between -3600 and 3600 seconds.");if(t)this._tmp.ConditionType=Bo.Equal;else{if(null==n)throw new _s("Comparasion type must be provided if atMeetCondition is false!");this._tmp.ConditionType=n}return this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=ls.ArgumentAsAstronomicalClockWithOffset,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsActionWithEmptyCondition(){return this._tmp.Guid=Lr.NewGuid(),this._tmp.HandledType=Lo.Unknown,this._tmp.LeftArgumentType=ls.Null,this._tmp.ConditionType=Bo.Equal,this._tmp.LeftArgument.Argument=null,this._tmp.LeftArgument.HandledType=ls.Null,this._tmp.Name=this._sequenceName,this._tmp.Icon=this._sequenceIcon,this._tmp.AtMeetCondition=!1,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsDaysOfWeek(e,t,n=Bo.Equal){return this._tmp.Guid=Lr.NewGuid(),this._tmp.HandledType=Lo.DaysOfWeek,this._tmp.LeftArgumentType=ls.ArgumentAsDaysOfWeek,this._tmp.ConditionType=n,this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=ls.ArgumentAsDaysOfWeek,this._tmp.AtMeetCondition=t,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsTimeSpan(e,t=Bo.Equal){return this._tmp.Guid=Lr.NewGuid(),this._tmp.HandledType=Lo.Timer,this._tmp.LeftArgumentType=ls.ArgumentAsTimeSpan,this._tmp.ConditionType=t,this._tmp.AtMeetCondition=!0,this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=ls.ArgumentAsTimeSpan,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsTime(e,t,n=Bo.Equal){return this._tmp.Guid=Lr.NewGuid(),this._tmp.HandledType=Lo.Time,this._tmp.LeftArgumentType=ls.ArgumentAsTime,this._tmp.ConditionType=n,this._tmp.AtMeetCondition=t,this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=ls.ArgumentAsTime,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsDeviceState(e,t,n,r=Bo.Equal){return this._tmp.Guid=Lr.NewGuid(),this._tmp.HandledType=Lo.DeviceState,this._tmp.LeftArgumentType=ls.ArgumentAsDeviceState,this._tmp.ConditionType=r,this._tmp.AtMeetCondition=t,this._tmp.ConditionTimeout=n,this._tmp.LeftArgument.Argument=this.GenerateDeviceStateArgument(e),this._tmp.LeftArgument.HandledType=ls.ArgumentAsDeviceState,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsSceneExecuted(e){this._tmp.Guid=Lr.NewGuid(),this._tmp.HandledType=Lo.SceneExecuted,this._tmp.LeftArgumentType=ls.ArgumentAsConditionInfo,this._tmp.ConditionType=Bo.Equal,this._tmp.AtMeetCondition=!0;const t=new is;return t.DeviceGuid=e.DeviceGuid,this._tmp.LeftArgument.Argument=t,this._tmp.LeftArgument.HandledType=ls.ArgumentAsConditionInfo,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}GenerateDeviceStateArgument(e){const t=new fs;t.Channel=e.GetCheckDeviceState().Channel,t.ComparisonMethod=e.ComparisonMethod;let n={},r=e.GetComparisonParams().entries();for(const[e,t]of r)n=Object.assign(Object.assign({},n),{[Uo[e]]:t.Value});switch(t.ComparisonParams=n,t.DeviceGuid=e.DeviceGuid,t.DeviceStateType=this.MapResponseTypeToDeviceStateType(e.Type),e.Type){case Ct.BatteryState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State,t.CheckedDeviceState.Percentage=e.GetCheckDeviceState().Percentage;break;case Ct.BinarySensorState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case Ct.BlindPosition:t.CheckedDeviceState.Position=e.GetCheckDeviceState().Position;break;case Ct.LightBrightness:case Ct.MeasuredBrightness:t.CheckedDeviceState.Brightness=e.GetCheckDeviceState().Brightness;break;case Ct.RemoteButtonState:case Ct.ChannelOnOffState:case Ct.DoorBellState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case Ct.MeasuredEnergy:{let n={},r=e.GetCheckDeviceState().MeasurementParameters.entries();for(const[e,t]of r)n=Object.assign(Object.assign({},n),{[zt[e]]:t});t.CheckedDeviceState.MeasurementParameters=n;break}case Ct.FloodSensorState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case Ct.GatePosition:t.CheckedDeviceState.Position=e.GetCheckDeviceState().Position,t.CheckedDeviceState.PositionType=e.GetCheckDeviceState().PositionType;break;case Ct.LightColor:{const n=e.GetCheckDeviceState();t.CheckedDeviceState.R=n.R,t.CheckedDeviceState.G=n.G,t.CheckedDeviceState.B=n.B;break}case Ct.LightWarmth:t.CheckedDeviceState.Temperature=e.GetCheckDeviceState().Temperature;break;case Ct.ReedState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case Ct.SmokeSensorState:throw new as("Unsupported device state!");case Ct.MeasuredTemperature:t.CheckedDeviceState.Temperature=e.GetCheckDeviceState().Temperature;break;case Ct.HumiditySensorState:t.CheckedDeviceState.Humidity=e.GetCheckDeviceState().Humidity;break;case Ct.BlindRemoteButtonState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case Ct.LightRGBWState:{let n=e.GetCheckDeviceState();t.CheckedDeviceState.R=n.R,t.CheckedDeviceState.G=n.G,t.CheckedDeviceState.B=n.B,t.CheckedDeviceState.W=n.W;break}case Ct.FacadeRemoteButtonState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case Ct.MovementSensorState:{let n=e.GetCheckDeviceState();t.CheckedDeviceState.Movement=n.Movement,t.CheckedDeviceState.Intensity=n.Intensity;break}case Ct.PressureSensorState:t.CheckedDeviceState.Pressure=e.GetCheckDeviceState().Pressure,t.CheckedDeviceState.PressureType=e.GetCheckDeviceState().PressureType;break;case Ct.WindSpeedState:t.CheckedDeviceState.Value=e.GetCheckDeviceState().Value;break;case Ct.CurrentWindThreshold:t.CheckedDeviceState.WindThreshold=e.GetCheckDeviceState().WindThreshold;break;case Ct.Unknown:t.CheckedDeviceState={};break;default:throw new as("Unsupported device state!")}return t}MapResponseTypeToDeviceStateType(e){switch(e){case Ct.BatteryState:return Wo.BatteryState;case Ct.BinarySensorState:return Wo.BinarySensor;case Ct.BlindPosition:return Wo.BlindPosition;case Ct.LightBrightness:return Wo.LightBrightness;case Ct.RemoteButtonState:return Wo.ButtonState;case Ct.ChannelOnOffState:return Wo.ChannelOnOff;case Ct.DoorBellState:return Wo.DoorBell;case Ct.MeasuredEnergy:return Wo.Energy;case Ct.FloodSensorState:return Wo.FloodSensor;case Ct.GatePosition:return Wo.GatePosition;case Ct.MeasuredBrightness:return Wo.Brightness;case Ct.LightColor:return Wo.LightColor;case Ct.LightWarmth:return Wo.LightTemperature;case Ct.ReedState:return Wo.ReedState;case Ct.SmokeSensorState:return Wo.SmokeSensor;case Ct.MeasuredTemperature:return Wo.Temperature;case Ct.HumiditySensorState:return Wo.Humidity;case Ct.BlindRemoteButtonState:return Wo.BlindsControlButton;case Ct.FacadeRemoteButtonState:return Wo.FacadeControlButton;case Ct.MovementSensorState:return Wo.Movement;case Ct.PressureSensorState:return Wo.AirPressure;case Ct.WindSpeedState:return Wo.WindSpeed;case Ct.CurrentWindThreshold:return Wo.WindThreshold;default:return Wo.Unknown}}AddSequence(){const e=(t,n)=>{if(t.RightArgumentType!=ls.Null)return e(t.RightArgument,n);t.RightArgumentType=ls.Condition,t.RightArgument=n,this._editingExistingSequence&&null!=this._rawExistingSequenceTasks&&(n.Tasks=JSON.parse(JSON.stringify(this._rawExistingSequenceTasks)),t.Tasks=new vs)};null==this._result?(this._tmp.Name=this._sequenceName,this._tmp.Icon=this._sequenceIcon,this._result=this._tmp,this._result.AtMeetCondition=!0):e(this._result,this._tmp);const t=this._service.MapSequence(JSON.parse(JSON.stringify(this._tmp)));return this._tmp=new hs,{GetNext:()=>this.GetNext(),GetPrevious:()=>this.GetPrevious(),GetByGuid:e=>this.GetByGuid(e),GetAllowedArguments:()=>this.GetAllowedArguments(),RemoveSequenceByGuid:e=>this.RemoveSequenceByGuid(e),Commit:()=>this.Commit(),ArgumentAsActionWithEmptyCondition:()=>this.ArgumentAsActionWithEmptyCondition(),ArgumentAsAstronomicalClockWithOffset:(e,t,n)=>this.ArgumentAsAstronomicalClockWithOffset(e,t,n),ArgumentAsDaysOfWeek:(e,t,n)=>this.ArgumentAsDaysOfWeek(e,t,n),ArgumentAsDeviceState:(e,t,n,r=Bo.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Bo.Equal)=>this.ArgumentAsTime(e,t,n),ArgumentAsTimeSpan:(e,t)=>this.ArgumentAsTimeSpan(e,t),ArgumentAsSceneExecuted:e=>this.ArgumentAsSceneExecuted(e),SequenceData:t}}EditSequence(e){const t=(n,r)=>{if(n.Guid!=e||n.ObjectType!=ls.Condition){if(n.RightArgumentType==ls.Condition)return t(n.RightArgument,r);throw new Cs(`Cannot edit sequence with given GUID ${e} - sequence not foud in chain`)}n.AtMeetCondition=r.AtMeetCondition,n.ConditionTimeout=r.ConditionTimeout,n.ConditionType=r.ConditionType,n.ExecuteOnce=r.ExecuteOnce,n.HandledType=r.HandledType,n.IsDisabled=r.IsDisabled,n.LeftArgument=r.LeftArgument,n.LeftArgumentType=r.LeftArgumentType,n.ObjectType=r.ObjectType,n.Tasks=r.Tasks,r.Guid=n.Guid,r.Icon=n.Icon,r.Name=n.Name};if(null==this._result)throw new Cs(`Cannot edit sequence with given GUID ${e} - sequence not initialized (no root element)`);t(this._result,this._tmp);const n=this._service.MapSequence(JSON.parse(JSON.stringify(this._tmp)));return this._tmp=new hs,console.log(`new tmp guid: ${this._tmp.Guid}`),this._result.AtMeetCondition||(this._result.AtMeetCondition=!0),{GetNext:()=>this.GetNext(),GetPrevious:()=>this.GetPrevious(),GetByGuid:e=>this.GetByGuid(e),GetAllowedArguments:()=>this.GetAllowedArguments(),RemoveSequenceByGuid:e=>this.RemoveSequenceByGuid(e),Commit:()=>this.Commit(),ArgumentAsActionWithEmptyCondition:()=>this.ArgumentAsActionWithEmptyCondition(),ArgumentAsAstronomicalClockWithOffset:(e,t,n)=>this.ArgumentAsAstronomicalClockWithOffset(e,t,n),ArgumentAsDaysOfWeek:(e,t,n)=>this.ArgumentAsDaysOfWeek(e,t,n),ArgumentAsDeviceState:(e,t,n,r=Bo.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Bo.Equal)=>this.ArgumentAsTime(e,t,n),ArgumentAsTimeSpan:(e,t)=>this.ArgumentAsTimeSpan(e,t),ArgumentAsSceneExecuted:e=>this.ArgumentAsSceneExecuted(e),SequenceData:n}}RemoveSequenceByGuid(e){let t;const n=(e,n)=>{""==this._currentSeqGuid&&""==this._prevSeqGuid||(this._currentSeqGuid==n?(this._currentSeqGuid=e.RightArgumentType==ls.Condition?e.RightArgument.Guid:"",this._prevSeqGuid=null!=t?t.Guid:""):this._prevSeqGuid==n&&(this._prevSeqGuid=null!=t?t.Guid:""))},r=(e,o)=>{if(e.Guid!=o){if(t=e,e.RightArgumentType==ls.Null)throw new Cs(`Cannot remove sequence, sequence with given guid ${o} not found!`);return r(e.RightArgument,o)}null==t?this._result=null:(t.RightArgument=e.RightArgument,t.RightArgumentType=e.RightArgumentType),n(e,o)};if(null==this._result)throw new Cs("Cannot remove sequence, sequence not configured!");return this._result.Guid==e&&this._result.RightArgumentType!=ls.Null?(this._result.RightArgument.Name=this._result.Name,this._result.RightArgument.Icon=this._result.Icon,this._result.RightArgument.Guid=this._result.Guid,this._result=this._result.RightArgument,this._result.AtMeetCondition=!0,n(this._result,e)):r(this._result,e),{GetNext:()=>this.GetNext(),GetPrevious:()=>this.GetPrevious(),GetByGuid:e=>this.GetByGuid(e),GetAllowedArguments:()=>this.GetAllowedArguments(),RemoveSequenceByGuid:e=>this.RemoveSequenceByGuid(e),Commit:()=>this.Commit(),ArgumentAsActionWithEmptyCondition:()=>this.ArgumentAsActionWithEmptyCondition(),ArgumentAsAstronomicalClockWithOffset:(e,t,n)=>this.ArgumentAsAstronomicalClockWithOffset(e,t,n),ArgumentAsDaysOfWeek:(e,t,n)=>this.ArgumentAsDaysOfWeek(e,t,n),ArgumentAsDeviceState:(e,t,n,r=Bo.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Bo.Equal)=>this.ArgumentAsTime(e,t,n),ArgumentAsTimeSpan:(e,t)=>this.ArgumentAsTimeSpan(e,t),ArgumentAsSceneExecuted:e=>this.ArgumentAsSceneExecuted(e),SequenceData:null}}Commit(){const e=t=>{if(t.RightArgumentType!=ls.Null)return e(t.RightArgument);null!=this._rawExistingSequenceTasks&&(t.Tasks=this._rawExistingSequenceTasks)};if(null==this._result)throw new Cs("Sequence are not initialized! Not found root sequence.");return this._editingExistingSequence&&e(this._result),{GetSupportedTypesOfTasks:()=>this.GetSupportedTaskTypesAsync(),DeviceTask:e=>this.DeviceTask(e),DelayTask:e=>this.DelayTask(e),NotifyTask:e=>this.NotifyTask(e),LockExecutionTask:e=>this.LockExecutionTask(e),RemoveTask:e=>this.RemoveTask(e),Build:()=>this.Build(),BuildToISequence:()=>this._service.MapSequence(JSON.parse(JSON.stringify(this._result))),ValidateScene:()=>this.ValidateScene()}}DeviceTask(e){if(this._tmpTask=this.ParseDeviceTask(e),null==this._result)throw new Error("No context!");return{AddTask:()=>this.AddTask(),EditTask:e=>this.EditTask(e),TaskId:oe.GenerateMd5(JSON.stringify(this._tmpTask))}}ParseDeviceTask(e){const t=new ys;return t.Channel=e.Channel,t.DeviceGuid=e.DeviceGuid,t.ControlFeature=this.MapTaskTypeToControlFeature(e.TaskType),t.Data={},t.Data.Channel=e.Channel,e.TaskType==_t.SetBlindPosition||e instanceof Jr?(t.Data.Position=e.Position,t.Data.Action=e.Action):e.TaskType==_t.SetBlindPositionSimple||e instanceof Xr?(t.Data.Action=e.Action,t.Data.Position=0):e.TaskType==_t.SetLightColor||e instanceof jr?(t.Data.R=e.R,t.Data.G=e.G,t.Data.B=e.B):e.TaskType==_t.SetLightTemperature||e instanceof zr?t.Data.Temperature=e.Temperature:e.TaskType==_t.SetLightBrightness||e instanceof Hr?t.Data.Brightness=e.Brightness:e.TaskType==_t.SetTemperature||e instanceof Wr?t.Data.Temperature=e.Temperature:e.TaskType==_t.TurnOnWithTime||e instanceof Vr?t.Data.SwitchOffDelaySeconds=e.SwitchOffDelaySeconds:e.TaskType==_t.SetLightBrightnessDynamicly||e instanceof Yr?t.Data.Brightness=e.Brightness:e.TaskType==_t.SetBlindOpenCloseTime||e instanceof Zr?(t.Data.CloseTime=e.Data.CloseTime,t.Data.OpenTime=e.Data.OpenTime):e.TaskType==_t.SetBlindMicroventilation||e instanceof no?t.Data.Position=e.Position:e.TaskType==_t.SetFacadePosition||e instanceof so?(t.Data.FacadeAction=e.FacadeAction,t.Data.Position=e.Position,t.Data.Tilt=e.Tilt):(e.TaskType==_t.LightRGBW||e instanceof co)&&(t.Data.R=e.Data.R,t.Data.G=e.Data.G,t.Data.B=e.Data.B,t.Data.W=e.Data.W,t.Data.Brightness=e.Data.Brightness),t}DelayTask(e){const t=new ws;if(t.Delay=e.Delay.Value,this._tmpTask=t,null==this._result)throw new Error("No context!");return{AddTask:()=>this.AddTask(),EditTask:e=>this.EditTask(e),TaskId:oe.GenerateMd5(JSON.stringify(t))}}NotifyTask(e){if(e.NotifyType==Ho.Email)throw new Ts("NotifyType 'Email' is not supported!");if(e.NotifyType==Ho.None)throw new Error("NotifyType mus be set!");if(""==e.Message)throw new _s("Message must be set!");if(e.Message.length>1e3)throw new _s("Message is too long! Max length is 1000 characters.");const t=new As;if(t.NotifyType=e.NotifyType,t.Message=e.Message,t.NotificationClients=e.NotificationClients,t.Title=this._sequenceName,this._tmpTask=t,null==this._result)throw new Error("No context!");return{AddTask:()=>this.AddTask(),EditTask:e=>this.EditTask(e),TaskId:oe.GenerateMd5(JSON.stringify(t))}}LockExecutionTask(e){const t=new Ss;if(t.LockType=e.LockType,t.LockType==Ko.Timeout&&"00:00:00"!=t.LockEndHour)throw new Ts("Parameter LockEndHour at lock type `Timeout` must be default!");if(t.LockStartHour=e.LockStartHour.Value,t.LockEndHour=e.LockEndHour.Value,t.ResetLockScenesGuids=e.ResetLockScenesGuids,this._tmpTask=t,null==this._result)throw new Error("No context!");return{AddTask:()=>this.AddTask(),EditTask:e=>this.EditTask(e),TaskId:oe.GenerateMd5(JSON.stringify(t))}}AddTask(){const e=t=>{var n;if(t.RightArgumentType!=ls.Null)return e(t.RightArgument);if(null==this._tmpTask)throw Error("No task context!");void 0!==t.Tasks.DevicesTasks&&null!==t.Tasks.DevicesTasks||(t.Tasks.DevicesTasks=[]),this._tmpTask instanceof ys&&t.Tasks.DevicesTasks.push(structuredClone(this._tmpTask)),t.Tasks.ControllerTasks.push(structuredClone(this._tmpTask)),this._tmpTask=null,null===(n=o.Log)||void 0===n||n.Debug(`Task added to sequence: \n${JSON.stringify(this._tmpTask)} \ntasks on a list: \n${JSON.stringify(t.Tasks)}`)};if(null==this._result)throw new Error("No context!");return e(this._result),{GetSupportedTypesOfTasks:()=>this.GetSupportedTaskTypesAsync(),DeviceTask:e=>this.DeviceTask(e),DelayTask:e=>this.DelayTask(e),NotifyTask:e=>this.NotifyTask(e),LockExecutionTask:e=>this.LockExecutionTask(e),RemoveTask:e=>this.RemoveTask(e),Build:()=>this.Build(),BuildToISequence:()=>this._service.MapSequence(JSON.parse(JSON.stringify(this._result))),ValidateScene:()=>this.ValidateScene()}}EditTask(e){const t=n=>{var r;if(n.RightArgumentType!=ls.Null)return t(n.RightArgument);if(null==this._tmpTask)throw Error("No task context!");if(null==n.Tasks.ControllerTasks||0==n.Tasks.ControllerTasks.length)throw new Ds("Task not found, cannot edit!");this._tmpTask instanceof ys&&null!=n.Tasks.DevicesTasks&&(n.Tasks.DevicesTasks=n.Tasks.DevicesTasks.map((t=>oe.GenerateMd5(JSON.stringify(t))==e?structuredClone(this._tmpTask):t))),n.Tasks.ControllerTasks=n.Tasks.ControllerTasks.map((t=>oe.GenerateMd5(JSON.stringify(t))==e?structuredClone(this._tmpTask):t)),this._tmpTask=null,null===(r=o.Log)||void 0===r||r.Debug(`Task edited in sequence: \n${JSON.stringify(this._tmpTask)} \ntasks on a list: \n${JSON.stringify(n.Tasks)}`)};if(null==this._result)throw new Error("No context!");return t(this._result),{GetSupportedTypesOfTasks:()=>this.GetSupportedTaskTypesAsync(),DeviceTask:e=>this.DeviceTask(e),DelayTask:e=>this.DelayTask(e),NotifyTask:e=>this.NotifyTask(e),LockExecutionTask:e=>this.LockExecutionTask(e),RemoveTask:e=>this.RemoveTask(e),Build:()=>this.Build(),BuildToISequence:()=>this._service.MapSequence(JSON.parse(JSON.stringify(this._result))),ValidateScene:()=>this.ValidateScene()}}RemoveTask(e){const t=(e,n)=>{var r,o;if(e.RightArgumentType!=ls.Null)return t(e.RightArgument,n);{const t=e.Tasks.ControllerTasks.filter((e=>oe.GenerateMd5(JSON.stringify(e))!=n));if(e.Tasks.ControllerTasks=null==t?[]:t,null===(o=null===(r=e.Tasks)||void 0===r?void 0:r.DevicesTasks)||void 0===o?void 0:o.any()){const t=e.Tasks.DevicesTasks.filter((e=>oe.GenerateMd5(JSON.stringify(e))!=n));e.Tasks.DevicesTasks=null==t?[]:t}}};if(null==this._result)throw Error("Cannot remove task, sequence not configured!");t(this._result,e)}MapTaskTypeToControlFeature(e){switch(e){case _t.Unknown:throw new _s("Unsupported task type!");case _t.SetBlindPosition:case _t.SetBlindPositionSimple:return Nr.SetBlindPosition;case _t.SetBlindMicroventilation:return Nr.SetBlindMicroventilation;case _t.TurnOff:return Nr.TurnOff;case _t.TurnOn:return Nr.TurnOn;case _t.TurnOnWithTime:return Nr.TurnOnWithTimeout;case _t.TogleState:return Nr.ToggleState;case _t.SetLightBrightnessDynamicly:return Nr.SetLightBrightnessDynamicly;case _t.SetLightBrightness:return Nr.SetLightBrightness;case _t.SetLightColor:return Nr.SetLightColor;case _t.SetLightTemperature:return Nr.SetLightTemperature;case _t.PairDevice:case _t.UnpairDevice:throw new _s("Unsupported task type!");case _t.IdentifyDevice:return Nr.IdentifyDevice;case _t.GetChannelsState:return Nr.GetState;case _t.GetPowerMeasurements:case _t.GetAvailableData:case _t.MultipleDataRequest:throw new _s("Unsupported task type!");case _t.SetBlindOpenCloseTime:return Nr.SetBlindOpenCloseTime;case _t.SetTemperature:return Nr.SetTemperature;case _t.ChangeGatePositionPulse:return Nr.GatePulse;case _t.ChangeGatewayPositionPulse:return Nr.GatewayPulse;case _t.SetFacadePosition:case _t.GetFacadeType:return Nr.SetFacadePositionAndTilt;case _t.LightRGBW:return Nr.LightRGBW;default:throw new _s("Unsupported task type!")}}GetSupportedTaskTypesAsync(){return e=this,t=void 0,r=function*(){const e=yield $v.Get(Yo.ServiceName).GetSoftwareRuntimeInfoAsync(),[t,n]=e.SoftwareVersion.split(".").map((e=>parseInt(e))),r=[Vo.DeviceTask];return(t>5||5==t&&n>=27)&&r.push(Vo.DelayTask),(t>5||5==t&&n>=37)&&r.push(Vo.LockExecutionTask),(t>6||6==t&&n>=3)&&r.push(Vo.NotifyTaskAppNotify),r},new((n=void 0)||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}));var e,t,n,r}Build(){const e=t=>{if(t.RightArgumentType!=ls.Null)return e(t.RightArgument);t.Tasks.ControllerTasks=t.Tasks.ControllerTasks.map((e=>(Object.hasOwn(e,"_taskGuid")&&delete e._taskGuid,e)))};if(null!=this._result)return e(this._result),this._result;throw Error("Cannot build sequence, sequence not configured!")}FindArgumentWithGuid(e,t){return e.Guid==t?e:e.RightArgumentType==ls.Condition?this.FindArgumentWithGuid(e.RightArgument,t):null}GetAllowedArguments(){const e=[];return null==this._result?(e.push({ArgumentType:us.ArgumentAsAstronomicalClockWithOffset,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:us.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:us.ArgumentAsDeviceState,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:us.ArgumentAsSceneExecuted,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:us.ArgumentAsTime,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:us.ArgumentAsTimeSpan,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1})):null!=this._result&&(null==this._result.RightArgument||this._result.RightArgument instanceof ps)&&(this._result.LeftArgumentType==ls.ArgumentAsDaysOfWeek&&(e.push({ArgumentType:us.ArgumentAsTime,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!0}),e.push({ArgumentType:us.ArgumentAsAstronomicalClockWithOffset,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!0})),this._result.LeftArgumentType==ls.ArgumentAsTime&&e.push({ArgumentType:us.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!1}),this._result.LeftArgumentType==ls.ArgumentAsAstronomicalClockWithOffset&&e.push({ArgumentType:us.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!1})),0==e.any((e=>e.ArgumentType==us.ArgumentAsAstronomicalClockWithOffset))&&e.push({ArgumentType:us.ArgumentAsAstronomicalClockWithOffset,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==us.ArgumentAsDaysOfWeek))&&e.push({ArgumentType:us.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==us.ArgumentAsDeviceState))&&e.push({ArgumentType:us.ArgumentAsDeviceState,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==us.ArgumentAsSceneExecuted))&&e.push({ArgumentType:us.ArgumentAsSceneExecuted,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),0==e.any((e=>e.ArgumentType==us.ArgumentAsTime))&&e.push({ArgumentType:us.ArgumentAsTime,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==us.ArgumentAsTimeSpan))&&e.push({ArgumentType:us.ArgumentAsTimeSpan,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e}ValidateScene(){var e,t,n,r;if(null==this._result)throw new Error("No context!");const o=[],s=(e,t,n)=>e.RightArgumentType==ls.Null?e.LeftArgumentType==t&&e.AtMeetCondition==n?e:null:e.LeftArgumentType==t&&e.AtMeetCondition==n?e:s(e.RightArgument,t,n),i=s(this._result,ls.ArgumentAsDaysOfWeek,!0);null!=i&&((null===(e=i.RightArgument)||void 0===e?void 0:e.LeftArgumentType)==ls.ArgumentAsTime||(null===(t=i.RightArgument)||void 0===t?void 0:t.LeftArgumentType)==ls.ArgumentAsAstronomicalClockWithOffset)&&o.push(cs.OptimizeDayOfWeekArgument);const a=s(this._result,ls.ArgumentAsTime,!0);return null!=a&&(null===(n=a.RightArgument)||void 0===n?void 0:n.LeftArgumentType)==ls.ArgumentAsDaysOfWeek&&(null===(r=a.RightArgument)||void 0===r?void 0:r.AtMeetCondition)&&o.push(cs.OptimizeAtInDayOfWeekArgument),{IsValid:0==o.length,Errors:o,TryFix:()=>this.TryFix(o),Ignore:()=>this.Commit()}}TryFix(e){if(null==this._result)throw new Error("No context!");if(e.includes(cs.OptimizeDayOfWeekArgument)){const e=t=>{var n,r;return t.LeftArgumentType==ls.ArgumentAsDaysOfWeek?(null===(n=t.RightArgument)||void 0===n?void 0:n.LeftArgumentType)==ls.ArgumentAsTime||(null===(r=t.RightArgument)||void 0===r?void 0:r.LeftArgumentType)==ls.ArgumentAsAstronomicalClockWithOffset?t:e(t.RightArgument):t.RightArgumentType==ls.Null?null:e(t.RightArgument)},t=e(this._result);if(null==t)throw new Error("Something wrong! Cannot find 'days of week' argument! Cannot fix!");const n=structuredClone(t),r=t.RightArgument;t.LeftArgument=r.LeftArgument,t.LeftArgumentType=r.LeftArgumentType,t.HandledType=r.HandledType,r.LeftArgument=n.LeftArgument,r.LeftArgumentType=n.LeftArgumentType,r.HandledType=n.HandledType,r.AtMeetCondition=!1}if(e.includes(cs.OptimizeAtInDayOfWeekArgument)){const e=t=>{var n,r;return t.LeftArgumentType==ls.ArgumentAsTime?(null===(n=t.RightArgument)||void 0===n?void 0:n.LeftArgumentType)==ls.ArgumentAsDaysOfWeek&&(null===(r=t.RightArgument)||void 0===r?void 0:r.AtMeetCondition)?t:e(t.RightArgument):t.RightArgumentType==ls.Null?null:e(t.RightArgument)},t=e(this._result);if(null==t)throw new Error("Something wrong! Cannot find 'time' argument! Cannot fix!");t.RightArgument.AtMeetCondition=!1}return this.Commit()}}!function(e){e.OptimizeDayOfWeekArgument="OptimizeDayOfWeekArgument",e.OptimizeAtInDayOfWeekArgument="OptimizeAtInDayOfWeekArgument"}(cs||(cs={})),function(e){e.Unknown="Unknown",e.ArgumentAsAstronomicalClockWithOffset="ArgumentAsAstronomicalClockWithOffset",e.ArgumentAsDaysOfWeek="ArgumentAsDaysOfWeek",e.ArgumentAsTimeSpan="ArgumentAsTimeSpan",e.ArgumentAsTime="ArgumentAsTime",e.ArgumentAsDeviceState="ArgumentAsDeviceState",e.ArgumentAsSceneExecuted="ArgumentAsSceneExecuted"}(us||(us={}));class hs{constructor(){this.Tasks=new vs,this.Guid="",this.ObjectType=1,this.Name="",this.Icon="",this.AtMeetCondition=!1,this.ExecuteOnce=!1,this.IsDisabled=!1,this.HandledType=Lo.Unknown,this.ConditionType=Bo.Unknown,this.ConditionTimeout=0,this.LeftArgumentType=ls.Null,this.RightArgumentType=ls.Null,this.LeftArgument=new gs({},ls.Null),this.RightArgument=new ps}}class ps{constructor(){this.HandledType=0,this.Argument=null}}class gs{constructor(e,t){this.Argument=e,this.HandledType=t}}class fs{constructor(){this.DeviceStateType=Wo.Unknown,this.Channel=0,this.DeviceGuid="",this.ComparisonMethod=Oo.Default,this.ComparisonParams=null,this.CheckedDeviceState={}}}class vs{constructor(){this.ControllerTasks=[],this.DevicesTasks=[]}}class ms{constructor(){this.Guid=Lr.NewGuid(),this.RunParallel=!1,this.TaskType=xo.Unknown}}class ys extends ms{constructor(){super(...arguments),this.TaskType=xo.DeviceTask,this.DeviceGuid="",this.Channel=0,this.ControlFeature=Nr.TurnOn}}class ws extends ms{constructor(){super(...arguments),this.TaskType=xo.DelayTask,this.Delay="00:00:00"}}class Ss extends ms{constructor(){super(...arguments),this.TaskType=xo.LockExecution,this.LockType=Ko.Timeout,this.LockStartHour="00:00:00",this.LockEndHour="00:00:00",this.ResetLockScenesGuids=[]}}class As extends ms{constructor(){super(...arguments),this.TaskType=xo.NotifyTask,this.Title="",this.Message="",this.NotifyType=Ho.None,this.NotificationClients=[]}}!function(e){e[e.Null=0]="Null",e[e.Condition=1]="Condition",e[e.ConditionGroup=2]="ConditionGroup",e[e.ArgumentAsInt=3]="ArgumentAsInt",e[e.ArgumentAsTimeSpan=4]="ArgumentAsTimeSpan",e[e.ArgumentAsBoolean=5]="ArgumentAsBoolean",e[e.ArgumentAsTimeout=6]="ArgumentAsTimeout",e[e.ArgumentAsDayOfWeek=7]="ArgumentAsDayOfWeek",e[e.ArgumentAsDaysOfWeek=8]="ArgumentAsDaysOfWeek",e[e.ArgumentAsAstronomicalClock=9]="ArgumentAsAstronomicalClock",e[e.ArgumentAsTime=10]="ArgumentAsTime",e[e.ArgumentAsDeviceState=11]="ArgumentAsDeviceState",e[e.ArgumentAsNumber=12]="ArgumentAsNumber",e[e.ArgumentAsAstronomicalClockWithOffset=13]="ArgumentAsAstronomicalClockWithOffset",e[e.ArgumentAsConditionInfo=14]="ArgumentAsConditionInfo"}(ls||(ls={}));class _s extends Error{constructor(e){super(e),this.message=e,this.name="BadParametersScenesBuilderException"}}class Cs extends Error{constructor(e){super(e),this.message=e,this.name="SequenceNotFoundScenesBuilderException"}}class Ds extends Error{constructor(e){super(e),this.message=e,this.name="TaskNotFoundScenesBuilderException"}}class Ts extends Error{constructor(e){super(e),this.message=e,this.name="UnsupportedArgumentScenesBuilderException"}}var ks,Es=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class Gs{constructor(){this._connection=$v.Get(Ut.ServiceName),this._configurationService=$v.Get(it.ServiceName)}GetServiceName(){return Gs.ServiceName}GetSequencesListAsync(){return Es(this,void 0,void 0,(function*(){var e,t;const n=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Ns,12e3,!1);return null===(t=o.Log)||void 0===t||t.Debug(`GetSequencesListAsync result:\n ${JSON.stringify(n)}}`),null==n?new Ee(Po.OtherError,"Cannot get sequences list - response is null."):n.Status!=ce.OK?new Ee(Po.OtherError,`Cannot get sequences list - controller responded with response code ${n.Status}.`):null==n.Data?new Ee(Po.NoData,"Cannot get sequences list - controller responded with status OK, but response does not contain data!"):n.Data}))}GetSequenceAsync(e){return Es(this,void 0,void 0,(function*(){var t;let n="";n="string"==typeof e?e:e.Guid;const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new bs(n),12e3,!1);if(null==r)return new Ee(Po.OtherError,"Cannot get sequence - response is null.");if(r.Status!=ce.OK)return new Ee(Po.OtherError,`Cannot get sequence - controller responded with response code ${r.Status}.`);if(null==r.Data)return new Ee(Po.NoData,"Cannot get sequence - controller responded with status OK, but response does not contain data!");const o=r.Data;return this.MapSequence(o)}))}GetSequenceBuilder(e,t){return new ds(e,t)}CreateSequenceAsync(e){return Es(this,void 0,void 0,(function*(){var t,n,r,s;try{yield this._configurationService.EnterConfigurationModeAsync(),null===(t=o.Log)||void 0===t||t.Debug(`Creating sequence ${e.Name} json: \n${JSON.stringify(e)}`);const r=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new Os(e),2e4,!1);return null==r||null==r.Status?ce.Error:r.Status}catch(t){return null===(r=o.Log)||void 0===r||r.Error(`Creating sequence ${e.Name} error: ${t}`),ce.FatalError}finally{null===(s=o.Log)||void 0===s||s.Error(Gs.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! CreateSequenceAsync()"),yield this._configurationService.ExitConfigurationModeAsync()}}))}CheckIfSequenceIsUsedInAnotherSequenceAsync(e){return Es(this,void 0,void 0,(function*(){var t;try{let n="";n="string"==typeof e?e:e.Guid;const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Is(n),12e3,!1);if(null==r)return new Ee(Po.OtherError,"Cannot get sequence - response is null.");switch(r.Status){case ce.WrongData:return new Ee(Po.InvalidSceneGuid,"Cannot check if sequence is used in another sequence! Sequence not found, invalid sequence guid!");case ce.OK:return null==r.Data?new Ee(Po.NoData,"Cannot get sequence - controller responded with status OK, but response does not contain data!"):r.Data;default:return new Ee(Po.OtherError,`Cannot check if sequence is used in another sequence! Controller responded with code: ${r.Status}`)}}catch(e){return new Ee(Po.FatalError,`Cannot check if sequence is used in another sequence! Fatal error! ${e}`)}}))}DeleteSequenceAsync(e){return Es(this,void 0,void 0,(function*(){var t,n;try{let n="";n="string"==typeof e?e:e.Guid,yield this._configurationService.EnterConfigurationModeAsync();const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Ms(n),12e3,!1);return null==r||null==r.Status?ce.Error:r.Status}catch(e){return ce.FatalError}finally{null===(n=o.Log)||void 0===n||n.Error(Gs.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! DeleteSequenceAsync()"),yield this._configurationService.ExitConfigurationModeAsync()}}))}EditSequenceAsync(e){return Es(this,void 0,void 0,(function*(){var t,n,r;try{const n={Guid:e.Guid,Icon:e.Icon,Name:e.Name,Condition:e};yield this._configurationService.EnterConfigurationModeAsync();const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Us(n),2e4,!1);return null==r||null==r.Status?ce.Error:r.Status}catch(t){return null===(n=o.Log)||void 0===n||n.Error(`Editing sequence ${e.Name} error: ${t}`),ce.FatalError}finally{null===(r=o.Log)||void 0===r||r.Error(Gs.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! EditSequenceAsync()"),yield this._configurationService.ExitConfigurationModeAsync()}}))}EnableSequenceAsync(e){return Es(this,void 0,void 0,(function*(){var t;let n="";n="string"==typeof e?e:e.Guid;const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new xs(n),12e3,!1);return null==r||null==r.Status?ce.Error:r.Status}))}DisableSequenceAsync(e){return Es(this,void 0,void 0,(function*(){var t;let n="";n="string"==typeof e?e:e.Guid;const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Fs(n),12e3,!1);return null==r||null==r.Status?ce.Error:r.Status}))}RunSequenceAsync(e){return Es(this,void 0,void 0,(function*(){let t="";if("string"==typeof e){const n=yield this.GetSequencesListAsync();if(null!=n.Type)return ce.Error;{const r=n.find((t=>t.Guid==e));if(!r)return ce.Error;t=r.DeviceGuid}}else t=e.DeviceGuid;const n=new qr;switch(n.Channel=1,n.DeviceGuid=t,yield $v.Get(Bs.ServiceName).ExecuteDeviceTaskAsync({Guid:t},n)){case Gt.Executed:return ce.OK;case Gt.DeviceNotFound:return ce.WrongData;default:return ce.Error}}))}GetUtilsAsync(){return Es(this,void 0,void 0,(function*(){const e=yield this.SunCalculatorAsync();return{GetSunRiseTime:e.GetSunRiseTime,GetSunSetTime:e.GetSunSetTime,ParseLinearScaleToLux:this._parseLinearScaleToLux,ParseLuxToLinearScale:this._parseLuxToLinearScale}}))}_parseLinearScaleToLux(e){if(!(e<0||e>1))return Math.round(Math.pow(10,5*e))}_parseLuxToLinearScale(e){if(e<=0)return 0;const t=Math.log10(e)/5;return t>1?1:t}SunCalculatorAsync(){return Es(this,void 0,void 0,(function*(){var e;const t=$v.Get(To.ServiceName),n=new So;let r=!1;n.Latitude=49.9958888026741,n.Longitude=18.9172596008914;try{if(yield t.IsControllerGeolocationSetAsync()){const e=yield t.GetControlllerGeolocationAsync();e instanceof Ao&&(n.Latitude=e.Latitude,n.Longitude=e.Longitude)}}catch(t){null===(e=o.Log)||void 0===e||e.Warning(`Cannot get localization data, using default values: 49.9958888026741, 18.9172596008914. Error: ${t}`)}const s=e=>{let t=7.95204*Math.sin(.01768*e+3.03217)+9.98906*Math.sin(.03383*e+3.4687)+4*(n.Longitude-15*Math.round(n.Longitude/15));return((e=new Date)=>{const t=new Date(e.getFullYear(),0,1).getTimezoneOffset(),n=new Date(e.getFullYear(),6,1).getTimezoneOffset();return Math.max(t,n)!==e.getTimezoneOffset()})()&&(t-=60),t},i=e=>Math.asin(-.39795*Math.cos(2*Math.PI*(e+10)/365)),a=e=>{const t=n.Latitude*Math.PI/180;let r=Math.sin(t)*Math.sin(e)/(Math.cos(t)*Math.cos(e));return r=(e=>(e<-1&&(e=-1),e>1&&(e=1),e))(r),r},c=e=>{const t=Math.ceil(e/60),n=e-60*t,r=new Date;return new Date(r.getFullYear(),r.getMonth(),r.getDate(),t,n)},u=e=>{const t=new Date;t.setDate(t.getDate()+e);const n=(o=t,Math.floor((o.valueOf()-new Date(o.getFullYear(),0,0).valueOf())/1e3/60/60/24));var o;const l=s(n),d=i(n),h=((e,t)=>{let n=720-720/Math.PI*Math.acos(-e)-t;return n<0&&(n+=1440),n})(a(d),l),p=c(h);return new Date>p&&!r?(r=!0,u(1)):(r=!1,new Date(t.getFullYear(),t.getMonth(),t.getDate(),p.getHours(),p.getMinutes()))},l=e=>{const t=new Date;t.setDate(t.getDate()+e);const n=(o=t,Math.floor((o.valueOf()-new Date(o.getFullYear(),0,0).valueOf())/1e3/60/60/24));var o;const u=s(n),d=i(n),h=a(d),p=Math.floor(((e,t)=>{let n=720+720/Math.PI*Math.acos(-e)-t;return n>1439&&(n-=1439),n})(h,u)),g=c(p);return new Date>g&&!r?(r=!0,l(1)):(r=!1,new Date(t.getFullYear(),t.getMonth(),t.getDate(),g.getHours(),g.getMinutes()))};return{GetSunRiseTime:()=>u(0),GetSunSetTime:()=>l(0)}}))}MapSequence(e,t=!1){const n=Object.assign({},e),r=e=>{if(e.RightArgumentType!=ks.Null)return!Object.hasOwn(e.Tasks,"ControllerTasks")&&Object.hasOwn(e.Tasks,"DevicesTasks")&&delete Object.assign(e.Tasks,{ControllerTasks:e.Tasks.DevicesTasks}).DevicesTasks,r(e.RightArgument);!Object.hasOwn(e.Tasks,"ControllerTasks")&&Object.hasOwn(e.Tasks,"DevicesTasks")&&(delete Object.assign(e.Tasks,{ControllerTasks:e.Tasks.DevicesTasks}).DevicesTasks,e.Tasks.ControllerTasks.map((e=>{e.TaskType=xo.DeviceTask,e.RunParallel=!1}))),null!=e.Tasks.ControllerTasks&&e.Tasks.ControllerTasks.map((e=>{null==(null==e?void 0:e.Guid)&&(e.Guid=Lr.NewGuid())}))};return r(e),n._rawRequestData=JSON.parse(JSON.stringify(e)),t?(n.RightArgument=null,n.RightArgumentType=qo.Null):(n.RightArgumentType=this.MapArgumentType(e.RightArgumentType),n.RightArgument=this.MapRightArgument(e.RightArgument,n.RightArgumentType)),n.LeftArgumentType=this.MapArgumentType(e.LeftArgumentType),n.LeftArgument=this.MapLeftArgument(e.LeftArgument,n.LeftArgumentType),n.Tasks.ControllerTasks=this.MapControllerTasks(e.Tasks.ControllerTasks),void 0===n.DoesHaveTriggers&&(n.DoesHaveTriggers=n.LeftArgumentType==qo.Null),n}MapRightArgument(e,t){return 0==e.HandledType||(e.LeftArgumentType=this.MapArgumentType(e.LeftArgumentType),e.LeftArgument=this.MapLeftArgument(e.LeftArgument,e.LeftArgumentType),e.Tasks.ControllerTasks=this.MapControllerTasks(e.Tasks.ControllerTasks),Object.hasOwn(e.Tasks,"DevicesTasks")&&delete e.Tasks.DevicesTasks,t===qo.Condition&&(e.RightArgumentType=this.MapArgumentType(e.RightArgumentType),e.RightArgument=this.MapRightArgument(e.RightArgument,e.RightArgumentType))),e}MapLeftArgument(e,t){let n=new Rs;switch(n.HandledType=e.HandledType,t){case qo.ArgumentAsAstronomicalClock:n.Argument.ArgumentAsAstronomicalClock={Position:e.Argument};break;case qo.ArgumentAsAstronomicalClockWithOffset:n.Argument.ArgumentAsAstronomicalClockWithOffset={Offset:e.Argument.Offset,Position:e.Argument.Position};break;case qo.ArgumentAsBoolean:n.Argument.ArgumentAsBoolean=e.Argument;break;case qo.ArgumentAsDayOfWeek:n.Argument.ArgumentAsDayOfWeek=e.Argument;break;case qo.ArgumentAsDaysOfWeek:n.Argument.ArgumentAsDaysOfWeek=e.Argument;break;case qo.ArgumentAsInt:n.Argument.ArgumentAsInt=e.Argument;break;case qo.ArgumentAsTimeout:n.Argument.ArgumentAsTimeout=e.Argument;break;case qo.ArgumentAsTimeSpan:n.Argument.ArgumentAsTimeSpan={days:e.Argument.days,hours:e.Argument.hours,minutes:e.Argument.minutes,seconds:e.Argument.seconds};break;case qo.ArgumentAsTime:n.Argument.ArgumentAsTime={Hour:e.Argument.Hour,Minute:e.Argument.Minute,Second:e.Argument.Second};break;case qo.ArgumentAsDeviceState:{const t=new rs;t.Type=this.MapDeviceStateTypeToResponseType(e.Argument.DeviceStateType),t.SetCheckDeviceState(this.CreateDeviceState(e.Argument.CheckedDeviceState,e.Argument.Channel,t.Type)),t.DeviceGuid=e.Argument.DeviceGuid,t.ComparisonMethod=null==e.Argument.ComparisonMethod?Oo.Default:e.Argument.ComparisonMethod,null!=e.Argument.ComparisonParams&&Object.entries(e.Argument.ComparisonParams).forEach((e=>{switch(e[0]){case"DeltaValue":case"StateRepeatCount":t.SetComparisonParam(Uo[e[0]],new os(e[1]));break;case"DeltaCalculationTimeRange":case"StateRepeatTimeRange":t.SetComparisonParam(Uo[e[0]],new ss(e[1]))}})),n.Argument.ArgumentAsDeviceState=t;break}case qo.ArgumentAsConditionInfo:n.Argument.ArgumentAsConditionInfo={DeviceGuid:e.Argument.DeviceGuid}}return n}MapArgumentType(e){return qo[ks[e]]}MapDeviceStateTypeToResponseType(e){switch(e){case Wo.BatteryState:return Ct.BatteryState;case Wo.BinarySensor:return Ct.BinarySensorState;case Wo.BlindPosition:return Ct.BlindPosition;case Wo.Brightness:return Ct.MeasuredBrightness;case Wo.ButtonState:return Ct.RemoteButtonState;case Wo.ChannelOnOff:return Ct.ChannelOnOffState;case Wo.DoorBell:return Ct.DoorBellState;case Wo.Energy:return Ct.MeasuredEnergy;case Wo.FloodSensor:return Ct.FloodSensorState;case Wo.GatePosition:return Ct.GatePosition;case Wo.LightBrightness:return Ct.LightBrightness;case Wo.LightColor:return Ct.LightColor;case Wo.LightTemperature:return Ct.LightWarmth;case Wo.ReedState:return Ct.ReedState;case Wo.SmokeSensor:return Ct.SmokeSensorState;case Wo.Temperature:return Ct.MeasuredTemperature;case Wo.Humidity:return Ct.HumiditySensorState;case Wo.BlindsControlButton:return Ct.BlindRemoteButtonState;case Wo.FacadeControlButton:return Ct.FacadeRemoteButtonState;case Wo.Movement:return Ct.MovementSensorState;case Wo.AirPressure:return Ct.PressureSensorState;case Wo.WindSpeed:return Ct.WindSpeedState;case Wo.WindThreshold:return Ct.CurrentWindThreshold;default:return Ct.Unknown}}CreateDeviceState(e,t,n){switch(n){case Ct.BatteryState:return{Channel:t,StateReliability:Bt.Unconfident,Percentage:e.Percentage,State:e.State,Time:""};case Ct.BinarySensorState:return{Channel:t,StateReliability:Bt.Unconfident,State:e.State,Time:""};case Ct.BlindPosition:return{Channel:t,StateReliability:Bt.Unconfident,Position:e.Position,RawPosition:e.RawPosition,Time:""};case Ct.LightBrightness:case Ct.MeasuredBrightness:return{Channel:t,StateReliability:Bt.Unconfident,Brightness:e.Brightness,Time:""};case Ct.RemoteButtonState:case Ct.ChannelOnOffState:case Ct.DoorBellState:return{Channel:t,StateReliability:Bt.Unconfident,State:e.State,Time:""};case Ct.MeasuredEnergy:{const n=new Map;for(let[t,r]of Object.entries(e.MeasurementParameters))n.set(zt[t],r);return{Channel:t,StateReliability:Bt.Unconfident,MeasurementParameters:n,Time:""}}case Ct.FloodSensorState:return{Channel:t,StateReliability:Bt.Unconfident,State:e.State,Time:""};case Ct.GatePosition:return{Channel:t,StateReliability:Bt.Unconfident,Position:e.Position,PositionType:e.PositionType,Time:""};case Ct.LightColor:return{Channel:t,StateReliability:Bt.Unconfident,R:e.R,G:e.G,B:e.B,Time:""};case Ct.LightWarmth:return{Channel:t,StateReliability:Bt.Unconfident,Temperature:e.Temperature,Time:""};case Ct.ReedState:return{Channel:t,StateReliability:Bt.Unconfident,State:e.State,Time:""};case Ct.SmokeSensorState:throw new as("Unsupported device state!");case Ct.MeasuredTemperature:return{Channel:t,StateReliability:Bt.Unconfident,Temperature:e.Temperature,Time:"",Type:e.Type};case Ct.HumiditySensorState:return{Channel:t,StateReliability:Bt.Unconfident,Humidity:e.Humidity,Time:"",Type:e.Type};case Ct.BlindRemoteButtonState:return{Channel:t,StateReliability:Bt.Unconfident,State:e.State,Time:""};case Ct.LightRGBWState:return{StateReliability:Bt.Unconfident,Channel:t,Time:"",Brightness:100,R:e.R,G:e.G,B:e.B,W:e.W};case Ct.FacadeRemoteButtonState:return{Channel:t,Time:"",StateReliability:Bt.Unconfident,State:e.State};case Ct.MovementSensorState:return{Channel:t,Time:"",StateReliability:Bt.Unconfident,Movement:e.Movement,Intensity:e.Intensity};case Ct.PressureSensorState:return{Channel:t,Time:"",StateReliability:Bt.Unconfident,Pressure:e.Pressure,PressureType:e.PressureType};case Ct.WindSpeedState:return{Channel:t,Time:"",StateReliability:Bt.Unconfident,Value:e.Value};case Ct.CurrentWindThreshold:return{Channel:t,Time:"",StateReliability:Bt.Unconfident,WindThreshold:e.WindThreshold};case Ct.Unknown:return new yn;default:throw new as("Unsupported device state!")}}MapDeviceTask(e){var t;let n=new Br,r=e;switch(null===(t=o.Log)||void 0===t||t.Debug(`[TASK] object: ${JSON.stringify(r)}`),r.ControlFeature){case Nr.TurnOn:n=new qr,n.TaskType=_t.TurnOn;break;case Nr.TurnOff:n=new $r,n.TaskType=_t.TurnOff;break;case Nr.ToggleState:n=new Kr,n.TaskType=_t.TogleState;break;case Nr.SetBlindPosition:{const e=$v.Get(Bs.ServiceName).GetDevice(r.DeviceGuid);(null==e?void 0:e.AvailableTaskTypes.any((e=>"IBlindPositionSimple"==e.InterfaceType)))?(n=new Xr,n.TaskType=_t.SetBlindPositionSimple,n.Action=r.Data.Action):(n=new Jr,n.TaskType=_t.SetBlindPosition,n.Action=r.Data.Action,n.Position=r.Data.Position);break}case Nr.SetLightColor:n=new jr,n.TaskType=_t.SetLightColor,n.R=r.Data.R,n.G=r.Data.G,n.B=r.Data.B;break;case Nr.SetLightTemperature:n=new zr,n.TaskType=_t.SetLightTemperature,n.Temperature=r.Data.Temperature;break;case Nr.SetLightBrightness:n=new Hr,n.TaskType=_t.SetLightBrightness,n.Brightness=r.Data.Brightness;break;case Nr.SetTemperature:n=new Wr,n.TaskType=_t.SetTemperature,n.Temperature=r.Data.Temperature;break;case Nr.GetState:n=new to,n.TaskType=_t.GetChannelsState;break;case Nr.TurnOnWithTimeout:n=new Vr,n.TaskType=_t.TurnOnWithTime,n.SwitchOffDelaySeconds=r.Data.SwitchOffDelaySeconds;break;case Nr.SetLightBrightnessDynamicly:n=new Yr,n.TaskType=_t.SetLightBrightnessDynamicly,n.Brightness=r.Data.Brightness;break;case Nr.IdentifyDevice:n=new Qr,n.TaskType=_t.IdentifyDevice;break;case Nr.SetBlindOpenCloseTime:n=new Zr,n.TaskType=_t.SetBlindOpenCloseTime,n.Data.CloseTime=r.Data;break;case Nr.SetBlindMicroventilation:n=new no,n.TaskType=_t.SetBlindMicroventilation,n.Position=r.Data.Position;break;case Nr.GatewayPulse:n=new oo,n.TaskType=_t.ChangeGatewayPositionPulse;break;case Nr.GatePulse:n=new ro,n.TaskType=_t.ChangeGatePositionPulse;break;case Nr.SetFacadePositionAndTilt:n=new so,n.TaskType=_t.SetFacadePosition,n.Position=r.Data.Position,n.Tilt=r.Data.Tilt,n.FacadeAction=Pr.TiltAndPercentage;break;case Nr.GetFacadeType:n=new io,n.TaskType=_t.GetFacadeType;break;case Nr.LightRGBW:n=new co,n.TaskType=_t.LightRGBW,n.Data=r.Data}return n.Channel=r.Channel,n.DeviceGuid=r.DeviceGuid,n.FeatureType=r.ControlFeature,n.Guid=Lr.NewGuid(),n}MapControllerTasks(e){var t,n;const r=[];null===(t=o.Log)||void 0===t||t.Debug(`[TASKS] received tasks object: ${JSON.stringify(e)}`);for(let t of e){const e=new Ps;switch(e.Guid=t.Guid,e.TaskId=oe.GenerateMd5(JSON.stringify(t)),t.TaskType){case xo.DeviceTask:e.TaskType=Fo.DeviceTask,e.Task.DeviceTask=this.MapDeviceTask(t);break;case xo.DelayTask:e.TaskType=Fo.DelayTask,e.Task.DelayTask={Delay:new ss(t.Delay)};break;case xo.NotifyTask:e.TaskType=Fo.NotifyTask,e.Task.NotifyTask={Message:t.Message,NotifyType:t.NotifyType,NotificationClients:t.NotificationClients};break;case xo.LockExecution:case xo.LockExecution:e.TaskType=Fo.LockExecution,null===(n=o.Log)||void 0===n||n.Debug(`[TASKS] received task LockExecution object: ${JSON.stringify(t)}`),e.Task.LockExecution={LockStartHour:new ss(t.LockStartHour),LockEndHour:new ss(t.LockEndHour),LockType:t.LockType,ResetLockScenesGuids:t.ResetLockScenesGuids};case xo.Unknown:}r.push(e)}return r}GetSupportedTaskTypesAsync(){return Es(this,void 0,void 0,(function*(){const e=yield $v.Get(Yo.ServiceName).GetSoftwareRuntimeInfoAsync(),[t,n]=e.SoftwareVersion.split(".").map((e=>parseInt(e))),r=[Vo.DeviceTask];return(t>5||5==t&&n>=27)&&r.push(Vo.DelayTask),(t>5||5==t&&n>=37)&&r.push(Vo.LockExecutionTask),(t>6||6==t&&n>=3)&&r.push(Vo.NotifyTaskAppNotify),r}))}}Gs.ServiceName="ScenesService";class Ns extends ae{constructor(){super(),this.Resource="/logic/sequences/list",this.Method=ue.Get}}class bs extends ae{constructor(e){super(),this.Resource="/logic/sequence",this.Method=ue.Get,this.Data=e}}class Is extends ae{constructor(e){super(),this.Resource="/logic/sequences/used",this.Method=ue.Get,this.Data=e}}class Rs{constructor(){this.HandledType=ks.Null,this.Argument={}}}!function(e){e[e.Null=0]="Null",e[e.Condition=1]="Condition",e[e.ConditionGroup=2]="ConditionGroup",e[e.ArgumentAsInt=3]="ArgumentAsInt",e[e.ArgumentAsTimeSpan=4]="ArgumentAsTimeSpan",e[e.ArgumentAsBoolean=5]="ArgumentAsBoolean",e[e.ArgumentAsTimeout=6]="ArgumentAsTimeout",e[e.ArgumentAsDayOfWeek=7]="ArgumentAsDayOfWeek",e[e.ArgumentAsDaysOfWeek=8]="ArgumentAsDaysOfWeek",e[e.ArgumentAsAstronomicalClock=9]="ArgumentAsAstronomicalClock",e[e.ArgumentAsTime=10]="ArgumentAsTime",e[e.ArgumentAsDeviceState=11]="ArgumentAsDeviceState",e[e.ArgumentAsNumber=12]="ArgumentAsNumber",e[e.ArgumentAsAstronomicalClockWithOffset=13]="ArgumentAsAstronomicalClockWithOffset",e[e.ArgumentAsConditionInfo=14]="ArgumentAsConditionInfo"}(ks||(ks={}));class Ps{constructor(){this.TaskId="",this.Guid="",this.TaskType=Fo.Unknown,this.Task={}}}class Os extends ae{constructor(e){super(),this.Resource="/logic/sequence",this.Method=ue.Put,this.Data=e}}class Us extends ae{constructor(e){super(),this.Resource="/logic/sequence/edit",this.Method=ue.Put,this.Data=e}}class Ms extends ae{constructor(e){super(),this.Resource="/logic/sequence",this.Method=ue.Delete,this.Data=e}}class xs extends ae{constructor(e){super(),this.Resource="/logic/sequence/enable",this.Method=ue.Post,this.Data=e}}class Fs extends ae{constructor(e){super(),this.Resource="/logic/sequence/disable",this.Method=ue.Post,this.Data=e}}var Ls=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class Bs{constructor(){this._devices=[],this._onDevicesTasksChangedEvent=new n,this._onDeviceFoundEvent=new n,this._onDeviceRegisteredEvent=new n,this._onDeviceRemovedEvent=new n,this._onDeviceFirmwareVersionChangedEvent=new n,this._onDeviceStateChangedEvent=new n,this._onDeviceStateRefreshedOrChangedEvent=new n,this._connection=null,this._session=null,this._controllerConfiguration=null,this._synchronized=!1,this._synchronizedDevicesStates=!1,this._devicesChannelsStates=[],this._synchronizationTaskCompletionSource=null,this._deviceStatesSynchronizationTaskCompletionSource=null,this._connection=$v.Get(Ut.ServiceName),this._session=$v.Get(Je.ServiceName),this._controllerConfiguration=$v.Get(it.ServiceName),this._onDeviceStateChangedEvent.Subscribe((e=>Ls(this,void 0,void 0,(function*(){return this.PutDeviceStateOnList(e.Device,e.State)})))),this._synchronizationTaskCompletionSource=new Promise((e=>{var t;null===(t=this._session)||void 0===t||t.OnUserLoggedInEvent().Subscribe((t=>Ls(this,void 0,void 0,(function*(){var t;try{this._devices=yield this.GetPairedDevicesAsync()}catch(e){null===(t=o.Log)||void 0===t||t.Error(Bs.ServiceName,`Failed to get paired devices: ${e}`)}this._synchronized=!0,e()}))))})),this._deviceStatesSynchronizationTaskCompletionSource=new Promise((e=>{var t;null===(t=this._session)||void 0===t||t.OnUserLoggedInEvent().Subscribe((t=>Ls(this,void 0,void 0,(function*(){var t;try{yield this.WaitForSynchronizationAsync(),yield this.SyncDevicesStatesAsync()}catch(e){null===(t=o.Log)||void 0===t||t.Error(Bs.ServiceName,`Failed to sync devices states: ${e}`)}this._synchronizedDevicesStates=!0,e()}))))})),this._connection.SubscribeTo("/info/devices/tasks",(e=>{this.ParseDeviceTaskInfo(e.Data)})),this._connection.SubscribeTo("/info/devices/device/found",(e=>{this.MapApiDevices(e.Data).forEach((e=>{var t;e.DeviceType!=kt.Scene&&(null===(t=o.Log)||void 0===t||t.Debug(Bs.ServiceName,`Found device: ${e.Name} guid: ${e.Guid}`),this._onDeviceFoundEvent.Invoke(e))}))})),this._connection.SubscribeTo("/info/devices/device/firmware/updated",(e=>{const t=e.Data.DeviceGuid,n=e.Data.Version,r=this._devices.find((e=>e.Guid==t));void 0!==r&&(this._onDeviceFirmwareVersionChangedEvent.Invoke({Device:r,FirmwareVersion:n}),r.SoftwareVersion=n,r.OnDeviceFirmwareVersionChangedEvent().Invoke({FirmwareVersion:n}))})),this._connection.SubscribeTo("/devices/blinds/times",(e=>{})),this._connection.SubscribeTo("/info/devices/device/state/changed",(e=>{var t;const n=e.Data,r=this._devices.filter((e=>e.Guid==n.DeviceGuid));if(r.length>0){const e=r[0],o=this.MapApiDeviceStateToDeviceState(e,n);if(null!=o){this._onDeviceStateRefreshedOrChangedEvent.Invoke({Device:e,State:o}),o.TypeAsEnum==Ct.SignalStrength?e.Channels.forEach((t=>{let r=new Yn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateRefreshedOrChangedEvent.Invoke({Device:e,State:r})})):o.TypeAsEnum==Ct.BatteryState&&e.Channels.forEach((t=>{let r=new Fn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateRefreshedOrChangedEvent.Invoke({Device:e,State:r})}));let r=e.States.find((e=>e.TypeAsEnum===o.TypeAsEnum&&e.Data.Channel===o.Data.Channel));if(r){let s=r.StatesComparisonData;if(o.TypeAsEnum==Ct.BlindErrorState&&(null===(t=o.Data)||void 0===t?void 0:t.ErrorCode)!=r.Data.ErrorCode)return void this._onDeviceStateChangedEvent.Invoke({Device:e,State:o});r.Data=o.Data,s!==o.StatesComparisonData&&(this._onDeviceStateChangedEvent.Invoke({Device:e,State:o}),o.TypeAsEnum==Ct.SignalStrength?e.Channels.forEach((t=>{let r=new Yn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateChangedEvent.Invoke({Device:e,State:r})})):o.TypeAsEnum==Ct.BatteryState&&e.Channels.forEach((t=>{let r=new Fn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateChangedEvent.Invoke({Device:e,State:r})})))}else e.States.push(o),this._onDeviceStateChangedEvent.Invoke({Device:e,State:o}),o.TypeAsEnum==Ct.SignalStrength?e.Channels.forEach((t=>{let r=new Yn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateChangedEvent.Invoke({Device:e,State:r})})):o.TypeAsEnum==Ct.BatteryState&&e.Channels.forEach((t=>{let r=new Fn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateChangedEvent.Invoke({Device:e,State:r})}))}}})),this._connection.SubscribeTo("/info/devices/devices/registered",(e=>{$v.Get(Le.ServiceName).ClearCache(),this.MapApiDevices(e.Data).forEach((e=>{var t;null===(t=o.Log)||void 0===t||t.Debug(Bs.ServiceName,`Registered device: ${e.Name} guid: ${e.Guid}`),this._devices.push(e),this._onDeviceRegisteredEvent.Invoke(e)}))})),this._connection.SubscribeTo("/info/devices/devices/removed",(e=>{$v.Get(Le.ServiceName).ClearCache(),this.MapApiDevices(e.Data).forEach((e=>{var t;null===(t=o.Log)||void 0===t||t.Debug(Bs.ServiceName,`Removed device: ${e.Name} guid: ${e.Guid}`),this._devices=this._devices.filter((t=>t.Guid!=e.Guid)),this._onDeviceRemovedEvent.Invoke(e)}))}))}ProtocolGuidToProtocolName(e){switch(e){case"1fca7e8a-a2dc-4883-bd94-4e9b2012f685":return"ExtaLife";case"cd25bdff-628c-4dbc-a16a-648c96a819d4":return"Portos 433MHz";case"634c2bb2-1a4f-4db6-8dd4-d5fbaf92678e":return"Supla";case"194aeb81-990c-4a02-9236-59e902958fda":return"RTSP";case"b3e4644e-ab5b-494e-b3c5-66fabe7fff64":return"Wekta";case"247198e1-e360-4355-9886-232ac1456eea":return"Lavva Wi-Fi";default:return null}}CheckIfDeviceUsedInScenesAsync(e){return Ls(this,void 0,void 0,(function*(){var t,n,r,s,i,a;try{let a;if("string"==typeof e){const n=this.GetDevice(e);if(null==n)return null===(t=o.Log)||void 0===t||t.Error("Cannot check if device is used in scenes! Device with given guid not exists"),ce.ResourceDoesNotExists;a=n}else a=e;const u=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new ei(a.Guid),2e4,!1);if(null==u||null==u.Status)return null===(r=o.Log)||void 0===r||r.Error("Cannot check if device is used in scenes! Response or status is null!"),ce.FatalError;if(u.Status!=ce.OK)return u.Status;if(null==u.Data)return null===(s=o.Log)||void 0===s||s.Error("Cannot check if device is used in scenes! No data!"),ce.FatalError;var c=yield $v.Get(Gs.ServiceName).GetSequencesListAsync();if(c instanceof Ee)return null===(i=o.Log)||void 0===i||i.Error(`Cannot check if device is used in scenes! Cannot get sequence list, ScenesServiceErrorCode: ${c.Type}`),ce.Error;const l=new oi;return l.DeviceGuid=a.Guid,u.Data.ConditionsAsCondition.forEach((e=>{const t=c.find((t=>t.Guid==e));t&&l.ConditionsAsCondition.push(t)})),u.Data.ConditionsAsTask.forEach((e=>{const t=c.find((t=>t.Guid==e));t&&l.ConditionsAsCondition.push(t)})),l}catch(e){return null===(a=o.Log)||void 0===a||a.Error(`Cannot check if device is used in scenes! ${e}`),ce.FatalError}}))}CanEditDevicesInfo(){var e,t;return null!==this._session&&void 0!==this._session&&null!==this._session.User&&void 0!==this._session.User&&(null===(t=null===(e=this._session)||void 0===e?void 0:e.User)||void 0===t?void 0:t.AccessLevel)>=ge.Admin}CanAddAndRemoveAndConfigureDevices(){var e,t;return null!==this._session&&void 0!==this._session&&null!==this._session.User&&void 0!==this._session.User&&(null===(t=null===(e=this._session)||void 0===e?void 0:e.User)||void 0===t?void 0:t.AccessLevel)>=ge.Installator}GetDeviceChannelByChannelId(e){return this._devices.firstOrDefault((t=>t.Channels.any((t=>t.ChannelId==e)))).Channels.firstOrDefault((t=>t.ChannelId==e))}EnableFastStatesSyncAsync(){return Ls(this,void 0,void 0,(function*(){var e;const t=$v.Get(fo.ServiceName).SaveAsync("FastDevicesSync",!1,!0);return null===(e=o.Log)||void 0===e||e.Error(Bs.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! EnableFastStatesSyncAsync()"),yield $v.Get(it.ServiceName).ExitConfigurationModeAsync(),t}))}DisableFastStatesSyncAsync(){return Ls(this,void 0,void 0,(function*(){var e;const t=$v.Get(fo.ServiceName).SaveAsync("FastDevicesSync",!1,!1);return null===(e=o.Log)||void 0===e||e.Error(Bs.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! DisableFastStatesSyncAsync()"),yield $v.Get(it.ServiceName).ExitConfigurationModeAsync(),t}))}IsFastStatesSyncEnabledAsync(){return Ls(this,void 0,void 0,(function*(){const e=yield $v.Get(fo.ServiceName).ReadAsync("FastDevicesSync",!1,!1);return e instanceof ho?e.Data:e!=ce.ResourceDoesNotExists&&e}))}GetDevicesForManualPairingAsync(e){return Ls(this,void 0,void 0,(function*(){let t=$v.Get(lo.ServiceName);const n=new RegExp("^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$");return Array.isArray(e)||n.test(e)?yield t.GetDevicesForManualPairingAsync(e):yield t.GetDevicesForManualPairingAsync()}))}AddManuallyPairedDevice(e){return Ls(this,void 0,void 0,(function*(){var t,n=yield $v.Get(lo.ServiceName).AddManuallyPairedDeviceAsync(e);return null===(t=o.Log)||void 0===t||t.Error(Bs.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! AddManuallyPairedDevice()"),yield $v.Get(it.ServiceName).ExitConfigurationModeAsync(),n}))}GetDeviceChannelStates(e,t){var n,r;return null!==(r=null===(n=this._devicesChannelsStates.firstOrDefault((t=>t.DeviceGuid==e.Guid)))||void 0===n?void 0:n.ChannelsStates.filter((e=>e.Channel==t)))&&void 0!==r?r:[]}GetDeviceStates(e){var t,n;return null!==(n=null===(t=this._devicesChannelsStates.firstOrDefault((t=>t.DeviceGuid==e.Guid)))||void 0===t?void 0:t.ChannelsStates)&&void 0!==n?n:[]}PutDeviceStateOnList(e,t){let n=this._devicesChannelsStates.firstOrDefault((t=>t.DeviceGuid==e.Guid));if(null==n){let r=new Ws;r.Channel=t.Data.Channel,r.States=[t],n={DeviceGuid:e.Guid,ChannelsStates:[r]},this._devicesChannelsStates.push(n)}else{let e=n.ChannelsStates.firstOrDefault((e=>e.Channel==t.Data.Channel));if(null==e)e=new Ws,e.Channel=t.Data.Channel,e.States=[t],n.ChannelsStates.push(e);else{let n=e.States.firstOrDefault((e=>e.TypeAsEnum==t.TypeAsEnum));null!=n&&(n.TypeAsEnum==Ct.BlindErrorState?e.States=e.States.where((e=>e.Data.ErrorCode!=t.Data.ErrorCode)).toArray():e.States=e.States.where((e=>e.TypeAsEnum!=t.TypeAsEnum)).toArray()),e.States.push(t)}}}WaitForSynchronizationAsync(){return this._synchronizationTaskCompletionSource}WaitForDevicesStatesSynchronizationAsync(){return this._deviceStatesSynchronizationTaskCompletionSource}GetCurrentlyRunningTaksAsync(){return Ls(this,void 0,void 0,(function*(){var e;const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new zs,15e3,!1);(null==t?void 0:t.Status)==ce.OK&&null!=t.Data&&this.ParseDeviceTaskInfo(t.Data)}))}ParseDeviceTaskInfo(e){const t=[];e.forEach((e=>{var n;const r=e.split(";"),s=new Ft;s.DeviceGuid=r[0],s.Channel=Number(r[1]),s.Status=yt.ExecutingTasks,t.push(s),null===(n=o.Log)||void 0===n||n.Debug(Bs.ServiceName,`Device ${s.DeviceGuid} has task on channel ${s.Channel}`)})),this._onDevicesTasksChangedEvent.Invoke(t)}MapApiDeviceStateToDeviceState(e,t){var n;switch(t.state,t.DataType){case"ChannelOnOff":return new wn(t);case"DoorBell":return new _n(t);case"ReedPosition":return new Dn(t);case"BlindPosition":return new kn(t);case"ButtonState":return new Gn(t);case"LightColor":return new bn(t);case"LightTemperature":return new Rn(t);case"LightBrightness":return new On(t);case"TemperatureSensor":case"TemperatureState":case"MeasuredTemperature":return new Mn(t);case"BatteryState":return new Fn(t);case"MeasuredBrightness":case"DeviceBrightnessState":return new Bn(t);case"EnergyMeasuredPower":case"EnergyMeasuredCurrent":case"EnergyMeasuredVoltage":break;case"IEnergy":case"Energy":return new $n(t);case"DistanceSensor":return new Vn(t);case"MovementSensor":return new Hn(t);case"BlindsControlButton":return new jn(t);case"FacadeControlButton":return new Jn(t);case"SignalStrength":return new Yn(t);case"GatePosition":return new Qn(t);case"GatewayPosition":return new er(t);case"GateControllerHealth":return new tr(t);case"IBlindCalibrationStatus":case"BlindCalibration":return new nr(t);case"HumiditySensor":case"HumidityState":return new rr(t);case"VibrationSensor":return new sr(t);case"DigitalInputSensor":return new ir(t);case"ConfigurationState":return new cr(t);case"BlindOpenCloseTime":case"IBlindOpenCloseTime":return new ur(t);case"IOvercurrentProtection":case"OvercurrentProtection":return new lr(t);case"IOvercurrentProtectionThreshold":case"OvercurrentProtectionThreshold":return new dr(t);case"FacadePosition":case"FacadeState":return new hr(t);case"FacadeTypeState":return new pr(t);case"CurrentWindThreshold":return new gr(t);case"CurrentLightThreshold":return new vr(t);case"WindSpeed":return new mr(t);case"FloodSensor":return new wr(t);case"PressureState":return new Ar(t);case"ITamperProtection":case"TamperProtection":return new Cr(t);case"ILightRGBW":case"LightRGBW":return new Dr(t);case"OnlineCamera":case"IOnlineCamera":return new An(t);case"BlindError":case"IBlindError":return t.state.ErrorData=ie(t.state.ErrorData),new Tr(t);default:null===(n=o.Log)||void 0===n||n.Debug(Bs.ServiceName,`Not supported device state ${t.DataType}`)}return null}GetServiceName(){return Bs.ServiceName}SyncDevicesStatesAsync(){return Ls(this,arguments,void 0,(function*(e=!1){var t,n,r;const o=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new qs,15e3,!1);if(yield this.IsFastStatesSyncEnabledAsync()){if(e){let e=new Vs;e.Data=!0;const t=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(e,35e3,!1);return(null==t?void 0:t.Status)==ce.OK}return(null==o?void 0:o.Status)==ce.OK}{let e=new Vs;e.Data=!0;const t=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(e,35e3,!1);return(null==t?void 0:t.Status)==ce.OK}}))}OnDevicesTasksExecutionChangeEvent(){return this._onDevicesTasksChangedEvent}OnDeviceStateChangedEvent(){return this._onDeviceStateChangedEvent}OnDeviceStateRefreshedOrChangedEvent(){return this._onDeviceStateRefreshedOrChangedEvent}OnDeviceRegisteredEvent(){return this._onDeviceRegisteredEvent}OnDeviceRemovedEvent(){return this._onDeviceRemovedEvent}OnDeviceFoundEvent(){return this._onDeviceFoundEvent}MapApiDevices(e){const t=[];return null==e?[]:(e.forEach((e=>{var n,r,s,i,a=new kr;a.Guid=e.Guid,a.Name=e.DeviceName,a.ChannelsAmount=e.ChannelsNumber,a.DeviceType=e.DeviceType,a.CommunicationWay=e.CommunicationWay,a.DeviceState=e.DeviceState,a.IsEnabled=e.IsEnabled,a.IsVirtual=e.IsVirtual,a.SerialNumber=e.DeviceSerialNumber,a.ManufacturerGuid=e.ManufacturerGuid,a.ModelGuid=e.DeviceModelGuid,a.Model=e.DeviceModel,a.Name=e.DeviceName,a.ProtocolGuid=e.ProtocolGuid,void 0!==e.IconType&&null!==e.IconType?a.IconType=e.IconType:a.IconType=At.Unknown;try{null===(n=e.AvailableTasks)||void 0===n||n.forEach((e=>{var t=new Mt;if(a.CommunicationWay==Tt.OneWay)"IBlindPosition"===e&&(t.InterfaceType="IBlindPositionSimple");else switch(e){case"IGatePosition":t.InterfaceType="IGatePulse";break;case"IGatewayPosition":t.InterfaceType="IGatewayPulse";break;default:t.InterfaceType=e}a.AvailableTaskTypes.push(t)})),null===(r=e.AvailableResponses)||void 0===r||r.forEach((e=>{var t=new xt;t.InterfaceType=e,a.AvailableResponseTypes.push(t)})),null===(s=e.ChannelsConfiguration)||void 0===s||s.forEach((e=>{var t,n,r;try{var s=new Ur;s.Number=e.Channel,a.Channels.push(s),s.SetDevice(a),s.Name=e.ChannelName,s.ChannelGroups=e.GroupsGuids,s.IconName=e.IconName,s.IsHidden=e.Hidden,s.Configurations=e.Configurations,s.CustomDataAndRolesSupported=void 0!==e.CustomData&&null!==e.CustomData,void 0!==e.CustomData&&null!==e.CustomData&&(s.CustomData=e.CustomData),void 0!==e.Roles&&null!==e.Roles&&(s.Roles=e.Roles),null===(t=e.AvailableResponses)||void 0===t||t.forEach((e=>{var t=new xt;t.InterfaceType=e,s.AvailableResponseTypes.push(t)})),null===(n=e.AvailableTasks)||void 0===n||n.forEach((e=>{var t=new Mt;a.AvailableTaskTypes.any((e=>"IBlindPositionSimple"==e.InterfaceType))?"IBlindPosition"==e&&(t.InterfaceType="IBlindPositionSimple"):t.InterfaceType=e,s.AvailableTaskTypes.push(t)}))}catch(e){null===(r=o.Log)||void 0===r||r.Error(e)}}))}catch(e){null===(i=o.Log)||void 0===i||i.Error(e)}t.push(a)})),t)}GetPairedDevicesAsync(){return Ls(this,arguments,void 0,(function*(e=!1){var t,n,r;if(this._synchronized&&!(yield null===(t=this._controllerConfiguration)||void 0===t?void 0:t.DidCofigurationChangeAsync()))return Promise.resolve(this._devices);const s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new $s,15e3,!0);return null==s||void 0===s?[]:s.Status==ce.OK&&null!=s.Data?e?this.MapApiDevices(s.Data):this.MapApiDevices(s.Data.filter((e=>e.DeviceType!=kt.Scene))):(null===(r=o.Log)||void 0===r||r.Error(Bs.ServiceName,`Failed to get devices. ${s.Status} ${s.Data}`),[])}))}GetDevicesAsync(){return Ls(this,arguments,void 0,(function*(e=!1){return yield this.WaitForSynchronizationAsync(),this.GetPairedDevicesAsync(e)}))}GetFoundDevicesAsync(){return Ls(this,void 0,void 0,(function*(){var e,t;const n=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new js,15e3,!1);return null==n?[]:n.Status==ce.OK&&null!=n.Data?this.MapApiDevices(n.Data).where((e=>e.DeviceType!==kt.Scene)).toArray():(null===(t=o.Log)||void 0===t||t.Error(Bs.ServiceName,`Failed to get found devices. ${n.Status} ${n.Data}`),[])}))}GetDevice(e){return this._devices.find((t=>t.Guid===e))}FindDevicesAsync(){return Ls(this,void 0,void 0,(function*(){var e;$v.Get(Le.ServiceName).ClearCache(),yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Hs,35e3,!1)}))}StopSearchingForDevices(){return Ls(this,void 0,void 0,(function*(){var e;yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Ks,2e4,!1)}))}RegisterDeviceAsync(e){return Ls(this,void 0,void 0,(function*(){var t,n,r;try{const r=new Js;r.Data=e.Guid;const s=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(r,2e4,!1);return null===(n=o.Log)||void 0===n||n.Error(Bs.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! RegisterDeviceAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),(null==s?void 0:s.Status)==ce.OK?(this._devices.any((t=>t.Guid==e.Guid))||this._devices.push(e),this._onDeviceRegisteredEvent.Invoke(e),Gt.Executed):Gt.Failed}catch(e){return null===(r=o.Log)||void 0===r||r.Error(Bs.ServiceName,`Failed to paired devices: ${e}`),Gt.ControllerResponseTimeout}}))}RemoveDeviceAsync(e){return Ls(this,arguments,void 0,(function*(e,t=!1){var n,r,s=new Xs;t&&(s=new Ys),s.Data=e.Guid;const i=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(s,35e3,!1);return null===(r=o.Log)||void 0===r||r.Error(Bs.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! RemoveDeviceAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),(null==i?void 0:i.Status)==ce.OK?(this._devices=this._devices.where((t=>t.Guid!=e.Guid)).toArray(),this._onDeviceRemovedEvent.Invoke(e),Gt.Executed):Gt.Failed}))}MapDeviceTaskToDeviceTaskInfo(e,t){let n=new ti;const r=t;switch(r.FeatureType){case Nr.SetTemperature:n.Data=r.Temperature;break;case Nr.SetLightBrightness:n.Data=r.Brightness;break;case Nr.SetLightColor:n=new ni;const e=r;n.R=e.R,n.G=e.G,n.B=e.B;break;case Nr.SetLightTemperature:n.Data=r.Temperature;break;case Nr.SetGatePositionPrecise:switch(r.GateControlAction){case Ir.Open:n.Data=101;break;case Ir.Close:n.Data=102;break;case Ir.Stop:n.Data=103;break;case Ir.Percentage:n.Data=r.Position}break;case Nr.SetBlindPosition:switch(r.Action){case br.Open:n.Data=101;break;case br.Close:n.Data=102;break;case br.Stop:n.Data=103;break;case br.Percentage:n.Data=r.Position}break;case Nr.SetLightBrightnessDynamicly:n.Data=r.Brightness;break;case Nr.SetBlindOpenCloseTime:n.Data=r.Data;break;case Nr.SetBlindMicroventilation:n.Data=r.Position;break;case Nr.SetFacadePositionAndTilt:n=new ri;const t=r;n.FacadeAction=t.FacadeAction,n.Tilt=t.Tilt,n.Position=t.Position;break;case Nr.LightRGBW:n.Data=r.Data;break;case Nr.GatePulse:case Nr.GatewayPulse:n.Data=0;break;case Nr.TurnOnWithTimeout:n.Data=r.SwitchOffDelaySeconds}return n.Channel=r.Channel,n.DeviceGuid=e.Guid,n.ControlFeature=r.FeatureType,n}ExecuteDeviceTaskAsync(e,t){return Ls(this,void 0,void 0,(function*(){var n,r,s,i,a,c,u,l;try{null===(n=o.Log)||void 0===n||n.Debug(Bs.ServiceName,`Preparing device task execution, device: ${e.Guid} task: ${t.TaskType} channel: ${t.Channel}`);let l=this.MapDeviceTaskToDeviceTaskInfo(e,t);try{const e=new Qs(l);null===(r=o.Log)||void 0===r||r.Debug(Bs.ServiceName,`Sending device task for execution, device: ${l.DeviceGuid} task: ${l.ControlFeature} channel: ${l.Channel} request: ${JSON.stringify(e)}`);const t=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(e,15e3,!1);switch(null==t?void 0:t.Status){case ce.OK:return Gt.Executed;case ce.FatalError:return null===(i=o.Log)||void 0===i||i.Error(Bs.ServiceName,`Fatal error occured when tried to execute task on device. Error code: ${t.Data}`),Gt.Failed;case ce.WrongData:if("DeviceNotFound"===t.Data)return Gt.DeviceNotFound;break;case ce.Error:return"DeviceResponseTimeout"===t.Data?Gt.DeviceResponseTimeout:(null===(a=o.Log)||void 0===a||a.Error(Bs.ServiceName,`Unknown error occured when trying to execute task on device. Error code: ${t.Data}`),Gt.Failed)}}catch(e){return e.message.includes("timeout")?(null===(c=o.Log)||void 0===c||c.Error(Bs.ServiceName,`Failed to get controller response in time.\n${e}`),Gt.ControllerResponseTimeout):(null===(u=o.Log)||void 0===u||u.Error(Bs.ServiceName,`Unknown error occured when tried to execute task on device.\n${e}`),Gt.Failed)}return Gt.Unknown}catch(e){return null===(l=o.Log)||void 0===l||l.Error(Bs.ServiceName,`Unknown error occured when tried to execute task on device.\n${e}`),Gt.Failed}}))}ExecuteDevicesTasksAsync(e){return Ls(this,void 0,void 0,(function*(){var t,n,r,s;let i=[],a=[],c=0;for(const[t,n]of e){const e=this.MapDeviceTaskToDeviceTaskInfo(t,n);e.SequnceExecutionOrder=c,c++,a.push(e)}const u=new Zs(a);try{const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(u,12e4,!1);let s=-1;null===(n=null==r?void 0:r.Data)||void 0===n||n.forEach((t=>{var n,a;s++;let c=Gt.Unknown;switch(t.Status){case ce.OK:return Gt.Executed;case ce.FatalError:null===(n=o.Log)||void 0===n||n.Error(Bs.ServiceName,`Fatal error occured when tried to execute task on device. Error code: ${t.Data}`),c=Gt.Failed;break;case ce.WrongData:"DeviceNotFound"===t.Data&&(c=Gt.DeviceNotFound);break;case ce.Error:"DeviceResponseTimeout"===t.Data?c=Gt.DeviceResponseTimeout:(null===(a=o.Log)||void 0===a||a.Error(Bs.ServiceName,`Unknown error occured when trying to execute task on device. Error code: ${r.Data}`),c=Gt.Failed)}let u=0,l=new Lt;for(const[t,n]of e){if(u==s){l.Device=t,l.Task=n,l.Channel=n.Channel,i.push(l);break}u++}}))}catch(t){if(t.message.includes("timeout")){null===(r=o.Log)||void 0===r||r.Error(Bs.ServiceName,`Failed to get controller response in time.\n${t}`);for(const[t,n]of e){let e=new Lt;i.push(e),e.Device=t,e.Task=n,e.Channel=n.Channel,e.Result=Gt.ControllerResponseTimeout}}else{null===(s=o.Log)||void 0===s||s.Error(Bs.ServiceName,`Unknown error occured when tried to execute task on device.\n${t}`);for(const[t,n]of e){let e=new Lt;i.push(e),e.Device=t,e.Task=n,e.Channel=n.Channel,e.Result=Gt.Failed}}}return i}))}}Bs.ServiceName="DevicesService";class Ws{constructor(){this.Channel=0,this.States=[]}}class $s extends ae{constructor(){super(),this.Resource="/devices/list",this.Method=ue.Get}}class qs extends ae{constructor(){super(),this.Data=!1,this.Resource="/devices/channels/states",this.Method=ue.Get}}class Vs extends ae{constructor(){super(),this.Data=!1,this.Resource="/devices/channels/states/sync",this.Method=ue.Get}}class Hs extends ae{constructor(){super(),this.Resource="/devices/search",this.Method=ue.Post}}class Ks extends ae{constructor(){super(),this.Resource="/devices/search/stop",this.Method=ue.Post}}class js extends ae{constructor(){super(),this.Resource="/devices/found/list",this.Method=ue.Get}}class zs extends ae{constructor(){super(),this.Resource="/devices/tasks",this.Method=ue.Get}}class Js extends ae{constructor(){super(),this.Resource="/devices/device/pair",this.Method=ue.Put}}class Xs extends ae{constructor(){super(),this.Resource="/devices/device/unpair",this.Method=ue.Put}}class Ys extends ae{constructor(){super(),this.Resource="/devices/device/unpair/force",this.Method=ue.Put}}class Qs extends ae{constructor(e){super(),this.Resource="/devices/device/control",this.Method=ue.Post,this.Data=e}}class Zs extends ae{constructor(e){super(),this.Resource="/devices/devices/control",this.Method=ue.Post,this.Data=e}}class ei extends ae{constructor(e){super(),this.Resource="/logic/device/used",this.Method=ue.Get,this.Data=e}}class ti{constructor(){this.DeviceGuid="",this.Channel=0,this.ControlFeature=Nr.GetState,this.SequnceExecutionOrder=0}}class ni extends ti{constructor(){super(...arguments),this.R=0,this.G=0,this.B=0}}class ri extends ti{constructor(){super(...arguments),this.FacadeAction=Pr.Stop,this.Tilt=0,this.Position=0}}class oi{constructor(){this.DeviceGuid="",this.ConditionsAsCondition=[],this.ConditionsAsTask=[]}}class si extends RangeError{paramName;constructor(e){super(`${e} was out of range. Must be non-negative and less than the size of the collection.`),this.paramName=e,this.name="ArgumentOutOfRangeException",this.stack=this.stack||(new Error).stack}}const ii=Object.freeze({MoreThanOneElement:"Sequence contains more than one element",MoreThanOneMatchingElement:"Sequence contains more than one matching element",NoElements:"Sequence contains no elements",NoMatch:"Sequence contains no matching element"});class ai extends Error{constructor(e){super(e),this.name="InvalidOperationException",this.stack=this.stack||(new Error).stack}}const ci=(e,t)=>e===t;class ui{iterator;constructor(e){this.iterator=e}[Symbol.asyncIterator](){return this.iterator()}}class li{dataFunc;constructor(e){this.dataFunc=e}[Symbol.asyncIterator](){const{dataFunc:e}=this;return async function*(){if(1===e.type)for(const t of e.generator())yield t;else for(const t of await e.generator())yield t}()}}class di{iterator;constructor(e){this.iterator=e}[Symbol.iterator](){return this.iterator()}}class hi extends Array{}const pi=(e,t,n,r)=>{if(r){if(!n)throw new ReferenceError("TAccumulate function is undefined");return vi(e,t,n,r)}return n?fi(e,t,n):gi(e,t)},gi=(e,t)=>{let n;for(const r of e)n=n?t(n,r):r;if(void 0===n)throw new ai(ii.NoElements);return n},fi=(e,t,n)=>{let r=t;for(const t of e)r=n(r,t);return r},vi=(e,t,n,r)=>{let o=t;for(const t of e)o=n(o,t);return r(o)},mi=(e,t)=>{for(const n of e)if(!1===t(n))return!1;return!0},yi=async(e,t)=>{for(const n of e)if(!1===await t(n))return!1;return!0},wi=(e,t)=>t?Ai(e,t):Si(e),Si=e=>{for(const t of e)return!0;return!1},Ai=(e,t)=>{for(const n of e)if(!0===t(n))return!0;return!1},_i=async(e,t)=>{for(const n of e)if(!0===await t(n))return!0;return!1},Ci=(e,t)=>new di((function*(){yield*e,yield t})),Di=e=>{if(Array.isArray(e)){if(0===e.length)throw new ai(ii.NoElements);return new ui((async function*(){for await(const t of e)yield t}))}return new ui(e)},Ti=e=>Di((async function*(){for(const t of e)yield t})),ki=(e,t)=>new li({generator:t,type:e}),Ei=e=>ki(0,(async()=>{const t=[];for(const n of e)t.push(n);return t})),Gi=(e,t)=>{let n=0,r=0;if(t)for(const o of e)n+=t(o),r+=1;else for(const t of e)n+=t,r+=1;if(0===r)throw new ai(ii.NoElements);return n/r},Ni=async(e,t)=>{let n=0,r=0;for(const o of e)n+=await t(o),r+=1;if(0===r)throw new ai(ii.NoElements);return n/r},bi=(e,t)=>{if(t<1)throw new si("size");return new di((function*(){let n=[];for(const r of e)n.push(r),n.length===t&&(yield n,n=[]);n.length&&(yield n)}))},Ii=(e,t)=>new di((function*(){yield*e,yield*t})),Ri=(e,t,n=ci)=>{for(const r of e)if(n(t,r))return!0;return!1},Pi=async(e,t,n)=>{for(const r of e)if(await n(t,r))return!0;return!1},Oi=(e,t)=>t?Mi(e,t):Ui(e),Ui=e=>{let t=0;for(const n of e)t++;return t},Mi=(e,t)=>{let n=0;for(const r of e)!0===t(r)&&n++;return n},xi=async(e,t)=>{let n=0;for(const r of e)!0===await t(r)&&n++;return n},Fi=(e,t)=>new di((function*(){let n=!1;for(const t of e)n=!0,yield t;n||(yield t)})),Li=(e,t=ci)=>new di((function*(){const n=[];for(const r of e)n.find((e=>t(e,r)))||(n.push(r),yield r)})),Bi=(e,t)=>Di((async function*(){const n=[];e:for(const r of e){for(const e of n)if(await t(e,r))continue e;n.push(r),yield r}})),Wi=(e,t)=>new di((function*(){for(const n of e)t(n),yield n})),$i=(e,t)=>Di((async function*(){for(const n of e)await t(n),yield n})),qi=(e,t)=>{if(t<0)throw new si("index");let n=0;for(const r of e)if(t===n++)return r;throw new si("index")},Vi=(e,t)=>{let n=0;for(const r of e)if(t===n++)return r;return null},Hi=(e,t,n=ci)=>new di((function*(){const r=[...t];for(const t of e){let e=!1;for(let o=0;o<r.length;o++)if(!0===n(t,r[o])){e=!0;break}!1===e&&(yield t)}})),Ki=(e,t,n)=>Di((async function*(){const r=[...t];for(const t of e){let e=!1;for(let o=0;o<r.length;o++){const s=r[o];if(!0===await n(t,s)){e=!0;break}}!1===e&&(yield t)}})),ji=(e,t)=>t?Ji(e,t):zi(e),zi=e=>{const t=e[Symbol.iterator]().next();if(!0===t.done)throw new ai(ii.NoElements);return t.value},Ji=(e,t)=>{for(const n of e)if(!0===t(n))return n;throw new ai(ii.NoMatch)},Xi=async(e,t)=>{for(const n of e)if(!0===await t(n))return n;throw new ai(ii.NoMatch)},Yi=(e,t)=>t?Zi(e,t):Qi(e),Qi=e=>e[Symbol.iterator]().next().value??null,Zi=(e,t)=>{for(const n of e)if(!0===t(n))return n;return null},ea=async(e,t)=>{for(const n of e)if(!0===await t(n))return n;return null};class ta extends hi{key;constructor(e,t){super(1),this.key=e,this[0]=t}}const na=(e,t,n)=>{let r;return r=n?((e,t,n)=>function*(){const r=new Array;for(const o of e){const e=t(o);let s=!1;for(let t=0;t<r.length;t++){const i=r[t];if(n(i.key,e)){i.push(o),s=!0;break}}!1===s&&r.push(new ta(e,o))}for(const e of r)yield e})(e,t,n):((e,t)=>function*(){const n={};for(const r of e){const e=t(r),o=n[e];o?o.push(r):n[e]=new ta(e,r)}for(const e in n)yield n[e]})(e,t),new di(r)},ra=(e,t,n)=>n?sa(e,t,n):oa(e,t),oa=(e,t)=>Di((async function*(){const n={};for(const r of e){const e=await t(r),o=n[e];o?o.push(r):n[e]=new ta(e,r)}for(const e in n)yield n[e]})),sa=(e,t,n)=>Di((async function*(){const r=new Array;for(const o of e){const e=await t(o);let s=!1;for(let t=0;t<r.length;t++){const i=r[t];if(!0===await n(i.key,e)){i.push(o),s=!0;break}}!1===s&&r.push(new ta(e,o))}for(const e of r)yield e})),ia=(e,t,n,r)=>r?((e,t,n,r)=>new di((function*(){const o=new Array;for(const s of e){const e=t(s);let i=!1;for(let t=0;t<o.length;t++){const a=o[t];if(r(a.key,e)){a.push(n(s)),i=!0;break}}if(!1===i){const t=n(s);o.push(new ta(e,t))}}for(const e of o)yield e})))(e,t,n,r):((e,t,n)=>new di((function*(){const r={};for(const o of e){const e=t(o),s=r[e],i=n(o);s?s.push(i):r[e]=new ta(e,i)}for(const e in r)yield r[e]})))(e,t,n),aa=(e,t,n,r,o,s)=>{const i=s?ca(e,t,n,r,o,s):ua(e,t,n,r,o);return new di(i)},ca=(e,t,n,r,o,s)=>function*(){const i=[];for(const e of t){const t=r(e),n=i.find((e=>s(e.key,t)));n?n.values.push(e):i.push({key:t,values:[e]})}for(const t of e){const e=n(t),r=i.find((t=>s(t.key,e)))??{key:e,values:[]};yield o(t,r.values)}},ua=(e,t,n,r,o)=>function*(){const s=new Map;for(const e of t){const t=r(e),n=s.get(t);n?n.push(e):s.set(t,[e])}for(const t of e){const e=n(t),r=s.get(e)??[];yield o(t,r)}},la=(e,t,n,r,o,s)=>{const i=s?da(e,t,n,r,o,s):ha(e,t,n,r,o);return Di(i)},da=(e,t,n,r,o,s)=>async function*(){const i=[];for(const e of t){const t=await r(e),n=i.find((e=>s(e.key,t)));n?n.values.push(e):i.push({key:t,values:[e]})}for(const t of e){const e=await n(t),r=i.find((t=>s(t.key,e)))??{key:e,values:[]};yield o(t,r.values)}},ha=(e,t,n,r,o)=>async function*(){const s=new Map;for(const e of t){const t=await r(e),n=s.get(t);n?n.push(e):s.set(t,[e])}for(const t of e){const e=await n(t),r=s.get(e)??[];yield o(t,r)}},pa=(e,t,n=ci)=>new di((function*(){const r=[...e.distinct(n)];if(0===r.length)return;const o=[...t];for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<o.length;e++)if(!0===n(t,o[e])){yield t;break}}})),ga=(e,t,n)=>Di((async function*(){const r=[];for await(const t of e.distinctAsync(n))r.push(t);if(0===r.length)return;const o=[...t];for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<o.length;e++){const r=o[e];if(!0===await n(t,r)){yield t;break}}}})),fa=(e,t,n,r,o,s=ci)=>new di((function*(){const i=[...t];for(const t of e){const e=n(t);for(const n of i){const i=r(n);!0===s(e,i)&&(yield o(t,n))}}})),va=(e,t)=>t?ya(e,t):ma(e),ma=e=>{let t;for(const n of e)t=n;if(!t)throw new ai(ii.NoElements);return t},ya=(e,t)=>{let n;for(const r of e)!0===t(r)&&(n=r);if(!n)throw new ai(ii.NoMatch);return n},wa=async(e,t)=>{let n;for(const r of e)!0===await t(r)&&(n=r);if(!n)throw new ai(ii.NoMatch);return n},Sa=(e,t)=>t?_a(e,t):Aa(e),Aa=e=>{let t=null;for(const n of e)t=n;return t},_a=(e,t)=>{let n=null;for(const r of e)!0===t(r)&&(n=r);return n},Ca=async(e,t)=>{let n=null;for(const r of e)!0===await t(r)&&(n=r);return n},Da=(e,t)=>t?ka(e,t):Ta(e),Ta=e=>{let t=null;for(const n of e)t=Math.max(t??Number.NEGATIVE_INFINITY,n);if(null===t)throw new ai(ii.NoElements);return t},ka=(e,t)=>{let n=null;for(const r of e)n=Math.max(n??Number.NEGATIVE_INFINITY,t(r));if(null===n)throw new ai(ii.NoElements);return n},Ea=async(e,t)=>{let n=null;for(const r of e)n=Math.max(n??Number.NEGATIVE_INFINITY,await t(r));if(null===n)throw new ai(ii.NoElements);return n},Ga=(e,t)=>t?ba(e,t):Na(e),Na=e=>{let t=null;for(const n of e)t=Math.min(t??Number.POSITIVE_INFINITY,n);if(null===t)throw new ai(ii.NoElements);return t},ba=(e,t)=>{let n=null;for(const r of e)n=Math.min(n??Number.POSITIVE_INFINITY,t(r));if(null===n)throw new ai(ii.NoElements);return n},Ia=async(e,t)=>{let n=null;for(const r of e)n=Math.min(n??Number.POSITIVE_INFINITY,await t(r));if(null===n)throw new ai(ii.NoElements);return n},Ra=(e,t)=>{const n="string"==typeof t?e=>typeof e===t:e=>e instanceof t;return new di((function*(){for(const t of e)n(t)&&(yield t)}))};async function*Pa(e,t,n,r){const o=await(async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),o=n.get(e);o?o.push(r):n.set(e,[r])}return n})(e,t),s=[...o.keys()].sort(r||void 0);if(n)for(let e=0;e<s.length;e++)yield o.get(s[e]);else for(let e=s.length-1;e>=0;e--)yield o.get(s[e])}function*Oa(e,t,n,r){const o=((e,t)=>{const n=new Map;for(const r of e){const e=t(r),o=n.get(e);o?o.push(r):n.set(e,[r])}return n})(e,t),s=[...o.keys()].sort(r||void 0);if(n)for(let e=0;e<s.length;e++)yield o.get(s[e]);else for(let e=s.length-1;e>=0;e--)yield o.get(s[e])}class Ua extends ui{orderedPairs;constructor(e){super((async function*(){for await(const t of e())yield*t})),this.orderedPairs=e}static generateAsync(e,t,n,r){let o;return o=e instanceof Ua?async function*(){for await(const o of e.orderedPairs())yield*Pa(o,t,n,r)}:()=>async function*(e,t,n,r){const o=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=await t(r),o=n.get(e);o?o.push(r):n.set(e,[r])}return n})(e,t),s=[...o.keys()].sort(r||void 0);if(n)for(let e=0;e<s.length;e++)yield o.get(s[e]);else for(let e=s.length-1;e>=0;e--)yield o.get(s[e])}(e,t,n,r),new Ua(o)}static generate(e,t,n,r){let o;return o=e instanceof Ua?async function*(){for await(const o of e.orderedPairs())yield*Oa(o,t,n,r)}:()=>async function*(e,t,n,r){const o=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=t(r),o=n.get(e);o?o.push(r):n.set(e,[r])}return n})(e,t),s=[...o.keys()].sort(r||void 0);if(n)for(let e=0;e<s.length;e++)yield o.get(s[e]);else for(let e=s.length-1;e>=0;e--)yield o.get(s[e])}(e,t,n,r),new Ua(o)}thenBy(e,t){return Ua.generate(this,e,!0,t)}thenByAsync(e,t){return Ua.generateAsync(this,e,!0,t)}thenByDescending(e,t){return Ua.generate(this,e,!1,t)}thenByDescendingAsync(e,t){return Ua.generateAsync(this,e,!1,t)}}function*Ma(e,t,n,r){const o=((e,t)=>{const n=new Map;for(const r of e){const e=t(r),o=n.get(e);o?o.push(r):n.set(e,[r])}return n})(e,t),s=[...o.keys()].sort(r||void 0);if(n)for(let e=0;e<s.length;e++)yield o.get(s[e]);else for(let e=s.length-1;e>=0;e--)yield o.get(s[e])}async function*xa(e,t,n,r){const o=await(async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),o=n.get(e);o?o.push(r):n.set(e,[r])}return n})(e,t),s=[...o.keys()].sort(r||void 0);if(n)for(let e=0;e<s.length;e++)yield o.get(s[e]);else for(let e=s.length-1;e>=0;e--)yield o.get(s[e])}class Fa extends di{orderedPairs;constructor(e){super((function*(){for(const t of e())yield*t})),this.orderedPairs=e}static generate(e,t,n,r){let o;return o=e instanceof Fa?function*(){for(const o of e.orderedPairs())yield*Ma(o,t,n,r)}:()=>Ma(e,t,n,r),new Fa(o)}static generateAsync(e,t,n,r){let o;return o=e instanceof Fa?async function*(){for(const o of e.orderedPairs())yield*xa(o,t,n,r)}:()=>xa(e,t,n,r),new Ua(o)}thenBy(e,t){return Fa.generate(this,e,!0,t)}thenByAsync(e,t){return Fa.generateAsync(this,e,!0,t)}thenByDescending(e,t){return Fa.generate(this,e,!1,t)}thenByDescendingAsync(e,t){return Fa.generateAsync(this,e,!1,t)}}const La=(e,t)=>Fa.generate(e,(e=>e),!0,t),Ba=(e,t,n)=>Fa.generate(e,t,!0,n),Wa=(e,t,n)=>Fa.generateAsync(e,t,!0,n),$a=(e,t,n)=>Fa.generate(e,t,!1,n),qa=(e,t,n)=>Fa.generateAsync(e,t,!1,n),Va=(e,t)=>Fa.generate(e,(e=>e),!1,t),Ha=(e,t)=>{const n=[],r=[];for(const o of e)!0===t(o)?r.push(o):n.push(o);return[r,n]},Ka=async(e,t)=>{const n=[],r=[];for(const o of e)!0===await t(o)?r.push(o):n.push(o);return[r,n]},ja=(e,t)=>new di((function*(){yield t,yield*e})),za=e=>new di((function*(){const t=[...e];for(let e=t.length-1;e>=0;e--)yield t[e]})),Ja=(e,t)=>{if("function"==typeof t){const{length:n}=t;return 1===n?Xa(e,t):Ya(e,t)}return Qa(e,t)},Xa=(e,t)=>new di((function*(){for(const n of e)yield t(n)})),Ya=(e,t)=>new di((function*(){let n=0;for(const r of e)yield t(r,n),n++})),Qa=(e,t)=>new di((function*(){for(const n of e)yield n[t]})),Za=(e,t)=>"function"==typeof t?1===t.length?ec(e,t):tc(e,t):nc(e,t),ec=(e,t)=>Di((async function*(){for(const n of e)yield t(n)})),tc=(e,t)=>Di((async function*(){let n=0;for(const r of e)yield t(r,n),n++})),nc=(e,t)=>Di((async function*(){for(const n of e)yield n[t]})),rc=(e,t)=>"function"==typeof t?1===t.length?oc(e,t):sc(e,t):ic(e,t),oc=(e,t)=>new di((function*(){for(const n of e)for(const e of t(n))yield e})),sc=(e,t)=>new di((function*(){let n=0;for(const r of e){for(const e of t(r,n))yield e;n++}})),ic=(e,t)=>new di((function*(){for(const n of e)for(const e of n[t])yield e})),ac=(e,t)=>1===t.length?cc(e,t):uc(e,t),cc=(e,t)=>Di((async function*(){for(const n of e){const e=await t(n);for(const t of e)yield t}})),uc=(e,t)=>Di((async function*(){let n=0;for(const r of e){const e=await t(r,n);for(const t of e)yield t;n++}})),lc=(e,t,n=ci)=>{const r=e[Symbol.iterator](),o=t[Symbol.iterator]();let s=r.next(),i=o.next();for(;!s.done&&!i.done;){if(!n(s.value,i.value))return!1;s=r.next(),i=o.next()}return!0===s.done&&!0===i.done},dc=async(e,t,n)=>{const r=e[Symbol.iterator](),o=t[Symbol.iterator]();let s=r.next(),i=o.next();for(;!s.done&&!i.done;){if(!1===await n(s.value,i.value))return!1;s=r.next(),i=o.next()}return!0===s.done&&!0===i.done},hc=(e,t)=>t?gc(e,t):pc(e),pc=e=>{let t=!1,n=null;for(const r of e){if(!0===t)throw new ai(ii.MoreThanOneElement);t=!0,n=r}if(!1===t)throw new ai(ii.NoElements);return n},gc=(e,t)=>{let n=!1,r=null;for(const o of e)if(t(o)){if(!0===n)throw new ai(ii.MoreThanOneMatchingElement);n=!0,r=o}if(!1===n)throw new ai(ii.NoMatch);return r},fc=async(e,t)=>{let n=!1,r=null;for(const o of e)if(await t(o)){if(!0===n)throw new ai(ii.MoreThanOneMatchingElement);n=!0,r=o}if(!1===n)throw new ai(ii.NoMatch);return r},vc=(e,t)=>t?yc(e,t):mc(e),mc=e=>{let t=!1,n=null;for(const r of e){if(!0===t)throw new ai(ii.MoreThanOneElement);t=!0,n=r}return n},yc=(e,t)=>{let n=!1,r=null;for(const o of e)if(t(o)){if(!0===n)throw new ai(ii.MoreThanOneMatchingElement);n=!0,r=o}return r},wc=async(e,t)=>{let n=!1,r=null;for(const o of e)if(await t(o)){if(!0===n)throw new ai(ii.MoreThanOneElement);n=!0,r=o}return r},Sc=(e,t)=>new di((function*(){let n=0;for(const r of e)n++>=t&&(yield r)})),Ac=(e,t)=>1===t.length?_c(e,t):Cc(e,t),_c=(e,t)=>new di((function*(){let n=!0;for(const r of e)!1===n?yield r:!1===t(r)&&(n=!1,yield r)})),Cc=(e,t)=>new di((function*(){let n=0,r=!0;for(const o of e)!1===r?yield o:!1===t(o,n)&&(r=!1,yield o),n++})),Dc=(e,t)=>1===t.length?Tc(e,t):kc(e,t),Tc=(e,t)=>Di((async function*(){let n=!0;for(const r of e)!1===n?yield r:!1===await t(r)&&(n=!1,yield r)})),kc=(e,t)=>Di((async function*(){let n=0,r=!0;for(const o of e)!1===r?yield o:!1===await t(o,n)&&(r=!1,yield o),n++})),Ec=(e,t)=>t?Nc(e,t):Gc(e),Gc=e=>{let t=0;for(const n of e)t+=n;return t},Nc=(e,t)=>{let n=0;for(const r of e)n+=t(r);return n},bc=async(e,t)=>{let n=0;for(const r of e)n+=await t(r);return n},Ic=(e,t)=>new di((function*(){let n=t>0?t:0;for(const t of e){if(0==n--)break;yield t}})),Rc=(e,t)=>1===t.length?Pc(e,t):Oc(e,t),Pc=(e,t)=>new di((function*(){for(const n of e){if(!t(n))break;yield n}})),Oc=(e,t)=>new di((function*(){let n=0;for(const r of e){if(!t(r,n++))break;yield r}})),Uc=(e,t)=>1===t.length?Mc(e,t):xc(e,t),Mc=(e,t)=>Di((async function*(){for(const n of e){if(!await t(n))break;yield n}})),xc=(e,t)=>Di((async function*(){let n=0;for(const r of e){if(!await t(r,n++))break;yield r}})),Fc=e=>[...e],Lc=(e,t)=>{const n=new Map;for(const r of e){const e=t(r),o=n.get(e);void 0===o?n.set(e,[r]):o.push(r)}return n},Bc=async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),o=n.get(e);void 0===o?n.set(e,[r]):o.push(r)}return n},Wc=(e,t)=>{const n={};for(const r of e)n[t(r)]=r;return n},$c=async(e,t)=>{const n={};for(const r of e)n[await t(r)]=r;return n},qc=e=>new Set(e),Vc=(e,t,n)=>n?Kc(e,t,n):Hc(e,t),Hc=(e,t)=>new di((function*(){const n=new Set;for(const t of e)!1===n.has(t)&&(yield t,n.add(t));for(const e of t)!1===n.has(e)&&(yield e,n.add(e))})),Kc=(e,t,n)=>new di((function*(){const r=[];for(const o of[e,t])for(const e of o){let t=!1;for(const o of r)if(!0===n(e,o)){t=!0;break}!1===t&&(yield e,r.push(e))}})),jc=(e,t,n)=>Di((async function*(){const r=[];for(const o of[e,t])for(const e of o){let t=!1;for(const o of r)if(!0===await n(e,o)){t=!0;break}!1===t&&(yield e,r.push(e))}})),zc=(e,t)=>1===t.length?Jc(e,t):Xc(e,t),Jc=(e,t)=>new di((function*(){for(const n of e)!0===t(n)&&(yield n)})),Xc=(e,t)=>new di((function*(){let n=0;for(const r of e)!0===t(r,n++)&&(yield r)})),Yc=(e,t)=>1===t.length?Qc(e,t):Zc(e,t),Qc=(e,t)=>Di((async function*(){for(const n of e)!0===await t(n)&&(yield n)})),Zc=(e,t)=>Di((async function*(){let n=0;for(const r of e)!0===await t(r,n++)&&(yield r)})),eu=(e,t,n)=>n?nu(e,t,n):tu(e,t),tu=(e,t)=>new di((function*(){const n=e[Symbol.iterator](),r=t[Symbol.iterator]();for(;;){const e=n.next(),t=r.next();if(e.done||t.done)break;yield[e.value,t.value]}})),nu=(e,t,n)=>new di((function*(){const r=e[Symbol.iterator](),o=t[Symbol.iterator]();for(;;){const e=r.next(),t=o.next();if(e.done||t.done)break;yield n(e.value,t.value)}})),ru=(e,t,n)=>Di((async function*(){const r=e[Symbol.iterator](),o=t[Symbol.iterator]();for(;;){const e=r.next(),t=o.next();if(e.done||t.done)break;yield n(e.value,t.value)}})),ou=e=>{const t=e.prototype,n=(e,n)=>{const r=function(...t){return e(this,...t)};Object.defineProperty(r,"length",{value:e.length-1}),t[n]=r};n(pi,"aggregate"),n(mi,"all"),n(yi,"allAsync"),n(wi,"any"),n(_i,"anyAsync"),n(Ci,"append"),n(Ti,"asAsync"),n(Ei,"asParallel"),n(Gi,"average"),n(Ni,"averageAsync"),n(bi,"chunk"),n(Ii,"concatenate"),n(Ri,"contains"),n(Pi,"containsAsync"),n(Oi,"count"),n(xi,"countAsync"),n(Fi,"defaultIfEmpty"),n(Li,"distinct"),n(Bi,"distinctAsync"),n(Wi,"each"),n($i,"eachAsync"),n(qi,"elementAt"),n(Vi,"elementAtOrDefault"),n(Hi,"except"),n(Ki,"exceptAsync"),n(ji,"first"),n(Xi,"firstAsync"),n(Yi,"firstOrDefault"),n(ea,"firstOrDefaultAsync"),n(na,"groupBy"),n(ra,"groupByAsync"),n(ia,"groupByWithSel"),n(aa,"groupJoin"),n(la,"groupJoinAsync"),n(pa,"intersect"),n(ga,"intersectAsync"),n(fa,"joinByKey"),n(va,"last"),n(wa,"lastAsync"),n(Sa,"lastOrDefault"),n(Ca,"lastOrDefaultAsync"),n(Da,"max"),n(Ea,"maxAsync"),n(Ga,"min"),n(Ia,"minAsync"),n(Ra,"ofType"),n(La,"order"),n(Ba,"orderBy"),n(Wa,"orderByAsync"),n($a,"orderByDescending"),n(qa,"orderByDescendingAsync"),n(Va,"orderDescending"),n(ja,"prepend"),n(za,"reverse"),n(Ja,"select"),n(Za,"selectAsync"),n(rc,"selectMany"),n(ac,"selectManyAsync"),n(lc,"sequenceEquals"),n(dc,"sequenceEqualsAsync"),n(hc,"single"),n(fc,"singleAsync"),n(vc,"singleOrDefault"),n(wc,"singleOrDefaultAsync"),n(Sc,"skip"),n(Ac,"skipWhile"),n(Dc,"skipWhileAsync"),n(Ec,"sum"),n(bc,"sumAsync"),n(Ic,"take"),n(Rc,"takeWhile"),n(Uc,"takeWhileAsync"),n(Fc,"toArray"),n(Lc,"toMap"),n(Bc,"toMapAsync"),n(Wc,"toObject"),n($c,"toObjectAsync"),n(Ha,"partition"),n(Ka,"partitionAsync"),n(qc,"toSet"),n(Vc,"union"),n(jc,"unionAsync"),n(zc,"where"),n(Yc,"whereAsync"),n(eu,"zip"),n(ru,"zipAsync")},su=(e,t,n,r)=>{if(r){if(!n)throw new ReferenceError("TAccumulate function is undefined");return cu(e,t,n,r)}return n?au(e,t,n):iu(e,t)},iu=async(e,t)=>{let n;for await(const r of e)n=n?t(n,r):r;if(void 0===n)throw new ai(ii.NoElements);return n},au=async(e,t,n)=>{let r=t;for await(const t of e)r=n(r,t);return r},cu=async(e,t,n,r)=>{let o=t;for await(const t of e)o=n(o,t);return r(o)},uu=async(e,t)=>{for await(const n of e)if(!1===t(n))return!1;return!0},lu=async(e,t)=>{for await(const n of e)if(!1===await t(n))return!1;return!0},du=(e,t)=>new ui((async function*(){yield*e,yield t})),hu=(e,t)=>t?gu(e,t):pu(e),pu=async e=>{for await(const t of e)return!0;return!1},gu=async(e,t)=>{for await(const n of e)if(!0===t(n))return!0;return!1},fu=async(e,t)=>{for await(const n of e)if(!0===await t(n))return!0;return!1},vu=e=>ki(0,(async()=>{const t=[];for await(const n of e)t.push(n);return t})),mu=async(e,t)=>{let n=0,r=0;if(t)for await(const o of e)n+=t(o),r+=1;else for await(const t of e)n+=t,r+=1;if(0===r)throw new ai(ii.NoElements);return n/r},yu=async(e,t)=>{let n=0,r=0;for await(const o of e)n+=await t(o),r+=1;if(0===r)throw new ai(ii.NoElements);return n/r},wu=(e,t)=>{if(t<1)throw new si("size");return new ui((async function*(){let n=[];for await(const r of e)n.push(r),n.length===t&&(yield n,n=[]);n.length&&(yield n)}))},Su=(e,t)=>new ui((async function*(){yield*e,yield*t})),Au=async(e,t,n=ci)=>{for await(const r of e)if(n(t,r))return!0;return!1},_u=async(e,t,n)=>{for await(const r of e)if(await n(t,r))return!0;return!1},Cu=(e,t)=>t?Tu(e,t):Du(e),Du=async e=>{let t=0;for await(const n of e)t++;return t},Tu=async(e,t)=>{let n=0;for await(const r of e)!0===t(r)&&n++;return n},ku=async(e,t)=>{let n=0;for await(const r of e)!0===await t(r)&&n++;return n},Eu=(e,t)=>new ui((async function*(){let n=!1;for await(const t of e)n=!0,yield t;n||(yield t)})),Gu=(e,t=ci)=>new ui((async function*(){const n=[];for await(const r of e)n.find((e=>t(e,r)))||(n.push(r),yield r)})),Nu=(e,t)=>new ui((async function*(){const n=[];e:for await(const r of e){for(const e of n)if(await t(e,r))continue e;n.push(r),yield r}})),bu=(e,t)=>new ui((async function*(){for await(const n of e)t(n),yield n})),Iu=(e,t)=>new ui((async function*(){for await(const n of e)await t(n),yield n})),Ru=async(e,t)=>{if(t<0)throw new si("index");let n=0;for await(const r of e)if(t===n++)return r;throw new si("index")},Pu=async(e,t)=>{let n=0;for await(const r of e)if(t===n++)return r;return null},Ou=(e,t,n=ci)=>new ui((async function*(){const r=[];for await(const e of t)r.push(e);for await(const t of e){let e=!1;for(let o=0;o<r.length;o++){const s=r[o];if(!0===n(t,s)){e=!0;break}}!1===e&&(yield t)}})),Uu=(e,t,n)=>new ui((async function*(){const r=[];for await(const e of t)r.push(e);for await(const t of e){let e=!1;for(let o=0;o<r.length;o++){const s=r[o];if(!0===await n(t,s)){e=!0;break}}!1===e&&(yield t)}})),Mu=(e,t)=>t?Fu(e,t):xu(e),xu=async e=>{const t=await e[Symbol.asyncIterator]().next();if(!0===t.done)throw new ai(ii.NoElements);return t.value},Fu=async(e,t)=>{for await(const n of e)if(!0===t(n))return n;throw new ai(ii.NoMatch)},Lu=async(e,t)=>{for await(const n of e)if(!0===await t(n))return n;throw new ai(ii.NoMatch)},Bu=(e,t)=>t?$u(e,t):Wu(e),Wu=async e=>(await e[Symbol.asyncIterator]().next()).value??null,$u=async(e,t)=>{for await(const n of e)if(!0===t(n))return n;return null},qu=async(e,t)=>{for await(const n of e)if(!0===await t(n))return n;return null},Vu=(e,t,n)=>n?Hu(e,t,n):Ku(e,t),Hu=(e,t,n)=>new ui((async function*(){const r=new Array;for await(const o of e){const e=t(o);let s=!1;for(let t=0;t<r.length;t++){const i=r[t];if(n(i.key,e)){i.push(o),s=!0;break}}!1===s&&r.push(new ta(e,o))}for(const e of r)yield e})),Ku=(e,t)=>new ui((async function*(){const n={};for await(const r of e){const e=t(r),o=n[e];o?o.push(r):n[e]=new ta(e,r)}for(const e in n)yield n[e]})),ju=(e,t,n)=>n?Ju(e,t,n):zu(e,t),zu=(e,t)=>new ui((async function*(){const n={};for await(const r of e){const e=await t(r),o=n[e];o?o.push(r):n[e]=new ta(e,r)}for(const e in n)yield n[e]})),Ju=(e,t,n)=>new ui((async function*(){const r=new Array;for await(const o of e){const e=await t(o);let s=!1;for(let t=0;t<r.length;t++){const i=r[t];if(!0===await n(i.key,e)){i.push(o),s=!0;break}}!1===s&&r.push(new ta(e,o))}for(const e of r)yield e})),Xu=(e,t,n,r)=>r?Qu(e,t,n,r):Yu(e,t,n),Yu=(e,t,n)=>new ui((async function*(){const r={};for await(const o of e){const e=t(o),s=r[e],i=n(o);s?s.push(i):r[e]=new ta(e,i)}for(const e in r)yield r[e]})),Qu=(e,t,n,r)=>new ui((async function*(){const o=new Array;for await(const s of e){const e=t(s);let i=!1;for(let t=0;t<o.length;t++){const a=o[t];if(r(a.key,e)){a.push(n(s)),i=!0;break}}if(!1===i){const t=n(s);o.push(new ta(e,t))}}for(const e of o)yield e})),Zu=(e,t,n,r,o,s)=>{const i=s?el(e,t,n,r,o,s):tl(e,t,n,r,o);return new ui(i)},el=(e,t,n,r,o,s)=>async function*(){const i=[];for await(const e of t){const t=r(e),n=i.find((e=>s(e.key,t)));n?n.values.push(e):i.push({key:t,values:[e]})}for await(const t of e){const e=n(t),r=i.find((t=>s(t.key,e)))??{key:e,values:[]};yield o(t,r.values)}},tl=(e,t,n,r,o)=>async function*(){const s=new Map;for await(const e of t){const t=r(e),n=s.get(t);n?n.push(e):s.set(t,[e])}for await(const t of e){const e=n(t),r=s.get(e)??[];yield o(t,r)}},nl=(e,t,n,r,o,s)=>{const i=s?rl(e,t,n,r,o,s):ol(e,t,n,r,o);return new ui(i)},rl=(e,t,n,r,o,s)=>async function*(){const i=[];for await(const e of t){const t=await r(e),n=i.find((e=>s(e.key,t)));n?n.values.push(e):i.push({key:t,values:[e]})}for await(const t of e){const e=await n(t),r=i.find((t=>s(t.key,e)))??{key:e,values:[]};yield o(t,r.values)}},ol=(e,t,n,r,o)=>async function*(){const s=new Map;for await(const e of t){const t=await r(e),n=s.get(t);n?n.push(e):s.set(t,[e])}for await(const t of e){const e=await n(t),r=s.get(e)??[];yield o(t,r)}},sl=(e,t,n=ci)=>new ui((async function*(){const r=await e.distinct(n).toArray();if(0===r.length)return;const o=await t.toArray();for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<o.length;e++){const r=o[e];if(!0===n(t,r)){yield t;break}}}})),il=(e,t,n)=>new ui((async function*(){const r=await e.distinctAsync(n).toArray();if(0===r.length)return;const o=await t.toArray();for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<o.length;e++){const r=o[e];if(!0===await n(t,r)){yield t;break}}}})),al=(e,t,n,r,o,s=ci)=>new ui((async function*(){const i=[];for await(const e of t)i.push(e);for await(const t of e){const e=n(t);for(const n of i){const i=r(n);!0===s(e,i)&&(yield o(t,n))}}})),cl=(e,t)=>t?ll(e,t):ul(e),ul=async e=>{let t=null;for await(const n of e)t=n;if(!t)throw new ai(ii.NoElements);return t},ll=async(e,t)=>{let n=null;for await(const r of e)!0===t(r)&&(n=r);if(!n)throw new ai(ii.NoMatch);return n},dl=async(e,t)=>{let n=null;for await(const r of e)!0===await t(r)&&(n=r);if(!n)throw new ai(ii.NoMatch);return n},hl=(e,t)=>t?gl(e,t):pl(e),pl=async e=>{let t=null;for await(const n of e)t=n;return t},gl=async(e,t)=>{let n=null;for await(const r of e)!0===t(r)&&(n=r);return n},fl=async(e,t)=>{let n=null;for await(const r of e)!0===await t(r)&&(n=r);return n},vl=(e,t)=>t?yl(e,t):ml(e),ml=async e=>{let t=null;for await(const n of e)t=Math.max(t??Number.NEGATIVE_INFINITY,n);if(null===t)throw new ai(ii.NoElements);return t},yl=async(e,t)=>{let n=null;for await(const r of e)n=Math.max(n??Number.NEGATIVE_INFINITY,t(r));if(null===n)throw new ai(ii.NoElements);return n},wl=async(e,t)=>{let n=null;for await(const r of e)n=Math.max(n??Number.NEGATIVE_INFINITY,await t(r));if(null===n)throw new ai(ii.NoElements);return n},Sl=(e,t)=>t?_l(e,t):Al(e),Al=async e=>{let t=null;for await(const n of e)t=Math.min(t??Number.POSITIVE_INFINITY,n);if(null===t)throw new ai(ii.NoElements);return t},_l=async(e,t)=>{let n=null;for await(const r of e)n=Math.min(n??Number.POSITIVE_INFINITY,t(r));if(null===n)throw new ai(ii.NoElements);return n},Cl=async(e,t)=>{let n=null;for await(const r of e)n=Math.min(n??Number.POSITIVE_INFINITY,await t(r));if(null===n)throw new ai(ii.NoElements);return n},Dl=(e,t)=>{const n="string"==typeof t?e=>typeof e===t:e=>e instanceof t;return new ui((async function*(){for await(const t of e)n(t)&&(yield t)}))},Tl=(e,t)=>Ua.generate(e,(e=>e),!0,t),kl=(e,t,n)=>Ua.generate(e,t,!0,n),El=(e,t,n)=>Ua.generateAsync(e,t,!0,n),Gl=(e,t,n)=>Ua.generate(e,t,!1,n),Nl=(e,t,n)=>Ua.generateAsync(e,t,!1,n),bl=(e,t)=>Ua.generate(e,(e=>e),!1,t),Il=async(e,t)=>{const n=[],r=[];for await(const o of e)!0===t(o)?r.push(o):n.push(o);return[r,n]},Rl=async(e,t)=>{const n=[],r=[];for await(const o of e)!0===await t(o)?r.push(o):n.push(o);return[r,n]},Pl=(e,t)=>new ui((async function*(){yield t,yield*e})),Ol=e=>new ui((async function*(){const t=[];for await(const n of e)t.push(n);for(let e=t.length-1;e>=0;e--)yield t[e]})),Ul=(e,t)=>"function"==typeof t?1===t.length?Ml(e,t):xl(e,t):Fl(e,t),Ml=(e,t)=>new ui((async function*(){for await(const n of e)yield t(n)})),xl=(e,t)=>new ui((async function*(){let n=0;for await(const r of e)yield t(r,n),n++})),Fl=(e,t)=>new ui((async function*(){for await(const n of e)yield n[t]})),Ll=(e,t)=>"string"==typeof t?Wl(e,t):Bl(e,t),Bl=(e,t)=>new ui((async function*(){for await(const n of e)yield t(n)})),Wl=(e,t)=>new ui((async function*(){for await(const n of e)yield n[t]})),$l=(e,t)=>"function"==typeof t?1===t.length?ql(e,t):Vl(e,t):Hl(e,t),ql=(e,t)=>new ui((async function*(){for await(const n of e)for(const e of t(n))yield e})),Vl=(e,t)=>new ui((async function*(){let n=0;for await(const r of e){for(const e of t(r,n))yield e;n++}})),Hl=(e,t)=>new ui((async function*(){for await(const n of e)for(const e of n[t])yield e})),Kl=(e,t)=>1===t.length?new ui((async function*(){for await(const n of e){const e=await t(n);for(const t of e)yield t}})):new ui((async function*(){let n=0;for await(const r of e){const e=await t(r,n);for(const t of e)yield t;n++}})),jl=async(e,t,n=ci)=>{const r=e[Symbol.asyncIterator](),o=t[Symbol.asyncIterator]();let s=await Promise.all([r.next(),o.next()]),i=s[0],a=s[1];for(;!i.done&&!a.done;){if(!n(i.value,a.value))return!1;s=await Promise.all([r.next(),o.next()]),i=s[0],a=s[1]}return!0===i.done&&!0===a.done},zl=async(e,t,n)=>{const r=e[Symbol.asyncIterator](),o=t[Symbol.asyncIterator]();let s=await Promise.all([r.next(),o.next()]),i=s[0],a=s[1];for(;!i.done&&!a.done;){if(!1===await n(i.value,a.value))return!1;s=await Promise.all([r.next(),o.next()]),i=s[0],a=s[1]}return!0===i.done&&!0===a.done},Jl=(e,t)=>t?Yl(e,t):Xl(e),Xl=async e=>{let t=!1,n=null;for await(const r of e){if(!0===t)throw new ai(ii.MoreThanOneElement);t=!0,n=r}if(!1===t)throw new ai(ii.NoElements);return n},Yl=async(e,t)=>{let n=!1,r=null;for await(const o of e)if(t(o)){if(!0===n)throw new ai(ii.MoreThanOneMatchingElement);n=!0,r=o}if(!1===n)throw new ai(ii.NoMatch);return r},Ql=async(e,t)=>{let n=!1,r=null;for await(const o of e)if(await t(o)){if(!0===n)throw new ai(ii.MoreThanOneMatchingElement);n=!0,r=o}if(!1===n)throw new ai(ii.NoMatch);return r},Zl=(e,t)=>t?td(e,t):ed(e),ed=async e=>{let t=!1,n=null;for await(const r of e){if(!0===t)throw new ai(ii.MoreThanOneElement);t=!0,n=r}return n},td=async(e,t)=>{let n=!1,r=null;for await(const o of e)if(t(o)){if(!0===n)throw new ai(ii.MoreThanOneMatchingElement);n=!0,r=o}return r},nd=async(e,t)=>{let n=!1,r=null;for await(const o of e)if(await t(o)){if(!0===n)throw new ai(ii.MoreThanOneMatchingElement);n=!0,r=o}return r},rd=(e,t)=>new ui((async function*(){let n=0;for await(const r of e)n++>=t&&(yield r)})),od=(e,t)=>1===t.length?sd(e,t):id(e,t),sd=(e,t)=>new ui((async function*(){let n=!0;for await(const r of e)!1===n?yield r:!1===t(r)&&(n=!1,yield r)})),id=(e,t)=>new ui((async function*(){let n=0,r=!0;for await(const o of e)!1===r?yield o:!1===t(o,n)&&(r=!1,yield o),n++})),ad=(e,t)=>1===t.length?cd(e,t):ud(e,t),cd=(e,t)=>new ui((async function*(){let n=!0;for await(const r of e)!1===n?yield r:!1===await t(r)&&(n=!1,yield r)})),ud=(e,t)=>new ui((async function*(){let n=0,r=!0;for await(const o of e)!1===r?yield o:!1===await t(o,n)&&(r=!1,yield o),n++})),ld=(e,t)=>t?hd(e,t):dd(e),dd=async e=>{let t=0;for await(const n of e)t+=n;return t},hd=async(e,t)=>{let n=0;for await(const r of e)n+=t(r);return n},pd=async(e,t)=>{let n=0;for await(const r of e)n+=await t(r);return n},gd=(e,t)=>new ui((async function*(){let n=t>0?t:0;for await(const t of e){if(0==n--)break;yield t}})),fd=(e,t)=>1===t.length?vd(e,t):md(e,t),vd=(e,t)=>new ui((async function*(){for await(const n of e){if(!t(n))break;yield n}})),md=(e,t)=>new ui((async function*(){let n=0;for await(const r of e){if(!t(r,n++))break;yield r}})),yd=(e,t)=>1===t.length?wd(e,t):Sd(e,t),wd=(e,t)=>new ui((async function*(){for await(const n of e){if(!await t(n))break;yield n}})),Sd=(e,t)=>new ui((async function*(){let n=0;for await(const r of e){if(!await t(r,n++))break;yield r}})),Ad=async e=>{const t=[];for await(const n of e)t.push(n);return t},_d=async(e,t)=>{const n=new Map;for await(const r of e){const e=t(r),o=n.get(e);void 0===o?n.set(e,[r]):o.push(r)}return n},Cd=async(e,t)=>{const n=new Map;for await(const r of e){const e=await t(r),o=n.get(e);void 0===o?n.set(e,[r]):o.push(r)}return n},Dd=async(e,t)=>{const n={};for await(const r of e)n[t(r)]=r;return n},Td=async(e,t)=>{const n={};for await(const r of e)n[await t(r)]=r;return n},kd=async e=>{const t=new Set;for await(const n of e)t.add(n);return t},Ed=(e,t,n)=>n?Nd(e,t,n):Gd(e,t),Gd=(e,t)=>new ui((async function*(){const n=new Set;for await(const t of e)!1===n.has(t)&&(yield t,n.add(t));for await(const e of t)!1===n.has(e)&&(yield e,n.add(e))})),Nd=(e,t,n)=>new ui((async function*(){const r=[];for(const o of[e,t])for await(const e of o){let t=!1;for(const o of r)if(!0===n(e,o)){t=!0;break}!1===t&&(yield e,r.push(e))}})),bd=(e,t,n)=>new ui((async function*(){const r=[];for(const o of[e,t])for await(const e of o){let t=!1;for(const o of r)if(!0===await n(e,o)){t=!0;break}!1===t&&(yield e,r.push(e))}})),Id=(e,t)=>1===t.length?Rd(e,t):Pd(e,t),Rd=(e,t)=>new ui((async function*(){for await(const n of e)!0===t(n)&&(yield n)})),Pd=(e,t)=>new ui((async function*(){let n=0;for await(const r of e)!0===t(r,n++)&&(yield r)})),Od=(e,t)=>1===t.length?Ud(e,t):Md(e,t),Ud=(e,t)=>new ui((async function*(){for await(const n of e)!0===await t(n)&&(yield n)})),Md=(e,t)=>new ui((async function*(){let n=0;for await(const r of e)!0===await t(r,n++)&&(yield r)})),xd=(e,t,n)=>n?Ld(e,t,n):Fd(e,t),Fd=(e,t)=>new ui((async function*(){const n=e[Symbol.asyncIterator](),r=t[Symbol.asyncIterator]();for(;;){const[e,t]=await Promise.all([n.next(),r.next()]);if(e.done||t.done)break;yield[e.value,t.value]}})),Ld=(e,t,n)=>new ui((async function*(){const r=e[Symbol.asyncIterator](),o=t[Symbol.asyncIterator]();for(;;){const[e,t]=await Promise.all([r.next(),o.next()]);if(e.done||t.done)break;yield n(e.value,t.value)}})),Bd=(e,t,n)=>new ui((async function*(){const r=e[Symbol.asyncIterator](),o=t[Symbol.asyncIterator]();for(;;){const e=await Promise.all([r.next(),o.next()]),t=e[0],s=e[1];if(t.done||s.done)break;yield n(t.value,s.value)}})),Wd=(e,t,n,r)=>{if(r){if(!n)throw new ReferenceError("TAccumulate function is undefined");return Vd(e,t,n,r)}return n?qd(e,t,n):$d(e,t)},$d=async(e,t)=>{let n;for await(const r of e)n=n?t(n,r):r;if(void 0===n)throw new ai(ii.NoElements);return n},qd=async(e,t,n)=>{let r=t;for await(const t of e)r=n(r,t);return r},Vd=async(e,t,n,r)=>{let o=t;for await(const t of e)o=n(o,t);return r(o)},Hd=(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:return{generator:()=>n.generator().then((e=>{const n=new Array(e.length);for(let r=0;r<e.length;r++)n[r]=t(e[r]);return n})),type:0};case 1:return{generator:()=>{const e=n.generator(),r=new Array(e.length);for(let n=0;n<e.length;n++)r[n]=e[n].then(t);return r},type:1};case 2:return{generator:async()=>{const e=await n.generator(),r=new Array(e.length);for(let n=0;n<e.length;n++)r[n]=e[n].then(t);return r},type:2}}},Kd=(e,t)=>{const n=Hd(e,(e=>{if(!t(e))throw new Error(String(!1));return!0}));switch(n.type){case 0:return n.generator().then((()=>!0),(()=>!1));case 1:return Promise.all(n.generator()).then((()=>!0),(()=>!1));case 2:return n.generator().then(Promise.all.bind(Promise)).then((()=>!0),(()=>!1))}},jd=(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:return{generator:async()=>{const e=await n.generator(),r=new Array(e.length);for(let n=0;n<e.length;n++)r[n]=t(e[n]);return r},type:2};case 1:return{generator:()=>n.generator().map((async e=>{const n=await e;return await t(n)})),type:1};case 2:return{generator:async()=>(await n.generator()).map((e=>e.then(t))),type:2}}},zd=(e,t)=>{const n=jd(e,(async e=>{if(!1===await t(e))throw new Error(String(!1));return!0}));switch(n.type){case 1:return Promise.all(n.generator()).then((()=>!0),(()=>!1));case 2:return n.generator().then(Promise.all.bind(Promise)).then((()=>!0),(()=>!1))}},Jd=(e,t)=>{const n=e.dataFunc;switch(n.type){case 1:return new li({generator:()=>{const e=n.generator();return e.push(Promise.resolve(t)),e},type:n.type});case 2:return new li({generator:async()=>{const e=await n.generator();return e.push(Promise.resolve(t)),e},type:n.type});case 0:return new li({generator:async()=>{const e=await n.generator();return e.push(t),e},type:n.type})}},Xd=(e,t)=>t?Qd(e,t):Yd(e),Yd=async e=>{const t=e.dataFunc;let n;switch(t.type){case 1:return n=t.generator(),0!==n.length;case 0:case 2:return n=await t.generator(),0!==n.length}},Qd=async(e,t)=>{const n=Hd(e,t);let r;switch(n.type){case 0:return r=await n.generator(),r.includes(!0);case 1:return r=await Promise.all(n.generator()),r.includes(!0);case 2:return r=await Promise.all(await n.generator()),r.includes(!0)}},Zd=async(e,t)=>{const n=jd(e,t);let r;switch(n.type){case 1:return r=n.generator(),0!==r.length&&new Promise(((e,t)=>{let n=0;for(const o of r)o.then((t=>{n++,t?e(!0):n===r.length&&e(!1)}),t)}));case 2:return r=await n.generator(),0===Promise.length?!1:(await Promise.all(r)).includes(!0)}},eh=e=>Di((async function*(){for await(const t of e)yield t})),th=async e=>{switch(e.type){case 0:return await e.generator();case 1:return await Promise.all(e.generator());case 2:const t=await e.generator();return await Promise.all(t)}},nh=async(e,t)=>{let n;n=t?Hd(e,t):e.dataFunc;const r=await th(n);if(0===r.length)throw new ai(ii.NoElements);let o=0;for(const e of r)o+=e;return o/r.length},rh=async(e,t)=>{const n=jd(e,t),r=await th(n);if(0===r.length)throw new ai(ii.NoElements);let o=0;for(const e of r)o+=e;return o/r.length},oh=(e,t)=>{if(t<1)throw new si("size");let n;switch(e.dataFunc.type){case 1:const r=e.dataFunc.generator;n={type:1,generator:()=>{const e=[];let n=[];for(const o of r())n.push(o),n.length===t&&(e.push(Promise.all(n)),n=[]);return n.length&&e.push(Promise.all(n)),e}};break;case 2:const o=e.dataFunc.generator;n={type:2,generator:async()=>{const e=[];let n=[];for(const r of await o())n.push(r),n.length===t&&(e.push(Promise.all(n)),n=[]);return n.length&&e.push(Promise.all(n)),e}};break;case 0:const s=e.dataFunc.generator;n={type:0,generator:async()=>{const e=[];let n=[];for(const r of await s())n.push(r),n.length===t&&(e.push(n),n=[]);return n.length&&e.push(n),e}}}return new li(n)},sh=(e,t)=>new li({generator:async()=>{const[n,r]=await Promise.all([e.toArray(),t.toArray()]);return[...n,...r]},type:0}),ih=async(e,t,n=ci)=>{let r;switch(r=Hd(e,n?e=>n(t,e):e=>e===t),r.type){case 0:return(await r.generator()).some((e=>e));case 1:return(await Promise.all(r.generator())).some((e=>e));case 2:return(await Promise.all(await r.generator())).some((e=>e))}},ah=async(e,t,n)=>{const r=jd(e,(e=>n(t,e)));switch(r.type){case 1:return(await Promise.all(r.generator())).some((e=>e));case 2:return(await Promise.all(await r.generator())).some((e=>e))}},ch=(e,t)=>t?lh(e,t):uh(e),uh=async e=>{const t=e.dataFunc;switch(t.type){case 0:case 2:return(await e.toArray()).length;case 1:return t.generator().length}},lh=async(e,t)=>{const n=await e.toArray();let r=0;for(let e=0;e<n.length;e++)!0===t(n[e])&&r++;return r},dh=async(e,t)=>{const n=jd(e,t);let r;switch(n.type){case 1:r=Promise.all(n.generator());break;case 2:r=Promise.all(await n.generator())}let o=0;for(const e of await r)e&&o++;return o},hh=(e,t)=>{const n=e.dataFunc,r=t instanceof Promise;let o;switch(n.type){case 0:o={generator:()=>n.generator().then((e=>e.length?e:r?t.then((e=>[e])):[t])),type:n.type};break;case 1:o={generator:()=>{const e=n.generator();return e.length?e:r?[t]:[Promise.resolve(t)]},type:n.type};break;case 2:o={generator:async()=>{const e=await n.generator();return e.length?e:r?[t]:[Promise.resolve(t)]},type:n.type}}return new li(o)},ph=(e,t=ci)=>new li({generator:async()=>{const n=[];for(const r of await e.toArray())n.find((e=>t(e,r)))||n.push(r);return n},type:0}),gh=(e,t)=>new li({generator:async()=>{const n=[];e:for(const r of await e.toArray()){for(const e of n)if(await t(e,r))continue e;n.push(r)}return n},type:0}),fh=(e,t)=>new li(Hd(e,(e=>(t(e),e)))),vh=(e,t)=>{const n=jd(e,(async e=>(await t(e),e)));return new li(n)},mh=async(e,t)=>{if(t<0)throw new si("index");const n=e.dataFunc;switch(n.type){case 0:{const e=await n.generator();if(t>=e.length)throw new si("index");return e[t]}case 1:{const e=n.generator();if(t>=e.length)throw new si("index");return await e[t]}case 2:{const e=await n.generator();if(t>=e.length)throw new si("index");return await e[t]}}},yh=async(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:{const e=await n.generator();return t>=e.length?null:e[t]}case 1:{const e=n.generator();return t>=e.length?null:await e[t]}case 2:{const e=await n.generator();return t>=e.length?null:await e[t]}}},wh=(e,t,n=ci)=>new li({generator:async()=>{const[r,o]=await Promise.all([e.toArray(),t.toArray()]),s=[];for(const e of r){let t=!1;for(let r=0;r<o.length;r++){const s=o[r];if(!0===n(e,s)){t=!0;break}}!1===t&&s.push(e)}return s},type:0}),Sh=(e,t,n)=>new li({generator:async()=>{const[r,o]=await Promise.all([e.toArray(),t.toArray()]),s=[];for(const e of r){let t=!1;for(let r=0;r<o.length;r++){const s=o[r];if(!0===await n(e,s)){t=!0;break}}!1===t&&s.push(e)}return s},type:0}),Ah=e=>th(e.dataFunc),_h=(e,t)=>t?Dh(e,t):Ch(e),Ch=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(0===e.length)throw new ai(ii.NoElements);return e[0]}case 1:{const e=t.generator();if(0===e.length)throw new ai(ii.NoElements);return await e[0]}case 2:{const e=await t.generator();if(0===e.length)throw new ai(ii.NoElements);return await e[0]}}},Dh=async(e,t)=>{const n=await Ah(e);for(const e of n)if(!0===t(e))return e;throw new ai(ii.NoMatch)},Th=async(e,t)=>{const n=await Ah(e);for(const e of n)if(!0===await t(e))return e;throw new ai(ii.NoMatch)},kh=(e,t)=>t?Gh(e,t):Eh(e),Eh=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();return 0===e.length?null:e[0]}case 1:{const e=t.generator();return 0===e.length?null:await e[0]}case 2:{const e=await t.generator();return 0===e.length?null:await e[0]}}},Gh=async(e,t)=>{const n=await Ah(e);for(const e of n)if(!0===t(e))return e;return null},Nh=async(e,t)=>{const n=await Ah(e);for(const e of n)if(!0===await t(e))return e;return null},bh=(e,t,n)=>n?Rh(e,t,n):Ih(e,t),Ih=(e,t)=>new li({generator:async()=>{const n={};for(const r of await e.toArray()){const e=t(r),o=n[e];o?o.push(r):n[e]=new ta(e,r)}const r=new Array;for(const e in n)r.push(n[e]);return r},type:0}),Rh=(e,t,n)=>new li({generator:async()=>{const r=new Array;for(const o of await e.toArray()){const e=t(o);let s=!1;for(let t=0;t<r.length;t++){const i=r[t];if(n(i.key,e)){i.push(o),s=!0;break}}!1===s&&r.push(new ta(e,o))}const o=new Array;for(const e of r)o.push(e);return o},type:0}),Ph=(e,t,n)=>n?Oh(e,t,n):Uh(e,t),Oh=(e,t,n)=>new li({generator:async()=>{const r=jd(e,(async e=>[await t(e),e]));let o;switch(r.type){case 1:o=await Promise.all(r.generator());break;case 2:o=await Promise.all(await r.generator())}const s=new Array;for(const[e,t]of o){let r=!1;for(let o=0;o<s.length;o++){const i=s[o];if(!0===await n(i.key,e)){i.push(t),r=!0;break}}!1===r&&s.push(new ta(e,t))}const i=new Array;for(const e of s)i.push(e);return i},type:0}),Uh=(e,t)=>new li({generator:async()=>{const n=jd(e,(async e=>[await t(e),e]));let r;switch(n.type){case 1:r=await Promise.all(n.generator());break;case 2:r=await Promise.all(await n.generator())}const o={};for(const[e,t]of r){const n=o[e];n?n.push(t):o[e]=new ta(e,t)}const s=new Array;for(const e in o)s.push(o[e]);return s},type:0}),Mh=(e,t,n,r)=>r?xh(e,t,n,r):Fh(e,t,n),xh=(e,t,n,r)=>new li({generator:async()=>{const o=new Array;for await(const s of e){const e=t(s);let i=!1;for(let t=0;t<o.length;t++){const a=o[t];if(r(a.key,e)){a.push(n(s)),i=!0;break}}if(!1===i){const t=n(s);o.push(new ta(e,t))}}const s=new Array;for(const e of o)s.push(e);return s},type:0}),Fh=(e,t,n)=>new li({generator:async()=>{const r={};for(const o of await e.toArray()){const e=t(o),s=r[e],i=n(o);s?s.push(i):r[e]=new ta(e,i)}const o=new Array;for(const e in r)o.push(r[e]);return o},type:0}),Lh=(e,t,n,r,o,s)=>{const i=s?Bh(e,t,n,r,o,s):Wh(e,t,n,r,o);return new li({generator:i,type:0})},Bh=(e,t,n,r,o,s)=>async()=>{const i=[];for await(const e of t){const t=r(e),n=i.find((e=>s(e.key,t)));n?n.values.push(e):i.push({key:t,values:[e]})}return(await e.toArray()).map((e=>{const t=n(e),r=i.find((e=>s(e.key,t)))??{key:t,values:[]};return o(e,r.values)}))},Wh=(e,t,n,r,o)=>async()=>{const s=new Map;for await(const e of t){const t=r(e),n=s.get(t);n?n.push(e):s.set(t,[e])}return(await e.toArray()).map((e=>{const t=n(e),r=s.get(t)??[];return o(e,r)}))},$h=(e,t,n,r,o,s)=>{const i=s?qh(e,t,n,r,o,s):Vh(e,t,n,r,o);return new li({generator:i,type:0})},qh=(e,t,n,r,o,s)=>async()=>{const i=[];for await(const e of t){const t=await r(e),n=i.find((e=>s(e.key,t)));n?n.values.push(e):i.push({key:t,values:[e]})}const a=(await e.toArray()).map((async e=>{const t=await n(e),r=i.find((e=>s(e.key,t)))??{key:t,values:[]};return o(e,r.values)}));return await Promise.all(a)},Vh=(e,t,n,r,o)=>async()=>{const s=new Map;for await(const e of t){const t=await r(e),n=s.get(t);n?n.push(e):s.set(t,[e])}const i=(await e.toArray()).map((async e=>{const t=await n(e),r=s.get(t)??[];return o(e,r)}));return await Promise.all(i)},Hh=(e,t,n=ci)=>new li({generator:async()=>{const r=await e.distinct(n).toArray();if(0===r.length)return[];const o=await t.toArray(),s=new Array;for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<o.length;e++){const r=o[e];if(!0===n(t,r)){s.push(t);break}}}return s},type:0}),Kh=(e,t,n)=>new li({generator:async()=>{const r=await e.distinctAsync(n).toArray();if(0===r.length)return[];const o=await t.toArray(),s=new Array;for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<o.length;e++){const r=o[e];if(!0===await n(t,r)){s.push(t);break}}}return s},type:0}),jh=(e,t,n,r,o,s=ci)=>new li({generator:async()=>{const[i,a]=await Promise.all([t.toArray(),e.toArray()]),c=new Array;for(const e of a){const t=n(e);for(const n of i){const i=r(n);!0===s(t,i)&&c.push(o(e,n))}}return c},type:0}),zh=(e,t)=>t?Xh(e,t):Jh(e),Jh=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(0===e.length)throw new ai(ii.NoElements);return e[e.length-1]}case 1:{const e=t.generator();if(0===e.length)throw new ai(ii.NoElements);return await e[e.length-1]}case 2:{const e=await t.generator();if(0===e.length)throw new ai(ii.NoElements);return await e[e.length-1]}}},Xh=async(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:{const e=await n.generator();for(let n=e.length-1;n>=0;n--){const r=e[n];if(t(r))return r}break}case 1:{const e=n.generator();for(let n=e.length-1;n>=0;n--){const r=await e[n];if(t(r))return r}break}case 2:{const e=await n.generator();for(let n=e.length-1;n>=0;n--){const r=await e[n];if(t(r))return r}break}}throw new ai(ii.NoMatch)},Yh=async(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:{const e=await n.generator();for(let n=e.length-1;n>=0;n--){const r=e[n];if(!0===await t(r))return r}break}case 1:{const e=n.generator();for(let n=e.length-1;n>=0;n--){const r=await e[n];if(!0===await t(r))return r}break}case 2:{const e=await n.generator();for(let n=e.length-1;n>=0;n--){const r=await e[n];if(!0===await t(r))return r}break}}throw new ai(ii.NoMatch)},Qh=(e,t)=>t?ep(e,t):Zh(e),Zh=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();return 0===e.length?null:e[e.length-1]}case 1:{const e=t.generator();return 0===e.length?null:await e[e.length-1]}case 2:{const e=await t.generator();return 0===e.length?null:await e[e.length-1]}}},ep=async(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:{const e=await n.generator();for(let n=e.length-1;n>=0;n--){const r=e[n];if(t(r))return r}break}case 1:{const e=n.generator();for(let n=e.length-1;n>=0;n--){const r=await e[n];if(t(r))return r}break}case 2:{const e=await n.generator();for(let n=e.length-1;n>=0;n--){const r=await e[n];if(t(r))return r}break}}return null},tp=async(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:{const e=await n.generator();for(let n=e.length-1;n>=0;n--){const r=e[n];if(!0===await t(r))return r}break}case 1:{const e=n.generator();for(let n=e.length-1;n>=0;n--){const r=await e[n];if(!0===await t(r))return r}break}case 2:{const e=await n.generator();for(let n=e.length-1;n>=0;n--){const r=await e[n];if(!0===await t(r))return r}break}}return null},np=async(e,t)=>{let n;n=t?Hd(e,t):e.dataFunc;const r=await th(n);if(0===r.length)throw new ai(ii.NoElements);return Math.max.apply(null,r)},rp=async(e,t)=>{const n=jd(e,t),r=await th(n);if(0===r.length)throw new ai(ii.NoElements);return Math.max.apply(null,r)},op=async(e,t)=>{let n;n=t?Hd(e,t):e.dataFunc;const r=await th(n);if(0===r.length)throw new ai(ii.NoElements);return Math.min.apply(null,r)},sp=async(e,t)=>{const n=jd(e,t),r=await th(n);if(0===r.length)throw new ai(ii.NoElements);return Math.min.apply(null,r)},ip=(e,t)=>{const n="string"==typeof t?e=>[typeof e===t,e]:e=>[e instanceof t,e];return new li({generator:async()=>{const t=Hd(e,n),r=await th(t),o=[];for(const[e,t]of r)e&&o.push(t);return o},type:0})};async function*ap(e,t,n,r){const o=await(async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),o=n.get(e);o?o.push(r):n.set(e,[r])}return n})(e,t),s=[...o.keys()].sort(r||void 0);if(n)for(let e=0;e<s.length;e++)yield o.get(s[e]);else for(let e=s.length-1;e>=0;e--)yield o.get(s[e])}async function*cp(e,t,n,r){const o=((e,t)=>{const n=new Map;for(const r of e){const e=t(r),o=n.get(e);o?o.push(r):n.set(e,[r])}return n})(e,t),s=[...o.keys()].sort(r||void 0);if(n)for(let e=0;e<s.length;e++)yield o.get(s[e]);else for(let e=s.length-1;e>=0;e--)yield o.get(s[e])}class up extends li{orderedPairs;constructor(e){super({generator:async()=>{const t=e(),n=[];for await(const e of t)n.push(...e);return n},type:0}),this.orderedPairs=e}static generateAsync(e,t,n,r){let o;return o=e instanceof up?async function*(){for await(const o of e.orderedPairs())yield*ap(o,t,n,r)}:()=>async function*(e,t,n,r){const o=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=await t(r),o=n.get(e);o?o.push(r):n.set(e,[r])}return n})(e,t),s=[...o.keys()].sort(r||void 0);if(n)for(let e=0;e<s.length;e++)yield o.get(s[e]);else for(let e=s.length-1;e>=0;e--)yield o.get(s[e])}(e,t,n,r),new up(o)}static generate(e,t,n,r){let o;return o=e instanceof up?async function*(){for await(const o of e.orderedPairs())yield*cp(o,t,n,r)}:()=>async function*(e,t,n,r){const o=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=t(r),o=n.get(e);o?o.push(r):n.set(e,[r])}return n})(e,t),s=[...o.keys()].sort(r||void 0);if(n)for(let e=0;e<s.length;e++)yield o.get(s[e]);else for(let e=s.length-1;e>=0;e--)yield o.get(s[e])}(e,t,n,r),new up(o)}thenBy(e,t){return up.generate(this,e,!0,t)}thenByAsync(e,t){return up.generateAsync(this,e,!0,t)}thenByDescending(e,t){return up.generate(this,e,!1,t)}thenByDescendingAsync(e,t){return up.generateAsync(this,e,!1,t)}}const lp=(e,t)=>up.generate(e,(e=>e),!0,t),dp=(e,t,n)=>up.generate(e,t,!0,n),hp=(e,t,n)=>up.generateAsync(e,t,!0,n),pp=(e,t,n)=>up.generate(e,t,!1,n),gp=(e,t,n)=>up.generateAsync(e,t,!1,n),fp=(e,t)=>up.generate(e,(e=>e),!1,t),vp=async(e,t)=>{const n=Hd(e,(e=>[t(e),e])),r=await th(n),o=[],s=[];for(const[e,t]of r)e?s.push(t):o.push(t);return[s,o]},mp=async(e,t)=>{const n=jd(e,(async e=>[await t(e),e])),r=await th(n),o=[],s=[];for(const[e,t]of r)e?s.push(t):o.push(t);return[s,o]},yp=(e,t)=>{const n=e.dataFunc;switch(n.type){case 1:return new li({generator:()=>{const e=n.generator();return e.unshift(Promise.resolve(t)),e},type:n.type});case 2:return new li({generator:async()=>{const e=await n.generator();return e.unshift(Promise.resolve(t)),e},type:n.type});case 0:return new li({generator:async()=>{const e=await n.generator();return e.unshift(t),e},type:n.type})}},wp=e=>{const t=e.dataFunc;switch(t.type){case 1:return new li({generator:()=>t.generator().reverse(),type:t.type});case 2:case 0:return new li({generator:async()=>(await t.generator()).reverse(),type:t.type})}},Sp=(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:return{generator:()=>n.generator().then((e=>{const n=new Array(e.length);for(let r=0;r<e.length;r++)n[r]=t(e[r],r);return n})),type:0};case 1:return{generator:()=>{const e=n.generator(),r=new Array(e.length);for(let n=0;n<e.length;n++)r[n]=e[n].then((e=>t(e,n)));return r},type:1};case 2:return{generator:async()=>{const e=await n.generator(),r=new Array(e.length);for(let n=0;n<e.length;n++)r[n]=e[n].then((e=>t(e,n)));return r},type:2}}},Ap=(e,t)=>"function"==typeof t?1===t.length?new li(Hd(e,t)):new li(Sp(e,t)):new li(Hd(e,(e=>e[t]))),_p=(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:return{generator:async()=>{const e=await n.generator(),r=new Array(e.length);for(let n=0;n<e.length;n++)r[n]=t(e[n],n);return r},type:2};case 1:return{generator:()=>n.generator().map(((e,n)=>e.then((e=>t(e,n))))),type:1};case 2:return{generator:async()=>(await n.generator()).map(((e,n)=>e.then((e=>t(e,n))))),type:2}}},Cp=(e,t)=>{let n;return n="function"==typeof t?1===t.length?jd(e,t):_p(e,t):jd(e,(e=>e[t])),new li(n)},Dp=(e,t)=>new li({generator:async()=>{let n;n="function"==typeof t?1===t.length?Hd(e,t):Sp(e,t):Hd(e,(e=>e[t]));const r=[];switch(n.type){case 0:for(const e of await n.generator())for(const t of e)r.push(t);break;case 1:for(const e of n.generator())for(const t of await e)r.push(t);break;case 2:for(const e of await n.generator())for(const t of await e)r.push(t)}return r},type:0}),Tp=(e,t)=>new li({generator:async()=>{let n;n=1===t.length?jd(e,t):_p(e,t);const r=[];switch(n.type){case 1:for(const e of n.generator())for(const t of await e)r.push(t);break;case 2:for(const e of await n.generator())for(const t of await e)r.push(t)}return r},type:0}),kp=async(e,t,n=ci)=>{const r=await e.toArray(),o=await t.toArray();if(r.length!==o.length)return!1;for(let e=0;e<r.length;e++)if(!1===n(r[e],o[e]))return!1;return!0},Ep=async(e,t,n)=>{const r=await e.toArray(),o=await t.toArray();if(r.length!==o.length)return!1;for(let e=0;e<r.length;e++){const t=r[e],s=o[e];if(!1===await n(t,s))return!1}return!0},Gp=(e,t)=>t?bp(e,t):Np(e),Np=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(e.length>1)throw new ai(ii.MoreThanOneElement);if(0===e.length)throw new ai(ii.NoElements);return e[0]}case 1:{const e=t.generator();if(e.length>1)throw new ai(ii.MoreThanOneElement);if(0===e.length)throw new ai(ii.NoElements);return e[0]}case 2:{const e=await t.generator();if(e.length>1)throw new ai(ii.MoreThanOneElement);if(0===e.length)throw new ai(ii.NoElements);return await e[0]}}},bp=async(e,t)=>{const n=await Ah(e);let r=!1,o=null;for(const e of n)if(t(e)){if(!0===r)throw new ai(ii.MoreThanOneMatchingElement);r=!0,o=e}if(!1===r)throw new ai(ii.NoMatch);return o},Ip=async(e,t)=>{const n=await Ah(e);let r=!1,o=null;for(const e of n)if(!0===await t(e)){if(!0===r)throw new ai(ii.MoreThanOneMatchingElement);r=!0,o=e}if(!1===r)throw new ai(ii.NoMatch);return o},Rp=(e,t)=>t?Op(e,t):Pp(e),Pp=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(e.length>1)throw new ai(ii.MoreThanOneElement);return 0===e.length?null:e[0]}case 1:{const e=t.generator();if(e.length>1)throw new ai(ii.MoreThanOneElement);return 0===e.length?null:e[0]}case 2:{const e=await t.generator();if(e.length>1)throw new ai(ii.MoreThanOneElement);return 0===e.length?null:await e[0]}}},Op=async(e,t)=>{const n=await Ah(e);let r=!1,o=null;for(const e of n)if(t(e)){if(!0===r)throw new ai(ii.MoreThanOneElement);r=!0,o=e}return o},Up=async(e,t)=>{const n=await Ah(e);let r=!1,o=null;for(const e of n)if(!0===await t(e)){if(!0===r)throw new ai(ii.MoreThanOneElement);r=!0,o=e}return o},Mp=(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:return new li({generator:async()=>(await n.generator()).slice(t),type:0});case 1:return new li({generator:()=>n.generator().slice(t),type:1});case 2:return new li({generator:async()=>(await n.generator()).slice(t),type:2})}},xp=(e,t)=>new li({generator:async()=>{const n=await e.toArray();let r=0;for(;r<n.length;r++){const e=n[r];if(!1===t(e,r))break}const o=[];for(;r<n.length;r++)o.push(n[r]);return o},type:0}),Fp=(e,t)=>new li({generator:async()=>{const n=await e.toArray();let r=0;for(;r<n.length;r++){const e=n[r];if(!1===await t(e,r))break}const o=[];for(;r<n.length;r++)o.push(n[r]);return o},type:0}),Lp=(e,t)=>t?Wp(e,t):Bp(e),Bp=async e=>{let t=0;for(const n of await e.toArray())t+=n;return t},Wp=async(e,t)=>{let n=0;for(const r of await e.toArray())n+=t(r);return n},$p=async(e,t)=>{const n=jd(e,t),r=await th(n);let o=0;for(const e of r)o+=e;return o},qp=(e,t)=>{const n=t>0?t:0,r=e.dataFunc;switch(r.type){case 1:return new li({generator:()=>r.generator().splice(0,n),type:1});case 2:return new li({generator:()=>r.generator().then((e=>e.splice(0,n))),type:2});default:return new li({generator:()=>r.generator().then((e=>e.splice(0,n))),type:0})}},Vp=(e,t)=>new li({generator:async()=>{const n=await e.toArray(),r=new Array;if(1===t.length)for(const e of n){if(!0!==t(e))break;r.push(e)}else for(let e=0;e<n.length;e++){const o=n[e];if(!0!==t(o,e))break;r.push(o)}return r},type:0}),Hp=(e,t)=>new li({generator:async()=>{const n=await e.toArray(),r=new Array;if(1===t.length){const e=t;for(const t of n){if(!0!==await e(t))break;r.push(t)}}else for(let e=0;e<n.length;e++){const o=n[e];if(!0!==await t(o,e))break;r.push(o)}return r},type:0}),Kp=async(e,t)=>{const n=new Map,r=Hd(e,(e=>[t(e),e])),o=await th(r);for(const[e,t]of o){const r=n.get(e);void 0===r?n.set(e,[t]):r.push(t)}return n},jp=async(e,t)=>{const n=new Map,r=jd(e,(async e=>[await t(e),e])),o=await th(r);for(const[e,t]of o){const r=n.get(e);void 0===r?n.set(e,[t]):r.push(t)}return n},zp=async(e,t)=>{const n=e.dataFunc,r=await th(n),o={};for(const e of r)o[t(e)]=e;return o},Jp=async(e,t)=>{const n=jd(e,(async e=>[await t(e),e])),r=await th(n),o={};for(const[e,t]of r)o[e]=t;return o},Xp=async e=>{const t=e.dataFunc,n=await th(t);return new Set(n)},Yp=(e,t,n)=>n?Zp(e,t,n):Qp(e,t),Qp=(e,t)=>new li({generator:async()=>{const n=new Set,r=t.toArray();for await(const t of e)!1===n.has(t)&&n.add(t);const o=await r;for(const e of o)!1===n.has(e)&&n.add(e);return[...n.keys()]},type:0}),Zp=(e,t,n)=>new li({generator:async()=>{const r=[],o=await Promise.all([e.toArray(),t.toArray()]);for(const e of o)for(const t of e){let e=!1;for(const o of r)if(!0===n(t,o)){e=!0;break}!1===e&&r.push(t)}return r},type:0}),eg=(e,t,n)=>new li({generator:async()=>{const r=[],o=await Promise.all([e.toArray(),t.toArray()]);for(const e of o)for(const t of e){let e=!1;for(const o of r)if(!0===await n(t,o)){e=!0;break}!1===e&&r.push(t)}return r},type:0}),tg=(e,t)=>new li({generator:async()=>(await e.toArray()).filter(t),type:0}),ng=(e,t)=>new li({generator:async()=>{const n=_p(e,(async(e,n)=>[await t(e,n),e])),r=await th(n),o=[];for(const[e,t]of r)e&&o.push(t);return o},type:0}),rg=(e,t,n)=>n?sg(e,t,n):og(e,t),og=(e,t)=>new li({generator:async()=>{const[n,r]=await Promise.all([e.toArray(),t.toArray()]),o=n.length<r.length?n.length:r.length,s=new Array(o);for(let e=0;e<o;e++){const t=n[e],o=r[e];s[e]=[t,o]}return s},type:0}),sg=(e,t,n)=>new li({generator:async()=>{const[r,o]=await Promise.all([e.toArray(),t.toArray()]),s=r.length<o.length?r.length:o.length,i=new Array(s);for(let e=0;e<s;e++){const t=r[e],s=o[e];i[e]=n(t,s)}return i},type:0}),ig=(e,t,n)=>new li({generator:async()=>{const[r,o]=await Promise.all([e.toArray(),t.toArray()]),s=r.length<o.length?r.length:o.length,i=new Array(s);for(let e=0;e<s;e++){const t=r[e],s=o[e];i[e]=n(t,s)}return Promise.all(i)},type:0}),ag=e=>{const t=hi.prototype,n=e.prototype,r=Object.getOwnPropertyNames(t);for(const e of r)n[e]=n[e]??t[e]};ou(di),(e=>{const t=e.prototype,n=(e,n)=>{const r=function(...t){return e(this,...t)};Object.defineProperty(r,"length",{value:e.length-1}),t[n]=r};n(su,"aggregate"),n(uu,"all"),n(lu,"allAsync"),n(du,"append"),n(hu,"any"),n(fu,"anyAsync"),n(vu,"asParallel"),n(mu,"average"),n(yu,"averageAsync"),n(wu,"chunk"),n(Su,"concatenate"),n(Au,"contains"),n(_u,"containsAsync"),n(Cu,"count"),n(ku,"countAsync"),n(Eu,"defaultIfEmpty"),n(Gu,"distinct"),n(Nu,"distinctAsync"),n(bu,"each"),n(Iu,"eachAsync"),n(Ru,"elementAt"),n(Pu,"elementAtOrDefault"),n(Ou,"except"),n(Uu,"exceptAsync"),n(Mu,"first"),n(Lu,"firstAsync"),n(Bu,"firstOrDefault"),n(qu,"firstOrDefaultAsync"),n(Vu,"groupBy"),n(ju,"groupByAsync"),n(Xu,"groupByWithSel"),n(Zu,"groupJoin"),n(nl,"groupJoinAsync"),n(sl,"intersect"),n(il,"intersectAsync"),n(al,"joinByKey"),n(cl,"last"),n(dl,"lastAsync"),n(hl,"lastOrDefault"),n(fl,"lastOrDefaultAsync"),n(vl,"max"),n(wl,"maxAsync"),n(Sl,"min"),n(Cl,"minAsync"),n(Dl,"ofType"),n(Tl,"order"),n(kl,"orderBy"),n(El,"orderByAsync"),n(Gl,"orderByDescending"),n(Nl,"orderByDescendingAsync"),n(bl,"orderDescending"),n(Il,"partition"),n(Rl,"partitionAsync"),n(Pl,"prepend"),n(Ol,"reverse"),n(Ul,"select"),n(Ll,"selectAsync"),n($l,"selectMany"),n(Kl,"selectManyAsync"),n(jl,"sequenceEquals"),n(zl,"sequenceEqualsAsync"),n(Jl,"single"),n(Ql,"singleAsync"),n(Zl,"singleOrDefault"),n(nd,"singleOrDefaultAsync"),n(rd,"skip"),n(od,"skipWhile"),n(ad,"skipWhileAsync"),n(ld,"sum"),n(pd,"sumAsync"),n(gd,"take"),n(fd,"takeWhile"),n(yd,"takeWhileAsync"),n(Ad,"toArray"),n(_d,"toMap"),n(Cd,"toMapAsync"),n(Dd,"toObject"),n(Td,"toObjectAsync"),n(kd,"toSet"),n(Ed,"union"),n(bd,"unionAsync"),n(Id,"where"),n(Od,"whereAsync"),n(xd,"zip"),n(Bd,"zipAsync")})(ui),(e=>{const t=e.prototype,n=(e,n)=>{const r=function(...t){return e(this,...t)};Object.defineProperty(r,"length",{value:e.length-1}),t[n]=r};n(Wd,"aggregate"),n(Kd,"all"),n(zd,"allAsync"),n(Jd,"append"),n(Xd,"any"),n(Zd,"anyAsync"),n(eh,"asAsync"),n(nh,"average"),n(rh,"averageAsync"),n(oh,"chunk"),n(sh,"concatenate"),n(ih,"contains"),n(ah,"containsAsync"),n(ch,"count"),n(dh,"countAsync"),n(hh,"defaultIfEmpty"),n(ph,"distinct"),n(gh,"distinctAsync"),n(fh,"each"),n(vh,"eachAsync"),n(mh,"elementAt"),n(yh,"elementAtOrDefault"),n(wh,"except"),n(Sh,"exceptAsync"),n(_h,"first"),n(Th,"firstAsync"),n(kh,"firstOrDefault"),n(Nh,"firstOrDefaultAsync"),n(bh,"groupBy"),n(Ph,"groupByAsync"),n(Mh,"groupByWithSel"),n(Lh,"groupJoin"),n($h,"groupJoinAsync"),n(Lh,"groupJoin"),n($h,"groupJoinAsync"),n(Hh,"intersect"),n(Kh,"intersectAsync"),n(jh,"joinByKey"),n(zh,"last"),n(Yh,"lastAsync"),n(Qh,"lastOrDefault"),n(tp,"lastOrDefaultAsync"),n(np,"max"),n(rp,"maxAsync"),n(op,"min"),n(sp,"minAsync"),n(ip,"ofType"),n(lp,"order"),n(dp,"orderBy"),n(hp,"orderByAsync"),n(pp,"orderByDescending"),n(gp,"orderByDescendingAsync"),n(fp,"orderDescending"),n(vp,"partition"),n(mp,"partitionAsync"),n(yp,"prepend"),n(wp,"reverse"),n(Ap,"select"),n(Cp,"selectAsync"),n(Dp,"selectMany"),n(Tp,"selectManyAsync"),n(kp,"sequenceEquals"),n(Ep,"sequenceEqualsAsync"),n(Gp,"single"),n(Ip,"singleAsync"),n(Rp,"singleOrDefault"),n(Up,"singleOrDefaultAsync"),n(Mp,"skip"),n(xp,"skipWhile"),n(Fp,"skipWhileAsync"),n(Lp,"sum"),n($p,"sumAsync"),n(qp,"take"),n(Vp,"takeWhile"),n(Hp,"takeWhileAsync"),n(Ah,"toArray"),n(Kp,"toMap"),n(jp,"toMapAsync"),n(zp,"toObject"),n(Jp,"toObjectAsync"),n(Xp,"toSet"),n(Yp,"union"),n(eg,"unionAsync"),n(tg,"where"),n(ng,"whereAsync"),n(rg,"zip"),n(ig,"zipAsync")})(li),(()=>{const{prototype:e}=hi,t=Object.getOwnPropertyNames(di.prototype);for(const n of t)e[n]=e[n]??di.prototype[n];e.all=function(e){return this.every(e)},e.any=function(e){return e?this.some(e):0!==this.length},e.count=function(e){if(e){let t=0;for(let n=0;n<this.length;n++)!0===e(this[n])&&t++;return t}return this.length},e.elementAt=function(e){if(e<0||e>=this.length)throw new si("index");return this[e]},e.elementAtOrDefault=function(e){return this[e]??null},e.first=function(e){if(e){const t=this.find(e);if(void 0===t)throw new ai(ii.NoMatch);return t}if(0===this.length)throw new ai(ii.NoElements);return this[0]},e.firstOrDefault=function(e){if(e){const t=this.find(e);return void 0===t?null:t}return 0===this.length?null:this[0]},e.last=function(e){if(e){for(let t=this.length-1;t>=0;t--){const n=this[t];if(!0===e(n))return n}throw new ai(ii.NoMatch)}if(0===this.length)throw new ai(ii.NoElements);return this[this.length-1]},e.lastOrDefault=function(e){if(e){for(let t=this.length-1;t>=0;t--){const n=this[t];if(!0===e(n))return n}return null}return 0===this.length?null:this[this.length-1]},e.max=function(e){if(0===this.length)throw new ai(ii.NoElements);if(e){let t=Number.NEGATIVE_INFINITY;for(let n=0;n<this.length;n++)t=Math.max(e(this[n]),t);return t}return Math.max.apply(null,this)},e.min=function(e){if(0===this.length)throw new ai(ii.NoElements);if(e){let t=Number.POSITIVE_INFINITY;for(let n=0;n<this.length;n++)t=Math.min(e(this[n]),t);return t}return Math.min.apply(null,this)},e.reverse=function(){return Array.prototype.reverse.apply(this),this}})();var cg,ug;!function(e){e.Success="Success",e.GroupDoesNotExists="GroupDoesNotExists",e.ObjectDoesNotExists="ObjectDoesNotExists",e.FatalError="FatalError",e.FunctionNotSupported="FunctionNotSupported"}(cg||(cg={})),function(e){e.Success="Success",e.NoPermissions="NoPermissions",e.NameToShort="NameToShort",e.NameAlreadyExists="NameAlreadyExists",e.OtherError="OtherError",e.UnknownError="UnknownError"}(ug||(ug={}));class lg{constructor(){this._guid="",this._name="",this._iconName="",this._position=0,this._objectsOrder={},null==lg._devicesService&&(lg._devicesService=$v.Get(Bs.ServiceName))}GetDevicesChannelsInGroupAsync(){return e=this,t=arguments,o=function*(e=!1){let t=[],n=[];const o=yield lg._devicesService.GetDevicesAsync(e);if(void 0===this._objectsOrder||null===this._objectsOrder||0==Object.entries(this._objectsOrder).length){$v.Get(r.ServiceName).Error("Old controller API fallback to old groups API.");for(let e of o)for(let t of e.Channels.where((e=>e.ChannelGroups.any((e=>e===this._guid)))))n.push(t);return n}const s=Object.keys(this._objectsOrder).map(Number).sort(((e,t)=>e-t));Object.values(this._objectsOrder).forEach((e=>{const n=o.select((t=>t.Channels.where((t=>t.ChannelId===e))));if(null!==n)for(let e of n)for(let n of e)t.push(n)}));for(let e of s){const r=t.firstOrDefault((t=>t.ChannelId===this._objectsOrder[e]));null!==r&&n.push(r)}return n},new((n=void 0)||(n=Promise))((function(r,s){function i(e){try{c(o.next(e))}catch(e){s(e)}}function a(e){try{c(o.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((o=o.apply(e,t||[])).next())}));var e,t,n,o}get Guid(){return this._guid}set Guid(e){this._guid=e}get Name(){return this._name}set Name(e){this._name=e}get IconName(){return this._iconName}set IconName(e){this._iconName=e}get OrderPosition(){return this._position}set OrderPosition(e){this._position=e}get ObjectsOrder(){return this._objectsOrder}set ObjectsOrder(e){this._objectsOrder=e}ChangeNameAsync(e){return $v.Get(pg.ServiceName).ChangeGroupNameAsync(this,e)}ChangeIconNameAsync(e){return $v.Get(pg.ServiceName).ChangeGroupIconNameAsync(this,e)}}var dg,hg=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class pg{constructor(){this._connection=null,this._synchronized=!1,this._synchronizationTaskCompletionSource=null,this._groups=[],this._objectsGroupingSupported=!1,this._connection=$v.Get(Ut.ServiceName),this._synchronizationTaskCompletionSource=new Promise((e=>{$v.Get(Je.ServiceName).OnUserLoggedInEvent().Subscribe((t=>hg(this,void 0,void 0,(function*(){yield this.GetGroupsAsync(!0),e(),this._synchronized=!0}))))}))}SetObjectsInGroupAndOrderAsync(e,t){return hg(this,void 0,void 0,(function*(){var n,r;let s=[],i=[];for(let e of t)if(this.IsDevice(e)){for(let t of e.Channels)s.push(`${t.ChannelId}`);i.push(`${e.Guid}`)}else{if(!this.IsDeviceChannel(e))throw new Error("Passed object is not a device or device channel!");s.push(`${e.ChannelId}`),i.push(`${e.ChannelId}`)}const a=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new vg(e,i),15e3,!1);switch(null===(r=o.Log)||void 0===r||r.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! SetObjectsInGroupAndOrderAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),yield this.GetGroupsAsync(!1),null==a?void 0:a.Status){case ce.OK:return new Ee(cg.Success,"");case ce.NotSupportedMethod:case ce.ResourceDoesNotExists:case ce.ResourceIsNotAvailable:return new Ee(cg.FunctionNotSupported,"");case ce.WrongData:return"GroupDoesNotExists"===a.Data?new Ee(cg.GroupDoesNotExists,a.Data):new Ee(cg.FatalError,a.Data);case ce.Error:case ce.FatalError:default:return new Ee(cg.FatalError,"")}}))}IsDevice(e){return void 0!==e.Channels}IsDeviceChannel(e){return void 0!==e.GetDevice}LogGroupsOrder(e){const t=$v.Get(r.ServiceName);e.forEach(((e,n)=>{t.Debug(pg.ServiceName,`Group ${e.Name} order position [on array]: ${n} set position: ${e.OrderPosition}`)}))}LogObjectsInGroupOrder(e,t){const n=$v.Get(r.ServiceName);n.Debug(pg.ServiceName,`Group ${e.Name} objects order:`),t.forEach(((e,t)=>{n.Debug(pg.ServiceName,`Channel ${e.Name} order position [on array]: ${t} channelId: ${e.ChannelId}`)}));for(const[t,r]of Object.entries(e.ObjectsOrder))n.Debug(`new order [GROUP ${e.Name}] Order: [${t}] = ${r}`)}ChangeGroupsOrderAsync(e){return hg(this,void 0,void 0,(function*(){var t,n;const s=e.select((e=>e.Guid)).toArray(),i=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new fg(s),15e3,!1);return null===(n=o.Log)||void 0===n||n.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! ChangeGroupsOrderAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),(null==i?void 0:i.Status)===ce.OK?($v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),ce.OK):($v.Get(r.ServiceName).Error(pg.ServiceName,`Failed to change groups order, controller responded with error ${null==i?void 0:i.Status} data: ${null==i?void 0:i.Data}`),this.LogGroupsOrder(e),null==i?void 0:i.Status)}))}ChangeObjectsPositionsInGroupAsync(e,t){return hg(this,void 0,void 0,(function*(){var n,r,s;const i=t.select((e=>e.ChannelId)).toArray(),a=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new Sg(e.Guid,i),15e3,!1);return null===(r=o.Log)||void 0===r||r.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! ChangeObjectsPositionsInGroupAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),(null==a?void 0:a.Status)===ce.OK?($v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Bs.ServiceName).GetDevicesAsync(),ce.OK):(null===(s=o.Log)||void 0===s||s.Error(pg.ServiceName,`Failed to change objects positions in group, controller responded with error ${null==a?void 0:a.Status} data: ${null==a?void 0:a.Data}`),this.LogObjectsInGroupOrder(e,t),null==a?void 0:a.Status)}))}IsGroupsAndObjectsOrderingAvailable(){return this._objectsGroupingSupported}MoveGroupPositionAsync(e,t){return hg(this,void 0,void 0,(function*(){var n,r,s;const i=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new gg(e.Guid,t),15e3,!1);return null===(r=o.Log)||void 0===r||r.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! MoveGroupPositionAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),(null==i?void 0:i.Status)===ce.OK?($v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),ce.OK):(null===(s=o.Log)||void 0===s||s.Error(pg.ServiceName,`Failed to move group position, controller responded with error ${null==i?void 0:i.Status} data: ${null==i?void 0:i.Data}`),null==i?void 0:i.Status)}))}MoveObjectInGroupPositionAsync(e,t,n){return hg(this,void 0,void 0,(function*(){var r,s,i;const a=`${t.GetDevice().Guid}_${t.Number}`,c=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(new wg(e.Guid,a,n),15e3,!1);return null===(s=o.Log)||void 0===s||s.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! MoveObjectInGroupPositionAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),(null==c?void 0:c.Status)===ce.OK?($v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Bs.ServiceName).GetDevicesAsync(),ce.OK):(null===(i=o.Log)||void 0===i||i.Error(pg.ServiceName,`Failed to move object in group position, controller responded with error ${null==c?void 0:c.Status} data: ${null==c?void 0:c.Data}`),null==c?void 0:c.Status)}))}AddDeviceChannelToGroupByGuidAsync(e,t){return hg(this,void 0,void 0,(function*(){var n,r,s,i;const a=new kg;if(a.Data.Channel=e.Number,null==e.GetDevice())throw new Error("Device is not set on this channel!");a.Data.DeviceGuid=null===(n=e.GetDevice())||void 0===n?void 0:n.Guid,a.Data.GroupGuid=t;const c=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(a,15e3,!1);return null===(s=o.Log)||void 0===s||s.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! AddDeviceChannelToGroupByGuidAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null!=c&&null!=c.Status?(c.Status==ce.OK?e.ChannelGroups.push(t):null===(i=o.Log)||void 0===i||i.Error(pg.ServiceName,`Failed to add device channel ${e.Name} to group ${t}, controller responded with error ${c.Status} data: ${c.Data}`),$v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Bs.ServiceName).GetDevicesAsync(),c.Status):(yield this.GetGroupsAsync(),ce.Error)}))}RemoveDeviceChannelFromGroupByGuidAsync(e,t){return hg(this,void 0,void 0,(function*(){var n,r,s,i;const a=new Eg;if(null==e.GetDevice())throw new Error("Device is not set on this channel!");a.Data.DeviceGuid=null===(n=e.GetDevice())||void 0===n?void 0:n.Guid,a.Data.Channel=e.Number,a.Data.GroupGuid=t;const c=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(a,15e3,!1);return null===(s=o.Log)||void 0===s||s.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! RemoveDeviceChannelFromGroupByGuidAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null!=c&&null!=c.Status?(c.Status==ce.OK?e.ChannelGroups=e.ChannelGroups.where((e=>e!=t)).toArray():null===(i=o.Log)||void 0===i||i.Error(pg.ServiceName,`Failed to remove device channel ${e.Name} from group ${t}, controller responded with error ${c.Status} data: ${c.Data}`),$v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Bs.ServiceName).GetDevicesAsync(),c.Status):(yield this.GetGroupsAsync(),ce.Error)}))}UpsertGroupWithDevicesChannelsAsync(e,t){return hg(this,void 0,void 0,(function*(){var n,r,s,i;if(this._groups.all((t=>t.Guid!=e.Guid))){let t=yield this.AddNewGroupWithIconAsync(e.Name,e.IconName);if(!(t instanceof lg))return t instanceof Ee?t:new Ee(ug.UnknownError,"");e=t}for(let r of t.where((t=>t.ChannelGroups.all((t=>t!==e.Guid))))){let t=yield this.AddDeviceChannelToGroupAsync(r,e);if($v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Bs.ServiceName).GetDevicesAsync(),t!==ce.OK)return null===(n=o.Log)||void 0===n||n.Error(pg.ServiceName,`Failed to add device channel ${r.Name} to group ${e.Name}, controller responded with error ${t}`),new Ee(ug.UnknownError,`Failed to add device channel ${r.Name} to group ${e.Name}, controller responded with error ${t}`)}let a=yield $v.Get(Bs.ServiceName).GetDevicesAsync();for(let n of a)for(let i of n.Channels.except(t,((e,t)=>e.GetDevice().Guid==t.GetDevice().Guid&&e.Number==t.Number)))for(var c of i.ChannelGroups.where((t=>e.Guid==t))){let t=yield this.RemoveDeviceChannelFromGroupAsync(i,e);if($v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(),t!==ce.OK)return null===(r=o.Log)||void 0===r||r.Error(pg.ServiceName,`Failed to remove device channel ${i.Name} from group ${e.Name}, controller responded with error ${t}`),null===(s=o.Log)||void 0===s||s.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! UpsertGroupWithDevicesChannelsAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),new Ee(ug.UnknownError,`Failed to remove device channel ${i.Name} from group ${e.Name}, controller responded with error ${t}`)}return null===(i=o.Log)||void 0===i||i.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! UpsertGroupWithDevicesChannelsAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),e}))}UpdateGroupWithDevicesChannelsAsync(e,t){return hg(this,void 0,void 0,(function*(){var n,r,s,i,a;for(let s of t.where((t=>t.ChannelGroups.all((t=>t!==e))))){let t=yield this.AddDeviceChannelToGroupByGuidAsync(s,e);if($v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(),t!==ce.OK)return null===(n=o.Log)||void 0===n||n.Error(pg.ServiceName,`Failed to add device channel ${s.Name} to group ${e}, controller responded with error ${t}`),null===(r=o.Log)||void 0===r||r.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! UpdateGroupWithDevicesChannelsAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),ce.FatalError}let c=yield $v.Get(Bs.ServiceName).GetDevicesAsync();for(let n of c)for(let r of n.Channels.except(t,((e,t)=>e.GetDevice().Guid==t.GetDevice().Guid&&e.Number==t.Number)))for(var u of r.ChannelGroups.where((t=>e==t))){let t=yield this.RemoveDeviceChannelFromGroupByGuidAsync(r,e);if($v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Bs.ServiceName).GetDevicesAsync(),t!==ce.OK)return null===(s=o.Log)||void 0===s||s.Error(pg.ServiceName,`Failed to remove device channel ${r.Name} from group ${e}, controller responded with error ${t}`),null===(i=o.Log)||void 0===i||i.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! UpdateGroupWithDevicesChannelsAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),ce.FatalError}return null===(a=o.Log)||void 0===a||a.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! UpdateGroupWithDevicesChannelsAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),ce.OK}))}ChangeGroupNameByGuidAsync(e,t){return hg(this,void 0,void 0,(function*(){var n,r,s;let i=new Tg,a=new Gg,c=this._groups.first((t=>t.Guid===e));a.Guid=e,a.Name=t,a.IconName=c.IconName,null===(n=i.Data)||void 0===n||n.push(a);const u=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(i,15e3,!1);if($v.Get(Le.ServiceName).ClearCache(),this._groups=yield this.GetGroupsAsync(),null===(s=o.Log)||void 0===s||s.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! ChangeGroupNameByGuidAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null!=u&&null!=u.Status)switch(u.Status){case ce.OK:return new Ee(ug.Success,"");case ce.WrongData:switch(u.Data){case"NameToShort":return new Ee(ug.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new Ee(ug.NameAlreadyExists,"Group with this name already exists");default:return new Ee(ug.OtherError,`Response error: ${u.Status} data: ${u.Data}`)}default:return new Ee(ug.OtherError,`Response error: ${u.Status} data: ${u.Data}`)}return new Ee(ug.UnknownError,"")}))}ChangeGroupNameAndIconAsync(e,t,n){return this.ChangeGroupNameAndIconByGuidAsync(e.Guid,t,n)}ChangeGroupNameAndIconByGuidAsync(e,t,n){return hg(this,void 0,void 0,(function*(){var r,s,i;let a=new Tg,c=new Gg,u=this._groups.first((t=>t.Guid===e));c.Guid=e,c.Name=t,c.IconName=n,c.ObjectsOrder=u.ObjectsOrder,null===(r=a.Data)||void 0===r||r.push(c);const l=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(a,15e3,!1);if($v.Get(Le.ServiceName).ClearCache(),this._groups=yield this.GetGroupsAsync(),null===(i=o.Log)||void 0===i||i.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! ChangeGroupNameAndIconByGuidAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null!=l&&null!=l.Status)switch(l.Status){case ce.OK:return new Ee(ug.Success,"");case ce.WrongData:switch(l.Data){case"NameToShort":return new Ee(ug.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new Ee(ug.NameAlreadyExists,"Group with this name already exists");default:return new Ee(ug.OtherError,`Response error: ${l.Status} data: ${l.Data}`)}default:return new Ee(ug.OtherError,`Response error: ${l.Status} data: ${l.Data}`)}return new Ee(ug.UnknownError,"")}))}ChangeGroupIconNameByGuidAsync(e,t){return hg(this,void 0,void 0,(function*(){var n,r,s;let i=new Tg,a=new Gg,c=this._groups.first((t=>t.Guid===e));a.Guid=e,a.Name=c.Name,a.IconName=t,null===(n=i.Data)||void 0===n||n.push(a);const u=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(i,15e3,!1);if($v.Get(Le.ServiceName).ClearCache(),this._groups=yield this.GetGroupsAsync(),null===(s=o.Log)||void 0===s||s.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! ChangeGroupIconNameByGuidAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null!=u&&null!=u.Status)switch(u.Status){case ce.OK:return new Ee(ug.Success,"");case ce.WrongData:switch(u.Data){case"NameToShort":return new Ee(ug.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new Ee(ug.NameAlreadyExists,"Group with this name already exists");default:return new Ee(ug.OtherError,`Response error: ${u.Status} data: ${u.Data}`)}default:return new Ee(ug.OtherError,`Response error: ${u.Status} data: ${u.Data}`)}return new Ee(ug.UnknownError,"")}))}GetServiceName(){return pg.ServiceName}WaitForSynchronizationAsync(){return this._synchronizationTaskCompletionSource}GetGroupByGuid(e){return this._groups.first((t=>t.Guid===e))}ChangeGroupNameAsync(e,t){return this.ChangeGroupNameByGuidAsync(e.Guid,t)}ChangeGroupIconNameAsync(e,t){return this.ChangeGroupNameByGuidAsync(e.Guid,t)}RemoveGroupAsync(e){return this.RemoveGroupByGuidAsync(e.Guid)}RemoveGroupByGuidAsync(e){return hg(this,void 0,void 0,(function*(){var t,n;let r=new Cg;r.Data=e;const s=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(r,15e3,!1);$v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Bs.ServiceName).GetDevicesAsync();for(let t of yield $v.Get(Bs.ServiceName).GetDevicesAsync())for(let n of t.Channels)n.ChannelGroups.any((t=>t===e))&&(n.ChannelGroups=n.ChannelGroups.except(e,((e,t)=>e===t)).toArray());return null===(n=o.Log)||void 0===n||n.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! RemoveGroupByGuidAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null!=s&&null!=s.Status?null==s?void 0:s.Status:ce.Error}))}GetGroupsAsync(){return hg(this,arguments,void 0,(function*(e=!1){var t,n;const o=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Dg,15e3,e);let s=[];if((null==o?void 0:o.Status)===ce.OK){let e=$v.Get(r.ServiceName),t=0,i=yield $v.Get(Bs.ServiceName).GetDevicesAsync();return null===(n=o.Data)||void 0===n||n.forEach((n=>{t++;let r=new lg;if(r.Guid=n.Guid,r.Name=n.Name,r.IconName=n.IconName,r.ObjectsOrder=n.ObjectsOrder,r.OrderPosition=n.OrderPosition,null==r.OrderPosition&&(r.OrderPosition=t),null==r.ObjectsOrder){this._objectsGroupingSupported=!1,r.ObjectsOrder={};let e=i.selectMany((e=>e.Channels.where((e=>e.ChannelGroups.any((e=>e==r.Guid)))))),t=0;for(let n of e)t++,r.ObjectsOrder[t]=n.ChannelId}else this._objectsGroupingSupported=!0;e.Info(pg.ServiceName,`Got group: ${r.Name} ${r.Guid} order: ${r.OrderPosition} objects order: ${JSON.stringify(r.ObjectsOrder)}`),s.push(r)})),this._groups=s,s}throw new Error(`Failed to get groups, API responded with status ${null==o?void 0:o.Status} data: ${null==o?void 0:o.Data}`)}))}AddDeviceChannelToGroupAsync(e,t){return this.AddDeviceChannelToGroupByGuidAsync(e,t.Guid)}RemoveDeviceChannelFromGroupAsync(e,t){return this.RemoveDeviceChannelFromGroupByGuidAsync(e,t.Guid)}AddNewGroupAsync(e){return hg(this,void 0,void 0,(function*(){var t,n,r,s;let i=new Tg,a=new Gg;a.Name=e,null===(t=i.Data)||void 0===t||t.push(a);const c=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(i,15e3,!1);if($v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Bs.ServiceName).GetDevicesAsync(),null===(r=o.Log)||void 0===r||r.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! AddNewGroupAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null!=c&&null!=c.Status)switch(c.Status){case ce.OK:return this._groups.first((t=>t.Name===e));case ce.WrongData:switch(null===(s=o.Log)||void 0===s||s.Error(pg.ServiceName,`Failed to add new group, controller responded with error ${c.Status} data: ${c.Data}`),c.Data){case"NameToShort":return new Ee(ug.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new Ee(ug.NameAlreadyExists,"Group with this name already exists");default:return new Ee(ug.OtherError,`Response error: ${c.Status} data: ${c.Data}`)}default:return new Ee(ug.OtherError,`Response error: ${c.Status} data: ${c.Data}`)}return new Ee(ug.UnknownError,"")}))}AddNewGroupWithIconAsync(e,t){return hg(this,void 0,void 0,(function*(){var n,r,s,i;let a=new Tg,c=new Gg;c.Name=e,c.IconName=t,null===(n=a.Data)||void 0===n||n.push(c);const u=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(a,15e3,!1);if($v.Get(Le.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Bs.ServiceName).GetDevicesAsync(),null===(s=o.Log)||void 0===s||s.Error(pg.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! AddNewGroupWithIconAsync()"),$v.Get(it.ServiceName).ExitConfigurationModeAsync(),null!=u&&null!=u.Status)switch(u.Status){case ce.OK:return this._groups.first((t=>t.Name===e));case ce.WrongData:switch(null===(i=o.Log)||void 0===i||i.Error(pg.ServiceName,`Failed to add new group, controller responded with error ${u.Status} data: ${u.Data}`),u.Data){case"NameToShort":return new Ee(ug.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new Ee(ug.NameAlreadyExists,"Group with this name already exists");default:return new Ee(ug.OtherError,`Response error: ${u.Status} data: ${u.Data}`)}default:return new Ee(ug.OtherError,`Response error: ${u.Status} data: ${u.Data}`)}return new Ee(ug.UnknownError,"")}))}}pg.ServiceName="ChannelsGroupsService";class gg extends ae{constructor(e,t){super(),this.Resource="/devices/groups/group/move",this.Method=ue.Post,this.Data=new yg,this.Data.GroupGuid=e,this.Data.NewPosition=t}}class fg extends ae{constructor(e){super(),this.Resource="/devices/groups/move",this.Method=ue.Post,this.Data=e}}class vg extends ae{constructor(e,t){super(),this.Resource="/devices/groups/group/objects/set",this.Method=ue.Post,this.Data=new mg,this.Data.GroupGuid=e.Guid,this.Data.ObjectsIds=t}}class mg{constructor(){this.GroupGuid="",this.ObjectsIds=[]}}class yg{constructor(){this.GroupGuid="",this.NewPosition=0}}class wg extends ae{constructor(e,t,n){super(),this.Resource="/devices/groups/group/object/move",this.Method=ue.Post,this.Data=new Ag,this.Data.GroupGuid=e,this.Data.NewPosition=n,this.Data.ObjectId=t}}class Sg extends ae{constructor(e,t){super(),this.Resource="/devices/groups/group/objects/move",this.Method=ue.Post,this.Data=new _g,this.Data.GroupGuid=e,this.Data.OrderedObjectsIds=t}}class Ag{constructor(){this.GroupGuid="",this.ObjectId="",this.NewPosition=0}}class _g{constructor(){this.GroupGuid="",this.OrderedObjectsIds=[]}}class Cg extends ae{constructor(){super(),this.Resource="/devices/groups/group",this.Method=ue.Delete}}class Dg extends ae{constructor(){super(),this.Resource="/devices/groups/",this.Method=ue.Get}}class Tg extends ae{constructor(){super(),this.Resource="/devices/groups/group",this.Method=ue.Put,this.Data=[]}}class kg extends ae{constructor(){super(),this.Resource="/devices/device/channel/groups/group/",this.Method=ue.Put,this.Data=new Ng}}class Eg extends ae{constructor(){super(),this.Resource="/devices/device/channel/groups/group/",this.Method=ue.Delete,this.Data=new Ng}}class Gg{constructor(){this.Id=0,this.Guid="",this.Name="",this.IconName="",this.OrderPosition=0,this.ObjectsOrder={}}}class Ng{constructor(){this.GroupGuid="",this.DeviceGuid="",this.Channel=0}}class bg{constructor(){this._promise=Promise.resolve(),this._disable=()=>{}}Lock(){this._promise=new Promise((e=>this._disable=e))}Unlock(){this._disable()}WaitForLockAsync(){return this._promise}}!function(e){e[e.Suspended=1]="Suspended",e[e.ReturnedFromSuspension=2]="ReturnedFromSuspension",e[e.EnteredLowPowerMode=3]="EnteredLowPowerMode",e[e.ExitedLowPowerMode=4]="ExitedLowPowerMode",e[e.LoggedIn=5]="LoggedIn",e[e.LoggedOut=6]="LoggedOut",e[e.Connected=7]="Connected",e[e.Disconnected=8]="Disconnected",e[e.FailedToConnect=9]="FailedToConnect",e[e.Connecting=10]="Connecting",e[e.Disconnecting=11]="Disconnecting",e[e.Reconnecting=12]="Reconnecting"}(dg||(dg={}));var Ig,Rg,Pg,Og,Ug,Mg,xg,Fg,Lg,Bg,Wg,$g=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class qg{constructor(){this._syncLock=new bg,this._isInFouces=!0,this._canHibernate=!0,this._session=null,this._connection=null,this._currentAppState=dg.Disconnected,this._returnedFromSuspension=!1,this._onReturnedFromSuspensionEvent=new Te,this._onSuspendedEvent=new Te,this._onEnterLowPowerModeEvent=new Te,this._onExitLowPowerModeEvent=new Te,this._onBackButtonPressedEvent=new Te,this._onForwardButtonPressedEvent=new Te,this._onAppStateChanged=new n,this.MonitorAppState(),this._onAppStateChanged.Subscribe((e=>this._currentAppState=e)),null==navigator.userAgent.match(/Safari/i)||navigator.mediaDevices?window.addEventListener("visibilitychange",(()=>$g(this,void 0,void 0,(function*(){yield this._syncLock.WaitForLockAsync(),this._syncLock.Lock(),this.IsHidden()?this.Suspend():this.ReturnFromSuspension(),this._syncLock.Unlock()})))):(window.addEventListener("onblur",(()=>{this._isInFouces&&(this._isInFouces=!1,this.Suspend())})),window.addEventListener("onfocus",(()=>{this._isInFouces||(this._isInFouces=!0,this.ReturnFromSuspension())}))),window.addEventListener("popstate",(e=>{var t,n,r,s;document.location,e.state&&("forward"==e.state.direction?(null===(t=o.Log)||void 0===t||t.Warning(qg.ServiceName,"Forward button pressed"),null===(n=this._onForwardButtonPressedEvent)||void 0===n||n.Invoke()):(null===(r=o.Log)||void 0===r||r.Warning(qg.ServiceName,"Back button pressed"),null===(s=this._onBackButtonPressedEvent)||void 0===s||s.Invoke()))}))}MonitorAppState(){return $g(this,void 0,void 0,(function*(){this._session=yield $v.GetAsync("SessionService"),this._connection=yield $v.GetAsync("ExalusConnectionService"),this._session.OnUserLoggedInEvent().Subscribe((e=>{var t;null===(t=o.Log)||void 0===t||t.Warning(qg.ServiceName,"App state changed to: logged in"),this._onAppStateChanged.Invoke(dg.LoggedIn)})),this._session.OnUserLoggedOutEvent().Subscribe((e=>{var t;null===(t=o.Log)||void 0===t||t.Warning(qg.ServiceName,"App state changed to: logged out"),this._onAppStateChanged.Invoke(dg.LoggedOut)})),this._connection.OnConnectionStateChangedEvent().Subscribe((e=>{var t,n,r,s,i,a;switch(e){case he.Connected:null===(t=o.Log)||void 0===t||t.Warning(qg.ServiceName,"App state changed to: connected"),this._onAppStateChanged.Invoke(dg.Connected);break;case he.Disconnected:null===(n=o.Log)||void 0===n||n.Warning(qg.ServiceName,"App state changed to: disconnected"),this._onAppStateChanged.Invoke(dg.Disconnected);break;case he.Connecting:null===(r=o.Log)||void 0===r||r.Warning(qg.ServiceName,"App state changed to: connecting"),this._onAppStateChanged.Invoke(dg.Connecting);break;case he.Disconnecting:null===(s=o.Log)||void 0===s||s.Warning(qg.ServiceName,"App state changed to: disconnecting"),this._onAppStateChanged.Invoke(dg.Disconnecting);break;case he.Reconnecting:null===(i=o.Log)||void 0===i||i.Warning(qg.ServiceName,"App state changed to: reconnecting"),this._onAppStateChanged.Invoke(dg.Reconnecting);break;case he.Failed:null===(a=o.Log)||void 0===a||a.Warning(qg.ServiceName,"App state changed to: failed"),this._onAppStateChanged.Invoke(dg.FailedToConnect)}}))}))}get CurrentAppState(){return this._currentAppState}OnAppStateChanged(){return this._onAppStateChanged}Suspend(){var e,t;this.IsHibernationAllowed()&&(this._returnedFromSuspension=!1,this._onSuspendedEvent.Invoke(),this._onAppStateChanged.Invoke(dg.Suspended),null===(e=o.Log)||void 0===e||e.Warning(qg.ServiceName,"App state changed to: suspended"),null===(t=o.Log)||void 0===t||t.Warning(qg.ServiceName,"App switched to background"))}ReturnFromSuspension(){var e,t;this.IsHibernationAllowed()&&(this._returnedFromSuspension=!0,this._onReturnedFromSuspensionEvent.Invoke(),this._onAppStateChanged.Invoke(dg.ReturnedFromSuspension),null===(e=o.Log)||void 0===e||e.Warning(qg.ServiceName,"App state changed to: returned from suspension"),null===(t=o.Log)||void 0===t||t.Warning(qg.ServiceName,"App switched to foreground"))}EnterLowPowerMode(){this._onEnterLowPowerModeEvent.Invoke(),this._onAppStateChanged.Invoke(dg.EnteredLowPowerMode)}ExitLowPowerMode(){this._onExitLowPowerModeEvent.Invoke(),this._onAppStateChanged.Invoke(dg.ExitedLowPowerMode)}IsWorkingInWebView(){return"file:"===window.location.protocol||null!=navigator.userAgent.match(/Safari/i)&&!navigator.mediaDevices}IsHidden(){return document.hidden}IsActive(){return!this.IsHidden()}IsInBackground(){return this.IsHidden()}ReturnedFromSuspension(){return this._returnedFromSuspension}IsHibernationAllowed(){return this._canHibernate}DisallowHibernation(){this._canHibernate=!1}AllowHibernation(){this._canHibernate=!0}OnReturnedFromSuspension(){return this._onReturnedFromSuspensionEvent}OnSuspended(){return this._onSuspendedEvent}OnEnterLowPowerMode(){return this._onEnterLowPowerModeEvent}OnExitLowPowerMode(){return this._onExitLowPowerModeEvent}OnBackButtonPressed(){return this._onBackButtonPressedEvent}OnForwardButtonPressed(){return this._onForwardButtonPressedEvent}GetServiceName(){return qg.ServiceName}}qg.ServiceName="AppStateService";class Vg{constructor(){this.DeviceGuid="",this.CurrentVersion="",this.NewVersion=""}}class Hg{constructor(){this.UpdatesAvailable=[],this.UpdatesNotAvailable=[]}}class Kg{constructor(){this.UpdatedResourceName=new Map,this.UpdateDescription=new Map,this.UpdateCreationTime=null,this.Version="",this.UpdateChannel=""}}class jg{constructor(){this.Resource="",this.Version="",this.Type=null}}!function(e){e[e.RadioUpdate=0]="RadioUpdate",e[e.SoftwareUpdate=1]="SoftwareUpdate"}(Ig||(Ig={})),function(e){e[e.DownloadingFailure=-5]="DownloadingFailure",e[e.InstallationStopped=-4]="InstallationStopped",e[e.InstallationError=-3]="InstallationError",e[e.IncompatiblePackage=-2]="IncompatiblePackage",e[e.Error=-1]="Error",e[e.OK=0]="OK",e[e.DownloadingPackage=1]="DownloadingPackage",e[e.CheckingPackage=2]="CheckingPackage",e[e.PreparingForUpgrade=3]="PreparingForUpgrade",e[e.Upgrading=4]="Upgrading",e[e.MovingData=5]="MovingData",e[e.Reloading=6]="Reloading",e[e.Upgraded=7]="Upgraded"}(Rg||(Rg={})),(Wg=Pg||(Pg={}))[Wg.WaitingForUser=1]="WaitingForUser",Wg[Wg.Downloading=2]="Downloading",Wg[Wg.Unpackaging=3]="Unpackaging",Wg[Wg.CheckingApplicability=4]="CheckingApplicability",Wg[Wg.MigratingData=5]="MigratingData",Wg[Wg.CreatingBackup=6]="CreatingBackup",Wg[Wg.Deploying=7]="Deploying",Wg[Wg.Installing=8]="Installing",Wg[Wg.Removing=9]="Removing",Wg[Wg.Error=10]="Error",Wg[Wg.ReadyToDownload=11]="ReadyToDownload",Wg[Wg.PreparingSystem=12]="PreparingSystem",Wg[Wg.CheckingPackageIntegrity=13]="CheckingPackageIntegrity",Wg[Wg.CheckingIntegrity=14]="CheckingIntegrity",Wg[Wg.UndoingInstallation=15]="UndoingInstallation",Wg[Wg.Installed=16]="Installed",(Bg=Og||(Og={}))[Bg.Ignore=0]="Ignore",Bg[Bg.Cancel=1]="Cancel",Bg[Bg.Install=2]="Install";class zg{constructor(){this.UpdatedResourceName=new Map,this.Percentage=0,this.PercentageTotal=0,this.Status=Rg.Error,this.UpdateNumber=1,this.AvailableUpdates=1}}class Jg{constructor(){this.UpdatedResourceName=new Map,this.Percentage=0,this.PercentageTotal=0,this.SpeedMbps=0,this.CurrentTask=xg.Unknown}}class Xg{constructor(){this.BulkUpdateStatus=Ug.Success,this.DevicesUpdateResults=new Map}}!function(e){e[e.Success=0]="Success",e[e.PartialSuccess=1]="PartialSuccess",e[e.UpdatesNotFound=2]="UpdatesNotFound",e[e.CannotUnpairRetransmitters=3]="CannotUnpairRetransmitters",e[e.CannotPairRetransmitters=4]="CannotPairRetransmitters"}(Ug||(Ug={})),function(e){e[e.Unknown=0]="Unknown",e[e.Updated=1]="Updated",e[e.InsufficientConnection=2]="InsufficientConnection",e[e.Error=3]="Error",e[e.UnknownError=4]="UnknownError",e[e.ControllerSoftwareTooOld=5]="ControllerSoftwareTooOld"}(Mg||(Mg={})),function(e){e[e.Unknown=0]="Unknown",e[e.DownloadingUpdate=1]="DownloadingUpdate",e[e.DownloadingInstaller=2]="DownloadingInstaller",e[e.CheckingUpdate=3]="CheckingUpdate"}(xg||(xg={})),function(e){e[e.DeviceIsUpToDate=0]="DeviceIsUpToDate",e[e.CannotFindDevice=1]="CannotFindDevice",e[e.UnsupportedApiVersion=2]="UnsupportedApiVersion",e[e.UnsupportedDevice=3]="UnsupportedDevice",e[e.CannotGetFirmwareVersion=4]="CannotGetFirmwareVersion",e[e.CannotGetUpdates=5]="CannotGetUpdates",e[e.CannotProcessUpdate=6]="CannotProcessUpdate",e[e.UpdateActionsNotSupported=7]="UpdateActionsNotSupported",e[e.UnsupportedExtensionVersion=8]="UnsupportedExtensionVersion",e[e.UpdatesPartiallyInstalled=9]="UpdatesPartiallyInstalled",e[e.RetransmitterFound=10]="RetransmitterFound",e[e.ProtocolRadioUnsupported=11]="ProtocolRadioUnsupported",e[e.FeatureUnsupportedInCurrentVersion=12]="FeatureUnsupportedInCurrentVersion",e[e.CannotGetUpdatesBranch=13]="CannotGetUpdatesBranch",e[e.CannotSetUpdatesBranch=14]="CannotSetUpdatesBranch",e[e.UpdateAlreadyDownloaded=15]="UpdateAlreadyDownloaded",e[e.UpdateDownloadFailed=16]="UpdateDownloadFailed",e[e.UpdateAlreadyInstalled=17]="UpdateAlreadyInstalled",e[e.CannotGetCurrentControllerVersionTimeout=18]="CannotGetCurrentControllerVersionTimeout",e[e.CannotGetCurrentControllerVersion=19]="CannotGetCurrentControllerVersion"}(Fg||(Fg={})),function(e){e.Public="public",e.Beta="beta",e.Development="dev"}(Lg||(Lg={}));var Yg,Qg,Zg,ef,tf,nf,rf,of,sf=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class af{constructor(){this._controllerUpdates=[],this._updateRequestTimeout=12e4,this._oldUpdateVersion=5,this._oldUpdateBuild=56,this._updateOfflineStageTime=9.3,this._updateProviders=$v.Get(Yo.ServiceName),this._logger=$v.Get(r.ServiceName),this._connection=$v.Get(Ut.ServiceName),this._appStateService=$v.Get(qg.ServiceName),this._extensionService=$v.Get(tt.ServiceName)}GetAutomaticControllerUpdateDownloadStatusAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this.getRuntimeInfoAsync();if(e instanceof Ee)return e;const t=parseInt(e.SoftwareVersion.toString().split(".")[0]),n=parseInt(e.SoftwareVersion.toString().split(".")[1]);if(t<this._oldUpdateVersion||t===this._oldUpdateVersion&&n<=this._oldUpdateBuild)return new Ee(Fg.FeatureUnsupportedInCurrentVersion,`Cannot get update branch, feature unsupported in current version. Current version: ${e}`);let r=yield this._connection.SendAndWaitForResponseAsync(new Af,1e4,!1);return!(r.Status!=ce.OK||!r.Data)}))}GetServiceName(){return af.ServiceName}CheckDeviceVersionAsync(e){return sf(this,void 0,void 0,(function*(){var t;let n;if("string"==typeof e){const t=yield $v.Get(Bs.ServiceName).GetDevice(e);if(null==t)return new Ee(Fg.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);n=t}else n=e;if(null==n.ProtocolGuid)return new Ee(Fg.UnsupportedDevice,"Device does not contains data about protocol GUID.");const r=yield null===(t=(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(n.ProtocolGuid,_o.Device)).first())||void 0===t?void 0:t.GetSoftwareVersionAsync(n);return r.Type,r}))}CheckDeviceUpdateAsync(e){return sf(this,void 0,void 0,(function*(){var t;let n;if("string"==typeof e){const t=yield $v.Get(Bs.ServiceName).GetDevice(e);if(null==t)return new Ee(Fg.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);n=t}else n=e;if(null==n.ProtocolGuid)return new Ee(Fg.UnsupportedDevice,"Device does not contains data about protocol GUID.");const r=yield null===(t=(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(n.ProtocolGuid,_o.Device)).first())||void 0===t?void 0:t.GetAvailableUpdateAsync(n);if(null!=r.Type)return r;const o=new lf;o.CurrentResourceVersion=r.CurrentResourceVersion,o.NewResourceVersion=r.Update.Version,o.UpdatedResourceName=r.UpdatedResourceName,o.UpdateResourceGuid=r.Update.ResourceGuid,o.UpdateDescription=new Map([["pl-PL",r.Update.Description]]);let s="n/a";try{s=(yield this._extensionService.GetProtocolInfoAsync(n.ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}return o.Protocol=s,o.ProtocolGuid=n.ProtocolGuid,(yield $v.Get(Bs.ServiceName).GetDevicesAsync()).any((e=>"952ddc14-76c4-4f47-b0bc-5d106c1f9b02"==e.ModelGuid))&&(o.IsUpdateSafe=!1),o}))}CheckDeviceUpdatesBulkAsync(e){return sf(this,void 0,void 0,(function*(){const t=yield yield this._updateProviders.GetUpdatesProvidersAsync(_o.Device),n=[];for(var r of t){const t=yield r.CheckUpdateBulkAsync(e);if(t instanceof Ee)return t;t.map((e=>sf(this,void 0,void 0,(function*(){const t=new lf;t.CurrentResourceVersion=e.CurrentResourceVersion,t.NewResourceVersion=e.Update.Version,t.UpdatedResourceName=e.UpdatedResourceName,t.UpdateDescription=e.UpdateDescription,t.IsUpdateSafe=!0;let o="n/a";try{o=(yield this._extensionService.GetProtocolInfoAsync(r.ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}t.Protocol=o,t.ProtocolGuid=r.ProtocolGuid,t.UpdateResourceGuid=e.Update.ResourceGuid,n.push(t)}))))}return n}))}InstallDeviceUpdateAsync(e,t,n){return sf(this,arguments,void 0,(function*(e,t,n,r=!1){var o;let s;if("string"==typeof e){const t=yield $v.Get(Bs.ServiceName).GetDevice(e);if(null==t)return new Ee(Fg.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);s=t}else s=e;if(null==s.ProtocolGuid)return new Ee(Fg.UnsupportedDevice,"Device does not contains data about protocol GUID.");const i=yield null===(o=(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(s.ProtocolGuid,_o.Device)).first())||void 0===o?void 0:o.GetAvailableUpdateAsync(s);if(null!=i.Type)return i;this._appStateService.DisallowHibernation();const a=yield(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(s.ProtocolGuid,_o.Device)).first().InstallUpdateAsync(i,t,n,r);return null!=a.Type?(this._appStateService.AllowHibernation(),a):(this._appStateService.AllowHibernation(),ce.OK)}))}InstallDevicesUpdateBulkAsync(e,t,n){return sf(this,void 0,void 0,(function*(){const r=(yield $v.Get(Bs.ServiceName).GetDevicesAsync()).where((t=>e.includes(t.Guid))).groupBy((e=>e.ProtocolGuid)),o=[];this._appStateService.DisallowHibernation();const s=r.count();for(let e=0;e<s;e++){const i=r.elementAt(e),a=e*(100/s),c=(e+1)*(100/s),u=e=>{e.PercentageTotal=Math.floor(e.PercentageTotal/100*(c-a)+a),t(e)},l=yield yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(i.key,_o.Device),d=yield l.first().InstalUpdateBulkAsync(i.select((e=>e.Guid)).toArray(),u,n);if(d instanceof Ee)return d;o.push(d)}if(this._appStateService.AllowHibernation(),1==o.length)return o[0];{const e=new Xg;o.some((e=>e.DevicesUpdateResults.count()>0))&&o.any((e=>e.BulkUpdateStatus!=Ug.Success))?e.BulkUpdateStatus=Ug.PartialSuccess:o.any((e=>e.BulkUpdateStatus!=Ug.Success))?e.BulkUpdateStatus=o.first().BulkUpdateStatus:e.BulkUpdateStatus=Ug.Success;for(const t of o)t.DevicesUpdateResults.forEach(((t,n)=>{e.DevicesUpdateResults.set(n,t)}));return e}}))}CheckControllerSoftwareUpdateAvailabilityAsync(){return sf(this,void 0,void 0,(function*(){const e=$v.Get(Je.ServiceName).User;if(null==e)return!1;if(""==e.SoftwareVersion||null==e.SoftwareVersion)return!0;const[t,n]=e.SoftwareVersion.split(".");if(parseFloat(t)<this._oldUpdateVersion||parseFloat(t)==this._oldUpdateVersion&&parseFloat(n)<=this._oldUpdateBuild)return!0;const r=yield this._connection.SendAndWaitForResponseAsync(new mf,1e4,!1);if(null==r||r.Status!=ce.OK||null==r.Data)return!1;const[o,s]=r.Data.Update.Version.ContainerSoftwareVersion.toString().split(".");return parseInt(o)>parseInt(t)||parseInt(o)==parseInt(t)&&parseInt(s)>parseInt(n)}))}CheckDevicesUpdatesAvailabilityAsync(){return sf(this,void 0,void 0,(function*(){const e=$v.Get(Je.ServiceName).User;if(null==e)return[];if(""==e.SoftwareVersion||null==e.SoftwareVersion)return[];const[t,n]=e.SoftwareVersion.split(".");if(parseFloat(t)<6||6==parseFloat(t)&&parseFloat(n)<=4)return[];const r=yield this._connection.SendAndWaitForResponseAsync(new Tf,1e4,!1),o=[];return null==r||(null==r?void 0:r.Status)!=ce.OK||null==(null==r?void 0:r.Data)?[]:(null==r||r.Data.forEach((e=>{if(!e.IsAvailable)return;const t=new Vg;t.DeviceGuid=e.DeviceGuid,t.CurrentVersion=e.CurrentVersion,t.NewVersion=e.NewVersion,o.push(t)})),o)}))}CheckControllerUpdatesAsync(){return sf(this,void 0,void 0,(function*(){this._controllerUpdates=[];let e=[];const t=new Hg,n=yield this.getRuntimeInfoAsync();if(n instanceof Ee){const e=new cf;return e.UpdateType=Ig.SoftwareUpdate,e.ResponseResult=n,t.UpdatesNotAvailable.push(e),t}const r=parseInt(n.SoftwareVersion.toString().split(".")[0]),o=parseInt(n.SoftwareVersion.toString().split(".")[1]);try{e=yield this._updateProviders.GetUpdatesProvidersAsync(_o.Controller)}catch(e){if(!(e instanceof Io))throw e;this._logger.Warning("Cannot get update providers for controller protocols! Avaliable only controller software updates!")}for(let n=0;n<e.length;n++){const r=yield e[n].GetAvailableRadioUpdateAsync();if(null!=r.Type){const o=new cf;o.ResponseResult=r,o.UpdateType=Ig.RadioUpdate;let s="n/a";try{s=(yield this._extensionService.GetProtocolInfoAsync(e[n].ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}o.UpdatedResourceName=new Map([["pl-PL",s],["en-US",s]]),o.CurrentResourceVersion=yield e[n].GetCurrentRadioVersionAsync(),t.UpdatesNotAvailable.push(o)}else{const o=r,s=new uf;s.UpdatedResourceName=new Map([["pl-PL",o.UpdatedResourceName],["en-US",o.UpdatedResourceName]]),s.CurrentResourceVersion=o.CurrentResourceVersion,s.NewResourceVersion=o.Update.Version,s.UpdateDescription=new Map([["pl-PL",o.Update.Description]]),s.UpdateType=Ig.RadioUpdate,s.UpdateIdentifier=oe.GenerateUUID(),s.UpdateIsDownloading=!1,s.DownloadProgress=100,s.UpdateCreationTime=null,t.UpdatesAvailable.push(s),this._controllerUpdates.push(Object.assign(Object.assign({},o),{UpdateIdentifier:s.UpdateIdentifier,ProviderName:e[n].GetUpdateProviderName(),UpdateType:Ig.RadioUpdate}))}}let s=!0;if((r<this._oldUpdateVersion||r===this._oldUpdateVersion&&o<=this._oldUpdateBuild)&&(s=!1),s){const e=yield this._connection.SendAndWaitForResponseAsync(new mf,15e3,!1);if(null==e||e.Status!=ce.OK&&e.Status!=ce.NoData)throw new Error(`Cannot get pending updates! Response is empty or status is not OK. Status: ${null==e?void 0:e.Status}`);if(null!=e.Data){const r=new bo;r.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,r.UpdateDescription=ie(e.Data.Update.UpdateDescription),r.UpdatedResourceName=ie(e.Data.Update.UpdateName).get("en-US");const o=new uf;o.UpdatedResourceName=ie(e.Data.Update.UpdateName),o.UpdateDescription=ie(e.Data.Update.UpdateDescription),o.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,o.NewResourceVersion=`${e.Data.Update.Version.BaseRuntime}.${e.Data.Update.Version.ContainerSoftwareVersion}`,o.UpdateType=Ig.SoftwareUpdate,o.UpdateIdentifier=e.Data.Update.Guid,o.UpdateIsDownloading=e.Data.UpdateStep==ef.DownloadingInstaller||e.Data.UpdateStep==ef.DownloadingUpdate||e.Data.UpdateStep==ef.CheckingUpdate,o.DownloadProgress=e.Data.DownloadProgress,o.UpdateCreationTime=e.Data.Update.Creationtime,t.UpdatesAvailable.push(o),this._controllerUpdates.push(Object.assign(Object.assign({},r),{UpdateIdentifier:o.UpdateIdentifier,ProviderName:af.ServiceName,UpdateType:Ig.SoftwareUpdate}))}else{const e=yield this._connection.SendAndWaitForResponseAsync(new yf,15e3,!1);if(null==e)throw new Error("Cannot check updates! Response is empty.");switch(e.Status){case ce.NoData:const r=new cf;r.UpdateType=Ig.SoftwareUpdate,r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.ResponseResult=new Ee(Fg.DeviceIsUpToDate,"Updates not found, controller is already up-to-date."),t.UpdatesNotAvailable.push(r);break;case ce.OK:if(null==e.Data)throw new Error("Cannot check updates! Response data is empty.");const o=new bo;o.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,o.UpdateDescription=ie(e.Data.UpdateDescription),o.UpdatedResourceName=ie(e.Data.UpdateName).get("en-US");const s=new uf;s.UpdatedResourceName=ie(e.Data.UpdateName),s.UpdateDescription=ie(e.Data.UpdateDescription),s.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,s.UpdateType=Ig.SoftwareUpdate,s.UpdateIdentifier=e.Data.Guid,s.NewResourceVersion=`${e.Data.Version.BaseRuntime}.${e.Data.Version.ContainerSoftwareVersion}`,s.UpdateIsDownloading=!1,s.DownloadProgress=0,s.UpdateCreationTime=e.Data.Creationtime,t.UpdatesAvailable.push(s),this._controllerUpdates.push(Object.assign(Object.assign({},o),{UpdateIdentifier:s.UpdateIdentifier,ProviderName:af.ServiceName,UpdateType:Ig.SoftwareUpdate}));break;default:throw new Error(`Cannot check updates! Response status is not OK. Status: ${e.Status}`)}}}else{const e=`https://exalus-updates.tr7.pl/software/${n.UpdateChannel}/${n.RuntimeVersion}/${n.SoftwareVersion}/update.json`;try{const r=yield fetch(e);let o,s=new bo;const i=new cf;switch(i.UpdateType=Ig.SoftwareUpdate,i.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.status){case 200:null!=r.body&&(o=yield r.json());break;case 404:i.ResponseResult=new Ee(Fg.DeviceIsUpToDate,"Updates not found, controller is already up-to-date."),t.UpdatesNotAvailable.push(i);break;default:i.ResponseResult=new Ee(Fg.CannotGetUpdates,`Response status code does not indicate success. Status: ${r.status}`),t.UpdatesNotAvailable.push(i)}if(null!=o){s.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,s.Update=o;const e=new uf;e.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),e.CurrentResourceVersion=s.CurrentResourceVersion,e.NewResourceVersion=s.Update.Version,e.UpdateDescription=new Map([["pl-PL",s.Update.Description]]),e.UpdateType=Ig.SoftwareUpdate,e.UpdateIdentifier=oe.GenerateUUID(),e.DownloadProgress=100,e.UpdateIsDownloading=!1,e.UpdateCreationTime=null,t.UpdatesAvailable.push(e),this._controllerUpdates.push(Object.assign(Object.assign({},s),{UpdateIdentifier:e.UpdateIdentifier,ProviderName:af.ServiceName,UpdateType:Ig.SoftwareUpdate}))}else if(200==r.status)throw new Error(`Cannot get Update Data from response. Status: ${r.status}`)}catch(e){const n=yield this.getRuntimeInfoAsync();if(n instanceof Ee){const e=new cf;e.UpdateType=Ig.SoftwareUpdate,e.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),e.ResponseResult=n,t.UpdatesNotAvailable.push(e)}else{const r=new cf;r.UpdateType=Ig.SoftwareUpdate,r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.ResponseResult=new Ee(Fg.CannotGetUpdates,`Cannot get available updates! ${e}`),r.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,t.UpdatesNotAvailable.push(r)}}}return t}))}CheckControllerVersionAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this._updateProviders.GetUpdatesProvidersAsync(_o.Controller),t=yield this.getRuntimeInfoAsync();if(t instanceof Ee)return t;const n=[];let r;r=new jg,r.Resource="Controller software",r.Type=Ig.SoftwareUpdate,r.Version=`${t.RuntimeVersion}.${t.SoftwareVersion}`,n.push(r);for(let t=0;t<e.length;t++){r=new jg,r.Version=yield e[t].GetCurrentRadioVersionAsync(),r.Type=Ig.RadioUpdate;let o="n/a";try{o=(yield this._extensionService.GetProtocolInfoAsync(e[t].ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}r.Resource=o,n.push(r)}return n}))}GetControllerUpdateBranchAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this.getRuntimeInfoAsync();if(e instanceof Ee)return e;const t=parseInt(e.SoftwareVersion.toString().split(".")[0]),n=parseInt(e.SoftwareVersion.toString().split(".")[1]);if(t<this._oldUpdateVersion||t===this._oldUpdateVersion&&n<=this._oldUpdateBuild)return new Ee(Fg.FeatureUnsupportedInCurrentVersion,`Cannot get update branch, feature unsupported in current version. Current version: ${e}`);const r=yield this._connection.SendAndWaitForResponseAsync(new ff,1e4,!1);if(null==r||(null==r?void 0:r.Status)!=ce.OK)return new Ee(Fg.CannotGetUpdatesBranch,`Cannot get update branch, response is empty or status is not OK. Status: ${null==r?void 0:r.Status}`);switch(r.Data){case 0:return Lg.Public;case 1:return Lg.Beta;case 2:return Lg.Development;default:return new Ee(Fg.CannotGetUpdatesBranch,`Cannot get update branch, unknown branch number. Branch number: ${r.Data}`)}}))}SetControllerUpdateBranchAsync(e){return sf(this,void 0,void 0,(function*(){const t=yield this.getRuntimeInfoAsync();if(t instanceof Ee)return t;const n=parseInt(t.SoftwareVersion.toString().split(".")[0]),r=parseInt(t.SoftwareVersion.toString().split(".")[1]);if(n<this._oldUpdateVersion||n===this._oldUpdateVersion&&r<=this._oldUpdateBuild)return new Ee(Fg.FeatureUnsupportedInCurrentVersion,`Cannot set update branch, feature unsupported in current version. Current version: ${t}`);const o=yield this._connection.SendAndWaitForResponseAsync(new vf(e),1e4,!1);return null==o||(null==o?void 0:o.Status)!=ce.OK?new Ee(Fg.CannotSetUpdatesBranch,`Cannot set update branch, response is empty or status is not OK. Status: ${null==o?void 0:o.Status}`):ce.OK}))}EnableAutomaticControllerUpdateDonwloadAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this.getRuntimeInfoAsync();if(e instanceof Ee)return e;const t=parseInt(e.SoftwareVersion.toString().split(".")[0]),n=parseInt(e.SoftwareVersion.toString().split(".")[1]);if(t<this._oldUpdateVersion||t===this._oldUpdateVersion&&n<=this._oldUpdateBuild)return new Ee(Fg.FeatureUnsupportedInCurrentVersion,`Cannot enable automatic updates download, feature unsupported in current version. Current version: ${e}`);const r=yield this._connection.SendAndWaitForResponseAsync(new _f,1e4,!1);return null==r||(null==r?void 0:r.Status)!=ce.OK?new Ee(Fg.CannotSetUpdatesBranch,`Cannot enable automatic updates download, response is empty or status is not OK. Status: ${null==r?void 0:r.Status}`):ce.OK}))}DisableAutomaticControllerUpdateDonwloadAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this.getRuntimeInfoAsync();if(e instanceof Ee)return e;const t=parseInt(e.SoftwareVersion.toString().split(".")[0]),n=parseInt(e.SoftwareVersion.toString().split(".")[1]);if(t<this._oldUpdateVersion||t===this._oldUpdateVersion&&n<=this._oldUpdateBuild)return new Ee(Fg.FeatureUnsupportedInCurrentVersion,`Cannot disable automatic update download, feature unsupported in current version. Current version: ${e}`);const r=yield this._connection.SendAndWaitForResponseAsync(new Cf,1e4,!1);return null==r||(null==r?void 0:r.Status)!=ce.OK?new Ee(Fg.CannotSetUpdatesBranch,`Cannot disable automatic update download, response is empty or status is not OK. Status: ${null==r?void 0:r.Status}`):ce.OK}))}GetControllerUpdatesHistoryAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this.getRuntimeInfoAsync();if(e instanceof Ee)return e;const t=parseInt(e.SoftwareVersion.toString().split(".")[0]),n=parseInt(e.SoftwareVersion.toString().split(".")[1]);if(t<this._oldUpdateVersion||t===this._oldUpdateVersion&&n<=this._oldUpdateBuild)return new Ee(Fg.FeatureUnsupportedInCurrentVersion,`Cannot disable automatic update download, feature unsupported in current version. Current version: ${e}`);const r=yield this._connection.SendAndWaitForResponseAsync(new Df,1e4,!1);if(null==r)return new Ee(Fg.CannotGetUpdates,"Cannot get updates history, response is empty.");switch(r.Status){case ce.OK:return null!=r.Data?r.Data.map((e=>{const t=new Kg;return t.UpdatedResourceName=ie(e.UpdateName),t.UpdateDescription=ie(e.UpdateDescription),t.UpdateCreationTime=e.Creationtime,t.UpdateChannel=e.UpdateChannel,t.Version=`${e.Version.BaseRuntime}.${e.Version.ContainerSoftwareVersion}`,t})):new Ee(Fg.CannotGetUpdates,"Cannot get updates history, response data is empty.");case ce.NoData:return[];default:return new Ee(Fg.CannotGetUpdates,`Cannot get updates history, response status is not OK. Status: ${r.Status}`)}}))}InstallControllerUpdateAsync(e,t,n,r,o){return sf(this,void 0,void 0,(function*(){const s=new RegExp("^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$"),i=this._controllerUpdates.length,a=yield this.getRuntimeInfoAsync();if(a instanceof Ee)return a;const c=parseInt(a.SoftwareVersion.toString().split(".")[0]),u=parseInt(a.SoftwareVersion.toString().split(".")[1]);if(0==this._controllerUpdates.length)return new Ee(Fg.CannotGetUpdates,"Cannot find any updates, make sure you check for available updates by calling CheckControllerUpdateAsync().");if("string"!=typeof n||!s.test(n)){const o=[1],s=t=>{t.UpdateNumber=o[0],t.AvailableUpdates=i,e(t)},a=e=>sf(this,void 0,void 0,(function*(){return new Promise((t=>setTimeout(t,e)))}));let l=this._controllerUpdates.where((e=>e.UpdateType==Ig.RadioUpdate)).toArray(),d=[];this._appStateService.DisallowHibernation();for(let e=0;e<l.length;e++){const t=yield(yield this._updateProviders.GetUpdatesProviderAsync(l[e].ProviderName)).InstallRadioUpdateAsync(l[e],s,n);yield a(5e3),t==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((t=>t.UpdateIdentifier!=l[e].UpdateIdentifier))),d.push(t),o[0]++}const h=this._controllerUpdates.find((e=>e.UpdateType==Ig.SoftwareUpdate));if(null!=h)if(c<this._oldUpdateVersion||c===this._oldUpdateVersion&&u<=this._oldUpdateBuild){const e=yield this.UpdateControllerUsingScriptAsync(h.Update,s);e==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=h.UpdateIdentifier))),d.push(e),o[0]++}else{const e=yield this.UpdateControllerUsingApiAsync(s,t,r);this._appStateService.AllowHibernation(),e==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n))),d.push(e),o[0]++}const p=d.where((e=>e instanceof Ee)).toArray();if(null!=p&&0!=p.length){let e="";return p.forEach((t=>e+=`${t.Type}, `)),this._appStateService.AllowHibernation(),new Ee(Fg.UpdatesPartiallyInstalled,`Update installation finished - not all updates were successfully installed. Installation error codes: ${e}`)}return this._appStateService.AllowHibernation(),ce.OK}{let s;const i=this._controllerUpdates.find((e=>e.UpdateIdentifier==n));if(null==i)return new Ee(Fg.CannotGetUpdates,`Update with requested guid (${n}) not found.`);switch(this._logger.Debug(`Installing single update type: ${i.Update.UpdateType}, resource: ${i.UpdatedResourceName}, version: ${i.Update.Version}`),this._appStateService.DisallowHibernation(),i.UpdateType){case Ig.RadioUpdate:return r?new Ee(Fg.UpdateAlreadyDownloaded,"Update already downloaded set flag downloadOnly to false to install it."):(s=yield(yield this._updateProviders.GetUpdatesProviderAsync(i.ProviderName)).InstallRadioUpdateAsync(i,e,o),this._appStateService.AllowHibernation(),s==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n))),s);case Ig.SoftwareUpdate:if(c<this._oldUpdateVersion||c===this._oldUpdateVersion&&u<=this._oldUpdateBuild){if(r)return new Ee(Fg.UpdateAlreadyDownloaded,"Update already downloaded set flag downloadOnly to false to install it.");s=yield this.UpdateControllerUsingScriptAsync(i.Update,e),this._appStateService.AllowHibernation(),s==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n)))}else s=yield this.UpdateControllerUsingApiAsync(e,t,r),this._appStateService.AllowHibernation(),s==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n)));return s;default:return new Ee(Fg.CannotProcessUpdate,`Update with type ${i.UpdateType} is not supported by UpdateService.`)}}}))}UpdateControllerUsingScriptAsync(e,t){return sf(this,void 0,void 0,(function*(){var n,r,o,s,i,a;switch(e.UpdateType){case Co.Container:case Co.ContainerSoftware:try{return yield null===(n=this._connection)||void 0===n?void 0:n.SendAndHandleResponseAsync(new df(e.DownloadUri),this._updateRequestTimeout,(n=>{const r=new zg;switch(r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),n.Status){case ce.MultiDataResponseStart:r.Status=Rg.PreparingForUpgrade;break;case ce.MultiDataResponse:if(null==n.Data)return void this._logger.Warning(af.ServiceName,`Recived update response without data! URI: ${e.DownloadUri}`);switch(r.Percentage=Math.round(n.Data.Progress),n.Data.State){case Pg.CheckingApplicability:case Pg.CheckingIntegrity:case Pg.CheckingPackageIntegrity:r.Status=Rg.CheckingPackage;break;case Pg.CreatingBackup:case Pg.MigratingData:case Pg.Removing:r.Status=Rg.MovingData;break;case Pg.Deploying:case Pg.Installing:r.Status=Rg.Upgrading;break;case Pg.Downloading:r.Status=Rg.DownloadingPackage;break;case Pg.Error:r.Status=Rg.Error;break;case Pg.Installed:r.Status=Rg.Upgraded;break;case Pg.PreparingSystem:case Pg.ReadyToDownload:r.Status=Rg.PreparingForUpgrade;break;case Pg.UndoingInstallation:r.Status=Rg.InstallationStopped;break;case Pg.Unpackaging:r.Status=Rg.MovingData;break;case Pg.WaitingForUser:r.Status=Rg.Upgrading}break;case ce.MultiDataResponseStop:r.Status=Rg.OK;break;case ce.Error:case ce.FatalError:r.Status=Rg.Error}t(r)}),!1),ce.OK}catch(e){return new Ee(Fg.CannotProcessUpdate,`Cannot process update, error: ${e}`)}case Co.RuntimeFixingScript:var c=10;let d="n/a";try{d=(yield this._extensionService.GetExtensionsInfoAsync()).first((e=>"f4f45dac-beda-441a-8d29-efc6dc977cd1"==e.ExtensionGuid)).ExtensionVersion}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}var u=d;const h=yield this.getRuntimeInfoAsync();if(h instanceof Ee)return h;var l=parseFloat(h.RuntimeVersion)>=2||parseFloat(u)>=1.2201125;try{c=(yield $v.Get(Bs.ServiceName).GetDevicesAsync()).length}catch(e){this._logger.Warning(af.ServiceName,`Cannot get number of devices in system! Error: ${e}. Using default value of 10 devices.`)}if(l){let n,r=new zg;r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.Percentage=1,r.Status=Rg.PreparingForUpgrade,t(r);let o=2;const s=Date.now(),i=900*c+8e5,a=i/100,u=s+i,l=new Promise(((s,c)=>sf(this,void 0,void 0,(function*(){var c;try{const l=()=>{if(this._appStateService.OnReturnedFromSuspension().Unsubscribe(l),Date.now()>u)clearInterval(n),this._logger.Debug("Update already finished!"),r.Percentage=100,r.PercentageTotal=Math.round(r.Percentage),r.Status=Rg.Upgraded,t(r),s(ce.OK);else{var e=u-Date.now();e<i?o=95-e/a:(clearInterval(n),n=setInterval((()=>{clearInterval(n),r.Percentage=100,r.PercentageTotal=Math.round(r.Percentage),r.Status=Rg.Upgraded,t(r),s(ce.OK)}),e))}};this._appStateService.OnReturnedFromSuspension().Subscribe(l),n=setInterval((()=>{if(o>99)clearInterval(n),r.Percentage=100,r.PercentageTotal=Math.round(r.Percentage),r.Status=Rg.Upgraded,t(r),s(ce.OK);else{var e=o;e<99&&(r.Percentage=Math.round(e),r.PercentageTotal=Math.round(r.Percentage),r.Status=Rg.Upgrading,t(r))}o++}),a);const d=yield null===(c=this._connection)||void 0===c?void 0:c.SendAndWaitForResponseAsync(new hf(e.DownloadUri),this._updateRequestTimeout,!1);d.Status!=ce.OK&&(clearInterval(n),r.Percentage=0,r.PercentageTotal=Math.round(r.Percentage),r.Status=Rg.InstallationError,t(r),this._logger.Debug(af.ServiceName,`Update failed with error. Update response status: ${d.Status}`),s(new Ee(Fg.CannotProcessUpdate,`Update failed with error. Update response status: ${d.Status}`)))}catch(e){this._logger.Debug(af.ServiceName,`Update failed with error. ${e}`),r.Percentage=0,r.PercentageTotal=Math.round(r.Percentage),r.Status=Rg.Error,t(r),clearInterval(n),s(new Ee(Fg.CannotProcessUpdate,`Update failed with error. ${e}`))}}))));return yield l}{let n=new zg;n.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),n.Percentage=1,n.PercentageTotal=Math.round(n.Percentage),n.Status=Rg.PreparingForUpgrade,t(n);const u=this._connection.GetAuthorizationInfo();if(null==u)return new Ee(Fg.CannotProcessUpdate,"Cannot process update. Cannot get current controller login credentials!");if((yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(new pf({Email:"support@support",Password:`support@${u.SerialNumber}:${u.PIN}`}),12e3,!1)).Status===ce.OK){n.Percentage=1,n.PercentageTotal=Math.round(n.Percentage),n.Status=Rg.PreparingForUpgrade,t(n);let r=yield null===(o=this._connection)||void 0===o?void 0:o.SendAndWaitForResponseAsync(new gf("rm /runtime/tmp/update.sh"),12e3,!1);if(r.Status==ce.OK){if(this._logger.Debug("Removed previous script"),n.Percentage=2,n.PercentageTotal=Math.round(n.Percentage),n.Status=Rg.PreparingForUpgrade,t(n),r=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(new gf(`wget ${e.DownloadUri} -O /runtime/tmp/update.sh --no-check-certificate`),this._updateRequestTimeout,!1),r.Status==ce.OK){this._logger.Debug("Downloaded update script"),n.Percentage=5,n.PercentageTotal=Math.round(n.Percentage),n.Status=Rg.PreparingForUpgrade,t(n);try{if(r=yield null===(i=this._connection)||void 0===i?void 0:i.SendAndWaitForResponseAsync(new gf("chmod a+x /runtime/tmp/update.sh"),12e3,!1),r.Status==ce.OK){this._logger.Debug("Executed update script"),n.Percentage=5,n.PercentageTotal=Math.round(n.Percentage),n.Status=Rg.Upgrading,t(n);let e,r=0;const o=.95,s=Date.now(),i=900*c+15e5,a=i/95,u=s+i,l=new Promise(((s,c)=>sf(this,void 0,void 0,(function*(){var c;try{const l=()=>{if(this._appStateService.OnReturnedFromSuspension().Unsubscribe(l),Date.now()>u)clearInterval(e),this._logger.Debug("Update already finished!"),n.Percentage=100,n.PercentageTotal=Math.round(n.Percentage),n.Status=Rg.Upgraded,t(n),s(ce.OK);else{var o=u-Date.now();o<i?r=95-o/a:(clearInterval(e),e=setInterval((()=>{clearInterval(e),n.Percentage=100,n.PercentageTotal=Math.round(n.Percentage),n.Status=Rg.Upgraded,t(n),s(ce.OK)}),o))}};this._appStateService.OnReturnedFromSuspension().Subscribe(l),e=setInterval((()=>{if(r>99)clearInterval(e),n.Percentage=100,n.PercentageTotal=Math.round(n.Percentage),n.Status=Rg.Upgraded,t(n),s(ce.OK);else{var i=5+r*o;i<99&&(n.Percentage=Math.round(i),n.PercentageTotal=Math.round(n.Percentage),n.Status=Rg.Upgrading,t(n))}r++}),a),null===(c=this._connection)||void 0===c||c.SendAndWaitForResponseAsync(new gf("/runtime/tmp/update.sh"),12e3,!1)}catch(e){s(new Ee(Fg.CannotProcessUpdate,`Update failed with error. ${e}`))}}))));return yield l}return n.Percentage=0,n.PercentageTotal=Math.round(n.Percentage),n.Status=Rg.InstallationError,t(n),new Ee(Fg.CannotProcessUpdate,"Execution failed!")}catch(e){return null===(a=this._connection)||void 0===a||a.SendAndWaitForResponseAsync(new gf("/runtime/scripts/restart_all.sh"),12e3,!1),new Ee(Fg.CannotProcessUpdate,`Execution failed! Error ${e}`)}}return new Ee(Fg.CannotProcessUpdate,"Execution failed! Cannot clear old update script!")}}return new Ee(Fg.CannotProcessUpdate,"Execution failed! Cannot loggin using support account!")}default:return new Ee(Fg.CannotProcessUpdate,`Not supported update type, type: ${e.UpdateType}`)}}))}UpdateControllerUsingApiAsync(e,t,n){return sf(this,void 0,void 0,(function*(){const r=e=>sf(this,void 0,void 0,(function*(){return new Promise(((r,o)=>sf(this,void 0,void 0,(function*(){yield this._connection.SendAndHandleResponseAsync(new wf,this._updateRequestTimeout,(o=>{var s,i,a,c;const u=new Jg;switch(u.UpdatedResourceName=ie(e.Update.UpdateName),o.Status){case ce.MultiDataResponseStart:u.Percentage=0,u.SpeedMbps=0,u.PercentageTotal=0,u.CurrentTask=xg.DownloadingInstaller,t(u);break;case ce.MultiDataResponse:if(null!=o.Data){switch(u.Percentage=o.Data.StepProgressInPercentage,u.SpeedMbps=o.Data.DownloadSpeedInMbs,u.PercentageTotal=n?Math.round(2*(null===(s=o.Data)||void 0===s?void 0:s.UpdateProgressInPercentage)):Math.round(null===(i=o.Data)||void 0===i?void 0:i.UpdateProgressInPercentage),o.Data.UpdateStep){case ef.DownloadingInstaller:u.CurrentTask=xg.DownloadingInstaller;break;case ef.DownloadingUpdate:u.CurrentTask=xg.DownloadingUpdate;break;default:u.CurrentTask=xg.CheckingUpdate}t(u)}break;case ce.MultiDataResponseStop:if(null!=o.Data)switch(o.Data.UpdateStep){case ef.UpdateDownloaded:u.Percentage=100,u.PercentageTotal=n?Math.round(2*(null===(a=o.Data)||void 0===a?void 0:a.UpdateProgressInPercentage)):Math.round(null===(c=o.Data)||void 0===c?void 0:c.UpdateProgressInPercentage),u.SpeedMbps=0,u.CurrentTask=xg.CheckingUpdate,t(u),r(ce.OK);break;case ef.UpdateDownloadFailed:u.Percentage=0,u.PercentageTotal=0,u.SpeedMbps=0,u.CurrentTask=xg.Unknown,t(u),r(new Ee(Fg.UpdateDownloadFailed,"Update download failed!"))}break;case ce.Error:case ce.FatalError:u.Percentage=0,u.PercentageTotal=0,u.SpeedMbps=0,u.CurrentTask=xg.Unknown,t(u),r(new Ee(Fg.CannotProcessUpdate,"Update download failed!"))}}),!1)}))))})),o=t=>sf(this,void 0,void 0,(function*(){return new Promise(((n,r)=>sf(this,void 0,void 0,(function*(){const r=60*this._updateOfflineStageTime*1e3;let o=0;yield this._connection.SendAndHandleResponseAsync(new Sf,this._updateRequestTimeout,(s=>{var i,a;const c=new zg;switch(c.UpdatedResourceName=ie(t.Update.UpdateName),s.Status){case ce.MultiDataResponseStart:c.Status=Rg.PreparingForUpgrade,c.Percentage=null===(i=s.Data)||void 0===i?void 0:i.StepProgressInPercentage,c.PercentageTotal=null===(a=s.Data)||void 0===a?void 0:a.UpdateProgressInPercentage,e(c);break;case ce.MultiDataResponse:null!=s.Data&&(c.Status=Rg.Upgrading,c.Percentage=Math.round(s.Data.StepProgressInPercentage),c.PercentageTotal=Math.round(s.Data.UpdateProgressInPercentage),o=s.Data.StepProgressInPercentage,e(c));break;case ce.MultiDataResponseStop:if(null!=s.Data)switch(s.Data.UpdateStep){case ef.UpdateInstallationFailed:c.Status=Rg.InstallationError,c.Percentage=0,c.PercentageTotal=0,e(c),n(new Ee(Fg.CannotProcessUpdate,"Update installation failed!"));break;case ef.OfflineUpdateStep:{c.Percentage=Math.round(s.Data.StepProgressInPercentage),c.PercentageTotal=Math.round(s.Data.UpdateProgressInPercentage);let t=(100-c.PercentageTotal)/100,i=c.PercentageTotal;const a=setInterval((()=>{o++,i+=t,i>100&&(i=100),o>=100?(c.Status=Rg.Upgraded,c.Percentage=100,c.PercentageTotal=100,e(c),clearInterval(a),n(ce.OK)):(c.Status=Rg.Upgrading,c.Percentage=Math.round(o),c.PercentageTotal=Math.round(i),e(c))}),r/(100-o))}}break;case ce.Error:case ce.FatalError:c.Status=Rg.Error,c.Percentage=0,c.PercentageTotal=0,e(c),n(new Ee(Fg.CannotProcessUpdate,"Update installation failed!"))}}),!1)}))))}));if(n){const e=yield this._connection.SendAndWaitForResponseAsync(new mf,1e4,!1);if((null==e?void 0:e.Status)==ce.NoData)return new Ee(Fg.DeviceIsUpToDate,"No updates available!");if(null==e||(null==e?void 0:e.Status)!=ce.OK||null==(null==e?void 0:e.Data))throw new Error(`Cannot get pending updates! Response is empty or status is not OK. Status: ${null==e?void 0:e.Status}`);switch(e.Data.UpdateStep){case ef.DownloadingInstaller:case ef.DownloadingUpdate:case ef.UpdateDownloaded:return new Ee(Fg.UpdateAlreadyDownloaded,"Update already downloaded, or download is in progress.");case ef.InstallingUpdate:case ef.PreparingUpdate:return new Ee(Fg.UpdateAlreadyInstalled,"Update already installed, or installation is in progress.");default:return yield r(e.Data)}}else{const e=yield this._connection.SendAndWaitForResponseAsync(new mf,1e4,!1);if((null==e?void 0:e.Status)==ce.NoData)return new Ee(Fg.DeviceIsUpToDate,"No updates available!");if(null==e||(null==e?void 0:e.Status)!=ce.OK||null==(null==e?void 0:e.Data))throw new Error(`Cannot get pending updates! Response is empty or status is not OK. Status: ${null==e?void 0:e.Status}`);switch(e.Data.UpdateStep){case ef.DownloadingInstaller:case ef.DownloadingUpdate:return new Ee(Fg.UpdateAlreadyDownloaded,"Update already downloaded, or donwload in progress.");case ef.InstallingUpdate:case ef.PreparingUpdate:return new Ee(Fg.UpdateAlreadyInstalled,"Update already installed, or installation in progress.");case ef.UpdateDownloaded:return yield o(e.Data);default:var s=yield r(e.Data);return s!=ce.OK?s:yield o(e.Data)}}}))}getRuntimeInfoAsync(){return sf(this,void 0,void 0,(function*(){try{return yield this._updateProviders.GetSoftwareRuntimeInfoAsync()}catch(e){return e instanceof ns&&e.code==Ro.Timeout?new Ee(Fg.CannotGetCurrentControllerVersionTimeout,"Cannot get runtime info (current controller version), timeout error - please restart controller to fix issue."):new Ee(Fg.CannotGetCurrentControllerVersion,`Cannot get runtime info (current controller version), error: ${e}`)}}))}}af.ServiceName="UpdatesService";class cf{constructor(){this.UpdatedResourceName=new Map,this.CurrentResourceVersion="",this.UpdateType=null,this.ResponseResult=null}}class uf{constructor(){this._updateIdentifier="",this._updateResourceName=new Map,this._updateType=null,this._currentResourceVersion="",this._newResourceVersion="",this._updateDescription=new Map,this._updateIsDownloading=!1,this._updateCheckDownloadProgress=0,this._updateCreationTime=null}get UpdateCreationTime(){return this._updateCreationTime}get DownloadProgress(){return this._updateCheckDownloadProgress}get UpdateDescription(){return this._updateDescription}get UpdateIdentifier(){return this._updateIdentifier}get UpdatedResourceName(){return this._updateResourceName}get UpdateType(){return this._updateType}get CurrentResourceVersion(){return this._currentResourceVersion}get NewResourceVersion(){return this._newResourceVersion}get UpdateIsDownloading(){return this._updateIsDownloading}set UpdateCreationTime(e){this._updateCreationTime=e}set DownloadProgress(e){this._updateCheckDownloadProgress=e}set UpdateDescription(e){this._updateDescription=e}set UpdateIdentifier(e){this._updateIdentifier=e}set UpdatedResourceName(e){this._updateResourceName=e}set UpdateType(e){this._updateType=e}set CurrentResourceVersion(e){this._currentResourceVersion=e}set NewResourceVersion(e){this._newResourceVersion=e}set UpdateIsDownloading(e){this._updateIsDownloading=e}}class lf{constructor(){this._updatedResourceName="",this._updateResourceGuid="",this._protocol="",this._protocolGuid="",this._currentResourceVersion="",this._newResourceVersion="",this._isUpdateSafe=!0,this._updateDescription=new Map}get UpdateDescription(){return this._updateDescription}set UpdateDescription(e){this._updateDescription=e}get UpdatedResourceName(){return this._updatedResourceName}get UpdateResourceGuid(){return this._updateResourceGuid}get Protocol(){return this._protocol}get ProtocolGuid(){return this._protocolGuid}get CurrentResourceVersion(){return this._currentResourceVersion}get NewResourceVersion(){return this._newResourceVersion}get IsUpdateSafe(){return this._isUpdateSafe}set UpdatedResourceName(e){this._updatedResourceName=e}set UpdateResourceGuid(e){this._updateResourceGuid=e}set Protocol(e){this._protocol=e}set ProtocolGuid(e){this._protocolGuid=e}set CurrentResourceVersion(e){this._currentResourceVersion=e}set NewResourceVersion(e){this._newResourceVersion=e}set IsUpdateSafe(e){this._isUpdateSafe=e}}class df extends ae{constructor(e){super(),this.Resource="/updates/update/from/uri",this.Method=ue.Post,this.Data=e}}!function(e){e[e.Windows=0]="Windows",e[e.Linux=1]="Linux",e[e.Unix=2]="Unix",e[e.OSX=3]="OSX",e[e.Android=4]="Android",e[e.iOS=5]="iOS",e[e.WindowsMobile=6]="WindowsMobile"}(Yg||(Yg={})),function(e){e[e.Any=0]="Any",e[e.MIPS=1]="MIPS",e[e.ARM32=2]="ARM32",e[e.ARM64=3]="ARM64",e[e.IntelX86=4]="IntelX86",e[e.IntelX64=5]="IntelX64"}(Qg||(Qg={})),function(e){e[e.Unknown=0]="Unknown",e[e.Environment=1]="Environment",e[e.OperatingSystem=2]="OperatingSystem",e[e.Application=3]="Application",e[e.Extension=4]="Extension",e[e.HardwareFirmware=5]="HardwareFirmware",e[e.Script=6]="Script",e[e.Command=7]="Command"}(Zg||(Zg={})),function(e){e[e.InstallerFileSignCheckFailed=-5]="InstallerFileSignCheckFailed",e[e.UpdateFileSignCheckFailed=-4]="UpdateFileSignCheckFailed",e[e.UpdateInstallationFailed=-3]="UpdateInstallationFailed",e[e.UpdateDownloadFailed=-2]="UpdateDownloadFailed",e[e.UpdateFileCheckFailed=-1]="UpdateFileCheckFailed",e[e.Unknown=0]="Unknown",e[e.DownloadingUpdate=1]="DownloadingUpdate",e[e.CheckingUpdate=2]="CheckingUpdate",e[e.PreparingUpdate=3]="PreparingUpdate",e[e.InstallingUpdate=4]="InstallingUpdate",e[e.DownloadingInstaller=5]="DownloadingInstaller",e[e.UpdateDownloaded=6]="UpdateDownloaded",e[e.OfflineUpdateStep=7]="OfflineUpdateStep"}(ef||(ef={}));class hf extends ae{constructor(e){super(),this.Resource="/updates/install/from/url",this.Method=ue.Put,this.Data=e}}class pf extends ae{constructor(e){super(),this.Resource="/users/user/login",this.Method=ue.Put,this.Data=e}}class gf extends ae{constructor(e){super(),this.Resource="/controller/runtime/execute",this.Method=ue.Post,this.Data=e}}class ff extends ae{constructor(){super(),this.Resource="/updates/branch",this.Method=ue.Get}}class vf extends ae{constructor(e){super(),this.Resource="/updates/branch",this.Method=ue.Put,this.Data=e}}class mf extends ae{constructor(){super(),this.Resource="/updates/pending",this.Method=ue.Get}}class yf extends ae{constructor(){super(),this.Resource="/updates/check",this.Method=ue.Get}}class wf extends ae{constructor(){super(),this.Resource="/updates/download",this.Method=ue.Post}}class Sf extends ae{constructor(){super(),this.Resource="/updates/install",this.Method=ue.Post}}class Af extends ae{constructor(){super(),this.Resource="/updates/download/automatic/status",this.Method=ue.Get}}class _f extends ae{constructor(){super(),this.Resource="/updates/download/automatic/enable",this.Method=ue.Put}}class Cf extends ae{constructor(){super(),this.Resource="/updates/download/automatic/disable",this.Method=ue.Put}}class Df extends ae{constructor(){super(),this.Resource="/updates/history",this.Method=ue.Get}}class Tf extends ae{constructor(){super(),this.Resource="/updates/devices/availability",this.Method=ue.Get}}!function(e){e.CannotFindDevice="CannotFindDevice",e.ResponseTypeNotSupported="ResponseTypeNotSupported",e.InvalidChannelNumber="InvalidChannelNumber",e.IncorrectLimitValue="IncorrectLimitValue",e.IncorrectOffsetValue="IncorrectOffsetValue",e.OtherError="OtherError",e.FatalError="FatalError",e.NoData="NoData",e.FunctionalityNotSupported="FunctionalityNotSupported"}(tf||(tf={})),function(e){e[e.None=0]="None",e[e.DataRange=1]="DataRange",e[e.Hour=2]="Hour",e[e.Day=3]="Day",e[e.Week=4]="Week",e[e.Month=5]="Month",e[e.Year=6]="Year"}(nf||(nf={})),function(e){e.Min="Min",e.Max="Max",e.Avg="Avg"}(rf||(rf={}));class kf{constructor(){this._objectType="Unknown",this._stateInterfaceType="Unknown"}get StateObjectType(){return this._objectType}get StateInterfaceType(){return this._stateInterfaceType}get StateResponseType(){return this._stateInterfaceType}set StateObjectType(e){this._objectType=e}set StateInterfaceType(e){this._stateInterfaceType=e}}!function(e){e[e.Unknown=-1]="Unknown",e[e.PitchBlack=0]="PitchBlack",e[e.VeryDark=1]="VeryDark",e[e.DarkIndoors=2]="DarkIndoors",e[e.DimIndoors=3]="DimIndoors",e[e.NormalIndoors=4]="NormalIndoors",e[e.BrightIndoors=5]="BrightIndoors",e[e.DimOutdoors=6]="DimOutdoors",e[e.CloudyOutdoors=7]="CloudyOutdoors",e[e.DirectSunlight=8]="DirectSunlight"}(of||(of={}));var Ef,Gf,Nf,bf,If,Rf,Pf,Of=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class Uf{constructor(){this._connection=null,this._connection=$v.Get(Ut.ServiceName)}GetServiceName(){return Uf.ServiceName}GetStatesByIntervalAsync(e,t,n,r,o,s){return Of(this,arguments,void 0,(function*(e,t,n,r,o,s,i=!1){var a;try{if(!(yield this.IsFunctionalitySupportedAsync()))return new Ee(tf.FunctionalityNotSupported,"State history data is not supported with this version of controller software, update software to get this functionality.");let c;if("string"==typeof e){const t=yield $v.Get(Bs.ServiceName).GetDevice(e);if(null==t)return new Ee(tf.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);c=t}else c=e;if(!c.Channels.any((e=>e.Number==t)))return new Ee(tf.InvalidChannelNumber,`Given channel not found in device with guid: ${c.Guid}.`);if(!c.Channels.any((e=>e.Number==t&&e.AvailableResponseTypes.any((e=>e.Type==n)))))return new Ee(tf.ResponseTypeNotSupported,"Device or channel not supporting requested DeviceResponseType.");const u=new xf;u.DeviceGuid=c.Guid,u.DeviceChannel=t,u.Range=r,u.StateInterfaceType=n,u.ReverseOrder=i,u.Limit=o,u.Offset=s;const l=yield null===(a=this._connection)||void 0===a?void 0:a.SendAndWaitForResponseAsync(new Mf(u),2e4,!1);if(null==l)return new Ee(tf.OtherError,"Cannot get state history data - response is null.");switch(l.Status){case ce.WrongData:switch(l.Data){case"IncorrectLimitValue":return new Ee(tf.IncorrectLimitValue,"Cannot get state history data - limit value is incorrect!");case"IncorrectOffsetValue":return new Ee(tf.IncorrectOffsetValue,"Cannot get state history data - offset value is incorrect!");case"IncorrectArguments":return new Ee(tf.OtherError,"Cannot get state history data - some parameters are incorrect!");default:return new Ee(tf.OtherError,"Cannot get state history data - unknown error!")}case ce.FatalError:return new Ee(tf.FatalError,"Cannot get state history data - an exception occurred in the controller while reading data!");case ce.ResourceDoesNotExists:return new Ee(tf.ResponseTypeNotSupported,"Device or channel not supporting requested DeviceResponseType.");case ce.OK:if(null==l.Data)return new Ee(tf.NoData,"Controller responede with status OK, but response does not contain data!");if(l.Data.AggregateDataList=l.Data.AggregateDataList.map((e=>(e.AggregateData=ie(e.AggregateData),e))),n===Ct.MeasuredEnergy){const e=l.Data.Data.map((e=>{const t=e;return t.Values.MeasurementAveragingParameters=ie(e.Values.MeasurementAveragingParameters),t.Values.MeasurementNonAveragingParmeters=ie(e.Values.MeasurementNonAveragingParmeters),t}));return l.Data.Data=e,l.Data}return l.Data;default:return new Ee(tf.OtherError,`Cannot get state history data - controller responded with response code ${l.Status}`)}}catch(e){return new Ee(tf.FatalError,`Cannot get state history data - exeption occurs! ${e}`)}}))}GetAvailableStatesAsync(){return Of(this,void 0,void 0,(function*(){var e;try{const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Ff,12e3,!1);return null==t?new Ee(tf.OtherError,"Cannot get available states - response is null."):t.Status!=ce.OK?new Ee(tf.OtherError,`Cannot get available states - controller responded with response code ${t.Status}.`):null==t.Data?new Ee(tf.NoData,"Cannot get available states - controller responede with status OK, but response does not contain data!"):t.Data.map((e=>{const t=new kf;return t.StateInterfaceType=e.StateInterfaceType,t.StateObjectType=e.StateObjectType,t}))}catch(e){return new Ee(tf.FatalError,`Cannot get available states - exeption occurs! ${e}`)}}))}IsFunctionalitySupportedAsync(){return Of(this,void 0,void 0,(function*(){return!(parseFloat((yield $v.Get(Yo.ServiceName).GetSoftwareRuntimeInfoAsync()).SoftwareVersion)<=3.42)}))}GetAvailableStatesPerChannelAsync(e,t){return Of(this,void 0,void 0,(function*(){var n;let r;if("string"==typeof e){const t=yield $v.Get(Bs.ServiceName).GetDevice(e);if(null==t)return new Ee(tf.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);r=t}else r=e;const o=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new Lf(new Bf(r.Guid,t)),8e3,!1);if(null==o)return new Ee(tf.OtherError,"Cannot get available states - response is null.");switch(o.Status){case ce.ResourceDoesNotExists:switch(o.Data){case"DeviceNotFound":return new Ee(tf.CannotFindDevice,"Cannot get available states - device does not exists!");case"ChannelNotFound":return new Ee(tf.InvalidChannelNumber,"Cannot get available states - wrong channel!");default:return new Ee(tf.OtherError,"Cannot get available states - unknown error!")}case ce.OK:{if(null==o.Data)return new Ee(tf.NoData,"Cannot get available states - controller responede with status OK, but response does not contain data!");const e=o.Data.AvailableStates.map((e=>{const t=new kf;return t.StateInterfaceType=e.StateInterfaceType,t.StateObjectType=e.StateObjectType,t}));return o.Data.AvailableStates=e,o.Data}default:return new Ee(tf.OtherError,`Cannot get available states - controller responded with response code ${o.Status}`)}}))}}Uf.ServiceName="StatesHistoryService";class Mf extends ae{constructor(e){super(),this.Resource="/statehistory/states/get/last",this.Method=ue.Get,this.Data=e}}class xf{constructor(){this.DeviceGuid="",this.DeviceChannel=0,this.StateInterfaceType="",this.Range=nf.Day,this.ReverseOrder=!1,this.Limit=0,this.Offset=0}}class Ff extends ae{constructor(){super(),this.Resource="/statehistory/states/available",this.Method=ue.Get}}class Lf extends ae{constructor(e){super(),this.Resource="/statehistory/states/available/per/channel",this.Method=ue.Get,this.Data=e}}class Bf{constructor(e,t){this.DeviceGuid=e,this.Channel=t}}(Pf=Ef||(Ef={}))[Pf.User=0]="User",Pf[Pf.Controller=1]="Controller",Pf[Pf.Marketing=2]="Marketing",(Rf=Gf||(Gf={}))[Rf.Notification=0]="Notification",Rf[Rf.Message=1]="Message",Rf[Rf.Alarm=2]="Alarm",Rf[Rf.Warning=3]="Warning",Rf[Rf.Info=4]="Info",(If=Nf||(Nf={}))[If.Other=0]="Other",If[If.UserLoggedIn=1]="UserLoggedIn",If[If.UserLoggedOut=2]="UserLoggedOut",If[If.FoundNewDevice=3]="FoundNewDevice",If[If.DoorBellPress=4]="DoorBellPress",If[If.AddedNewDevice=5]="AddedNewDevice",If[If.RemovedDevice=6]="RemovedDevice",If[If.RegisteredNewUser=7]="RegisteredNewUser",If[If.GotAccessToTheInternet=8]="GotAccessToTheInternet",If[If.LostAccessToTheInternet=9]="LostAccessToTheInternet",If[If.RemovedUser=10]="RemovedUser",If[If.NetworkChanged=11]="NetworkChanged",function(e){e.WeatherWidget="WeatherWidget"}(bf||(bf={}));var Wf=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class $f{constructor(){this._chatSubscriptions=[],this._connection=$v.Get(Ut.ServiceName),this._connection.SubscribeTo("/homemessaging/notify/message/new",(e=>{const t=e.Data;if(null==t.RecipientUserGuid&&t.MessageType==Gf.Message)return;const n=new qf;n.DateTime=t.DateTime,n.Guid=t.Guid,n.MessageSource=t.MessageSource,n.MessageText=t.MessageText,n.MessageType=t.MessageType,n.RecipientUserGuid=t.RecipientUserGuid?t.RecipientUserGuid:"n/a",n.Sender=t.Sender,n.SenderName=t.SenderName?t.SenderName:"n/a",n.SenderUserGuid=t.SenderUserGuid?t.SenderUserGuid:"n/a",n.TextToSpeechMessage=t.TextToSpeechMessage?t.TextToSpeechMessage:"";for(let[e,r]of Object.entries(t.MessageActions))n.MessageActions.set(bf[e],r);for(let[e,r]of Object.entries(t.MessageActionsData))n.MessageActionsData.set(e,r);this._chatSubscriptions.forEach((e=>{e(n)}))}))}GetCachedMessagesAsync(){return Wf(this,void 0,void 0,(function*(){try{const e=yield this._connection.SendAndWaitForResponseAsync(new Vf,12e3,!1);if(null==e)return new Ee(tv.OtherError,"Cannot get messages - response is null.");if(e.Status!=ce.OK)return new Ee(tv.OtherError,`Cannot get messages - controller responded with response code ${e.Status}.`);if(null==e.Data)return new Ee(tv.NoData,"Cannot get messages - controller responded with status OK, but response does not contain data!");const t=[];return e.Data.forEach((e=>{if(null==e.RecipientUserGuid&&e.MessageType==Gf.Message)return;const n=new qf;n.DateTime=e.DateTime,n.Guid=e.Guid,n.MessageSource=e.MessageSource,n.MessageText=e.MessageText,n.MessageType=e.MessageType,n.RecipientUserGuid=e.RecipientUserGuid?e.RecipientUserGuid:"n/a",n.Sender=e.Sender,n.SenderName=e.SenderName?e.SenderName:"n/a",n.SenderUserGuid=e.SenderUserGuid?e.SenderUserGuid:"n/a",n.TextToSpeechMessage=e.TextToSpeechMessage?e.TextToSpeechMessage:"";for(let[t,r]of Object.entries(e.MessageActions))n.MessageActions.set(bf[t],r);for(let[t,r]of Object.entries(e.MessageActionsData))n.MessageActionsData.set(t,r);t.push(n)})),t}catch(e){return new Ee(tv.FatalError,`Cannot get messages - exception occurred ${e}`)}}))}SendMessageAsync(e){return Wf(this,void 0,void 0,(function*(){var t;try{const t=yield this._connection.SendAndWaitForResponseAsync(new Hf(`recipient:home ${e}`),8e3,!1);return null==t||null==t.Status?ce.FatalError:t.Status}catch(e){return null===(t=o.Log)||void 0===t||t.Error(uv.ServiceName,`Cannot send message! ${e}`),ce.FatalError}}))}SubscribeToMessages(e){this._chatSubscriptions.push(e)}UnsubscribeFromMessages(e){this._chatSubscriptions&&(this._chatSubscriptions=this._chatSubscriptions.filter((t=>t!==e)))}}class qf{constructor(){this._sender=Ef.Controller,this._messageType=Gf.Info,this._messageSource=Nf.Other,this._senderUserGuid="",this._recipientUserGuid="",this._textToSpeechMessage="",this._messageActions=new Map,this._messageActionsData=new Map,this._guid="",this._senderName="",this._messageText="",this._dateTime=(new Date).toDateString()}get Sender(){return this._sender}get MessageType(){return this._messageType}get MessageSource(){return this._messageSource}get SenderUserGuid(){return this._senderUserGuid}get RecipientUserGuid(){return this._recipientUserGuid}get TextToSpeechMessage(){return this._textToSpeechMessage}get MessageActions(){return this._messageActions}get MessageActionsData(){return this._messageActionsData}get Guid(){return this._guid}get SenderName(){return this._senderName}get MessageText(){return this._messageText}get DateTime(){return this._dateTime}set Sender(e){this._sender=e}set MessageType(e){this._messageType=e}set MessageSource(e){this._messageSource=e}set SenderUserGuid(e){this._senderUserGuid=e}set RecipientUserGuid(e){this._recipientUserGuid=e}set TextToSpeechMessage(e){this._textToSpeechMessage=e}set MessageActions(e){this._messageActions=e}set MessageActionsData(e){this._messageActionsData=e}set Guid(e){this._guid=e}set SenderName(e){this._senderName=e}set MessageText(e){this._messageText=e}set DateTime(e){this._dateTime=e}}class Vf extends ae{constructor(){super(),this.Resource="/homemessaging/messages",this.Method=ue.Get}}class Hf extends ae{constructor(e){super(),this.Resource="/homemessaging/message",this.Method=ue.Put,this.Data=e}}var Kf,jf,zf,Jf=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class Xf{constructor(){this._chatSubscriptions=[],this._connection=$v.Get(Ut.ServiceName),this._connection.SubscribeTo("/homemessaging/notify/message/new",(e=>{if("/homemessaging/notify/message/new"===e.Resource){const t=e.Data;if(null==t.RecipientUserGuid&&t.MessageType==Gf.Message){const e=new Yf;e.DateTime=t.DateTime,e.Guid=t.Guid,e.MessageText=t.MessageText,e.SenderName=t.SenderName?t.SenderName:"n/a",this._chatSubscriptions.forEach((t=>{t(e)}))}}}))}GetCachedMessagesAsync(){return Jf(this,void 0,void 0,(function*(){try{const e=yield this._connection.SendAndWaitForResponseAsync(new Zf,12e3,!1);if(null==e)return new Ee(tv.OtherError,"Cannot get messages - response is null.");if(e.Status!=ce.OK)return new Ee(tv.OtherError,`Cannot get messages - controller responded with response code ${e.Status}.`);if(null==e.Data)return new Ee(tv.NoData,"Cannot get messages - controller responded with status OK, but response does not contain data!");const t=[];return e.Data.forEach((e=>{if(null==e.RecipientUserGuid&&e.MessageType==Gf.Message){const n=new Yf;n.DateTime=e.DateTime,n.Guid=e.Guid,n.MessageText=e.MessageText,n.SenderName=e.SenderName?e.SenderName:"n/a",t.push(n)}})),t}catch(e){return new Ee(tv.FatalError,`Cannot get messages - exception occurred ${e}`)}}))}SendMessageAsync(e){return Jf(this,void 0,void 0,(function*(){var t;try{const t=yield this._connection.SendAndWaitForResponseAsync(new Qf(e),8e3,!1);return null==t||null==t.Status?ce.FatalError:t.Status}catch(e){return null===(t=o.Log)||void 0===t||t.Error(uv.ServiceName,`Cannot send message! ${e}`),ce.FatalError}}))}SubscribeToMessages(e){this._chatSubscriptions.push(e)}UnsubscribeFromMessages(e){this._chatSubscriptions&&(this._chatSubscriptions=this._chatSubscriptions.filter((t=>t!==e)))}}class Yf{constructor(){this._guid="",this._senderName="",this._messageText="",this._dateTime=""}get Guid(){return this._guid}get SenderName(){return this._senderName}get MessageText(){return this._messageText}get DateTime(){return this._dateTime}set Guid(e){this._guid=e}set SenderName(e){this._senderName=e}set MessageText(e){this._messageText=e}set DateTime(e){this._dateTime=e}}class Qf extends ae{constructor(e){super(),this.Resource="/homemessaging/message",this.Method=ue.Put,this.Data=e}}class Zf extends ae{constructor(){super(),this.Resource="/homemessaging/messages",this.Method=ue.Get}}!function(e){e[e.None=0]="None",e[e.ChangeDeviceState=1]="ChangeDeviceState"}(Kf||(Kf={})),function(e){e.GPT3_5_TURBO="gpt-3.5-turbo",e.GPT3_5_TURBO_16K="gpt-3.5-turbo-16k",e.GPT4="gpt-4"}(jf||(jf={})),function(e){e[e.UnknownError=0]="UnknownError",e[e.ChatNotConfigured=1]="ChatNotConfigured",e[e.MessageNotSend=2]="MessageNotSend",e[e.InvalidMessageResponseFormat=3]="InvalidMessageResponseFormat"}(zf||(zf={}));var ev,tv,nv,rv=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class ov{constructor(){this._chatSubscriptions=[],this._connection=$v.Get(Ut.ServiceName),this._connection.SubscribeTo("/homemessaging/gpt/notify/message/new",(e=>{const t=e.Data,n=new cv;if(n.DateTime=t.DateTime,n.Guid=t.Guid,n.MessageText=t.MessageText?t.MessageText:"",n.SenderName=t.SenderName?t.SenderName:"n/a",null!=t.ControllerActivities)for(let[e,r]of Object.entries(t.ControllerActivities)){const t=Kf[e],o=new Map;for(let[e,t]of Object.entries(r))o.set(e,t);n.ControllerActivities.set(t,o)}if(null!=t.Errors)for(let[e,r]of Object.entries(t.Errors))n.Errors.set(zf[e],r);this._chatSubscriptions.forEach((e=>{e(n)}))}))}IsGptChatAvailableAsync(){return rv(this,void 0,void 0,(function*(){return(yield $v.Get(tt.ServiceName).GetExtensionsInfoAsync()).any((e=>"80daeab9-104f-4c1b-9464-61f5fc9bf2bf"==e.ExtensionGuid))}))}GetChatConfigurationAsync(){return rv(this,void 0,void 0,(function*(){try{const e=yield this._connection.SendAndWaitForResponseAsync(new iv,8e3,!1);return null==e||null==e.Status?new Ee(tv.FatalError,"Cannot get chat configuration! No data in result"):e.Status!=ce.OK?new Ee(tv.Error,`Cannot get chat configuration! Controller responded with code: ${e.Status}`):null==e.Data?new Ee(tv.NoData,"Cannot get chat configuration! Controller responded with success, but no data in response!"):e.Data}catch(e){return new Ee(tv.FatalError,`Cannot get chat configuration! ${e}`)}}))}SetChatConfigurationAsync(e){return rv(this,void 0,void 0,(function*(){var t;try{const t=yield this._connection.SendAndWaitForResponseAsync(new av(e),8e3,!1);return null==t||null==t.Status?ce.FatalError:t.Status}catch(e){return null===(t=o.Log)||void 0===t||t.Error(uv.ServiceName,`Cannot set chat configuration! ${e}`),ce.FatalError}}))}SendMessageAsync(e){return rv(this,void 0,void 0,(function*(){var t;try{const t=yield this._connection.SendAndWaitForResponseAsync(new sv(e),8e3,!1);return null==t||null==t.Status?ce.FatalError:t.Status}catch(e){return null===(t=o.Log)||void 0===t||t.Error(uv.ServiceName,`Cannot send message! ${e}`),ce.FatalError}}))}SubscribeToMessages(e){var t;null===(t=this._chatSubscriptions)||void 0===t||t.push(e)}UnsubscribeFromMessages(e){this._chatSubscriptions&&(this._chatSubscriptions=this._chatSubscriptions.filter((t=>t!==e)))}}class sv extends ae{constructor(e){super(),this.Resource="/homemessaging/gpt/message",this.Method=ue.Put,this.Data=e}}class iv extends ae{constructor(){super(),this.Resource="/homemessaging/gpt/configuration",this.Method=ue.Get}}class av extends ae{constructor(e){super(),this.Resource="/homemessaging/gpt/configuration",this.Method=ue.Put,this.Data=e}}class cv{constructor(){this._messageActions=new Map,this._errors=new Map,this._guid="",this._senderName="",this._messageText="",this._dateTime=""}get ControllerActivities(){return this._messageActions}get Errors(){return this._errors}get Guid(){return this._guid}get SenderName(){return this._senderName}get MessageText(){return this._messageText}get DateTime(){return this._dateTime}set ControllerActivities(e){this._messageActions=e}set Errors(e){this._errors=e}set Guid(e){this._guid=e}set SenderName(e){this._senderName=e}set MessageText(e){this._messageText=e}set DateTime(e){this._dateTime=e}}!function(e){e[e.ControllerChat=0]="ControllerChat",e[e.FamilyChat=1]="FamilyChat",e[e.GptChat=2]="GptChat"}(ev||(ev={}));class uv{constructor(){this._services={ControllerChat:new $f,GptChat:new ov,FamillyChat:new Xf}}GetServiceName(){return uv.ServiceName}GetChatImplementation(e){switch(e){case ev.ControllerChat:return this._services.ControllerChat;case ev.FamilyChat:return this._services.FamillyChat;case ev.GptChat:return this._services.GptChat;default:throw new lv(`Chat with type ${e} not implemented!`)}}}uv.ServiceName="ChatService",function(e){e.OtherError="OtherError",e.FatalError="FatalError",e.Error="Error",e.NoData="NoData"}(tv||(tv={}));class lv extends Error{constructor(e){super(e),this.message=e,this.name="ChatNotImplementedException"}}!function(e){e[e.ResourceIsNotAvailable=-11]="ResourceIsNotAvailable",e[e.AnotherAppWithGivenAccessTokenAlreadyExists=-10]="AnotherAppWithGivenAccessTokenAlreadyExists",e[e.AppGuidDoesNotExists=-7]="AppGuidDoesNotExists",e[e.AppUrlToShort=-6]="AppUrlToShort",e[e.AppUserNameToShort=-5]="AppUserNameToShort",e[e.AppUserIdToShort=-4]="AppUserIdToShort",e[e.AccessTokenToShort=-3]="AccessTokenToShort",e[e.AppNameToShort=-2]="AppNameToShort",e[e.UnkownError=0]="UnkownError",e[e.Changed=1]="Changed"}(nv||(nv={}));var dv=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class hv{constructor(){this._connection=$v.Get(Ut.ServiceName),this._log=$v.Get(r.ServiceName)}GetServiceName(){return hv.ServiceName}IsSupportedAsync(){return dv(this,void 0,void 0,(function*(){let e=yield this._connection.SendAndWaitForResponseAsync(new pv,2e3,!0);return this._log.Debug(hv.ServiceName,`IsSupportedAsync: ${null==e?void 0:e.Status} resp: ${JSON.stringify(e)}`),null!=e&&e.Status==ce.WrongData}))}GetConnectedAppsAsync(){return dv(this,void 0,void 0,(function*(){let e=yield this._connection.SendAndWaitForResponseAsync(new gv,2e3,!0);return(null==e?void 0:e.Status)===ce.OK?null==e?void 0:e.Data:null==e?void 0:e.Status}))}UpsertConnectedAppAsync(e){return dv(this,void 0,void 0,(function*(){let t=yield this._connection.SendAndWaitForResponseAsync(new vv(e),2e3,!1);switch(null==t?void 0:t.Status){case ce.OK:return new Ee(nv.Changed,"");case ce.WrongData:switch(t.Data){case"AccessTokenToShort":return new Ee(nv.AccessTokenToShort,t.Data);case"AnotherAppWithGivenAccessTokenAlreadyExists":return new Ee(nv.AnotherAppWithGivenAccessTokenAlreadyExists,t.Data);case"AppGuidDoesNotExists":return new Ee(nv.AppGuidDoesNotExists,t.Data);case"AppNameToShort":return new Ee(nv.AppNameToShort,t.Data);case"AppUrlToShort":return new Ee(nv.AppUrlToShort,t.Data);case"AppUserIdToShort":return new Ee(nv.AppUserIdToShort,t.Data);case"AppUserNameToShort":return new Ee(nv.AppUserNameToShort,t.Data);default:return new Ee(nv.UnkownError,t.Data)}case ce.ResourceDoesNotExists:case ce.ResourceIsNotAvailable:return new Ee(nv.ResourceIsNotAvailable,t.Data);default:return new Ee(nv.UnkownError,t.Data)}}))}RemoveConnectedAppAsync(e){return dv(this,void 0,void 0,(function*(){let t=yield this._connection.SendAndWaitForResponseAsync(new fv(e.Guid),2e3,!0);return null==t?void 0:t.Status}))}}hv.ServiceName="ConnectedAppsService";class pv extends ae{constructor(){super(),this.Resource="/applications/app/auth",this.Method=ue.Put,this.Data=""}}class gv extends ae{constructor(){super(),this.Resource="/applications/get",this.Method=ue.Get}}class fv extends ae{constructor(e){super(),this.Resource="/applications/app/delete",this.Method=ue.Delete,this.Data=e}}class vv extends ae{constructor(e){super(),this.Resource="/applications/app/upsert",this.Method=ue.Put,this.Data=e}}var mv=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class yv{constructor(){try{const e=window.location.href,t=new URL(e),n=new URLSearchParams(t.search),r=n.get("mig_c_enc"),o=n.get("mig_controllers"),s=n.get("mig_lang");if(null!==r){const e=decodeURIComponent(this.b64DecodeUnicode(decodeURIComponent(r)));localStorage.setItem(yv.AppUserControllersKeyName,e)}null!==o&&localStorage.setItem(yv.AppUserControllersKeyName,decodeURIComponent(o)),null!==s&&localStorage.setItem(yv.AppSelectedLanguageKeyName,s)}catch(e){console.error(e)}}waitForNavigatorObject(e){return new Promise(((t,n)=>{setTimeout((()=>{n(new Error(`Timed out waiting for navigator.${e}`))}),1e4),function n(){navigator[e]?t(navigator[e]):requestAnimationFrame(n)}()}))}b64DecodeUnicode(e){return decodeURIComponent(Array.prototype.map.call(atob(e),(function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})).join(""))}decodeUriJsonData(e){return JSON.parse(decodeURIComponent(e))}encodeUriJsonData(e){return encodeURIComponent(JSON.stringify(e))}IsExalusNativeMigrationAvailable(){return void 0!==navigator.exalusMigration}GetServiceName(){return yv.ServiceName}IsMigrationDataAvailableAsync(){return mv(this,void 0,void 0,(function*(){try{if(this.isIosNavtie()){var e=yield yv.GetIosMigrationStatus();return null!==e&&e}if(!navigator.userAgent.endsWith("LavvaAndroidNative")||void 0!==navigator.exalusMigration&&null!==navigator.exalusMigration||(yield this.waitForNavigatorObject("exalusMigration")),this.IsExalusNativeMigrationAvailable()){let e=yield navigator.exalusMigration.IsMigrationDataAvailableAsync();return null!=e&&e.DataMigrated}return null!==localStorage.getItem(yv.AppSelectedLanguageKeyName)||null!==localStorage.getItem(yv.AppUserControllersKeyName)}catch(e){return console.error(e),!1}}))}GetControllersDataAsync(){return mv(this,void 0,void 0,(function*(){try{if(this.isIosNavtie()){let e=yield yv.GetIosControllerList();return void 0===e?null:e}{if(this.IsExalusNativeMigrationAvailable()){let e=yield navigator.exalusMigration.GetControllersDataAsync();return void 0===e?null:e}let e=localStorage.getItem(yv.AppUserControllersKeyName);return null!==e?JSON.parse(e):null}}catch(e){return console.error(e),null}}))}GetLanguageCodeAsync(){return mv(this,void 0,void 0,(function*(){try{if(this.isIosNavtie()){let e=yield yv.GetIosDefaultLanguage();return void 0===e?null:e}{if(this.IsExalusNativeMigrationAvailable()){let e=yield navigator.exalusMigration.GetLanguageCodeAsync();return void 0===e?null:e}let e=localStorage.getItem(yv.AppSelectedLanguageKeyName);return null!=e?e:null}}catch(e){return console.error(e),null}}))}static GetIosMigrationStatus(e=8e3){let t;return new Promise(((n,r)=>{t=setTimeout((()=>{r(null)}),e);try{window.nativeEvent.exalusControllerData.isMigrationAvaliable=e=>{clearTimeout(t),n(e)},window.webkit.messageHandlers.exalusControllerData.postMessage("IsMigrationAvaliable")}catch(e){r(e)}}))}static GetIosControllerList(e=8e3){let t;return new Promise(((n,r)=>{t=setTimeout((()=>{r(null)}),e);try{window.nativeEvent.exalusControllerData.handleControllers=e=>{clearTimeout(t),n(e)},window.webkit.messageHandlers.exalusControllerData.postMessage("GetControllers")}catch(e){r(e)}}))}static GetIosDefaultLanguage(e=8e3){let t;return new Promise(((n,r)=>{t=setTimeout((()=>{r(null)}),e);try{window.nativeEvent.exalusControllerData.handleLanguage=e=>{clearTimeout(t),n(e)},window.webkit.messageHandlers.exalusControllerData.postMessage("GetDefaultLanguage")}catch(e){r(e)}}))}isIosNavtie(){var e;const t=null!=window.webkit&&null!=window.webkit.messageHandlers,n=void 0!==(null===(e=window.nativeEvent)||void 0===e?void 0:e.exalusControllerData);return t&&n}}yv.AppSelectedLanguageKeyName="App___SelectedLanguage",yv.AppUserControllersKeyName="App___UserControllersListDatabase",yv.ServiceName="DataMigrationService";var wv=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class Sv{constructor(){this._localIpAddress=null,this._publicIpAddress=null,this._gatewayIpAddress=null,this._macAddress=null,this._isInLocalNetwork=!1,this.nativeFindControllerApi=null,void 0!==navigator.findEfcController&&(this.nativeFindControllerApi=navigator.findEfcController),this._connection=$v.Get(Ut.ServiceName),this._logger=$v.Get(r.ServiceName),this._storage=$v.Get(s.ServiceName),$v.Get(Je.ServiceName).OnUserLoggedInEvent().Subscribe((e=>wv(this,void 0,void 0,(function*(){var e;try{const t=yield this.GetControllerNetworkConfigurationAsync();if(null!=t){this._localIpAddress=t.LocalIPv4,this._publicIpAddress=t.PublicIPv4,this._gatewayIpAddress=t.GatewayIPv4,this._macAddress=t.MAC,this._storage.Save(Sv.ServiceName,"LocalIpAddress",this._localIpAddress);const n=this.GetControllerHostName(this._connection.GetControllerSerialNumber());this._logger.Debug(`Looking for controller in local network with host name: ${n}`);let r=null;this.isIosNative()?r=yield this.getIosControllerIpAsync(n):null!==this.nativeFindControllerApi&&(r=yield null===(e=this.nativeFindControllerApi)||void 0===e?void 0:e.FindControllerAsync(n)),null!=r&&""!=r?(this._isInLocalNetwork=!0,this._logger.Debug(Sv.ServiceName,`Controller found in local network with ip address: ${r}`)):(this._isInLocalNetwork=!1,this._logger.Debug(Sv.ServiceName,"Controller not found in local network."))}else this._logger.Error(Sv.ServiceName,"Failed to get network configuration data.")}catch(e){this._logger.Error(Sv.ServiceName,`Failed to get network configuration data - ${e}`)}}))))}FindControllerInLocalNetworkAsync(e){return wv(this,void 0,void 0,(function*(){if(this.isIosNative()){const t=yield this.getIosControllerIpAsync(e);return""==t?null:t}return null!==this.nativeFindControllerApi?this.nativeFindControllerApi.FindControllerAsync(e):Promise.resolve(null)}))}GetLastKnownControllerLocalIpAddress(){return null!==this._localIpAddress?this._localIpAddress:this._storage.Read(Sv.ServiceName,"LocalIpAddress")}GetControllerHostName(e){return`ExalusTR7-${e}`}GetMdnsHostName(){return`ExalusTR7-${this.GetControllerHostName(this._connection.GetControllerSerialNumber())}.local`.toLowerCase()}GetControllerNetworkConfigurationAsync(){return wv(this,void 0,void 0,(function*(){var e;const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Av,2e4,!1);return null==t||null==t.Status||null==t.Data?(this._logger.Error(Sv.ServiceName,"Failed to get network configuration data - unknow error."),null):t.Data}))}GetServiceName(){return Sv.ServiceName}isIosNative(){var e;const t=null!=window.webkit&&null!=window.webkit.messageHandlers,n=void 0!==(null===(e=window.nativeEvent)||void 0===e?void 0:e.exalusFindController);return t&&n}getIosControllerIpAsync(e,t=2e4){let n;return new Promise(((r,o)=>{n=setTimeout((()=>{this._logger.Error("Cannot find controller in local network, timeout!"),r("")}),t);try{window.nativeEvent.exalusFindController.handleFindController=e=>{clearTimeout(n),r(e)},window.webkit.messageHandlers.exalusFindController.postMessage(e)}catch(e){this._logger.Error(`Cannot find controller in local network, error: ${e}`),r("")}}))}}Sv.ServiceName="FindControllerService";class Av extends ae{constructor(){super(),this.Resource="/network/lan/",this.Method=ue.Get}}var _v,Cv,Dv,Tv=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class kv{constructor(){this._errorOccuredEvent=new n,this._connectionStateChangedEvent=new n,this._dataReceivedEvent=new n,this._onMessageReceived=new n,this._log=$v.Get(r.ServiceName),this._controllerConfiguration=null,this._cache=null,this._session=null,this._logPackets=!0,this.socket=null,this._address=null,this._port="81",this._isOpen=!1,this._pin=void 0,this._serial=void 0,this._auth=null,this._initialized=!1}SendAndHandleStreamAsync(e,t,n){throw new Error("Method not implemented.")}Initialize(){this._initialized||(this._initialized=!0,this._controllerConfiguration=$v.Get(it.ServiceName),this._cache=$v.Get(Le.ServiceName),this._session=$v.Get(Je.ServiceName))}checkIfAuthInfoIsCorrectAsync(e){return Tv(this,void 0,void 0,(function*(){const t=`http://${window.location.hostname}/controller_info`;let n=yield fetch(t,{method:"GET"});return!!n.ok&&(yield n.text())===`${e.SerialNumber}:${e.PIN}`}))}SubscribeTo(e,t){let n=n=>{n.Resource===e&&t(n)};return this.OnDataReceivedEvent().Subscribe(n),()=>this.OnDataReceivedEvent().Unsubscribe(n)}GetControllerSerialNumber(){return this._serial}GetControllerPin(){return this._pin}SetServersBrokerAddress(e){throw new Error("Method not implemented.")}SetDefaultPacketsBrokerAddress(e){throw new Error("Method not implemented.")}GetServerAddressAsync(){return $v.IsRunningFromLocalNetwork()&&(this._address=`${window.location.hostname}:${this._port}`),Promise.resolve(this._address)}ConnectAsync(e){return new Promise(((t,n)=>{var r;this.Initialize(),null===(r=this.socket)||void 0===r||r.close(),this.socket=new WebSocket(`ws://${e}/api`),this._log.Debug(kv.ServiceName,`Connecting to the WebSockets server ${e}`),this.socket.onerror=t=>(this._log.Debug(kv.ServiceName,`Error occured in the WebSockets server ${e} info: \n${JSON.stringify(t)}`),this._isOpen=!1,this._errorOccuredEvent.Invoke(["WebSockets",t.toString()]),n(de.FailedToConnect)),this.socket.onopen=n=>(this._log.Debug(kv.ServiceName,`Connected to the WebSockets server ${e} info: \n${JSON.stringify(n)}`),this._isOpen=!0,this._connectionStateChangedEvent.Invoke(he.Connected),t(de.Connected)),this.socket.onclose=t=>{this._log.Debug(kv.ServiceName,`Disconnected from the WebSockets server ${e} info: \n${JSON.stringify(t)}`),this._isOpen=!1,this._connectionStateChangedEvent.Invoke(he.Disconnected)},this.socket.onmessage=t=>{this._log.Debug(kv.ServiceName,`Message received from the WebSockets server ${e}: ${t.data}`),this._onMessageReceived.Invoke(t.data);try{let e=JSON.parse(t.data);this._log.Debug(kv.ServiceName,`Received data frame: ${e.Status}`),this._dataReceivedEvent.Invoke(e)}catch(e){this._log.Error(kv.ServiceName,`Failed to parse message: ${t.data}`)}},this._connectionStateChangedEvent.Invoke(he.Connecting)}))}AuthorizeAsync(e){return Tv(this,void 0,void 0,(function*(){return!!(yield this.checkIfAuthInfoIsCorrectAsync(e))&&(this._log.Debug(kv.ServiceName,`Authorization successful for controller ${e.SerialNumber}`),this._pin=e.PIN,this._serial=e.SerialNumber,this._auth=e,!0)}))}ConnectAndAuthorizeAsync(e){return Tv(this,void 0,void 0,(function*(){if(this._log.Debug(kv.ServiceName,`Connecting and authorizing to the controller ${e.SerialNumber}`),!(yield this.AuthorizeAsync(e)))return de.AuthorizationFailed;let t=yield this.GetServerAddressAsync();return null==t?de.FailedToConnectToServer:yield this.ConnectAsync(t)}))}DisconnectAsync(){var e;return this._log.Debug(kv.ServiceName,`Disconnecting from the WebSockets server ${this._address}`),this._connectionStateChangedEvent.Invoke(he.Disconnecting),null===(e=this.socket)||void 0===e||e.close(),Promise.resolve()}IsConnected(){return this._isOpen}EnablePacketsLogging(){this._log.Debug(kv.ServiceName,"Packets logging enabled"),this._logPackets=!0}DisablePacketsLogging(){this._log.Debug(kv.ServiceName,"Packets logging disabled"),this._logPackets=!1}SendData(e,t){var n;let r=JSON.stringify(e);return t&&this._log.Debug(kv.ServiceName,`Sending data frame: ${r}`),this._isOpen?null===(n=this.socket)||void 0===n||n.send(r):this._log.Error(kv.ServiceName,`Failed to send data frame: ${r}`),this._isOpen}SendAsync(e){return this._isOpen?Promise.resolve(this.SendData(e,this._logPackets)):Promise.resolve(!1)}SendAndWaitForResponseAsync(e,t,n,r=!0){return this.SendAndWaitForResponseWithRepeatAsync(e,t,n,r)}SendAndHandleResponseAsync(e,t,n,r){return Tv(this,void 0,void 0,(function*(){var o;let s=0;const i=Date.now();if(!this.IsConnected())throw new Error("Connection is not established");return"/users/user/login"!==e.Resource&&(yield null===(o=this._session)||void 0===o?void 0:o.WaitForSessionCreationAsync()),new Promise(((o,a)=>Tv(this,void 0,void 0,(function*(){const c=()=>window.setTimeout((()=>{this._dataReceivedEvent.Unsubscribe(u);let t=`Response timeout, resource: ${e.Resource} method: ${e.Method} transaction id: ${e.TransactionId}`;this._log.Error(kv.ServiceName,t),a(new Error(t))}),t);let u=l=>Tv(this,void 0,void 0,(function*(){var d,h,p;if((null==l?void 0:l.TransactionId)==e.TransactionId){window.clearTimeout(s);const g=Date.now()-i;switch((r||!0===window.packets)&&this._log.Debug(kv.ServiceName,`Received response for: ${null==l?void 0:l.Resource} ${null==l?void 0:l.Method} id: ${null==l?void 0:l.TransactionId} in ${g}ms`),(null==l?void 0:l.Status)===ce.UserIsNotLoggedIn&&(this._dataReceivedEvent.Unsubscribe(u),(null===(d=this._session)||void 0===d?void 0:d.OnUserLoggedOutEvent()).Invoke(null===(h=this._session)||void 0===h?void 0:h.User),yield null===(p=this._session)||void 0===p?void 0:p.RestoreSessionAsync(),o(yield this.SendAndHandleResponseAsync(e,t,n,r))),null==l?void 0:l.Status){case ce.MultiDataResponseStart:case ce.MultiDataResponse:n(l),s=c();break;case ce.MultiDataResponseStop:case ce.FatalError:case ce.Error:n(l),this._dataReceivedEvent.Unsubscribe(u),o();break;default:let t=`Failed to process MultiDataResponse - recived incorrect response status: ${null==l?void 0:l.Status} method: ${e.Method} transaction id: ${e.TransactionId}\n make sure that the requested endpoint uses MultiDataResponse, otherwise use SendAndWaitForResponseAsync<T> method.`;a(new Error(t))}}}));if(this._dataReceivedEvent.Subscribe(u),s=c(),!this.SendData(e,r)){let t=`Failed to send request, resource: ${e.Resource} method: ${e.Method} transaction id: ${e.TransactionId}`;a(new Error(t))}}))))}))}SendAndWaitForResponseWithRepeatAsync(e,t,n){return Tv(this,arguments,void 0,(function*(e,t,n,r=!0,o=!0){var s,i,a;if(e.Method===ue.Get&&n&&!(yield null===(s=this._controllerConfiguration)||void 0===s?void 0:s.DidCofigurationChangeAsync())){let t=null===(i=this._cache)||void 0===i?void 0:i.GetCache(e);if(null!==t)return Promise.resolve(t)}let c=0;const u=Date.now();if(!this.IsConnected())throw new Error("Connection is not established");return"/users/user/login"!==e.Resource&&(yield null===(a=this._session)||void 0===a?void 0:a.WaitForSessionCreationAsync()),new Promise(((s,i)=>Tv(this,void 0,void 0,(function*(){let a=i=>Tv(this,void 0,void 0,(function*(){var l,d,h,p;if((null==i?void 0:i.TransactionId)==e.TransactionId){window.clearTimeout(c),this._dataReceivedEvent.Unsubscribe(a);const g=Date.now()-u;o&&this._log.Debug(kv.ServiceName,`Received response for: ${null==i?void 0:i.Resource} ${null==i?void 0:i.Method} id: ${null==i?void 0:i.TransactionId} in ${g}ms`),e.Method===ue.Get&&n&&(null===(l=this._cache)||void 0===l||l.Cache(i)),!n&&(null==i?void 0:i.Status)===ce.UserIsNotLoggedIn&&r&&((null===(d=this._session)||void 0===d?void 0:d.OnUserLoggedOutEvent()).Invoke(null===(h=this._session)||void 0===h?void 0:h.User),yield null===(p=this._session)||void 0===p?void 0:p.RestoreSessionAsync(),s(yield this.SendAndWaitForResponseWithRepeatAsync(e,t,n,!1,o))),s(i)}}));if(this._dataReceivedEvent.Subscribe(a),c=window.setTimeout((()=>{this._dataReceivedEvent.Unsubscribe(a);let t=`Response timeout, resource: ${e.Resource} method: ${e.Method} transaction id: ${e.TransactionId}`;this._log.Error(kv.ServiceName,t),i(new Error(t))}),t),!this.SendData(e,o)){let t=`Failed to send request, resource: ${e.Resource} method: ${e.Method} transaction id: ${e.TransactionId}`;i(new Error(t))}}))))}))}OnDataReceivedEvent(){return this._dataReceivedEvent}OnErrorOccuredEvent(){return this._errorOccuredEvent}OnConnectionStateChangedEvent(){return this._connectionStateChangedEvent}GetAuthorizationInfo(){return this._auth}GetServiceName(){return kv.ServiceName}}kv.ServiceName="ExalusConnectionService";class Ev{constructor(){var e,t;this.OnEnteredPictureInPicture=new Te,this.OnExitedPictureInPicture=new Te,this._nativeApi=null,this.IsSupported()?(this._nativeApi=navigator.pip,null===(e=this._nativeApi)||void 0===e||e.OnEnteredPictureInPicture.Subscribe((()=>this.OnEnteredPictureInPicture.Invoke())),null===(t=this._nativeApi)||void 0===t||t.OnExitedPictureInPicture.Subscribe((()=>this.OnExitedPictureInPicture.Invoke()))):navigator.pip=null}IsSupported(){return void 0!==navigator.pip&&null!==navigator.pip}RequestPictureInPictureAsync(){return this.IsSupported()?this._nativeApi.RequestPictureInPictureAsync():Promise.resolve(!1)}GetServiceName(){return Ev.ServiceName}}Ev.ServiceName="PictureInPictureService",(Dv=_v||(_v={}))[Dv.Unknown=-1]="Unknown",Dv[Dv.Web=0]="Web",Dv[Dv.Android=1]="Android",Dv[Dv.iOS=2]="iOS";class Gv{constructor(){this.ClientName="",this.LavvaUserName="",this.ClientType=_v.Unknown,this.TokenGuid="",this.Token="",this.RegistrationDate=new Date}}!function(e){e.FeatureUnsupported="FeatureUnsupported",e.UnknownError="UnknownError",e.NoData="NoData",e.IncorrectGuid="IncorrectGuid",e.IdentityIsEmpty="IdentityIsEmpty",e.DeviceTokenIsEmpty="DeviceTokenIsEmpty",e.ClientNameIsEmpty="ClientNameIsEmpty",e.LavvaUserNameIsEmpty="LavvaUserNameIsEmpty",e.TokenNotFound="TokenNotFound",e.TokensNotFoundForLavvaUser="TokensNotFoundForLavvaUser"}(Cv||(Cv={}));var Nv=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class bv{constructor(){this._connection=$v.Get(Ut.ServiceName),this._logger=$v.Get(r.ServiceName)}GetServiceName(){return bv.ServiceName}RegisterNotificationsClientAsync(e){return Nv(this,void 0,void 0,(function*(){var t;try{const n=new Iv({ClientName:e.ClientName,DeviceToken:e.DeviceToken,LavvaUserName:e.LavvaUserName,ClientType:this.getClientType(),NotificationsEnabledForToken:e.EnableNotifications}),r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(n,8e3,!1);if(null==r||null==r.Status)return new Ee(Cv.UnknownError,"Cannot register notifications client - unknown error!");switch(r.Status){case ce.WrongData:{const e=this.isValidErrorCode(r.Data)?r.Data:Cv.UnknownError;return new Ee(e,"Cannot register notifications client - wrong data!")}case ce.ResourceDoesNotExists:return new Ee(Cv.FeatureUnsupported,"Notifications feature not supported in controller!");case ce.OK:return"string"==typeof r.Data?r.Data:new Ee(Cv.NoData,"Cannot register notifications client - result status is OK, but no token guid presented in paylode, unknown error!");default:return new Ee(Cv.UnknownError,"Cannot register notifications client - unknown error!")}}catch(e){return new Ee(Cv.UnknownError,`Cannot register notifications client - error: ${e}`)}}))}UpdateNotificationsClientAsync(e,t){return Nv(this,void 0,void 0,(function*(){var n;try{const r=new Rv({ClientName:t.ClientName,DeviceToken:t.DeviceToken,LavvaUserName:t.LavvaUserName,ClientType:this.getClientType(),NotificationsEnabledForToken:t.EnableNotifications,Guid:e}),o=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(r,8e3,!1);if(null==o||null==o.Status)return new Ee(Cv.UnknownError,"Cannot update notifications client - unknown error!");switch(o.Status){case ce.WrongData:{const e=this.isValidErrorCode(o.Data)?o.Data:Cv.UnknownError;return new Ee(e,"Cannot update notifications client - wrong data!")}case ce.ResourceDoesNotExists:return new Ee(Cv.FeatureUnsupported,"Notifications feature not supported in controller!");case ce.OK:return"string"==typeof o.Data?o.Data==e?ce.OK:new Ee(Cv.UnknownError,`Cannot update notifications client - result status is OK, but token guid is different! request guid ${e}, response guid: ${o.Data}`):new Ee(Cv.NoData,"Cannot update notifications client - result status is OK, but no token guid presented in paylode, unknown error!");default:return new Ee(Cv.UnknownError,"Cannot update notifications client - unknown error!")}}catch(e){return this._logger.Error(`Cannot update notifications client - error: ${e}`),new Ee(Cv.UnknownError,`Cannot update notifications client - error: ${e}`)}}))}GetRegisteredNotificationsClientsMetadataAsync(e){return Nv(this,void 0,void 0,(function*(){var e;try{const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Pv,8e3,!1);return null==t||null==t.Status?new Ee(Cv.UnknownError,"Cannot get notifications clients metadata - unknown error!"):t.Status==ce.ResourceDoesNotExists?new Ee(Cv.FeatureUnsupported,"Notifications feature not supported in controller!"):t.Status!=ce.OK?new Ee(Cv.UnknownError,`Cannot get notifications clients metadata - response status: ${t.Status}}`):null==t.Data?new Ee(Cv.NoData,"Cannot get notifications clients metadata - response status is OK, but no data!"):t.Data.map((e=>{const t=new Gv;return t.ClientName=e.ClientName,t.LavvaUserName=e.LavvaUserName,t.ClientType=e.ClientType,t.TokenGuid=e.TokenGuid,t.Token=e.Token,t.RegistrationDate=new Date(e.RegistrationDate),t}))}catch(e){return this._logger.Error(`Cannot get notifications clients metadata - error: ${e}`),new Ee(Cv.UnknownError,`Cannot get notifications clients metadata - error: ${e}`)}}))}IsNotificationsEnabledForAllUserTokensAsync(e){return Nv(this,void 0,void 0,(function*(){var t;try{const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Lv(e),8e3,!1);if(null==n||null==n.Status)return new Ee(Cv.UnknownError,"Cannot get notifications status - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:case ce.WrongData:if(null==n.Data)return new Ee(Cv.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:Cv.UnknownError;return new Ee(e,"Cannot get notifications status!")}case ce.OK:return"boolean"==typeof n.Data?n.Data:new Ee(Cv.NoData,"Cannot get notifications status - result status is OK, but no data, or data type is wrong!");default:return new Ee(Cv.UnknownError,`Cannot get notifications - response code ${n.Status}}!`)}}catch(e){return this._logger.Error(`Cannot get notifications status - error: ${e}`),new Ee(Cv.UnknownError,`Cannot get notifications status - error: ${e}`)}}))}IsNotificationsEnabledAsync(e){return Nv(this,void 0,void 0,(function*(){var t;try{const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Ov(e),8e3,!1);if(null==n||null==n.Status)return new Ee(Cv.UnknownError,"Cannot get notifications status - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:if(null==n.Data)return new Ee(Cv.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:Cv.UnknownError;return new Ee(e,"Cannot get notifications status - resource not exists!")}case ce.OK:return"boolean"==typeof n.Data?n.Data:new Ee(Cv.NoData,"Cannot get notifications status - result status is OK, but no data, or data type is wrong!");default:return new Ee(Cv.UnknownError,`Cannot get notifications - response code ${n.Status}}!`)}}catch(e){return this._logger.Error(`Cannot get notifications status - error: ${e}`),new Ee(Cv.UnknownError,`Cannot get notifications status - error: ${e}`)}}))}EnableNotificationsAsync(e){return Nv(this,void 0,void 0,(function*(){var t;try{let n=null;null!=e&&""!=e&&(n=e);const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Uv(n),8e3,!1);if(null==r||null==r.Status)return new Ee(Cv.UnknownError,"Cannot enable notifications - unknown error!");switch(r.Status){case ce.ResourceDoesNotExists:if(null==r.Data)return new Ee(Cv.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(r.Data)?r.Data:Cv.UnknownError;return new Ee(e,"Cannot enable notifications - resource not exists!")}case ce.OK:return ce.OK;default:return new Ee(Cv.UnknownError,`Cannot enable notifications - response code ${r.Status}}!`)}}catch(e){return this._logger.Error(`Cannot enable notifications - error: ${e}`),new Ee(Cv.UnknownError,`Cannot enable notifications - error: ${e}`)}}))}EnableNotificationsForAllUserTokensAsync(e){return Nv(this,void 0,void 0,(function*(){var t;try{const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new xv(e),8e3,!1);if(null==n||null==n.Status)return new Ee(Cv.UnknownError,"Cannot enable notifications - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:case ce.WrongData:if(null==n.Data)return new Ee(Cv.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:Cv.UnknownError;return new Ee(e,"Cannot enable notifications!")}case ce.OK:return ce.OK;default:return new Ee(Cv.UnknownError,`Cannot enable notifications - response code ${n.Status}!`)}}catch(t){return this._logger.Error(`Cannot enable notifications for lavva user ${e} - error: ${t}`),new Ee(Cv.UnknownError,`Cannot disable notifications for lavva user ${e} - error: ${t}`)}}))}DisableNotificationsAsync(e){return Nv(this,void 0,void 0,(function*(){var t;try{let n=null;null!=e&&""!=e&&(n=e);const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Mv(n),8e3,!1);if(null==r||null==r.Status)return new Ee(Cv.UnknownError,"Cannot disable notifications - unknown error!");switch(r.Status){case ce.ResourceDoesNotExists:if(null==r.Data)return new Ee(Cv.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(r.Data)?r.Data:Cv.UnknownError;return new Ee(e,"Cannot disable notifications - resource not exists!")}case ce.OK:return ce.OK;default:return new Ee(Cv.UnknownError,`Cannot disable notifications - response code ${r.Status}!`)}}catch(e){return this._logger.Error(`Cannot disable notifications - error: ${e}`),new Ee(Cv.UnknownError,`Cannot disable notifications - error: ${e}`)}}))}DisableNotificationsForAllUserTokensAsync(e){return Nv(this,void 0,void 0,(function*(){var t;try{const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Fv(e),8e3,!1);if(null==n||null==n.Status)return new Ee(Cv.UnknownError,"Cannot disable notifications - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:case ce.WrongData:if(null==n.Data)return new Ee(Cv.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:Cv.UnknownError;return new Ee(e,"Cannot disable notifications!")}case ce.OK:return ce.OK;default:return new Ee(Cv.UnknownError,`Cannot disable notifications - response code ${n.Status}!`)}}catch(t){return this._logger.Error(`Cannot disable notifications for lavva user ${e} - error: ${t}`),new Ee(Cv.UnknownError,`Cannot disable notifications for lavva user ${e} - error: ${t}`)}}))}getClientType(){return this.isIos()?_v.iOS:navigator.userAgent.endsWith("LavvaAndroidNative")?_v.Android:_v.Web}isValidErrorCode(e){return Object.values(Cv).includes(e)}isIos(){return null!=window.webkit&&null!=window.webkit.messageHandlers}}bv.ServiceName="NotificationsService";class Iv extends ae{constructor(e){super(),this.Resource="/notifications/token",this.Method=ue.Post,this.Data=e}}class Rv extends ae{constructor(e){super(),this.Resource="/notifications/token",this.Method=ue.Put,this.Data=e}}class Pv extends ae{constructor(){super(),this.Resource="/notifications/tokens/metadata",this.Method=ue.Get}}class Ov extends ae{constructor(e){super(),this.Resource="/notifications/status",this.Method=ue.Get,this.Data={TokenIdentity:e}}}class Uv extends ae{constructor(e){super(),this.Resource="/notifications/enable",this.Method=ue.Post,this.Data=e}}class Mv extends ae{constructor(e){super(),this.Resource="/notifications/disable",this.Method=ue.Post,this.Data=e}}class xv extends ae{constructor(e){super(),this.Resource="/notifications/enable/for/lavva/user",this.Method=ue.Post,this.Data=e}}class Fv extends ae{constructor(e){super(),this.Resource="/notifications/disable/for/lavva/user",this.Method=ue.Post,this.Data=e}}class Lv extends ae{constructor(e){super(),this.Resource="/notifications/status/for/lavva/user",this.Method=ue.Get,this.Data=e}}class Bv{CheckLocationPermissionAsync(){return this.IsAndroidLocationAvailable()?navigator.AndroidLocation.CheckLocationPermissionAsync():Promise.resolve(!1)}RequestLocationPermissionAsync(){return this.IsAndroidLocationAvailable()?navigator.AndroidLocation.RequestLocationPermissionAsync():Promise.resolve(!1)}IsAndroidLocationAvailable(){return void 0!==navigator.AndroidLocation}GetServiceName(){return Bv.ServiceName}}Bv.ServiceName="AndroidLocationService";class Wv{IsAndroidNotificationsAvailable(){return void 0!==navigator.AndroidNotifications}CheckNotificationPermissionAsync(){return this.IsAndroidNotificationsAvailable()?navigator.AndroidNotifications.CheckNotificationPermissionAsync():Promise.resolve(!1)}RequestNotificationPermissionAsync(){return this.IsAndroidNotificationsAvailable()?navigator.AndroidNotifications.RequestNotificationPermissionAsync():Promise.resolve(!1)}GetDeviceFirebaseTokenAsync(){return this.IsAndroidNotificationsAvailable()?navigator.AndroidNotifications.GetDeviceFirebaseTokenAsync():Promise.resolve(null)}GetServiceName(){return Wv.ServiceName}}Wv.ServiceName="AndroidNotificationsService",ou(Map),ou(Set),(()=>{const e=String.prototype,t=Object.getOwnPropertyNames(di.prototype);for(const n of t)e[n]=e[n]??di.prototype[n];e.first=function(e){if(e){for(let t=0;t<this.length;t++){const n=this[t];if(!0===e(n))return n}throw new ai(ii.NoMatch)}if(0===this.length)throw new ai(ii.NoElements);return this[0]},e.firstOrDefault=function(e){if(e){for(let t=0;t<this.length;t++){const n=this[t];if(!0===e(n))return n}return null}return 0===this.length?null:this[0]},e.count=function(e){if(e){let t=0;for(let n=0;n<this.length;n++)!0===e(this[n])&&t++;return t}return this.length},e.elementAt=function(e){if(e<0||e>=this.length)throw new si("index");return this[e]},e.elementAtOrDefault=function(e){return this[e]||null},e.last=function(e){if(e){for(let t=this.length-1;t>=0;t--){const n=this[t];if(!0===e(n))return n}throw new ai(ii.NoMatch)}if(0===this.length)throw new ai(ii.NoElements);return this[this.length-1]},e.lastOrDefault=function(e){if(e){for(let t=this.length-1;t>=0;t--){const n=this[t];if(!0===e(n))return n}return null}return 0===this.length?null:this[this.length-1]},e.reverse=function(){const e=this;return new di((function*(){for(let t=e.length-1;t>=0;t--)yield e[t]}))}})(),ag(Array),ag(Int8Array),ag(Int16Array),ag(Int32Array),ag(Uint8Array),ag(Uint8ClampedArray),ag(Uint16Array),ag(Uint32Array),ag(Float32Array),ag(Float64Array);class $v{static Init(){if(o.IsInitialized)return;let e=o.Instance;try{e.RegisterService(new yv),e.RegisterService(new s),e.RegisterService(new qg),e.RegisterService(new Le),e.RegisterService(new Je),e.RegisterService(new Ev),$v.IsRunningFromLocalNetwork()?(console.log("\n\nRunning from local network!\n\n"),e.RegisterService(new kv)):e.RegisterService(new Ut),e.RegisterService(new Bv),e.RegisterService(new Wv),e.RegisterService(new fo),e.RegisterService(new fo),e.RegisterService(new To),e.RegisterService(new it),e.RegisterService(new Sv),e.RegisterService(new lo),e.RegisterService(new tt),e.RegisterService(new be),e.RegisterService(new We),e.RegisterService(new Bs),e.RegisterService(new pg),e.RegisterService(new Yo),e.RegisterService(new af),e.RegisterService(new hv),e.RegisterService(new Uf),e.RegisterService(new Gs),e.RegisterService(new uv),e.RegisterService(new bv)}catch(e){console.error(e)}}static IsAppServedFromControllerAsync(){const e=`http://${window.location.hostname}/controller_info`;return fetch(e,{method:"GET"}).then((e=>!!e.ok)).catch((e=>!1))}static IsRunningFromLocalNetwork(e=window.location.hostname){return e.startsWith("192.168.")||e.startsWith("10.")}static GetAsync(e,t){return o.Instance.GetServiceAsync(e,t)}static GetWithTimeoutAsync(e,t){return o.Instance.GetServiceWithTimeoutAsync(e,t)}static Get(e){return o.Instance.GetService(e)}static SleepForAsync(e){return new Promise((t=>setTimeout(t,e)))}static ExportStringAsFileToDownload(e,t){const n=new Blob([t],{type:"text/plain"}),r=document.createElement("a"),o=window.URL.createObjectURL(n);return r.href=o,r.download=e,r}}$v.WorksInContextOf="",$v.Version=1;var qv=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class Vv{constructor(e){this._protocolGuid=e.ExtensionGuid,this._protocolExtGuid=e.ExtensionGuid,this._connection=$v.Get(Ut.ServiceName)}get ProtocolExtensionGuid(){return this._protocolExtGuid}get ProtocolGuid(){return this._protocolGuid}GetServiceName(){return Vv.ServiceName}GetDevicesForManualPairingAsync(){return qv(this,void 0,void 0,(function*(){var e;const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Kv,8e3,!1);return null==t||null==t.Data||t.Status!=ce.OK?[]:t.Data.map((e=>{const t=new Hv;return t.Channels=e.Channels,t.Description=e.Description,t.Model=e.Model,t.ModelGuid=e.ModelGuid,t.ProtocolExtensionGuid=this._protocolExtGuid,t.IconType=e.IconType,t}))}))}AddManuallyPairedDeviceAsync(e){return qv(this,void 0,void 0,(function*(){var t;const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new jv(e.ModelGuid),8e3,!1);return $v.Get(r.ServiceName).Error(Vv.ServiceName,"EXIT CONFIGURATION MODE WILL BE FIRED! AddManuallyPairedDeviceAsync()"),yield $v.Get(it.ServiceName).ExitConfigurationModeAsync(),null==n||null==n.Status||n.Status!=ce.OK?Gt.Failed:null==n.Data?Gt.Unknown:Gt.Executed}))}}Vv.ServiceName="PortosManualDevicePairingService";class Hv{constructor(){this._modelGuid="",this._model="",this._description="",this._channels=0,this._protocolExtGuid="",this._iconType=At.Unknown}get IconType(){return this._iconType}set IconType(e){this._iconType=e}get ModelGuid(){return this._modelGuid}set ModelGuid(e){this._modelGuid=e}get Model(){return this._model}set Model(e){this._model=e}get Description(){return this._description}set Description(e){this._description=e}get Channels(){return this._channels}set Channels(e){this._channels=e}set ProtocolExtensionGuid(e){this._protocolExtGuid=e}get ProtocolExtensionGuid(){return this._protocolExtGuid}}class Kv extends ae{constructor(){super(),this.Resource="/portos/devices/manual/pair/available",this.Method=ue.Get}}class jv extends ae{constructor(e){super(),this.Resource="/portos/devices/device/create",this.Method=ue.Put,this.Data={DeviceModelGuid:e}}}class zv{constructor(){this._connection=$v.Get(Ut.ServiceName),this._logger=$v.Get(r.ServiceName)}GetServiceName(){return zv.ServiceName}SendP2PairingSignalAsync(e,t){return n=this,r=void 0,s=function*(){var n;try{if(!e.Channels.any((e=>e.Number===t)))return this._logger.Error(zv.ServiceName,"Cannot pair channel. Wrong channel number."),ce.WrongData;const r=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new Jv(new Xv(e.Guid,t)),8e3,!1);return null==r||null==r.Status?(this._logger.Error(zv.ServiceName,"Cannot pair channel. Controller response does not contain data."),ce.Error):(r.Status!==ce.OK&&this._logger.Error(zv.ServiceName,`Cannot pair channel. Controller responede with status code: ${r.Status}`),r.Status)}catch(e){return this._logger.Error(zv.ServiceName,`Cannot pair channel. ${e}`),ce.FatalError}},new((o=void 0)||(o=Promise))((function(e,t){function i(e){try{c(s.next(e))}catch(e){t(e)}}function a(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(i,a)}c((s=s.apply(n,r||[])).next())}));var n,r,o,s}}zv.ServiceName="Portos433ConfigService";class Jv extends ae{constructor(e){super(),this.Resource="/portos/devices/device/channel/pair",this.Method=ue.Put,this.Data=e}}class Xv{constructor(e,t){this.DeviceGuid="",this.Channel=0,this.DeviceGuid=e,this.Channel=t}}var Yv=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class Qv{constructor(e,t){this._apiVersion=e.APIVersion,this._extenstionVersion=e.ExtensionVersion,this._protocolExtGuid=e.ExtensionGuid,this._runtimeInfo=t}get ExtensionGuid(){return this._protocolExtGuid}get ProtocolGuid(){return om.PortosExtensionGuid}get AvailableExtensionVersion(){return this._extenstionVersion}get AvailableApiVersion(){return this._apiVersion}get ProviderType(){return _o.Device}GetUpdateProviderName(){return`${Qv.ProviderName}_${this._apiVersion}_${this._extenstionVersion}`}GetAvailableUpdateAsync(e){throw new Error("Method not implemented.")}InstallUpdateAsync(e,t,n){throw new Error("Method not implemented.")}GetSoftwareVersionAsync(e){throw new Error("Method not implemented.")}CheckUpdateBulkAsync(e){return Yv(this,void 0,void 0,(function*(){return[]}))}InstalUpdateBulkAsync(e,t,n){return Yv(this,void 0,void 0,(function*(){throw new Error("Method not implemented.")}))}}Qv.ProviderName="PortosDeviceUpdateProvider";var Zv=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class em{constructor(e,t){this._apiVersion=e.APIVersion,this._extenstionVersion=e.ExtensionVersion,this._protocolExtGuid=e.ExtensionGuid,this._runtimeInfo=t,this._logger=$v.Get(r.ServiceName),this._connection=$v.Get(Ut.ServiceName)}get AvailableExtensionVersion(){return this._extenstionVersion}get AvailableApiVersion(){return this._apiVersion}get ExtensionGuid(){return this._protocolExtGuid}get ProtocolGuid(){return om.PortosProtocolGuid}get ProviderType(){return _o.Controller}GetUpdateProviderName(){return`${em.ProviderName}_${this._apiVersion}_${this._extenstionVersion}`}GetAvailableRadioUpdateAsync(){return Zv(this,void 0,void 0,(function*(){var e,t;if(this._logger.Debug(em.ProviderName,"Checking for Portos 433 MHz adio firmware upgrade..."),null===(e=(yield $v.Get(Yo.ServiceName).GetHardwareInfoAsync()).GetAvailableHardware.first((e=>"/proc"==e.DevicePath)))||void 0===e?void 0:e.DisplayName.contains("AM3352"))return new Ee(Fg.UnsupportedDevice,"Cannot get available updates! This Portos module does not support updates.");if(parseFloat(this._extenstionVersion)<.1200518)return new Ee(Fg.UnsupportedExtensionVersion,`Cannot get available updates! Portos 433 MHz extension is too old for upgrade. Version: ${this._extenstionVersion}`);const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new tm,8e3,!1);let r=.2;null!=n&&null!=n.Data&&(r=n.Data),this._logger.Debug(em.ProviderName,`Portos 433MHz radio firmware version: ${r}`);var o=`https://updates.tr7.pl/firmware/${this._runtimeInfo.UpdateChannel}/${r}/${om.PortosRadioModuleDeviceGuid}`;try{this._logger.Debug(`Looking for update at: ${o}/${r}/update.json`);let e,t=yield fetch(`${o}/${r}/update.json`),n=new bo;if(200===t.status)null!=t.body&&(e=yield t.json());else switch(this._logger.Debug(`Looking for update at: ${o}/update.json`),t=yield fetch(`${o}/update.json`),t.status){case 200:null!=t.body&&(e=yield t.json());break;case 404:return new Ee(Fg.DeviceIsUpToDate,"Updates not found, radio Portos 433MHz is already up-to-date.");default:return new Ee(Fg.CannotGetUpdates,`Response status code does not indicate success. Status: ${t.status}`)}if(null!=e)return e.UpdateType=Co.RadioFirmware,n.CurrentResourceVersion=r.toString(),n.UpdatedResourceName="Radio Portos 433MHz",n.UpdateDescription=new Map([["pl-PL",e.Description]]),n.Update=e,n;throw new Error(`Cannot get Update Data from response. Status: ${t.status}`)}catch(e){return new Ee(Fg.CannotGetUpdates,`Cannot get available updates! ${e}`)}}))}InstallRadioUpdateAsync(e,t,n){return Zv(this,void 0,void 0,(function*(){var r;if(null!=n)return new Ee(Fg.UpdateActionsNotSupported,`Update service for given resource: ${e.UpdatedResourceName} does not support custom update actions.`);const o=new zg;o.UpdatedResourceName=new Map([["pl-PL",e.UpdatedResourceName],["en-US",e.UpdatedResourceName]]);try{yield null===(r=this._connection)||void 0===r?void 0:r.SendAndHandleResponseAsync(new nm(e.Update.DownloadUri),12e3,(n=>{switch(n.Status){case ce.MultiDataResponseStart:o.Status=Rg.PreparingForUpgrade;break;case ce.MultiDataResponse:if(null==n.Data)return void this._logger.Warning(em.ProviderName,`Recived update response without data! URI: ${e.Update.DownloadUri}`);o.Percentage=n.Data,o.Status=Rg.Upgrading;break;case ce.MultiDataResponseStop:n.Data?(o.Percentage=100,o.Status=Rg.Upgraded):o.Status=Rg.InstallationError}this._logger.Debug(em.ProviderName,`Recived update progress response, percentage: ${o.Percentage}, status: ${o.Status}, resource name: ${e.UpdatedResourceName}`),t(o)}),!1)}catch(e){return o.Percentage=0,o.Status=Rg.Error,t(o),new Ee(Fg.CannotProcessUpdate,`Cannot process update, error: ${e}`)}return ce.OK}))}GetCurrentRadioVersionAsync(){return Zv(this,void 0,void 0,(function*(){var e;const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new tm,8e3,!1);return null!=t&&null!=t.Data?t.Data.toString():"n/a"}))}}em.ProviderName="PortosControllerUpdateProvider";class tm extends ae{constructor(){super(),this.Resource="/portos/radio/version",this.Method=ue.Get}}class nm extends ae{constructor(e){super(),this.Resource="/portos/radio/upgrade",this.Method=ue.Put,this.Data=e}}var rm=function(e,t,n,r){return new(n||(n=Promise))((function(o,s){function i(e){try{c(r.next(e))}catch(e){s(e)}}function a(e){try{c(r.throw(e))}catch(e){s(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))};class om{constructor(){this._services={Portos433ConfigService:new zv},this._servicesToDeviceMap=new Map([["080844eb-3ec1-4611-a327-757a634bd866",[this._services.Portos433ConfigService]],["179b750c-5c73-4a6c-865c-5cf85a27200b",[this._services.Portos433ConfigService]]])}GetServiceName(){return om.ServiceName}static Init(){o.Instance.RegisterService(new om),$v.Get(r.ServiceName).Debug(om.ServiceName,"Initialized PortosService"),om.RegisterManuallyPairedDeviceServiceAsync(),om.RegisterUpdateProviderAsync()}static RegisterManuallyPairedDeviceServiceAsync(){return rm(this,void 0,void 0,(function*(){const e=(yield $v.Get(tt.ServiceName).GetExtensionsInfoAsync(om.PortosExtensionGuid)).first();null!=e?($v.Get(r.ServiceName).Debug(om.ServiceName,"Registering Portos manually paired device service."),$v.Get(lo.ServiceName).RegisterManuallyPairedDevicesProtocol(new Vv(e))):$v.Get(r.ServiceName).Warning(om.ServiceName,"Portos manually paired device service not registered - controller does not support Portos extension.")}))}static RegisterUpdateProviderAsync(){return rm(this,void 0,void 0,(function*(){const e=yield $v.Get(Yo.ServiceName),t=(yield $v.Get(tt.ServiceName).GetExtensionsInfoAsync(om.PortosExtensionGuid)).first(),n=yield e.GetSoftwareRuntimeInfoAsync();null!=t?($v.Get(r.ServiceName).Debug(om.ServiceName,"Registering Portos update providers."),null==e||e.RegisterUpdatesProvider(new Qv(t,n)),null==e||e.RegisterUpdatesProvider(new em(t,n))):$v.Get(r.ServiceName).Warning(om.ServiceName,"Portos device update provider not registered - controller does not support Portos extension.")}))}GetDeviceServiceByServiceType(e){return"Portos433ConfigService"===e?this._services.Portos433ConfigService:null}GetDeviceService(e,t){let n=this.GetAllDeviceServices(e);return null!==n?n.firstOrDefault((e=>e.GetServiceName()===t)):null}GetAllDeviceServices(e){if(null!==e.ModelGuid){const t=this._servicesToDeviceMap.get(e.ModelGuid);return void 0!==t?t:[]}return[]}IsDeviceServiceSupported(e,t){return null!==this.GetDeviceService(e,t)}}om.ServiceName="PortosService",om.PortosExtensionGuid="ca9c9dee-8bf6-4688-a04f-1ce35693405f",om.PortosProtocolGuid="cd25bdff-628c-4dbc-a16a-648c96a819d4",om.PortosRadioModuleDeviceGuid="b015ecf2-14c9-4b35-81f1-d008f3a75442"})();
//# sourceMappingURL=exalushome-portos-bundle.js.map