lavva.exalushome 2.0.159 → 2.0.161

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- (()=>{"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:()=>$v});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=s.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 s{constructor(){this._services={},this._serviceRegistrationEvent=new n}static get Instance(){return null!=s._instance||(s._instance=new s,this.Log=new r,this.Log.Warning("Initializing DependencyContainer"),s._instance.RegisterService(this.Log),this.IsInitialized=!0,window.services=this),s._instance}RegisterService(e){var t;null===(t=s.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=s.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=s.Log)||void 0===n||n.Debug("DependencyContainer",`Waiting for service availability [${e}] by GetServiceAsync<T>()`),this._services.hasOwnProperty(e)?(null===(r=s.Log)||void 0===r||r.Debug("DependencyContainer",`Got service [${e}] by GetServiceAsync<T>()`),Promise.resolve(this._services[e])):new Promise(((n,r)=>{var o=t=>{var r;(null==t?void 0:t.GetServiceName())===e&&(null===(r=s.Log)||void 0===r||r.Debug("DependencyContainer",`Got service [${e}] by GetServiceAsync<T>()`),this._serviceRegistrationEvent.Unsubscribe(o),n(t))},i=()=>{var n;null===(n=s.Log)||void 0===n||n.Debug("DependencyContainer",`Cancelled service [${e}] retrieval by GetServiceAsync<T>()`),this._serviceRegistrationEvent.Unsubscribe(o),null==t||t.CancellationEvent.Unsubscribe(i),r(new Error("Operation cancelled!"))};null==t||t.CancellationEvent.Subscribe(i),this._serviceRegistrationEvent.Subscribe(o)}))}GetServiceWithTimeoutAsync(e,t){var n,r;return null===(n=s.Log)||void 0===n||n.Debug("DependencyContainer",`Waiting for service[${e}] availability by GetServiceWithTimeoutAsync<T>()`),this._services.hasOwnProperty(e)?(null===(r=s.Log)||void 0===r||r.Debug("DependencyContainer",`Got service [${e}] by GetServiceWithTimeoutAsync<T>()`),Promise.resolve(this._services[e])):new Promise(((n,r)=>{let o=0,i=e=>{var t;(null==e?void 0:e.GetClassName())===e&&(null===(t=s.Log)||void 0===t||t.Debug("DependencyContainer",`Got service [${e}] by GetServiceWithTimeoutAsync<T>()`),window.clearTimeout(o),this._serviceRegistrationEvent.Unsubscribe(i),n(e))};o=window.setTimeout((()=>{var t;window.clearTimeout(o),this._serviceRegistrationEvent.Unsubscribe(i),null===(t=s.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)}))}}s.IsInitialized=!1;class o{GetServiceName(){return o.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=s.Log)||void 0===n||n.Error(o.ServiceName,`Exception has occurred while reading ${this.GetResourceName(e,t)}`),null}}}o.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,T;!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 D{constructor(){}log(e,t){}}D.instance=new D;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 G{static get isBrowser(){return!G.isNode&&"object"==typeof window&&"object"==typeof window.document}static get isWebWorker(){return!G.isNode&&"object"==typeof self&&"importScripts"in self}static get isReactNative(){return!G.isNode&&"object"==typeof window&&void 0===window.document}static get isNode(){return"undefined"!=typeof process&&process.release&&"node"===process.release.name}}function b(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 E(e,t,n,r,s,o){const i={},[a,c]=P();i[a]=c,e.log(S.Trace,`(${t} transport) sending data. ${b(s,o.logMessageContent)}.`);const u=N(s)?"arraybuffer":"text",l=await n.post(r,{content:s,headers:{...i,...o.headers},responseType:u,timeout:o.timeout,withCredentials:o.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 G.isNode&&(e="User-Agent"),[e,O("8.0.7",U(),G.isNode?"NodeJS":"Browser",M())]}function O(e,t,n,r){let s="Microsoft SignalR/";const o=e.split(".");return s+=`${o[0]}.${o[1]}`,s+=` (${e}; `,s+=t&&""!==t?`${t}; `:"Unknown OS; ",s+=`${n}`,s+=r?`; ${r}`:"; Unknown Runtime Version",s+=")",s}function U(){if(!G.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(G.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||G.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,s=null;if(e.timeout){const r=e.timeout;s=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{s&&clearTimeout(s),e.abortSignal&&(e.abortSignal.onabort=null)}if(!r.ok){const e=await L(r,"text");throw new h(e||r.statusText,r.status)}const o=L(r,e.responseType),i=await o;return new u(r.status,r.statusText,i)}getCookieString(e){let t="";return G.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 s=e.headers;s&&Object.keys(s).forEach((e=>{r.setRequestHeader(e,s[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 $ extends l{constructor(e){if(super(),"undefined"!=typeof fetch||G.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 W{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 W,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(),s={[n]:r,...this._options.headers},o={abortSignal:this._pollAbort.signal,headers:s,timeout:1e5,withCredentials:this._options.withCredentials};t===_.Binary&&(o.responseType="arraybuffer");const i=`${e}&_=${Date.now()}`;this._logger.log(S.Trace,`(LongPolling transport) polling: ${i}.`);const a=await this._httpClient.get(i,o);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,o)}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. ${b(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?E(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 s;try{await this._httpClient.delete(this._url,r)}catch(e){s=e}s?s instanceof h&&(404===s.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: ${s}`)):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 s,o=!1;if(t===_.Text){if(G.isBrowser||G.isWebWorker)s=new this._options.EventSource(e,{withCredentials:this._options.withCredentials});else{const t=this._httpClient.getCookieString(e),n={};n.Cookie=t;const[r,o]=P();n[r]=o,s=new this._options.EventSource(e,{withCredentials:this._options.withCredentials,headers:{...n,...this._options.headers}})}try{s.onmessage=e=>{if(this.onreceive)try{this._logger.log(S.Trace,`(SSE transport) data received. ${b(e.data,this._options.logMessageContent)}.`),this.onreceive(e.data)}catch(e){return void this._close(e)}},s.onerror=e=>{o?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."))},s.onopen=()=>{this._logger.log(S.Information,`SSE connected to ${this._url}`),this._eventSource=s,o=!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?E(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,s,o){this._logger=n,this._accessTokenFactory=t,this._logMessageContent=r,this._webSocketConstructor=s,this._httpClient=e,this.onreceive=null,this.onclose=null,this._headers=o}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,s)=>{let o;e=e.replace(/^http/,"ws");const i=this._httpClient.getCookieString(e);let a=!1;if(G.isNode||G.isReactNative){const t={},[r,s]=P();t[r]=s,n&&(t[c.Authorization]=`Bearer ${n}`),i&&(t[c.Cookie]=i),o=new this._webSocketConstructor(e,void 0,{headers:{...t,...this._headers}})}else n&&(e+=(e.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(n)}`);o||(o=new this._webSocketConstructor(e)),t===_.Binary&&(o.binaryType="arraybuffer"),o.onopen=t=>{this._logger.log(S.Information,`WebSocket connected to ${e}.`),this._webSocket=o,a=!0,r()},o.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}.`)},o.onmessage=e=>{if(this._logger.log(S.Trace,`(WebSockets transport) data received. ${b(e.data,this._logMessageContent)}.`),this.onreceive)try{this.onreceive(e.data)}catch(e){return void this._close(e)}},o.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.",s(new Error(t))}}}))}send(e){return this._webSocket&&this._webSocket.readyState===this._webSocketConstructor.OPEN?(this._logger.log(S.Trace,`(WebSockets transport) sending data. ${b(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?D.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,s=null;if(G.isNode){const e=require;r=e("ws"),s=e("eventsource")}G.isNode||"undefined"==typeof WebSocket||t.WebSocket?G.isNode&&!t.WebSocket&&r&&(t.WebSocket=r):t.WebSocket=WebSocket,G.isNode||"undefined"==typeof EventSource||t.EventSource?G.isNode&&!t.EventSource&&void 0!==s&&(t.EventSource=s):t.EventSource=EventSource,this._httpClient=new d(t.httpClient||new $(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 s=this._resolveNegotiateUrl(e);this._logger.log(S.Debug,`Sending negotiation request: ${s}.`);try{const e=await this._httpClient.post(s,{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 s=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(s,r),void(this.connectionId=n.connectionId);const o=[],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)o.push(`${n.transport} failed:`),o.push(i);else if(this._isITransport(i)){if(this.transport=i,!a){try{a=await this._getNegotiationResponse(e)}catch(e){return Promise.reject(e)}s=this._createConnectUrl(e,a.connectionToken)}try{return await this._startTransport(s,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,o.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 o.length>0?Promise.reject(new w(`Unable to connect to the server with any of the available transports. ${o.join(" ")}`,o)):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 s=A[e.transport];if(null==s)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,s))return this._logger.log(S.Debug,`Skipping transport '${A[s]}' because it was disabled by the client.`),new v(`'${A[s]}' is disabled by the client.`,s);if(!(e.transferFormats.map((e=>_[e])).indexOf(n)>=0))return this._logger.log(S.Debug,`Skipping transport '${A[s]}' because it does not support the requested transfer format '${_[n]}'.`),new Error(`'${A[s]}' does not support ${_[n]}.`);if(s===A.WebSockets&&!this._options.WebSocket||s===A.ServerSentEvents&&!this._options.EventSource)return this._logger.log(S.Debug,`Skipping transport '${A[s]}' because it is not supported in your environment.'`),new f(`'${A[s]}' is not supported in your environment.`,s);this._logger.log(S.Debug,`Selecting transport '${A[s]}'.`);try{return this.features.reconnect=s===A.WebSockets?r:void 0,this._constructTransport(s)}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(!G.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 Y{writeHandshakeRequest(e){return J.write(JSON.stringify(e))}parseHandshakeResponse(e){let t,n;if(N(e)){const r=new Uint8Array(e),s=r.indexOf(J.RecordSeparatorCode);if(-1===s)throw new Error("Message is incomplete.");const o=s+1;t=String.fromCharCode.apply(null,Array.prototype.slice.call(r.slice(0,o))),n=r.byteLength>o?r.slice(o).buffer:null}else{const r=e,s=r.indexOf(J.RecordSeparator);if(-1===s)throw new Error("Message is incomplete.");const o=s+1;t=r.substring(0,o),n=r.length>o?r.substring(o):null}const r=J.parse(t),s=JSON.parse(r[0]);if(s.type)throw new Error("Expected a handshake response from the server.");return[n,s]}}!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 X{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"}(T||(T={}));class ee{static create(e,t,n,r,s,o,i){return new ee(e,t,n,r,s,o,i)}constructor(e,t,n,r,s,o,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!=s?s:3e4,this.keepAliveIntervalInMilliseconds=null!=o?o:15e3,this._statefulReconnectBufferSize=null!=i?i:1e5,this._logger=t,this._protocol=n,this.connection=e,this._reconnectPolicy=r,this._handshakeProtocol=new Y,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=T.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!==T.Disconnected&&this._connectionState!==T.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!==T.Disconnected)return Promise.reject(new Error("Cannot start a HubConnection that is not in the 'Disconnected' state."));this._connectionState=T.Connecting,this._logger.log(S.Debug,"Starting HubConnection.");try{await this._startInternal(),G.isBrowser&&window.document.addEventListener("freeze",this._freezeEventListener),this._connectionState=T.Connected,this._connectionStarted=!0,this._logger.log(S.Debug,"HubConnection connected successfully.")}catch(e){return this._connectionState=T.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===T.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===T.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=T.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===T.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),s=this._createStreamInvocation(e,t,r);let o;const i=new X;return i.cancelCallback=()=>{const e=this._createCancelInvocation(s.invocationId);return delete this._callbacks[s.invocationId],o.then((()=>this._sendWithProtocol(e)))},this._callbacks[s.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))},o=this._sendWithProtocol(s).catch((e=>{i.error(e),delete this._callbacks[s.invocationId]})),this._launchStreams(n,o),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),s=this._sendWithProtocol(this._createInvocation(e,t,!0,r));return this._launchStreams(n,s),s}invoke(e,...t){const[n,r]=this._replaceStreamingParams(t),s=this._createInvocation(e,t,!1,r);return new Promise(((e,t)=>{this._callbacks[s.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(s).catch((e=>{t(e),delete this._callbacks[s.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===T.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(),s=!!e.invocationId;let o,i,a;for(const n of r)try{const r=o;o=await n.apply(this,e.arguments),s&&o&&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):s?(i?a=this._createCompletionMessage(e.invocationId,`${i}`,null):void 0!==o?a=this._createCompletionMessage(e.invocationId,null,o):(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)):o&&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===T.Disconnecting?this._completeClose(e):this._connectionState===T.Connected&&this._reconnectPolicy?this._reconnect(e):this._connectionState===T.Connected&&this._completeClose(e)}_completeClose(e){if(this._connectionStarted){this._connectionState=T.Disconnected,this._connectionStarted=!1,this._messageBuffer&&(this._messageBuffer._dispose(null!=e?e:new Error("Connection closed.")),this._messageBuffer=void 0),G.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."),s=this._getNextRetryDelay(n++,0,r);if(null===s)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=T.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!==T.Reconnecting)return void this._logger.log(S.Debug,"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.")}for(;null!==s;){if(this._logger.log(S.Information,`Reconnect attempt number ${n} will start in ${s} ms.`),await new Promise((e=>{this._reconnectDelayHandle=setTimeout(e,s)})),this._reconnectDelayHandle=void 0,this._connectionState!==T.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=T.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!==T.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===T.Disconnecting&&this._completeClose());r=e instanceof Error?e:new Error(e.toString()),s=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 s=e[r];if(this._isObservable(s)){const o=this._invocationId;this._invocationId++,t[o]=s,n.push(o.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=D.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||D.instance,this.protocol||new te,this.reconnectPolicy,this._serverTimeoutInMilliseconds,this._keepAliveIntervalInMilliseconds,this._statefulReconnectBufferSize)}}class se{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 s(e,t,n,s,o,i){return r(function(e,t){return e<<t|e>>>32-t}(r(r(t,e),r(s,i)),o),n)}function o(e,t,n,r,o,i,a){return s(t&n|~t&r,e,t,o,i,a)}function i(e,t,n,r,o,i,a){return s(t&r|n&~r,e,t,o,i,a)}function a(e,t,n,r,o,i,a){return s(t^n^r,e,t,o,i,a)}function c(e,t,n,r,o,i,a){return s(n^(t|~r),e,t,o,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=o(f,v,m,y,g[u+0],7,-680876936),y=o(y,f,v,m,g[u+1],12,-389564586),m=o(m,y,f,v,g[u+2],17,606105819),v=o(v,m,y,f,g[u+3],22,-1044525330),f=o(f,v,m,y,g[u+4],7,-176418897),y=o(y,f,v,m,g[u+5],12,1200080426),m=o(m,y,f,v,g[u+6],17,-1473231341),v=o(v,m,y,f,g[u+7],22,-45705983),f=o(f,v,m,y,g[u+8],7,1770035416),y=o(y,f,v,m,g[u+9],12,-1958414417),m=o(m,y,f,v,g[u+10],17,-42063),v=o(v,m,y,f,g[u+11],22,-1990404162),f=o(f,v,m,y,g[u+12],7,1804603682),y=o(y,f,v,m,g[u+13],12,-40341101),m=o(m,y,f,v,g[u+14],17,-1502002290),v=o(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 oe{static Delay(e){return new Promise((t=>setTimeout(t,e)))}}function ie(e){return new Map(Object.entries(e))}class ae{constructor(){this.TransactionId=se.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 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 De{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 ke{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}}class be{constructor(){this._log=$v.Get(r.ServiceName),be._localStorageService=$v.Get(o.ServiceName)}GetServiceName(){return be.ServiceName}GetResourceName(e){return`${e.Resource}_${e.Method}`}Cache(e){var t;e.Status===ce.OK&&(this._log.Debug(be.ServiceName,`Caching request: ${e.Resource} ${e.Method}`),null===(t=be._localStorageService)||void 0===t||t.Save(this.GetServiceName(),this.GetResourceName(e),e))}GetCache(e){var t;let n=null===(t=be._localStorageService)||void 0===t?void 0:t.Read(this.GetServiceName(),this.GetResourceName(e));return null!=n&&this._log.Debug(be.ServiceName,`Got request response from cache: ${e.Resource} ${e.Method}`),n}ClearCache(){var e;null===(e=be._localStorageService)||void 0===e||e.DropStorage(this.GetServiceName()),this._log.Debug(be.ServiceName,`Clearing cache for ${this.GetServiceName()}`)}Remove(e){var t;null===(t=be._localStorageService)||void 0===t||t.Remove(this.GetServiceName(),this.GetResourceName(e)),this._log.Debug(be.ServiceName,`Clearing cache for cache: ${e.Resource} ${e.Method}`)}}be._localStorageService=null,be.ServiceName="WebApiCacheService";var Ne=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Ee{constructor(){this._imageExistsCaseNumber=0,this._connection=$v.Get(Ot.ServiceName),this._logger=$v.Get(r.ServiceName)}GetServiceName(){return Ee.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(Ee.ServiceName,"Cannot add picture - Base64Imgae size exceeded."),ce.WrongData;let r=new Image;const s=new Promise(((t,n)=>{r.src=e.Base64Image,r.onload=function(){t(!0)},setTimeout((()=>t(!1)),5e3)}));if(!(yield s))return this._logger.Error(Ee.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(Ee.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(Ee.ServiceName,"Cannot add picture - Guid must be empty."),ce.WrongData;const o=new Re;o.Guid=se.GenerateUUID(),o.DateTime=(new Date).toISOString(),o.ImageType=e.ImageType,o.OwnerGuid=`${e.OwnerGuid}_${e.OwnerIdentity}`,o.Base64Image=e.Base64Image;const i=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Oe(o.Guid),8e3,!1);if(null==i||null==i.Status)return this._logger.Error(Ee.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(o),8e3,!1);return null==e||null==e.Status?(this._logger.Error(Ee.ServiceName,"Cannot add picture - unknown error!"),ce.UnknownError):e.Status}return i.Status==ce.OK?(this._logger.Warning(Ee.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(Ee.ServiceName,"Cannot add picture - cannot get current picture status."),ce.Error)}catch(e){return this._logger.Error(Ee.ServiceName,`Cannot add picture! ${e}`),ce.FatalError}}))}EditPictureAsync(e){return Ne(this,void 0,void 0,(function*(){var t,n;try{if(""==e.Guid||null==e.Guid)return this._logger.Error(Ee.ServiceName,"Cannot edit picture - guid is empty."),ce.WrongData;if(e.Base64Image.length*(3/4)>=512e3)return this._logger.Error(Ee.ServiceName,"Cannot edit picture - Base64Imgae size exceeded."),ce.WrongData;let r=new Image;const s=new Promise(((t,n)=>{r.src=e.Base64Image,r.onload=function(){t(!0)},setTimeout((()=>t(!1)),5e3)}));if(!(yield s))return this._logger.Error(Ee.ServiceName,"Cannot edit 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(Ee.ServiceName,"Cannot edit picture - cannot read width/height of image - ensure that given base64 string is an image!"),ce.WrongData;const o=new Re;o.DateTime=(new Date).toISOString(),o.ImageType=e.ImageType,o.Base64Image=e.Base64Image,o.Guid=e.Guid,e.Guid.includes("profilePicture")||e.Guid.includes("devices_group")?o.OwnerGuid=e.OwnerGuid:o.OwnerGuid=`${e.OwnerGuid}_${e.OwnerIdentity}`;const i=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Oe(o.Guid),8e3,!1);if($v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null==i||null==i.Status)return this._logger.Error(Ee.ServiceName,"Cannot edit picture - unknown error!"),ce.UnknownError;if(i.Status==ce.ResourceDoesNotExists)return this._logger.Error(Ee.ServiceName,"Cannot edit picture - picture not exists."),ce.OperationNotPermitted;if(i.Status==ce.OK){const e=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new xe(o),8e3,!1);return $v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null==e||null==e.Status?(this._logger.Error(Ee.ServiceName,"Cannot edit picture - unknown error!"),ce.UnknownError):e.Status}return this._logger.Error(Ee.ServiceName,"Cannot edit picture - cannot get current picture status."),ce.Error}catch(e){return this._logger.Error(Ee.ServiceName,`Cannot edit picture! ${e}`),ce.FatalError}}))}DeletePictureAsync(e){return Ne(this,void 0,void 0,(function*(){var t;try{if(""==e.Guid||null==e.Guid)return this._logger.Error(Ee.ServiceName,"Cannot delete picture - guid is empty."),ce.WrongData;const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Fe(e.Guid),8e3,!1);return $v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null==n||null==n.Status?(this._logger.Error(Ee.ServiceName,"Cannot edit picture - unknown error!"),ce.UnknownError):n.Status}catch(e){return this._logger.Error(Ee.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(Ee.ServiceName,"Cannot get pictures info - unknown error!"),new ke(ce.UnknownError,"NoDataInResult")):t.Status!=ce.OK?(this._logger.Error(Ee.ServiceName,`Cannot get pictures info - controler responded with status ${t.Status}.`),new ke(t.Status,"UnknownReason")):null==t.Data?(this._logger.Error(Ee.ServiceName,"Cannot get pictures info - controler responded with OK, but no data in result.}."),new ke(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(Ee.ServiceName,`Cannot get picture info! ${e}`),new ke(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(Ee.ServiceName,"Cannot get picture - unknown error!"),new ke(ce.UnknownError,"NoDataInResult");switch(n.Status){case ce.ResourceDoesNotExists:return new ke(ce.ResourceDoesNotExists,"PictureNotFound");case ce.OK:if(null==n.Data)return new ke(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 ke(n.Status,"UnknownReason")}}catch(e){return this._logger.Error(Ee.ServiceName,`Cannot get picture! ${e}`),new ke(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(Ee.ServiceName,"Cannot get pictures - unknown error!"),new ke(ce.UnknownError,"NoDataInResult")):t.Status!=ce.OK?(this._logger.Error(Ee.ServiceName,`Cannot get pictures - controler responded with status ${t.Status}.`),new ke(t.Status,"UnknownReason")):null==t.Data?(this._logger.Error(Ee.ServiceName,"Cannot get pictures - controler responded with OK, but no data in result.}."),new ke(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(Ee.ServiceName,`Cannot get pictures! ${e}`),new ke(ce.FatalError,"ExceptionOccurred")}}))}}Ee.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}}var Le=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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._connection=null,this._connection=$v.Get(Ot.ServiceName),this._pictureService=$v.Get(Ee.ServiceName),this._sessionService=$v.Get(ze.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 Be.ServiceName}GetUsersAsync(){return Le(this,void 0,void 0,(function*(){var e,t;const n=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Ve,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 Ke;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=s.Log)||void 0===t||t.Debug(Be.ServiceName,`Failed to retrieve users, error: ${n.Status}`),new Error(`Failed to retrieve users, error: ${n.Status}`)}))}GetUserAsync(e){return Le(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=s.Log)||void 0===n||n.Debug(Be.ServiceName,`Failed to retrieve user, error: ${r.Status}`),Promise.resolve(null);const o=new Ke;return o.AccessLevel=r.Data.AccessLevel,o.Email=r.Data.Email,o.Gender=r.Data.Gender,o.Guid=r.Data.Guid,o.IsAccountOnline=r.Data.IsAccountOnline,o.Name=r.Data.Name,o.IsActive=r.Data.IsActive,o.IsBanned=r.Data.IsBanned,o.Phone=r.Data.Phone,o.Surname=r.Data.Surname,o}))}CreateUserAsync(e,t){return Le(this,void 0,void 0,(function*(){var n;if(null!=e.Guid&&""!=e.Guid)return new ke(ce.WrongData,"GuidMustBeEmpty");const r=new We;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 s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new qe(r),2e4,!1);return $v.Get(be.ServiceName).ClearCache(),null==s||null==s.Status?new ke(ce.FatalError,"UnknownError"):(null==s.Data&&(s.Data=""),new ke(s.Status,s.Data))}))}UpdateUserAsync(e){return Le(this,void 0,void 0,(function*(){var t;if(null==e.Guid||""==e.Guid)return new ke(ce.WrongData,"GuidCannotBeEmpty");const n=new We;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 qe(n),2e4,!1);return $v.Get(be.ServiceName).ClearCache(),null==r||null==r.Status?new ke(ce.FatalError,"UnknownError"):(null==r.Data&&(r.Data=""),new ke(r.Status,r.Data))}))}ChangePasswordAsync(e,t){return Le(this,void 0,void 0,(function*(){var n;if(null==e.Guid||""==e.Guid)return new ke(ce.WrongData,"GuidCannotBeEmpty");const r=yield this.GetUserAsync(e.Guid);if(null==r)return new ke(ce.ResourceIsNotAvailable,"CannotGetUser");const s=new We;s.Guid=e.Guid,s.Password=t,s.AccessLevel=r.AccessLevel,s.Email=r.Email;const o=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new qe(s),2e4,!1);return null==o||null==o.Status?new ke(ce.FatalError,"UnknownError"):(null==o.Data&&(o.Data=""),new ke(o.Status,o.Data))}))}DeleteUserAsync(e){return Le(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 He(e),2e4,!1);return $v.Get(be.ServiceName).ClearCache(),null==r||null==r.Status?ce.FatalError:(r.Status!=ce.OK&&(null===(n=s.Log)||void 0===n||n.Debug(Be.ServiceName,`Failed to delete user, error: ${r.Status}`)),r.Status)}))}GetUserProfilePictureAsync(e){return Le(this,void 0,void 0,(function*(){if(null==e.Guid||""==e.Guid)return new ke(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(be.ServiceName).ClearCache(),null!=e.Type?t:e}return new ke(ce.ResourceDoesNotExists,"PictureNotFound")}))}SetUserProfilePictureAsync(e,t){return Le(this,void 0,void 0,(function*(){if(null==e.Guid||""==e.Guid)return new ke(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(be.ServiceName).ClearCache(),r.Type==ce.ResourceDoesNotExists){const e=yield this._pictureService.AddPictureAsync(n);return e===ce.OK?new ke(ce.OK,"PictureSet"):new ke(e,"PictureServiceError")}if(null!=r.Type)return new ke(ce.Error,"ErrorWhenTryingToCheckIfCurrentProfilePictureExists");{n.Guid=r.Guid,n.OwnerGuid=r.OwnerGuid;const e=yield this._pictureService.EditPictureAsync(n);return e===ce.OK?new ke(ce.OK,"PictureSet"):new ke(e,"PictureServiceError")}}))}}Be.ServiceName="UsersService";class $e extends ae{constructor(e){super(),this.Resource="/users/user",this.Method=ue.Get,this.Data=e}}class We{constructor(){this.Guid="",this.Name="",this.Surname="",this.Email="",this.Password="",this.Phone="",this.Gender=fe.Unknown,this.AccessLevel=ge.Any}}class qe extends ae{constructor(e){super(),this.Resource="/users/user",this.Method=ue.Put,this.Data=e}}class Ve extends ae{constructor(){super(),this.Resource="/users/list",this.Method=ue.Get}}class He extends ae{constructor(e){super(),this.Resource="/users/user",this.Method=ue.Delete,this.Data=e}}class Ke{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(Be.ServiceName).GetUserProfilePictureAsync({Guid:this._guid})}SetUserProfilePictureAsync(e){return $v.Get(Be.ServiceName).SetUserProfilePictureAsync({Guid:this._guid},e)}}var je=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 ze{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 je(this,void 0,void 0,(function*(){var e;null===(e=s.Log)||void 0===e||e.Debug(ze.ServiceName,"Creating _loginTaskCompletionSource"),this._loginTaskCompletionSource=new Promise((e=>{this.OnUserLoggedInEvent().Subscribe((t=>{var n;null===(n=s.Log)||void 0===n||n.Debug(ze.ServiceName,`Logged in as ${t.Name}, completing CreateSessionCompletionSourceAsync()`),e()}))})),$v.Get(Ot.ServiceName).SubscribeTo("/info/users/user/loggedOut",(e=>je(this,void 0,void 0,(function*(){var t,n;null===(t=s.Log)||void 0===t||t.Debug(ze.ServiceName,`User logged out: ${JSON.stringify(e.Data)}`),null===(n=this._onUserLoggedOutEvent)||void 0===n||n.Invoke(this._user)}))))}))}RestoreSessionAsync(){return je(this,void 0,void 0,(function*(){var e;null===(e=s.Log)||void 0===e||e.Debug(ze.ServiceName,`Creating RestoreSessionAsync ${this._email} ${this._password}`),void 0!==this._user&&null!==this._user&&(yield this.UserLogInAsync(this._email,this._password))}))}WaitForSessionCreationAsync(){return je(this,void 0,void 0,(function*(){return this._loginTaskCompletionSource}))}OnUserLoggedInEvent(){return this._onUserLoggedInEvent}OnUserLoggedOutEvent(){return this._onUserLoggedOutEvent}get User(){return this._user}UserLogOutAsync(){return je(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(Ot.ServiceName).SendAndWaitForResponseAsync(n,2e4,!1)).Status==ce.OK?(this._onUserLoggedOutEvent.Invoke(this._user),null===(e=s.Log)||void 0===e||e.Debug(ze.ServiceName,"User has been logged out.")):null===(t=s.Log)||void 0===t||t.Debug(ze.ServiceName,"Failed to logout user!")}))}OnConnectionStateChanged(e){return je(this,void 0,void 0,(function*(){switch(e){case he.Disconnected:case he.Failed:break;case he.Connected:$v.Get(ze.ServiceName).RestoreSessionAsync()}}))}AuthorizeAppAsync(e){return je(this,void 0,void 0,(function*(){var t,n,r,o,i=$v.Get(Ot.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 Ke;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)),null===(t=s.Log)||void 0===t||t.Debug(ze.ServiceName,`Did logging in succeded?: ${a.Status==ce.OK}`),this._onUserLoggedInEvent.Invoke(this._user),c}return a.Status===ce.OperationNotPermitted?(null===(n=s.Log)||void 0===n||n.Debug(ze.ServiceName,`App login response: ${a.Data}`),me.AuthDisabled):a.Status===ce.ResourceDoesNotExists?(null===(r=s.Log)||void 0===r||r.Debug(ze.ServiceName,`App login response: ${a.Data}`),me.MethodNotSupported):(null===(o=s.Log)||void 0===o||o.Debug(ze.ServiceName,`App login response: ${a.Data}`),me.WrongAuthData)}))}UserLogInAsync(e,t){return je(this,void 0,void 0,(function*(){var n,r,o=$v.Get(Ot.ServiceName);const i=yield o.SendAndWaitForResponseAsync(new Xe(e,t),2e4,!1);if(i.Status==ce.OK&&null!=i.Data){this._email=e,this._password=t;var a=new Ke;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,o.OnConnectionStateChangedEvent().Subscribe(this.OnConnectionStateChanged)),null===(n=s.Log)||void 0===n||n.Debug(ze.ServiceName,`Did logging in succeded?: ${i.Status==ce.OK}`),this._onUserLoggedInEvent.Invoke(this._user),a}return null===(r=s.Log)||void 0===r||r.Debug(ze.ServiceName,`User login response: ${i.Data}`),me.WrongAuthData}))}GetServiceName(){return ze.ServiceName}}ze.ServiceName="SessionService";class Je{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 Xe extends ae{constructor(e,t){super(),this.Data=new Je(e,t),this.Resource="/users/user/login",this.Method=ue.Put}}class Qe{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 Ze=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 et{constructor(){this._extensionInfoCache=new Map,this._protocolInfoCache=new Map,this._isExtensionInfoInitialized=!1,this._semaphore=new Qe(1)}GetServiceName(){return et.ServiceName}GetExtensionsInfoAsync(e){return Ze(this,arguments,void 0,(function*(e,t=!1){$v.Get(r.ServiceName).Debug(et.ServiceName,`Getting ExtensionsInfo, data loaded from cache: ${!t}`);var n=yield this._semaphore.AcquireAsync();if(this._isExtensionInfoInitialized&&!t||(yield this.GetExtensionInfoFromControllerAsync()),n.Release(),0==[...this._extensionInfoCache.values()].length)return[];if(null!=e){const t=this._extensionInfoCache.get(e);if(null==t)throw new rt("Cannot get ExtensionsInfo, extension not found.");return[t]}return[...this._extensionInfoCache.values()]}))}GetProtocolInfoAsync(e){return Ze(this,arguments,void 0,(function*(e,t=!1,n=!1){if($v.Get(r.ServiceName).Debug(et.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 rt("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 rt("Cannot get ProtocolInfo, extension not found.");return[t]}return[...this._protocolInfoCache.values()]}))}GetExtensionInfoFromControllerAsync(){return Ze(this,void 0,void 0,(function*(){const e=new tt,t=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(e,16e3,!1);if(null==t||null==t.Status)throw new rt("Cannot get ExtensionsInfo from controller, controller response does not contain data!");if(t.Status!=ce.OK)throw new rt(`Cannot get ExtensionsInfo from controller! Response status: ${t.Status}`);if(null==t.Data)throw new rt("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 Ze(this,void 0,void 0,(function*(){const e=new nt,t=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(e,16e3,!1);if(null==t||null==t.Status)throw new rt("Cannot get ProtocolInfo from controller, controller response does not contain data!");switch(t.Status){case ce.OK:if(null==t.Data)throw new rt("Cannot get ProtocolInfo from controller, controller response does not contain data!");t.Data.forEach((e=>{this._protocolInfoCache.set(e.PublicGuid,e)}));break;case ce.ResourceDoesNotExists:$v.Get(r.ServiceName).Debug(et.ServiceName,"Cannot get ProtocolInfo from controller, controller software does not implement this yet, update controller to the newest software!");break;default:throw new rt(`Cannot get ProtocolInfo from controller! Response status: ${t.Status}`)}}))}}et.ServiceName="StatisticsInfoService";class tt extends ae{constructor(){super(),this.Resource="/controller/extensions/",this.Method=ue.Get}}class nt extends ae{constructor(){super(),this.Resource="/controller/protocols/",this.Method=ue.Get}}class rt 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(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 ot{GetServiceName(){return ot.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(ze.ServiceName).OnUserLoggedInEvent().Subscribe((t=>st(this,void 0,void 0,(function*(){this._didConfigurationChange=yield this.CheckIfConfigurationHasChangedAsync(),this._didConfigurationChange&&$v.Get(be.ServiceName).ClearCache(),e()}))))})),this._connection=$v.Get(Ot.ServiceName),this._session=$v.Get(ze.ServiceName),this._localStorage=$v.Get(o.ServiceName),this._connection.SubscribeTo("/info/configuration/mode/entry",(e=>{$v.Get(be.ServiceName).ClearCache(),this._appEnteredConfigurationMode||this._onEnteredConfigurationEvent.Invoke()})),this._connection.SubscribeTo("/info/configuration/mode/exit",(e=>{$v.Get(be.ServiceName).ClearCache(),this._appEnteredConfigurationMode||this._onExitedConfigurationEvent.Invoke()}))}ImportControllerConfigurationAsync(e){return st(this,void 0,void 0,(function*(){var t,n,r;let s=yield e.text(),o=this.SplitStringBySize(s),i=new it("");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 o){let t=new it(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 s=0;for(;s<e.length;){let o=e.slice(s,s+n);for(;new Blob([o]).size>t;)o=o.slice(0,-1);r.push(o),s+=o.length}return r}GetControllerSystemTimeAsync(){return st(this,void 0,void 0,(function*(){var e;try{var t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new gt,8e3,!1);return null==t||null==t.Status?ce.Error:t.Status!=ce.OK?t.Status:null==t.Data?ce.ResourceIsNotAvailable:new Date(t.Data)}catch(e){return $v.Get(r.ServiceName).Error(ot.ServiceName,`Cannot get current controller time! ${e}`),ce.FatalError}}))}SetControllerSystemTimeAsync(e){return st(this,void 0,void 0,(function*(){var t;try{var n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new ft(e.toISOString()),8e3,!1);return null==n||null==n.Status?ce.Error:n.Status}catch(e){return $v.Get(r.ServiceName).Error(ot.ServiceName,`Cannot set current controller time! ${e}`),ce.FatalError}}))}StartNtpTimeSynchronizationAsync(){return st(this,void 0,void 0,(function*(){var e;try{var t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new vt,8e3,!1);return null==t||null==t.Status?ce.Error:t.Status}catch(e){return $v.Get(r.ServiceName).Error(ot.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(be.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=300,n=0,r=100/t,s=setInterval((()=>{n+=r,e(parseFloat(n.toPrecision(1)))}),1e3);return yield oe.Delay(1e3*t),$v.Get(be.ServiceName).ClearCache(),clearInterval(s),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(be.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=420,n=0,r=100/t,s=setInterval((()=>{n+=r,e(parseFloat(n.toPrecision(1)))}),1e3);return yield oe.Delay(1e3*t),$v.Get(be.ServiceName).ClearCache(),clearInterval(s),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(be.ServiceName).ClearCache();var r=null===(n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new ct,2e3,!1))||void 0===n?void 0:n.Status;if(r==ce.OK){let t=240,n=0,r=100/t,s=setInterval((()=>{n+=r,e(parseFloat(n.toPrecision(1)))}),1e3);return yield oe.Delay(1e3*t),$v.Get(be.ServiceName).ClearCache(),clearInterval(s),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(be.ServiceName).ClearCache(),yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new dt,2e4,!1)}))}ExitConfigurationModeAsync(){return st(this,void 0,void 0,(function*(){var e;this._appEnteredConfigurationMode=!0,$v.Get(be.ServiceName).ClearCache(),yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new ht,2e4,!1),$v.Get(be.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 pt,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(be.ServiceName).ClearCache(),!0)}))}CanExportOrImportControllerConfigurationAsync(){return st(this,void 0,void 0,(function*(){try{let e=yield $v.Get(et.ServiceName).GetExtensionsInfoAsync(),t=$v.Get(ze.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 at,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 ke(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"),s=n.getMinutes().toString().padStart(2,"0"),o=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}-${s}-${o}-${i}-${a}-config.cexp`}}ot.ServiceName="ControllerConfigurationService";class it extends ae{constructor(e){super(),this.Resource="/configuration/backup/import",this.Method=ue.Put,this.Data=e}}class at extends ae{constructor(){super(),this.Resource="/configuration/backup/export",this.Method=ue.Get}}class ct extends ae{constructor(){super(),this.Resource="/controller/restart",this.Method=ue.Post}}class ut extends ae{constructor(){super(),this.Resource="/controller/factory_reset",this.Method=ue.Post}}class lt extends ae{constructor(){super(),this.Resource="/controller/backups/restore/previous",this.Method=ue.Post}}class dt extends ae{constructor(){super(),this.Resource="/system/configuration/mode/entry",this.Method=ue.Put}}class ht extends ae{constructor(){super(),this.Resource="/system/configuration/mode/exit",this.Method=ue.Put}}class pt extends ae{constructor(){super(),this.Resource="/system/configuration/change/time",this.Method=ue.Get}}class gt extends ae{constructor(){super(),this.Resource="/system/time",this.Method=ue.Get}}class ft extends ae{constructor(e){super(),this.Resource="/system/time",this.Method=ue.Put,this.Data=e}}class vt extends ae{constructor(){super(),this.Resource="/system/time/ntp/update",this.Method=ue.Put}}var mt,yt,wt,St,At,_t,Ct,Tt,Dt,kt,Gt,bt,Nt,Et,It,Rt,Pt=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Ot{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._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 Ot.ServiceName}EnablePacketsLogging(){this._logPackets=!0}DisablePacketsLogging(){this._logPackets=!1}InitializeConnection(){if(this._controllerConfiguration=$v.Get(ot.ServiceName),this._cache=$v.Get(be.ServiceName),this._session=$v.Get(ze.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((()=>Pt(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 Pt(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(Ot.ServiceName,`Got server address: ${t}`),t):(this._log.Error(Ot.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(Ot.ServiceName,`Failed to get server address, status: ${e.status}`),null)}catch(e){return this._log.Error(Ot.ServiceName,e),null}}))}ConnectAsync(e){return Pt(this,void 0,void 0,(function*(){return this._connectedAtLeastOnce=!1,this._address=e,yield this.connectAsync()}))}AuthorizeAsync(e){return new Promise(((t,n)=>Pt(this,void 0,void 0,(function*(){var n;let r=0,s=e=>{window.clearTimeout(r),this._log.Debug(Ot.ServiceName,`Got authorization result: ${e}`),this._connectedAtLeastOnce=!0,t(e)};r=window.setTimeout((()=>{window.clearTimeout(r),this._authorizationReceivedEvent.Unsubscribe(s),t(!1)}),2e3),this._log.Debug(Ot.ServiceName,`Authorizing to cloud using: ${e.SerialNumber} PIN: ${e.PIN}`),this._authorizationReceivedEvent.Subscribe(s),yield null===(n=this._connection)||void 0===n?void 0:n.send("AuthorizeTo",e.SerialNumber,e.PIN)}))))}ConnectAndAuthorizeAsync(e){return Pt(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(Ot.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(Ot.ServiceName,"Server did not return packets broker address, trying to connect to known brokers.");for(let n of this._packetsBrokerServers){this._log.Warning(Ot.ServiceName,`Testing connection to ${n}`),this.SetDefaultPacketsBrokerAddress(n);try{yield this.DisconnectAsync()}catch(e){}this._log.Warning(Ot.ServiceName,`Connecting to server: ${n}`);let r=yield this.connectAsync();if(this._log.Warning(Ot.ServiceName,`Connection result: ${r}`),r==de.Connected){if(yield this.AuthorizeAsync(e))return t=de.Connected,this._connectedAtLeastOnce=!0,t;this._log.Warning(Ot.ServiceName,`Failed to authorize in ${n}`)}}return t}}))}swapBrokersAsync(){return Pt(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 Pt(this,void 0,void 0,(function*(){var e,t,n,r,s,o,i,a,c;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((()=>Pt(this,void 0,void 0,(function*(){var e,t;if(this._disconnectedOnPurpose?this._log.Info(Ot.ServiceName,"Connection closed on demand."):this._log.Error(Ot.ServiceName,"Connection closed"),$v.Get(ze.ServiceName).CreateSessionCompletionSourceAsync(),this.FireConnectionStateChanged(),(null===(e=this._connection)||void 0===e?void 0:e.state)===T.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(Ot.ServiceName,"Reconnected from onClose"),this.FireConnectionStateChanged()):de.FailedToConnect})))),null===(t=this._connection)||void 0===t||t.onreconnected((()=>Pt(this,void 0,void 0,(function*(){if(yield this.AuthorizeAsync(new Ce(this._serialId,this._PIN)))return this._log.Info(Ot.ServiceName,"Reconnected from onreconnected"),this.FireConnectionStateChanged()})))),null===(n=this._connection)||void 0===n||n.onreconnecting((()=>(this._log.Warning(Ot.ServiceName,"Reconnecting..."),this.FireConnectionStateChanged()))),yield null===(r=this._connection)||void 0===r?void 0:r.start(),null===(s=this._connection)||void 0===s||s.on("Pong",(()=>{this._log.Debug(Ot.ServiceName,"Pong received <-"),this._pongReceivedEvent.Invoke()})),null===(o=this._connection)||void 0===o||o.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)=>Pt(this,void 0,void 0,(function*(){e.startsWith("NotAuthorized:")?(this._log.Error(Ot.ServiceName,"Failed to authorize!"),yield this.AuthorizeAsync(new Ce(this._serialId,this._PIN))):(this._log.Error(Ot.ServiceName,`Server returned error: ${e} ${t}`),this._errorOccuredEvent.Invoke([e,t]))}))));let u=this._dataReceivedEvent;return null===(c=this._connection)||void 0===c||c.on("Data",((e,t)=>{const n=JSON.parse(t);(this._logPackets||!0===window.packets)&&this._log.Debug(Ot.ServiceName,`Received data:\n${JSON.stringify(n,null,2)}`),u.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 T.Connected:return t.Invoke(he.Connected),de.Connected;case T.Connecting:return t.Invoke(he.Connecting),de.Connected;case T.Disconnected:if(this._connectedAtLeastOnce)return t.Invoke(he.Disconnected),de.FailedToConnect;break;case T.Disconnecting:if(this._connectedAtLeastOnce)return t.Invoke(he.Disconnecting),de.FailedToConnect;break;case T.Reconnecting:return t.Invoke(he.Reconnecting),de.FailedToConnect}return de.FailedToConnect}DisconnectAsync(){return Pt(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)===T.Connected}SendAndWaitForResponseAsync(e,t,n,r=!0){return this.SendAndWaitForResponseWithRepeatAsync(e,t,n,r)}SendAndWaitForResponseWithRepeatAsync(e,t,n){return Pt(this,arguments,void 0,(function*(e,t,n,r=!0,s=!0){var o,i,a;if(e.Method===ue.Get&&n&&!(yield null===(o=this._controllerConfiguration)||void 0===o?void 0:o.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(((o,i)=>Pt(this,void 0,void 0,(function*(){let a=i=>Pt(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;s&&this._log.Debug(Ot.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(),o(yield this.SendAndWaitForResponseWithRepeatAsync(e,t,n,!1,s))),o(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(Ot.ServiceName,t),i(new p(t))}),t),!(yield this.SendAsync(e,s))){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 Pt(this,arguments,void 0,(function*(e,t,n,r=!0){var s;let o=0;const i=Date.now();if(!this.IsConnected())throw new Error("Connection is not established");return"/users/user/login"!==e.Resource&&(yield null===(s=this._session)||void 0===s?void 0:s.WaitForSessionCreationAsync()),new Promise(((s,a)=>Pt(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(Ot.ServiceName,t),a(new p(t))}),t);let u=l=>Pt(this,void 0,void 0,(function*(){var d,h,p;if((null==l?void 0:l.TransactionId)==e.TransactionId){window.clearTimeout(o);const g=Date.now()-i;switch((r||!0===window.packets)&&this._log.Debug(Ot.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(),s(yield this.SendAndHandleResponseAsync(e,t,n,r))),null==l?void 0:l.Status){case ce.MultiDataResponseStart:case ce.MultiDataResponse:n(l),o=c();break;case ce.MultiDataResponseStop:case ce.FatalError:case ce.Error:n(l),this._dataReceivedEvent.Unsubscribe(u),s();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),o=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))}}))))}))}PingControllerAsync(){return Pt(this,void 0,void 0,(function*(){var e;if((null===(e=this._connection)||void 0===e?void 0:e.state)!==T.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(Ot.ServiceName,`Sent DataFrame ${e.Resource} ${e.Method} transaction id: ${e.TransactionId} data:\n${JSON.stringify(e,null,2)}`):t&&this._log.Debug(Ot.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(Ot.ServiceName,`${e}`),n(!1)}))}))}OnDataReceivedEvent(){return this._dataReceivedEvent}OnConnectionStateChangedEvent(){return this._connectionStateChangedEvent}OnErrorOccuredEvent(){return this._errorOccuredEvent}}Ot.ServiceName="ExalusConnectionService",function(e){e[e.NoTasksExecuting=0]="NoTasksExecuting",e[e.ExecutingTasks=1]="ExecutingTasks"}(mt||(mt={})),(bt=yt||(yt={}))[bt.Default=0]="Default",bt[bt.Monostable=1]="Monostable",bt[bt.Bistable=2]="Bistable",bt[bt.Gate=3]="Gate",bt[bt.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"}(wt||(wt={}));class Ut{constructor(){this._type=At.Unknown,this._interfaceType=""}get Type(){return this._type}get InterfaceType(){return this._interfaceType}set InterfaceType(e){this._interfaceType=e,this._type=e}}(Nt=St||(St={}))[Nt.Unknown=0]="Unknown",Nt[Nt.BlindMotor=1]="BlindMotor",Nt[Nt.DinModule=2]="DinModule",Nt[Nt.DinModuleWithAntenna=3]="DinModuleWithAntenna",Nt[Nt.Remote=4]="Remote",Nt[Nt.RemoteForBlinds=5]="RemoteForBlinds",Nt[Nt.RemoteForFacadeBlinds=6]="RemoteForFacadeBlinds",Nt[Nt.MovementSensor=7]="MovementSensor",Nt[Nt.TemperatureSensor=8]="TemperatureSensor",Nt[Nt.HumiditySensor=9]="HumiditySensor",Nt[Nt.DinPowerMeter=10]="DinPowerMeter",Nt[Nt.Intercom=11]="Intercom",Nt[Nt.SecurityCamera=12]="SecurityCamera",Nt[Nt.Multisensor=13]="Multisensor",Nt[Nt.FloodSensor=14]="FloodSensor",Nt[Nt.FlushMountedReceiver=15]="FlushMountedReceiver",Nt[Nt.FlushMountedBlindController=16]="FlushMountedBlindController",Nt[Nt.FlushMountedDimmer=17]="FlushMountedDimmer",Nt[Nt.FlushMountedRelay=18]="FlushMountedRelay",Nt[Nt.FlushMountedGateController=19]="FlushMountedGateController",Nt[Nt.WindSensor=20]="WindSensor",Nt[Nt.FlushMountedGateAndGatewayController=21]="FlushMountedGateAndGatewayController",Nt[Nt.AirPressureSensor=22]="AirPressureSensor",Nt[Nt.LightBrightnessSensor=23]="LightBrightnessSensor",Nt[Nt.ReedSensor=24]="ReedSensor",Nt[Nt.FlushMountedTransceiver=25]="FlushMountedTransceiver",Nt[Nt.FlushMountedRGBLightController=26]="FlushMountedRGBLightController",Nt[Nt.WallMountedThermoregulator=27]="WallMountedThermoregulator",Nt[Nt.ImpulseCounter=28]="ImpulseCounter",Nt[Nt.FlushMountedFacadeController=29]="FlushMountedFacadeController",Nt[Nt.WallMountedGateController=30]="WallMountedGateController",Nt[Nt.WallMountedRGBLightController=31]="WallMountedRGBLightController",Nt[Nt.WallMountedDimmer=32]="WallMountedDimmer",Nt[Nt.WallMountedRemote=33]="WallMountedRemote",Nt[Nt.DinRelay=34]="DinRelay",Nt[Nt.DinReceiver=35]="DinReceiver",Nt[Nt.DinBlindController=36]="DinBlindController",Nt[Nt.DinTransceiver=37]="DinTransceiver",Nt[Nt.SocketPlugIn=38]="SocketPlugIn",Nt[Nt.WallMountedRelay=39]="WallMountedRelay",Nt[Nt.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"}(At||(At={}));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}}!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"}(_t||(_t={})),(Rt=Ct||(Ct={}))[Rt.NotResponding=0]="NotResponding",Rt[Rt.Working=1]="Working",Rt[Rt.Broken=2]="Broken",Rt[Rt.FirmareUpgradeMode=3]="FirmareUpgradeMode",(It=Tt||(Tt={}))[It.TwoWay=1]="TwoWay",It[It.OneWay=2]="OneWay",It[It.ConditionalTwoWay=3]="ConditionalTwoWay",(Et=Dt||(Dt={}))[Et.Unknown=-1]="Unknown",Et[Et.Multipurpose=0]="Multipurpose",Et[Et.Controller=1]="Controller",Et[Et.Driver=2]="Driver",Et[Et.Receiver=3]="Receiver",Et[Et.Remote=4]="Remote",Et[Et.Sensor=5]="Sensor",Et[Et.Scene=6]="Scene";class xt{constructor(){this.DeviceGuid="",this.Channel=0,this.Status=mt.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"}(kt||(kt={})),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 Ft{constructor(){this.Device=null,this.Channel=0,this.Task=null,this.Result=Gt.Unknown}}var Lt,Bt,$t,Wt,qt,Vt,Ht,Kt,jt,zt,Jt,Yt,Xt,Qt,Zt,en,tn,nn,rn,sn,on,an,cn,un,ln,dn,hn,pn,gn,fn,vn;class mn{constructor(){this._type="",this._data=null,this._typeAsEnum=_t.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 s=0;for(r=Object.getOwnPropertySymbols(e);s<r.length;s++)t.indexOf(r[s])<0&&Object.prototype.propertyIsEnumerable.call(e,r[s])&&(n[r[s]]=e[r[s]])}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}}(vn=Lt||(Lt={}))[vn.Confident=0]="Confident",vn[vn.Unconfident=1]="Unconfident";class yn extends mn{constructor(e){super(),this.TypeAsEnum=_t.ChannelOnOffState,this.Type="ChannelOnOffState",this.Data=e.state}}class wn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=Bt.Unknown,this.Time=""}}!function(e){e[e.On=0]="On",e[e.Off=1]="Off",e[e.Unknown=2]="Unknown"}(Bt||(Bt={})),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 Sn extends mn{constructor(e){super(),this.TypeAsEnum=_t.OnlineCamera,this.Type="OnlineCameraState",this.Data=e.state}}class An extends mn{constructor(e){super(),this.TypeAsEnum=_t.DoorBellState,this.Type="DoorBellState",this.Data=e.state}}class _n{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=Wt.Relased,this.Time=""}}!function(e){e[e.Pressed=0]="Pressed",e[e.Relased=1]="Relased",e[e.PressedAndRelased=2]="PressedAndRelased"}(Wt||(Wt={}));class Cn extends mn{constructor(e){super(),this.TypeAsEnum=_t.ReedState,this.Type="ReedState",this.Data=e.state}}class Tn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=!1,this.Time=""}}class Dn extends mn{constructor(e){super(),this.TypeAsEnum=_t.BlindPosition,this.Type="BlindPostionState",this.Data=e.state}GetBlindStatus(){switch(this.Data.Position){case 200:return qt.UnableToMove;case 201:return qt.MotorOverheatedPleaseWait;default:return qt.Working}}}!function(e){e[e.Unknown=0]="Unknown",e[e.Working=1]="Working",e[e.UnableToMove=200]="UnableToMove",e[e.MotorOverheatedPleaseWait=201]="MotorOverheatedPleaseWait"}(qt||(qt={}));class kn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Position=0,this.RawPosition=0,this.Time=""}}class Gn extends mn{constructor(e){super(),this.TypeAsEnum=_t.RemoteButtonState,this.Type="RemoteButtonState",this.Data=e.state}}class bn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=Vt.Relased,this.Time=""}}!function(e){e[e.Pressed=1]="Pressed",e[e.Relased=2]="Relased",e[e.PressedAndRelased=3]="PressedAndRelased"}(Vt||(Vt={}));class Nn extends mn{constructor(e){super(),this.TypeAsEnum=_t.LightColor,this.Type="LightColorState",this.Data=e.state}}class En{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.R=0,this.G=0,this.B=0,this.Time=""}}class In extends mn{constructor(e){super(),this.TypeAsEnum=_t.LightWarmth,this.Type="LightWarmthState",this.Data=e.state}}class Rn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Temperature=0,this.Time=""}}class Pn extends mn{constructor(e){super(),this.TypeAsEnum=_t.LightBrightness,this.Type="LightBrightnessState",this.Data=e.state}}class On{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Brightness=0,this.Time=""}}class Un extends mn{constructor(e){super(),this.TypeAsEnum=_t.MeasuredTemperature,this.Type="MeasuredTemperatureState",this.Data=e.state}}class Mn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Temperature=0,this.Type=Ht.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"}(Ht||(Ht={}));class xn extends mn{constructor(e){super(),this.TypeAsEnum=_t.BatteryState,this.Type="BatteryState",this.Data=e.state}}class Fn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=Kt.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"}(Kt||(Kt={}));class Ln extends mn{constructor(e){super(),this.TypeAsEnum=_t.MeasuredBrightness,this.Type="MeasuredBrightnessState",this.Data=e.state}}class Bn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Brightness=0,this.Time=""}}class $n extends mn{constructor(e){super(),this.TypeAsEnum=_t.MeasuredEnergy,this.Type="MeasuredEnergyState",this.Data=e.state,this.Data.MeasurementParameters=new Map(Object.entries(e.state.MeasurementParameters))}}class Wn{constructor(){this.Channel=0,this.StateReliability=Lt.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"}(jt||(jt={}));class qn extends mn{constructor(e){super(),this.TypeAsEnum=_t.MeasuredDistance,this.Type="MeasuredDistanceState",this.Data=e.state}}!function(e){e[e.No=0]="No",e[e.Yes=1]="Yes"}(zt||(zt={}));class Vn extends mn{constructor(e){super(),this.TypeAsEnum=_t.MovementSensorState,this.Type="MovementSensorState",this.Data=e.state}}class Hn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Intensity=0,this.Movement=Jt.No,this.Time=""}}!function(e){e[e.No=0]="No",e[e.Yes=1]="Yes"}(Jt||(Jt={}));class Kn extends mn{constructor(e){super(),this.TypeAsEnum=_t.BlindRemoteButtonState,this.Type="BlindRemoteButtonState",this.Data=e.state}}class jn{constructor(){this.Channel=0,this.StateReliability=Lt.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 zn extends mn{constructor(e){super(),this.TypeAsEnum=_t.FacadeRemoteButtonState,this.Type="FacadeRemoteButtonState",this.Data=e.state}}class Jn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=Xt.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"}(Xt||(Xt={}));class Yn extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(Qt||(Qt={}));class Xn extends mn{constructor(e){super(),this.TypeAsEnum=_t.GatePosition,this.Type="GatePositionState",this.Data=e.state}}class Qn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.PositionType=Zt.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"}(Zt||(Zt={}));class Zn extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(en||(en={}));class er extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(tn||(tn={}));class tr extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(nn||(nn={}));class nr extends mn{constructor(e){super(),this.TypeAsEnum=_t.HumiditySensorState,this.Type="HumiditySensorState",this.Data=e.state}}class rr{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Type=rn.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"}(rn||(rn={}));class sr extends mn{constructor(e){super(),this.TypeAsEnum=_t.VibrationSensorState,this.Type="VibrationSensorState",this.Data=e.state}}!function(e){e[e.No=0]="No",e[e.Yes=1]="Yes"}(sn||(sn={}));class or extends mn{constructor(e){super(),this.TypeAsEnum=_t.BinarySensorState,this.Type="BinarySensorState",this.Data=e.state}}class ir{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=on.Low,this.Time=""}}!function(e){e[e.High=1]="High",e[e.Low=0]="Low"}(on||(on={}));class ar extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(an||(an={}));class cr extends mn{constructor(e){super(),this.TypeAsEnum=_t.BlindOpenCloseTime,this.Type="BlindOpenCloseTimeState",this.Data=e.state}}class ur extends mn{constructor(e){super(),this.TypeAsEnum=_t.OvercurrentProtectionState,this.Type="OvercurrentProtectionState",this.Data=e.state}}class lr extends mn{constructor(e){super(),this.TypeAsEnum=_t.OvercurrentProtectionThreshold,this.Type="OvercurrentProtectionThresholdState",this.Data=e.state}}class dr extends mn{constructor(e){super(),this.TypeAsEnum=_t.FacadePosition,this.Type="FacadePositionState",this.Data=e.state}}class hr extends mn{constructor(e){super(),this.TypeAsEnum=_t.FacadeType,this.Type="FacadeTypeState",this.Data=e.state}}class pr extends mn{constructor(e){super(),this.TypeAsEnum=_t.CurrentWindThreshold,this.Type="CurrentWindThresholdState",this.Data=e.state}}class gr{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.WindThreshold=cn.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"}(cn||(cn={}));class fr extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(un||(un={}));class vr extends mn{constructor(e){super(),this.TypeAsEnum=_t.WindSpeedState,this.Type="WindSpeedState",this.Data=e.state}}class mr{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Value=0,this.Time=""}}class yr extends mn{constructor(e){super(),this.TypeAsEnum=_t.FloodSensorState,this.Type="FloodSensorState",this.Data=e.state}}class wr{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=ln.NoFloodDetected,this.Time=""}}!function(e){e[e.FloodDetected=1]="FloodDetected",e[e.NoFloodDetected=0]="NoFloodDetected"}(ln||(ln={})),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"}(dn||(dn={}));class Sr extends mn{constructor(e){super(),this.TypeAsEnum=_t.PressureSensorState,this.Type="PressureSensorState",this.Data=e.state}}class Ar{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Pressure=0,this.Time="",this.PressureType=hn.OutsidePressure}}!function(e){e[e.InsidePressure=0]="InsidePressure",e[e.OutsidePressure=1]="OutsidePressure",e[e.SetPressure=2]="SetPressure"}(hn||(hn={})),function(e){e[e.Facade90=0]="Facade90",e[e.Facade180=1]="Facade180"}(pn||(pn={}));class _r extends mn{constructor(e){super(),this.TypeAsEnum=_t.TamperProtectionState,this.Type="TamperProtection",this.Data=e.state}}!function(e){e[e.OK=0]="OK",e[e.Breach=1]="Breach"}(gn||(gn={}));class Cr extends mn{constructor(e){super(),this.TypeAsEnum=_t.LightRGBWState,this.Type="LightRGBW",this.Data=e.state}}class Tr extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(fn||(fn={}));class Dr{constructor(){this._onDeviceStateChangedEvent=new n,this._onDeviceStateRefreshedOrChangedEvent=new n,this._onDeviceTasksExecutionChangedOnChannelsEvent=new n,this._onDeviceFirmwareVersionChangedEvent=new n,this._iconType=St.Unknown,this._serialNumber=null,this._model=null,this._modelGuid=null,this._manufacturerGuid=null,this._isVirtual=!1,this._isEnabled=!1,this._deviceState=Ct.Working,this._deviceType=Dt.Unknown,this._communicationWay=Tt.OneWay,this._availableTasksTypes=[],this._availableResponseTypes=[],this._channels=[],this._protocolGuid=null,this._softwareVersion=null,null==Dr._devicesService&&(Dr._devicesService=$v.Get(Lo.ServiceName));const e=this._onDeviceStateChangedEvent,t=this._onDeviceTasksExecutionChangedOnChannelsEvent;Dr._devicesService.OnDeviceStateChangedEvent().Subscribe((t=>{t.Device.Guid==this._guid&&e.Invoke(t.State)})),Dr._devicesService.OnDeviceStateRefreshedOrChangedEvent().Subscribe((e=>{e.Device.Guid==this._guid&&this._onDeviceStateRefreshedOrChangedEvent.Invoke(e.State)})),Dr._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===Dt.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!==At.SetBlindPositionSimple))}return!1}get States(){return r.DoesThrowStackTrace?$v.Get(Lo.ServiceName).GetDeviceStates(this).selectMany((e=>e.States)).toArray():Dr._devicesService.GetDeviceStates(this).selectMany((e=>e.States)).toArray()}RemoveDeviceAsync(){return Dr._devicesService.RemoveDeviceAsync(this)}ExecuteDeviceTaskAsync(e){return Dr._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*(){try{const t=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(new kr(this,e),2e4,!1);switch(t.Status){case ce.OK:return this._name=e,$v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),new De(ye.Changed,"");case ce.WrongData:if("DeviceNotFound"==t.Data)return new De(ye.Failed,"DeviceNotFound");break;case ce.NoPermissionsToCallGivenResource:return new De(ye.NoPermissions,"")}}catch(e){return e.message.includes("timeout")?new De(ye.ControllerResponseTimeout,""):new De(ye.UnknownError,"")}return new De(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 Dr._devicesService.ExecuteDeviceTaskAsync(this,e)}}class kr 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 br,Nr,Er,Ir,Rr,Pr=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Or{constructor(){this._device=new Dr,this._number=0,this._name="",this._iconName="",this._channelId="",this._mode=yt.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==Or._devicesService&&(Or._devicesService=$v.Get(Lo.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 Pr(this,void 0,void 0,(function*(){const n=this.GetChannelConfigurationData();n.CustomData[e]=t,this._customData[e]=t;const r=new Ur;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 Ur;return n.DeviceGuid=this._device.Guid,n.ChannelConfiguration=t,this.ChangeConfigurationAsync(n)}GetChannelConfigurationData(){const e=new Mr;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 Ur;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 Ur;return t.DeviceGuid=this._device.Guid,t.ChannelConfiguration=e,this.ChangeConfigurationAsync(t)}ChangeNameAsync(e){const t=this.GetChannelConfigurationData(),n=new Ur;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 Ur;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 Ur;return n.DeviceGuid=this._device.Guid,n.ChannelConfiguration=t,this._channelGroups=e,this.ChangeConfigurationAsync(n)}ChangeConfigurationAsync(e){return Pr(this,void 0,void 0,(function*(){var t;try{const n=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(new xr(e),2e4,!1);switch($v.Get(be.ServiceName).ClearCache(),yield $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),n.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 De(ye.Changed,"");case ce.WrongData:if("DeviceNotFound"===n.Data)return null===(t=s.Log)||void 0===t||t.Error("Failed to change channel configuration, referenced device does not exist!"),new De(ye.WrongData,"DeviceNotFound");break;case ce.FatalError:return new De(ye.UnknownError,"")}}catch(e){if(e.message.includes("timeout"))return new De(ye.ControllerResponseTimeout,"")}return new De(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(Lo.ServiceName).GetDeviceStates(this.GetDevice()).where((e=>e.Channel==this.Number)).selectMany((e=>e.States)).toArray():Or._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,Or._devicesService.ExecuteDeviceTaskAsync(this._device,e)):Promise.resolve(Gt.Failed)}}Or._devicesService=null;class Ur{constructor(){this.DeviceGuid="",this.ChannelConfiguration=new Mr}}class Mr{constructor(){this.Channel=0,this.ChannelName="",this.Configuration=yt.Default,this.GroupsGuids=[],this.IconName="",this.Hidden=!1,this.Configurations={},this.CustomData={},this.Roles=[]}}class xr 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"}(br||(br={}));class Fr{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 Lr{constructor(){this._taskType=At.GetChannelsState,this._featureType=br.GetState,this._channel=0,this._guid=Fr.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 Br extends Lr{constructor(){super(),this.Temperature=0,this.FeatureType=br.SetTemperature,this.TaskType=At.SetTemperature}}class $r extends Lr{constructor(){super(),this.FeatureType=br.TurnOff,this.TaskType=At.TurnOff}}class Wr extends Lr{constructor(){super(),this.FeatureType=br.TurnOn,this.TaskType=At.TurnOn}}class qr extends Lr{constructor(){super(),this.SwitchOffDelaySeconds=0,this.FeatureType=br.TurnOnWithTimeout,this.TaskType=At.TurnOnWithTime}}class Vr extends Lr{constructor(){super(),this.Brightness=0,this.FeatureType=br.SetLightBrightness,this.TaskType=At.SetLightBrightness}}class Hr extends Lr{constructor(){super(),this.FeatureType=br.ToggleState,this.TaskType=At.TogleState}}class Kr extends Lr{constructor(){super(),this.R=0,this.G=0,this.B=0,this.FeatureType=br.SetLightColor,this.TaskType=At.SetLightColor}}class jr extends Lr{constructor(){super(),this.Temperature=0,this.FeatureType=br.SetLightTemperature,this.TaskType=At.SetLightTemperature}}class zr extends Lr{constructor(){super(),this.Action=Nr.Stop,this.Position=0,this.FeatureType=br.SetBlindPosition,this.TaskType=At.SetBlindPosition}}!function(e){e[e.Open=0]="Open",e[e.Close=1]="Close",e[e.Stop=2]="Stop",e[e.Percentage=3]="Percentage"}(Nr||(Nr={})),function(e){e[e.Open=0]="Open",e[e.Close=1]="Close",e[e.Stop=2]="Stop",e[e.Percentage=3]="Percentage"}(Er||(Er={}));class Jr extends Lr{constructor(){super(),this.Action=Ir.Stop,this.Position=0,this.FeatureType=br.SetBlindPosition,this.TaskType=At.SetBlindPositionSimple}}!function(e){e[e.Open=0]="Open",e[e.Close=1]="Close",e[e.Stop=2]="Stop"}(Ir||(Ir={}));class Yr extends Lr{constructor(){super(),this.Brightness=0,this.FeatureType=br.SetLightBrightnessDynamicly,this.TaskType=At.SetLightBrightnessDynamicly}}class Xr extends Lr{constructor(){super(),this.FeatureType=br.IdentifyDevice,this.TaskType=At.IdentifyDevice}}class Qr extends Lr{constructor(){super(),this.Data=new Zr,this.FeatureType=br.SetBlindOpenCloseTime,this.TaskType=At.SetBlindOpenCloseTime}}class Zr{constructor(){this.Channel=0,this.CloseTime=0,this.OpenTime=0}}class es extends Lr{constructor(){super(),this.FeatureType=br.GetState,this.TaskType=At.GetChannelsState}}class ts extends Lr{constructor(){super(),this.Position=0,this.FeatureType=br.SetBlindMicroventilation,this.TaskType=At.SetBlindMicroventilation}}class ns extends Lr{constructor(){super(),this.FeatureType=br.GatePulse,this.TaskType=At.ChangeGatewayPositionPulse}}class rs extends Lr{constructor(){super(),this.FeatureType=br.GatewayPulse,this.TaskType=At.ChangeGatewayPositionPulse}}class ss extends Lr{constructor(){super(),this.FacadeAction=Rr.Stop,this.Tilt=0,this.Position=0,this.FeatureType=br.SetFacadePositionAndTilt,this.TaskType=At.SetFacadePosition}}class os extends Lr{constructor(){super(),this.FeatureType=br.GetFacadeType,this.TaskType=At.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"}(Rr||(Rr={}));class is{constructor(){this.R=0,this.G=0,this.B=0,this.W=0,this.Brightness=0,this.Channel=0}}class as extends Lr{constructor(){super(),this.Data=new is,this.FeatureType=br.LightRGBW,this.TaskType=At.LightRGBW}}var cs=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 us{constructor(){this._manualDeviceProtocolServices=new Map}GetServiceName(){return us.ServiceName}RegisterManuallyPairedDevicesProtocol(e){$v.Get(r.ServiceName).Debug(us.ServiceName,`Registering new manual device protocol service: ${e.GetServiceName()}`),$v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),this._manualDeviceProtocolServices.set(e.GetServiceName(),e)}GetDevicesForManualPairingAsync(e){return cs(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 cs(this,void 0,void 0,(function*(){const t=[...this._manualDeviceProtocolServices.values()].find((t=>t.ProtocolExtensionGuid==e.ProtocolExtensionGuid));return null!=t?t.AddManuallyPairedDeviceAsync(e):($v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),Gt.Failed)}))}GetRegisteredProtocolGuids(){return[...this._manualDeviceProtocolServices.values()].map((e=>e.ProtocolExtensionGuid))}}us.ServiceName="ManualDeviceService";class ls{constructor(){this.ResourceGuid="",this.Data=null,this.IsGlobal=!1,this.InsertTime=new Date}}var ds,hs=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 ps{constructor(){this._connection=null,this._localDb=null,this._connection=$v.Get(Ot.ServiceName),this._localDb=$v.Get(o.ServiceName)}GetLocalDbName(e,t){return`${e}_${t}`}SaveAsync(e,t,n){return hs(this,void 0,void 0,(function*(){let r=new gs(e,t,n),s=yield this._connection.SendAndWaitForResponseAsync(r,35e3,!1);if(s.Status===ce.OK){const r=new ms;r.ResourceGuid=e,r.Data=JSON.stringify(n),r.IsGlobal=t,this._localDb.Save(ps.ServiceName,this.GetLocalDbName(e,t),r)}return s.Status}))}ReadAsync(e,t,n){return hs(this,void 0,void 0,(function*(){let r=new fs(e,t);if(!n){const n=this._localDb.Read(ps.ServiceName,this.GetLocalDbName(e,t));if(null!=n){const e=n,t=new ls;return t.Data=JSON.parse(e.Data),t.IsGlobal=e.IsGlobal,t.ResourceGuid=e.ResourceGuid,t}}let s=yield this._connection.SendAndWaitForResponseAsync(r,35e3,!1);if(s.Status===ce.OK){const e=new ls;return e.ResourceGuid=s.ResourceGuid,e.Data=JSON.parse(s.Data),e.IsGlobal=s.IsGlobal,e}return s.Status}))}RemoveAsync(e,t){return hs(this,void 0,void 0,(function*(){let n=new vs(e,t);return(yield this._connection.SendAndWaitForResponseAsync(n,35e3,!1)).Status}))}GetServiceName(){return ps.ServiceName}}ps.ServiceName="RemoteStorageService";class gs 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 fs 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 vs 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 ms extends ae{constructor(){super(...arguments),this.ResourceGuid="",this.Data="",this.IsGlobal=!1,this.InsertTime=new Date}}class ys{constructor(){this.Longitude=0,this.Latitude=0}}class ws{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"}(ds||(ds={}));var Ss,As,_s=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Cs{IsControllerGeolocationSetAsync(){return _s(this,void 0,void 0,(function*(){let e=new Ts,t=yield $v.Get(Ot.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 _s(this,void 0,void 0,(function*(){return new Promise(((e,t)=>_s(this,void 0,void 0,(function*(){window.navigator.geolocation.getCurrentPosition((t=>{e(t)}),(t=>{e(t)}))}))))}))}SetControllerGeolocationAsync(e){return _s(this,void 0,void 0,(function*(){var t,n;let r=new ks;r.Data.Latitude=e.Latitude,r.Data.Longitude=e.Longitude,null===(t=s.Log)||void 0===t||t.Warning(Cs.ServiceName,`SetControllerGeolocationAsync() ${JSON.stringify(r)}`);let o=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(r,15e3,!1);switch(null===(n=s.Log)||void 0===n||n.Warning(Cs.ServiceName,`${JSON.stringify(o)}`),$v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null==o?void 0:o.Status){case ce.OK:return new ke(ds.OK,"");case ce.NoPermissionToPerformThisOperation:case ce.NoPermissionsToCallGivenResource:return new ke(ds.NoPermissions,"");case ce.UserIsNotLoggedIn:return new ke(ds.UserIsNotLoggedIn,"");default:return new ke(ds.UnknownError,"")}}))}GetControlllerGeolocationAsync(){return _s(this,void 0,void 0,(function*(){var e,t;let n=new Ds;null===(e=s.Log)||void 0===e||e.Warning(Cs.ServiceName,`GetControlllerGeolocationAsync(): ${JSON.stringify(n)}`);let r=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(n,15e3,!0);if(null===(t=s.Log)||void 0===t||t.Warning(Cs.ServiceName,`${JSON.stringify(r)}`),(null==r?void 0:r.Status)===ce.OK){let e=new ws;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 Cs.ServiceName}}Cs.ServiceName="GeolocationService";class Ts extends ae{constructor(){super(),this.Resource="/geolocation/isset",this.Method=ue.Get}}class Ds extends ae{constructor(){super(),this.Resource="/geolocation/get",this.Method=ue.Get}}class ks extends ae{constructor(){super(),this.Data=new ys,this.Resource="/geolocation/save",this.Method=ue.Put}}!function(e){e[e.Device=0]="Device",e[e.Controller=1]="Controller"}(Ss||(Ss={}));class Gs{constructor(){this.UpdateGuid="",this.Channel="",this.Version="",this.CurrentVersion="",this.DownloadUri="",this.Download="",this.Name="",this.Description="",this.UpdateType=As.Unknown,this.ResourceGuid=""}}class bs{constructor(){this.UpdateDescription=new Map,this.Update=new Gs,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"}(As||(As={}));class Ns extends Error{constructor(e){super(e),this.message=e,this.name="UpdateProviderNotFound"}}var Es,Is,Rs,Ps,Os,Us,Ms,xs,Fs,Ls,Bs,$s,Ws,qs,Vs,Hs,Ks,js,zs=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Js{constructor(){this._services=new Map,this._runtimeInfo=new Ys,this._hardwareInfo=new Qs,this._semaphore=new Qe(1),this._isRuntimeInfoInitialized=!1,this._isHardwareInfoInitialized=!1}GetServiceName(){return Js.ServiceName}RegisterUpdatesProvider(e){$v.Get(r.ServiceName).Debug(Js.ServiceName,`Registering new update provider: ${e.GetUpdateProviderName()}`),this._services.set(e.GetUpdateProviderName(),e)}GetUpdatesProviderAsync(e){return zs(this,void 0,void 0,(function*(){$v.Get(r.ServiceName).Debug(Js.ServiceName,`Getting update provider [${e}] by GetUpdateProviderAsync<T>()`);const t=this._services.get(e);if(null==t)throw new Ns("Cannot get update provider! Requested update provider has not been registered.");return t}))}GetUpdatesProvidersAsync(e){return zs(this,void 0,void 0,(function*(){$v.Get(r.ServiceName).Debug(Js.ServiceName,`Getting update providers with type ${e} by GetUpdateProvidersAsync<T>()`);let t=[];if(t=[...this._services.values()].filter((t=>t.ProviderType==e)),0==t.length)throw new Ns("Cannot get update providers! Requested update providers has not been registered.");return t}))}GetUpdatesProvidersByProtocolAsync(e,t,n){return zs(this,void 0,void 0,(function*(){if(new RegExp("^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$").test(e)){$v.Get(r.ServiceName).Debug(Js.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 Ns("Cannot get update providers! Requested update providers has not been registered.");return s}throw new Ns("Cannot get update providers! Bad parameters.")}))}GetUpdatesProvidersByExtensionAsync(e,t,n){return zs(this,void 0,void 0,(function*(){if(new RegExp("^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$").test(e)){$v.Get(r.ServiceName).Debug(Js.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 Ns("Cannot get update providers! Requested update providers has not been registered.");return s}throw new Ns("Cannot get update providers! Bad parameters.")}))}GetSoftwareRuntimeInfoAsync(){return zs(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 zs(this,void 0,void 0,(function*(){$v.Get(r.ServiceName).Debug(Js.ServiceName,"Getting runtime version info from controller.");try{const e=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(new Xs,16e3,!1);if(null==e||null==e.Status)throw new eo('Cannot get runtime info, controller response result is empty."',Es.EmptyResponse);if(e.Status!=ce.OK)throw new eo(`Cannot get runtime info, controller responded with status ${e.Status}.`,Es.WrongResponseStatus);if(null==e.Data)throw new eo("Cannot get runtime info, controller responded with status OK but response does not contains data.",Es.NoDataInResponse);this._runtimeInfo=e.Data,this._isRuntimeInfoInitialized=!0}catch(e){throw e instanceof p?new eo("Cannot get runtime info, controller response timeout.",Es.Timeout):e}}))}GetHardwareInfoAsync(){return zs(this,arguments,void 0,(function*(e=!1){return!this._isHardwareInfoInitialized||e?(yield this.GetHardwareControllerInfoAsync(),this._hardwareInfo):this._hardwareInfo}))}GetHardwareControllerInfoAsync(){return zs(this,void 0,void 0,(function*(){$v.Get(r.ServiceName).Debug(Js.ServiceName,"Getting hardware info from controller.");const e=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(new Zs,8e3,!1);if(null==e||null==e.Status)throw new eo('Cannot get hardware info, controller response result is empty."',Es.EmptyResponse);if(e.Status!=ce.OK)throw new eo(`Cannot get hardware info, controller responded with status ${e.Status}.`,Es.WrongResponseStatus);if(null==e.Data)throw new eo("Cannot get hardware info, controller responded with status OK but response does not contains data.",Es.NoDataInResponse);this._hardwareInfo=e.Data,this._isRuntimeInfoInitialized=!0}))}}Js.ServiceName="UpdateProvider";class Ys{constructor(){this.BaseLinuxVersion="",this.BaseMonoVersion="",this.RuntimeVersion="",this.UpdateChannel="",this.SoftwareVersion=""}}class Xs extends ae{constructor(){super(),this.Resource="/controller/software/info",this.Method=ue.Get}}class Qs{constructor(){this.GetControllerHardwareVersion=0,this.DevicePIN="",this.GetControllerSerialNumber="",this.HostnamePrefix="",this.DefaultStaticIpAddress="",this.GetAvailableHardware=[],this.ControllerSecret=""}}class Zs extends ae{constructor(){super(),this.Resource="/controller/hardware/info",this.Method=ue.Get}}class eo 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"}(Es||(Es={})),function(e){e.OtherError="OtherError",e.FatalError="FatalError",e.NoData="NoData",e.InvalidSceneGuid="InvalidSceneGuid"}(Is||(Is={}));class to{constructor(){this._comparisonParams=new Map,this.Type=_t.Unknown,this.DeviceGuid="",this.ComparisonMethod=Rs.Default}GetCheckDeviceState(){return this._checkDeviceState}SetCheckDeviceState(e){this._checkDeviceState=e,e instanceof Fn&&(this.Type=_t.BatteryState),e instanceof ir&&(this.Type=_t.BinarySensorState),e instanceof kn&&(this.Type=_t.BlindPosition),e instanceof On&&(this.Type=_t.LightBrightness),e instanceof Bn&&(this.Type=_t.MeasuredBrightness),e instanceof bn&&(this.Type=_t.RemoteButtonState),e instanceof wn&&(this.Type=_t.ChannelOnOffState),e instanceof _n&&(this.Type=_t.DoorBellState),e instanceof Wn&&(this.Type=_t.MeasuredEnergy),e instanceof wr&&(this.Type=_t.FloodSensorState),e instanceof Qn&&(this.Type=_t.GatePosition),e instanceof En&&(this.Type=_t.LightColor),e instanceof Rn&&(this.Type=_t.LightWarmth),e instanceof Tn&&(this.Type=_t.ReedState),e instanceof Mn&&(this.Type=_t.MeasuredTemperature),e instanceof rr&&(this.Type=_t.HumiditySensorState),e instanceof jn&&(this.Type=_t.BlindRemoteButtonState),e instanceof Jn&&(this.Type=_t.FacadeRemoteButtonState),e instanceof Hn&&(this.Type=_t.MovementSensorState),e instanceof Wn&&(this.Type=_t.MeasuredEnergy),e instanceof Ar&&(this.Type=_t.PressureSensorState),e instanceof mr&&(this.Type=_t.WindSpeedState),e instanceof gr&&(this.Type=_t.CurrentWindThreshold)}GetComparisonParam(e){return this._comparisonParams.get(e)}GetComparisonParams(){return this._comparisonParams}SetComparisonParam(e,t){this._comparisonParams.set(e,t)}}class no{constructor(e){this._value=e}get Value(){return this._value}set Value(e){this._value=e}}class ro{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"}(Rs||(Rs={})),function(e){e[e.DeltaValue=0]="DeltaValue",e[e.DeltaCalculationTimeRange=1]="DeltaCalculationTimeRange",e[e.StateRepeatCount=2]="StateRepeatCount",e[e.StateRepeatTimeRange=3]="StateRepeatTimeRange"}(Ps||(Ps={})),function(e){e[e.SunRise=1]="SunRise",e[e.SunSet=2]="SunSet"}(Os||(Os={}));class so{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"}(Us||(Us={})),function(e){e.Unknown="Unknown",e.DeviceTask="DeviceTask",e.DelayTask="DelayTask",e.NotifyTask="NotifyTask",e.LockExecution="LockExecution"}(Ms||(Ms={})),(js=xs||(xs={}))[js.Unknown=0]="Unknown",js[js.Second=1]="Second",js[js.Minute=2]="Minute",js[js.Hour=3]="Hour",js[js.Day=4]="Day",js[js.DayOfWeek=5]="DayOfWeek",js[js.Month=6]="Month",js[js.Year=7]="Year",js[js.Date=8]="Date",js[js.Time=9]="Time",js[js.WeatherType=11]="WeatherType",js[js.CompareNumbers=12]="CompareNumbers",js[js.CompareBooleans=13]="CompareBooleans",js[js.DeviceState=14]="DeviceState",js[js.Timer=15]="Timer",js[js.Temperature=17]="Temperature",js[js.DaysOfWeek=18]="DaysOfWeek",js[js.AstronomicalClockWithOffset=19]="AstronomicalClockWithOffset",js[js.SceneExecuted=20]="SceneExecuted",(Ks=Fs||(Fs={}))[Ks.Unknown=0]="Unknown",Ks[Ks.Equal=1]="Equal",Ks[Ks.NotEqueal=2]="NotEqueal",Ks[Ks.BiggerThan=3]="BiggerThan",Ks[Ks.SmallerThan=4]="SmallerThan",Ks[Ks.BiggerThanOrEqual=5]="BiggerThanOrEqual",Ks[Ks.SmallerThanOrEqual=6]="SmallerThanOrEqual",Ks[Ks.OneOfBothIsTrue=7]="OneOfBothIsTrue",Ks[Ks.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"}(Ls||(Ls={})),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"}(Bs||(Bs={})),(Hs=$s||($s={})).Null="Null",Hs.Condition="Condition",Hs.ConditionGroup="ConditionGroup",Hs.ArgumentAsInt="ArgumentAsInt",Hs.ArgumentAsTimeSpan="ArgumentAsTimeSpan",Hs.ArgumentAsBoolean="ArgumentAsBoolean",Hs.ArgumentAsTimeout="ArgumentAsTimeout",Hs.ArgumentAsDayOfWeek="ArgumentAsDayOfWeek",Hs.ArgumentAsDaysOfWeek="ArgumentAsDaysOfWeek",Hs.ArgumentAsAstronomicalClock="ArgumentAsAstronomicalClock",Hs.ArgumentAsTime="ArgumentAsTime",Hs.ArgumentAsDeviceState="ArgumentAsDeviceState",Hs.ArgumentAsNumber="ArgumentAsNumber",Hs.ArgumentAsAstronomicalClockWithOffset="ArgumentAsAstronomicalClockWithOffset",Hs.ArgumentAsConditionInfo="ArgumentAsConditionInfo",function(e){e.DeviceTask="DeviceTask",e.DelayTask="DelayTask",e.LockExecutionTask="LockExecutionTask",e.NotifyTaskAppNotify="NotifyTaskAppNotify",e.NotifyTaskEmailNotify="NotifyTaskEmailNotify"}(Ws||(Ws={}));class oo 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"}(qs||(qs={})),function(e){e[e.Timeout=0]="Timeout",e[e.TimeRange=1]="TimeRange"}(Vs||(Vs={}));var io,ao,co;class uo{constructor(e,t="Cube"){this._result=null,this._tmp=new lo,this._tmpTask=null,this._prevSeqGuid="",this._currentSeqGuid="",this._editingExistingSequence=!1,this._rawExistingSequenceTasks=null,this._sequenceName="",this._sequenceIcon="",this._service=$v.Get(Go.ServiceName),e&&(this._sequenceName=e,this._sequenceIcon=t,this._tmp.Guid=Fr.NewGuid())}SetSequenceName(e){const t=n=>{if(n.RightArgumentType!=co.Null)return t(n.RightArgument);n.Tasks.ControllerTasks.where((e=>e.TaskType==Us.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==co.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 uo;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=Fr.NewGuid(),e.RightArgumentType==co.Condition&&t(e.RightArgument)};null!=e._result&&t(e._result),null!=this._tmp&&(this._tmp.Guid=Fr.NewGuid())})(e),e}GetPrevious(){let e="";const t=(n,r)=>n.Guid==r?{sequence:n,prevGuid:e}:n.RightArgumentType==co.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!=co.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=Fs.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Fs.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=Fr.NewGuid(),this._tmp.HandledType=xs.AstronomicalClockWithOffset,this._tmp.LeftArgumentType=co.ArgumentAsAstronomicalClockWithOffset,this._tmp.AtMeetCondition=t,t&&null!=n&&n!=Fs.Equal)throw new Ao("AtmeetCondition supports only comparation type 'Equal'.");if(e.Offset<-3600||e.Offset>3600)throw new Ao("Offset must be in range between -3600 and 3600 seconds.");if(t)this._tmp.ConditionType=Fs.Equal;else{if(null==n)throw new Ao("Comparasion type must be provided if atMeetCondition is false!");this._tmp.ConditionType=n}return this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=co.ArgumentAsAstronomicalClockWithOffset,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsActionWithEmptyCondition(){return this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.Unknown,this._tmp.LeftArgumentType=co.Null,this._tmp.ConditionType=Fs.Equal,this._tmp.LeftArgument.Argument=null,this._tmp.LeftArgument.HandledType=co.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=Fs.Equal){return this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.DaysOfWeek,this._tmp.LeftArgumentType=co.ArgumentAsDaysOfWeek,this._tmp.ConditionType=n,this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=co.ArgumentAsDaysOfWeek,this._tmp.AtMeetCondition=t,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsTimeSpan(e,t=Fs.Equal){return this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.Timer,this._tmp.LeftArgumentType=co.ArgumentAsTimeSpan,this._tmp.ConditionType=t,this._tmp.AtMeetCondition=!0,this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=co.ArgumentAsTimeSpan,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsTime(e,t,n=Fs.Equal){return this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.Time,this._tmp.LeftArgumentType=co.ArgumentAsTime,this._tmp.ConditionType=n,this._tmp.AtMeetCondition=t,this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=co.ArgumentAsTime,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsDeviceState(e,t,n,r=Fs.Equal){return this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.DeviceState,this._tmp.LeftArgumentType=co.ArgumentAsDeviceState,this._tmp.ConditionType=r,this._tmp.AtMeetCondition=t,this._tmp.ConditionTimeout=n,this._tmp.LeftArgument.Argument=this.GenerateDeviceStateArgument(e),this._tmp.LeftArgument.HandledType=co.ArgumentAsDeviceState,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsSceneExecuted(e){this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.SceneExecuted,this._tmp.LeftArgumentType=co.ArgumentAsConditionInfo,this._tmp.ConditionType=Fs.Equal,this._tmp.AtMeetCondition=!0;const t=new so;return t.DeviceGuid=e.DeviceGuid,this._tmp.LeftArgument.Argument=t,this._tmp.LeftArgument.HandledType=co.ArgumentAsConditionInfo,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}GenerateDeviceStateArgument(e){const t=new go;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),{[Ps[e]]:t.Value});switch(t.ComparisonParams=n,t.DeviceGuid=e.DeviceGuid,t.DeviceStateType=this.MapResponseTypeToDeviceStateType(e.Type),e.Type){case _t.BatteryState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State,t.CheckedDeviceState.Percentage=e.GetCheckDeviceState().Percentage;break;case _t.BinarySensorState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.BlindPosition:t.CheckedDeviceState.Position=e.GetCheckDeviceState().Position;break;case _t.LightBrightness:case _t.MeasuredBrightness:t.CheckedDeviceState.Brightness=e.GetCheckDeviceState().Brightness;break;case _t.RemoteButtonState:case _t.ChannelOnOffState:case _t.DoorBellState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.MeasuredEnergy:{let n={},r=e.GetCheckDeviceState().MeasurementParameters.entries();for(const[e,t]of r)n=Object.assign(Object.assign({},n),{[jt[e]]:t});t.CheckedDeviceState.MeasurementParameters=n;break}case _t.FloodSensorState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.GatePosition:t.CheckedDeviceState.Position=e.GetCheckDeviceState().Position,t.CheckedDeviceState.PositionType=e.GetCheckDeviceState().PositionType;break;case _t.LightColor:{const n=e.GetCheckDeviceState();t.CheckedDeviceState.R=n.R,t.CheckedDeviceState.G=n.G,t.CheckedDeviceState.B=n.B;break}case _t.LightWarmth:t.CheckedDeviceState.Temperature=e.GetCheckDeviceState().Temperature;break;case _t.ReedState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.SmokeSensorState:throw new oo("Unsupported device state!");case _t.MeasuredTemperature:t.CheckedDeviceState.Temperature=e.GetCheckDeviceState().Temperature;break;case _t.HumiditySensorState:t.CheckedDeviceState.Humidity=e.GetCheckDeviceState().Humidity;break;case _t.BlindRemoteButtonState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.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 _t.FacadeRemoteButtonState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.MovementSensorState:{let n=e.GetCheckDeviceState();t.CheckedDeviceState.Movement=n.Movement,t.CheckedDeviceState.Intensity=n.Intensity;break}case _t.PressureSensorState:t.CheckedDeviceState.Pressure=e.GetCheckDeviceState().Pressure,t.CheckedDeviceState.PressureType=e.GetCheckDeviceState().PressureType;break;case _t.WindSpeedState:t.CheckedDeviceState.Value=e.GetCheckDeviceState().Value;break;case _t.CurrentWindThreshold:t.CheckedDeviceState.WindThreshold=e.GetCheckDeviceState().WindThreshold;break;case _t.Unknown:t.CheckedDeviceState={};break;default:throw new oo("Unsupported device state!")}return t}MapResponseTypeToDeviceStateType(e){switch(e){case _t.BatteryState:return Ls.BatteryState;case _t.BinarySensorState:return Ls.BinarySensor;case _t.BlindPosition:return Ls.BlindPosition;case _t.LightBrightness:return Ls.LightBrightness;case _t.RemoteButtonState:return Ls.ButtonState;case _t.ChannelOnOffState:return Ls.ChannelOnOff;case _t.DoorBellState:return Ls.DoorBell;case _t.MeasuredEnergy:return Ls.Energy;case _t.FloodSensorState:return Ls.FloodSensor;case _t.GatePosition:return Ls.GatePosition;case _t.MeasuredBrightness:return Ls.Brightness;case _t.LightColor:return Ls.LightColor;case _t.LightWarmth:return Ls.LightTemperature;case _t.ReedState:return Ls.ReedState;case _t.SmokeSensorState:return Ls.SmokeSensor;case _t.MeasuredTemperature:return Ls.Temperature;case _t.HumiditySensorState:return Ls.Humidity;case _t.BlindRemoteButtonState:return Ls.BlindsControlButton;case _t.FacadeRemoteButtonState:return Ls.FacadeControlButton;case _t.MovementSensorState:return Ls.Movement;case _t.PressureSensorState:return Ls.AirPressure;case _t.WindSpeedState:return Ls.WindSpeed;case _t.CurrentWindThreshold:return Ls.WindThreshold;default:return Ls.Unknown}}AddSequence(){const e=(t,n)=>{if(t.RightArgumentType!=co.Null)return e(t.RightArgument,n);t.RightArgumentType=co.Condition,t.RightArgument=n,this._editingExistingSequence&&null!=this._rawExistingSequenceTasks&&(n.Tasks=JSON.parse(JSON.stringify(this._rawExistingSequenceTasks)),t.Tasks=new fo)};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 lo,{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=Fs.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Fs.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!=co.Condition){if(n.RightArgumentType==co.Condition)return t(n.RightArgument,r);throw new _o(`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 _o(`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 lo,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=Fs.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Fs.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==co.Condition?e.RightArgument.Guid:"",this._prevSeqGuid=null!=t?t.Guid:""):this._prevSeqGuid==n&&(this._prevSeqGuid=null!=t?t.Guid:""))},r=(e,s)=>{if(e.Guid!=s){if(t=e,e.RightArgumentType==co.Null)throw new _o(`Cannot remove sequence, sequence with given guid ${s} not found!`);return r(e.RightArgument,s)}null==t?this._result=null:(t.RightArgument=e.RightArgument,t.RightArgumentType=e.RightArgumentType),n(e,s)};if(null==this._result)throw new _o("Cannot remove sequence, sequence not configured!");return this._result.Guid==e&&this._result.RightArgumentType!=co.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=Fs.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Fs.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!=co.Null)return e(t.RightArgument);null!=this._rawExistingSequenceTasks&&(t.Tasks=this._rawExistingSequenceTasks)};if(null==this._result)throw new _o("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:se.GenerateMd5(JSON.stringify(this._tmpTask))}}ParseDeviceTask(e){const t=new mo;return t.Channel=e.Channel,t.DeviceGuid=e.DeviceGuid,t.ControlFeature=this.MapTaskTypeToControlFeature(e.TaskType),t.Data={},t.Data.Channel=e.Channel,e.TaskType==At.SetBlindPosition||e instanceof zr?(t.Data.Position=e.Position,t.Data.Action=e.Action):e.TaskType==At.SetBlindPositionSimple||e instanceof Jr?(t.Data.Action=e.Action,t.Data.Position=0):e.TaskType==At.SetLightColor||e instanceof Kr?(t.Data.R=e.R,t.Data.G=e.G,t.Data.B=e.B):e.TaskType==At.SetLightTemperature||e instanceof jr?t.Data.Temperature=e.Temperature:e.TaskType==At.SetLightBrightness||e instanceof Vr?t.Data.Brightness=e.Brightness:e.TaskType==At.SetTemperature||e instanceof Br?t.Data.Temperature=e.Temperature:e.TaskType==At.TurnOnWithTime||e instanceof qr?t.Data.SwitchOffDelaySeconds=e.SwitchOffDelaySeconds:e.TaskType==At.SetLightBrightnessDynamicly||e instanceof Yr?t.Data.Brightness=e.Brightness:e.TaskType==At.SetBlindOpenCloseTime||e instanceof Qr?(t.Data.CloseTime=e.Data.CloseTime,t.Data.OpenTime=e.Data.OpenTime):e.TaskType==At.SetBlindMicroventilation||e instanceof ts?t.Data.Position=e.Position:e.TaskType==At.SetFacadePosition||e instanceof ss?(t.Data.FacadeAction=e.FacadeAction,t.Data.Position=e.Position,t.Data.Tilt=e.Tilt):(e.TaskType==At.LightRGBW||e instanceof as)&&(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 yo;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:se.GenerateMd5(JSON.stringify(t))}}NotifyTask(e){if(e.NotifyType==qs.Email)throw new To("NotifyType 'Email' is not supported!");if(e.NotifyType==qs.None)throw new Error("NotifyType mus be set!");if(""==e.Message)throw new Ao("Message must be set!");if(e.Message.length>1e3)throw new Ao("Message is too long! Max length is 1000 characters.");const t=new So;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:se.GenerateMd5(JSON.stringify(t))}}LockExecutionTask(e){const t=new wo;if(t.LockType=e.LockType,t.LockType==Vs.Timeout&&"00:00:00"!=t.LockEndHour)throw new To("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:se.GenerateMd5(JSON.stringify(t))}}AddTask(){const e=t=>{if(t.RightArgumentType!=co.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 mo&&t.Tasks.DevicesTasks.push(structuredClone(this._tmpTask)),t.Tasks.ControllerTasks.push(structuredClone(this._tmpTask)),this._tmpTask=null,$v.Get(r.ServiceName).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=>{if(n.RightArgumentType!=co.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 Co("Task not found, cannot edit!");this._tmpTask instanceof mo&&null!=n.Tasks.DevicesTasks&&(n.Tasks.DevicesTasks=n.Tasks.DevicesTasks.map((t=>se.GenerateMd5(JSON.stringify(t))==e?structuredClone(this._tmpTask):t))),n.Tasks.ControllerTasks=n.Tasks.ControllerTasks.map((t=>se.GenerateMd5(JSON.stringify(t))==e?structuredClone(this._tmpTask):t)),this._tmpTask=null,$v.Get(r.ServiceName).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,s;if(e.RightArgumentType!=co.Null)return t(e.RightArgument,n);{const t=e.Tasks.ControllerTasks.filter((e=>se.GenerateMd5(JSON.stringify(e))!=n));if(e.Tasks.ControllerTasks=null==t?[]:t,null===(s=null===(r=e.Tasks)||void 0===r?void 0:r.DevicesTasks)||void 0===s?void 0:s.any()){const t=e.Tasks.DevicesTasks.filter((e=>se.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 At.Unknown:throw new Ao("Unsupported task type!");case At.SetBlindPosition:case At.SetBlindPositionSimple:return br.SetBlindPosition;case At.SetBlindMicroventilation:return br.SetBlindMicroventilation;case At.TurnOff:return br.TurnOff;case At.TurnOn:return br.TurnOn;case At.TurnOnWithTime:return br.TurnOnWithTimeout;case At.TogleState:return br.ToggleState;case At.SetLightBrightnessDynamicly:return br.SetLightBrightnessDynamicly;case At.SetLightBrightness:return br.SetLightBrightness;case At.SetLightColor:return br.SetLightColor;case At.SetLightTemperature:return br.SetLightTemperature;case At.PairDevice:case At.UnpairDevice:throw new Ao("Unsupported task type!");case At.IdentifyDevice:return br.IdentifyDevice;case At.GetChannelsState:return br.GetState;case At.GetPowerMeasurements:case At.GetAvailableData:case At.MultipleDataRequest:throw new Ao("Unsupported task type!");case At.SetBlindOpenCloseTime:return br.SetBlindOpenCloseTime;case At.SetTemperature:return br.SetTemperature;case At.ChangeGatePositionPulse:return br.GatePulse;case At.ChangeGatewayPositionPulse:return br.GatewayPulse;case At.SetFacadePosition:case At.GetFacadeType:return br.SetFacadePositionAndTilt;case At.LightRGBW:return br.LightRGBW;default:throw new Ao("Unsupported task type!")}}GetSupportedTaskTypesAsync(){return e=this,t=void 0,r=function*(){const e=yield $v.Get(Js.ServiceName).GetSoftwareRuntimeInfoAsync(),[t,n]=e.SoftwareVersion.split(".").map((e=>parseInt(e))),r=[Ws.DeviceTask];return(t>5||5==t&&n>=27)&&r.push(Ws.DelayTask),(t>5||5==t&&n>=37)&&r.push(Ws.LockExecutionTask),(t>6||6==t&&n>=3)&&r.push(Ws.NotifyTaskAppNotify),r},new((n=void 0)||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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!=co.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==co.Condition?this.FindArgumentWithGuid(e.RightArgument,t):null}GetAllowedArguments(){const e=[];return null==this._result?(e.push({ArgumentType:ao.ArgumentAsAstronomicalClockWithOffset,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:ao.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:ao.ArgumentAsDeviceState,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:ao.ArgumentAsSceneExecuted,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:ao.ArgumentAsTime,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:ao.ArgumentAsTimeSpan,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1})):null!=this._result&&(null==this._result.RightArgument||this._result.RightArgument instanceof ho)&&(this._result.LeftArgumentType==co.ArgumentAsDaysOfWeek&&(e.push({ArgumentType:ao.ArgumentAsTime,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!0}),e.push({ArgumentType:ao.ArgumentAsAstronomicalClockWithOffset,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!0})),this._result.LeftArgumentType==co.ArgumentAsTime&&e.push({ArgumentType:ao.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!1}),this._result.LeftArgumentType==co.ArgumentAsAstronomicalClockWithOffset&&e.push({ArgumentType:ao.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!1})),0==e.any((e=>e.ArgumentType==ao.ArgumentAsAstronomicalClockWithOffset))&&e.push({ArgumentType:ao.ArgumentAsAstronomicalClockWithOffset,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==ao.ArgumentAsDaysOfWeek))&&e.push({ArgumentType:ao.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==ao.ArgumentAsDeviceState))&&e.push({ArgumentType:ao.ArgumentAsDeviceState,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==ao.ArgumentAsSceneExecuted))&&e.push({ArgumentType:ao.ArgumentAsSceneExecuted,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),0==e.any((e=>e.ArgumentType==ao.ArgumentAsTime))&&e.push({ArgumentType:ao.ArgumentAsTime,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==ao.ArgumentAsTimeSpan))&&e.push({ArgumentType:ao.ArgumentAsTimeSpan,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e}ValidateScene(){var e,t,n,r;if(null==this._result)throw new Error("No context!");const s=[],o=(e,t,n)=>e.RightArgumentType==co.Null?e.LeftArgumentType==t&&e.AtMeetCondition==n?e:null:e.LeftArgumentType==t&&e.AtMeetCondition==n?e:o(e.RightArgument,t,n),i=o(this._result,co.ArgumentAsDaysOfWeek,!0);null!=i&&((null===(e=i.RightArgument)||void 0===e?void 0:e.LeftArgumentType)==co.ArgumentAsTime||(null===(t=i.RightArgument)||void 0===t?void 0:t.LeftArgumentType)==co.ArgumentAsAstronomicalClockWithOffset)&&s.push(io.OptimizeDayOfWeekArgument);const a=o(this._result,co.ArgumentAsTime,!0);return null!=a&&(null===(n=a.RightArgument)||void 0===n?void 0:n.LeftArgumentType)==co.ArgumentAsDaysOfWeek&&(null===(r=a.RightArgument)||void 0===r?void 0:r.AtMeetCondition)&&s.push(io.OptimizeAtInDayOfWeekArgument),{IsValid:0==s.length,Errors:s,TryFix:()=>this.TryFix(s),Ignore:()=>this.Commit()}}TryFix(e){if(null==this._result)throw new Error("No context!");if(e.includes(io.OptimizeDayOfWeekArgument)){const e=t=>{var n,r;return t.LeftArgumentType==co.ArgumentAsDaysOfWeek?(null===(n=t.RightArgument)||void 0===n?void 0:n.LeftArgumentType)==co.ArgumentAsTime||(null===(r=t.RightArgument)||void 0===r?void 0:r.LeftArgumentType)==co.ArgumentAsAstronomicalClockWithOffset?t:e(t.RightArgument):t.RightArgumentType==co.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(io.OptimizeAtInDayOfWeekArgument)){const e=t=>{var n,r;return t.LeftArgumentType==co.ArgumentAsTime?(null===(n=t.RightArgument)||void 0===n?void 0:n.LeftArgumentType)==co.ArgumentAsDaysOfWeek&&(null===(r=t.RightArgument)||void 0===r?void 0:r.AtMeetCondition)?t:e(t.RightArgument):t.RightArgumentType==co.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"}(io||(io={})),function(e){e.Unknown="Unknown",e.ArgumentAsAstronomicalClockWithOffset="ArgumentAsAstronomicalClockWithOffset",e.ArgumentAsDaysOfWeek="ArgumentAsDaysOfWeek",e.ArgumentAsTimeSpan="ArgumentAsTimeSpan",e.ArgumentAsTime="ArgumentAsTime",e.ArgumentAsDeviceState="ArgumentAsDeviceState",e.ArgumentAsSceneExecuted="ArgumentAsSceneExecuted"}(ao||(ao={}));class lo{constructor(){this.Tasks=new fo,this.Guid="",this.ObjectType=1,this.Name="",this.Icon="",this.AtMeetCondition=!1,this.ExecuteOnce=!1,this.IsDisabled=!1,this.HandledType=xs.Unknown,this.ConditionType=Fs.Unknown,this.ConditionTimeout=0,this.LeftArgumentType=co.Null,this.RightArgumentType=co.Null,this.LeftArgument=new po({},co.Null),this.RightArgument=new ho}}class ho{constructor(){this.HandledType=0,this.Argument=null}}class po{constructor(e,t){this.Argument=e,this.HandledType=t}}class go{constructor(){this.DeviceStateType=Ls.Unknown,this.Channel=0,this.DeviceGuid="",this.ComparisonMethod=Rs.Default,this.ComparisonParams=null,this.CheckedDeviceState={}}}class fo{constructor(){this.ControllerTasks=[],this.DevicesTasks=[]}}class vo{constructor(){this.Guid=Fr.NewGuid(),this.RunParallel=!1,this.TaskType=Us.Unknown}}class mo extends vo{constructor(){super(...arguments),this.TaskType=Us.DeviceTask,this.DeviceGuid="",this.Channel=0,this.ControlFeature=br.TurnOn}}class yo extends vo{constructor(){super(...arguments),this.TaskType=Us.DelayTask,this.Delay="00:00:00"}}class wo extends vo{constructor(){super(...arguments),this.TaskType=Us.LockExecution,this.LockType=Vs.Timeout,this.LockStartHour="00:00:00",this.LockEndHour="00:00:00",this.ResetLockScenesGuids=[]}}class So extends vo{constructor(){super(...arguments),this.TaskType=Us.NotifyTask,this.Title="",this.Message="",this.NotifyType=qs.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"}(co||(co={}));class Ao extends Error{constructor(e){super(e),this.message=e,this.name="BadParametersScenesBuilderException"}}class _o extends Error{constructor(e){super(e),this.message=e,this.name="SequenceNotFoundScenesBuilderException"}}class Co extends Error{constructor(e){super(e),this.message=e,this.name="TaskNotFoundScenesBuilderException"}}class To extends Error{constructor(e){super(e),this.message=e,this.name="UnsupportedArgumentScenesBuilderException"}}var Do,ko=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Go{constructor(){this._connection=$v.Get(Ot.ServiceName),this._configurationService=$v.Get(ot.ServiceName)}GetServiceName(){return Go.ServiceName}GetSequencesListAsync(){return ko(this,void 0,void 0,(function*(){var e;const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new bo,12e3,!1);return $v.Get(r.ServiceName).Debug(`GetSequencesListAsync result:\n ${JSON.stringify(t)}}`),null==t?new ke(Is.OtherError,"Cannot get sequences list - response is null."):t.Status!=ce.OK?new ke(Is.OtherError,`Cannot get sequences list - controller responded with response code ${t.Status}.`):null==t.Data?new ke(Is.NoData,"Cannot get sequences list - controller responded with status OK, but response does not contain data!"):t.Data}))}GetSequenceAsync(e){return ko(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 No(n),12e3,!1);if(null==r)return new ke(Is.OtherError,"Cannot get sequence - response is null.");if(r.Status!=ce.OK)return new ke(Is.OtherError,`Cannot get sequence - controller responded with response code ${r.Status}.`);if(null==r.Data)return new ke(Is.NoData,"Cannot get sequence - controller responded with status OK, but response does not contain data!");const s=r.Data;return this.MapSequence(s)}))}GetSequenceBuilder(e,t){return new uo(e,t)}CreateSequenceAsync(e){return ko(this,void 0,void 0,(function*(){var t;try{yield this._configurationService.EnterConfigurationModeAsync(),$v.Get(r.ServiceName).Debug(`Creating sequence ${e.Name} json: \n${JSON.stringify(e)}`);const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Po(e),2e4,!1);return null==n||null==n.Status?ce.Error:n.Status}catch(t){return $v.Get(r.ServiceName).Error(`Creating sequence ${e.Name} error: ${t}`),ce.FatalError}finally{yield this._configurationService.ExitConfigurationModeAsync()}}))}CheckIfSequenceIsUsedInAnotherSequenceAsync(e){return ko(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 Eo(n),12e3,!1);if(null==r)return new ke(Is.OtherError,"Cannot get sequence - response is null.");switch(r.Status){case ce.WrongData:return new ke(Is.InvalidSceneGuid,"Cannot check if sequence is used in another sequence! Sequence not found, invalid sequence guid!");case ce.OK:return null==r.Data?new ke(Is.NoData,"Cannot get sequence - controller responded with status OK, but response does not contain data!"):r.Data;default:return new ke(Is.OtherError,`Cannot check if sequence is used in another sequence! Controller responded with code: ${r.Status}`)}}catch(e){return new ke(Is.FatalError,`Cannot check if sequence is used in another sequence! Fatal error! ${e}`)}}))}DeleteSequenceAsync(e){return ko(this,void 0,void 0,(function*(){var t;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 Uo(n),12e3,!1);return null==r||null==r.Status?ce.Error:r.Status}catch(e){return ce.FatalError}finally{yield this._configurationService.ExitConfigurationModeAsync()}}))}EditSequenceAsync(e){return ko(this,void 0,void 0,(function*(){var t;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 Oo(n),2e4,!1);return null==r||null==r.Status?ce.Error:r.Status}catch(t){return $v.Get(r.ServiceName).Error(`Editing sequence ${e.Name} error: ${t}`),ce.FatalError}finally{yield this._configurationService.ExitConfigurationModeAsync()}}))}EnableSequenceAsync(e){return ko(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 Mo(n),12e3,!1);return null==r||null==r.Status?ce.Error:r.Status}))}DisableSequenceAsync(e){return ko(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 xo(n),12e3,!1);return null==r||null==r.Status?ce.Error:r.Status}))}RunSequenceAsync(e){return ko(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 Wr;switch(n.Channel=1,n.DeviceGuid=t,yield $v.Get(Lo.ServiceName).ExecuteDeviceTaskAsync({Guid:t},n)){case Gt.Executed:return ce.OK;case Gt.DeviceNotFound:return ce.WrongData;default:return ce.Error}}))}GetUtilsAsync(){return ko(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 ko(this,void 0,void 0,(function*(){const e=$v.Get(Cs.ServiceName),t=new ys;let n=!1;t.Latitude=49.9958888026741,t.Longitude=18.9172596008914;try{if(yield e.IsControllerGeolocationSetAsync()){const n=yield e.GetControlllerGeolocationAsync();n instanceof ws&&(t.Latitude=n.Latitude,t.Longitude=n.Longitude)}}catch(e){$v.Get(r.ServiceName).Warning(`Cannot get localization data, using default values: 49.9958888026741, 18.9172596008914. Error: ${e}`)}const s=e=>{let n=7.95204*Math.sin(.01768*e+3.03217)+9.98906*Math.sin(.03383*e+3.4687)+4*(t.Longitude-15*Math.round(t.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()})()&&(n-=60),n},o=e=>Math.asin(-.39795*Math.cos(2*Math.PI*(e+10)/365)),i=e=>{const n=t.Latitude*Math.PI/180;let r=Math.sin(n)*Math.sin(e)/(Math.cos(n)*Math.cos(e));return r=(e=>(e<-1&&(e=-1),e>1&&(e=1),e))(r),r},a=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)},c=e=>{const t=new Date;t.setDate(t.getDate()+e);const r=(u=t,Math.floor((u.valueOf()-new Date(u.getFullYear(),0,0).valueOf())/1e3/60/60/24));var u;const l=s(r),d=o(r),h=((e,t)=>{let n=720-720/Math.PI*Math.acos(-e)-t;return n<0&&(n+=1440),n})(i(d),l),p=a(h);return new Date>p&&!n?(n=!0,c(1)):(n=!1,new Date(t.getFullYear(),t.getMonth(),t.getDate(),p.getHours(),p.getMinutes()))},u=e=>{const t=new Date;t.setDate(t.getDate()+e);const r=(c=t,Math.floor((c.valueOf()-new Date(c.getFullYear(),0,0).valueOf())/1e3/60/60/24));var c;const l=s(r),d=o(r),h=i(d),p=Math.floor(((e,t)=>{let n=720+720/Math.PI*Math.acos(-e)-t;return n>1439&&(n-=1439),n})(h,l)),g=a(p);return new Date>g&&!n?(n=!0,u(1)):(n=!1,new Date(t.getFullYear(),t.getMonth(),t.getDate(),g.getHours(),g.getMinutes()))};return{GetSunRiseTime:()=>c(0),GetSunSetTime:()=>u(0)}}))}MapSequence(e,t=!1){const n=Object.assign({},e),r=e=>{if(e.RightArgumentType!=Do.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=Us.DeviceTask,e.RunParallel=!1}))),null!=e.Tasks.ControllerTasks&&e.Tasks.ControllerTasks.map((e=>{null==(null==e?void 0:e.Guid)&&(e.Guid=Fr.NewGuid())}))};return r(e),n._rawRequestData=JSON.parse(JSON.stringify(e)),t?(n.RightArgument=null,n.RightArgumentType=$s.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==$s.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===$s.Condition&&(e.RightArgumentType=this.MapArgumentType(e.RightArgumentType),e.RightArgument=this.MapRightArgument(e.RightArgument,e.RightArgumentType))),e}MapLeftArgument(e,t){let n=new Io;switch(n.HandledType=e.HandledType,t){case $s.ArgumentAsAstronomicalClock:n.Argument.ArgumentAsAstronomicalClock={Position:e.Argument};break;case $s.ArgumentAsAstronomicalClockWithOffset:n.Argument.ArgumentAsAstronomicalClockWithOffset={Offset:e.Argument.Offset,Position:e.Argument.Position};break;case $s.ArgumentAsBoolean:n.Argument.ArgumentAsBoolean=e.Argument;break;case $s.ArgumentAsDayOfWeek:n.Argument.ArgumentAsDayOfWeek=e.Argument;break;case $s.ArgumentAsDaysOfWeek:n.Argument.ArgumentAsDaysOfWeek=e.Argument;break;case $s.ArgumentAsInt:n.Argument.ArgumentAsInt=e.Argument;break;case $s.ArgumentAsTimeout:n.Argument.ArgumentAsTimeout=e.Argument;break;case $s.ArgumentAsTimeSpan:n.Argument.ArgumentAsTimeSpan={days:e.Argument.days,hours:e.Argument.hours,minutes:e.Argument.minutes,seconds:e.Argument.seconds};break;case $s.ArgumentAsTime:n.Argument.ArgumentAsTime={Hour:e.Argument.Hour,Minute:e.Argument.Minute,Second:e.Argument.Second};break;case $s.ArgumentAsDeviceState:{const t=new to;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?Rs.Default:e.Argument.ComparisonMethod,null!=e.Argument.ComparisonParams&&Object.entries(e.Argument.ComparisonParams).forEach((e=>{switch(e[0]){case"DeltaValue":case"StateRepeatCount":t.SetComparisonParam(Ps[e[0]],new no(e[1]));break;case"DeltaCalculationTimeRange":case"StateRepeatTimeRange":t.SetComparisonParam(Ps[e[0]],new ro(e[1]))}})),n.Argument.ArgumentAsDeviceState=t;break}case $s.ArgumentAsConditionInfo:n.Argument.ArgumentAsConditionInfo={DeviceGuid:e.Argument.DeviceGuid}}return n}MapArgumentType(e){return $s[Do[e]]}MapDeviceStateTypeToResponseType(e){switch(e){case Ls.BatteryState:return _t.BatteryState;case Ls.BinarySensor:return _t.BinarySensorState;case Ls.BlindPosition:return _t.BlindPosition;case Ls.Brightness:return _t.MeasuredBrightness;case Ls.ButtonState:return _t.RemoteButtonState;case Ls.ChannelOnOff:return _t.ChannelOnOffState;case Ls.DoorBell:return _t.DoorBellState;case Ls.Energy:return _t.MeasuredEnergy;case Ls.FloodSensor:return _t.FloodSensorState;case Ls.GatePosition:return _t.GatePosition;case Ls.LightBrightness:return _t.LightBrightness;case Ls.LightColor:return _t.LightColor;case Ls.LightTemperature:return _t.LightWarmth;case Ls.ReedState:return _t.ReedState;case Ls.SmokeSensor:return _t.SmokeSensorState;case Ls.Temperature:return _t.MeasuredTemperature;case Ls.Humidity:return _t.HumiditySensorState;case Ls.BlindsControlButton:return _t.BlindRemoteButtonState;case Ls.FacadeControlButton:return _t.FacadeRemoteButtonState;case Ls.Movement:return _t.MovementSensorState;case Ls.AirPressure:return _t.PressureSensorState;case Ls.WindSpeed:return _t.WindSpeedState;case Ls.WindThreshold:return _t.CurrentWindThreshold;default:return _t.Unknown}}CreateDeviceState(e,t,n){switch(n){case _t.BatteryState:return{Channel:t,StateReliability:Lt.Unconfident,Percentage:e.Percentage,State:e.State,Time:""};case _t.BinarySensorState:return{Channel:t,StateReliability:Lt.Unconfident,State:e.State,Time:""};case _t.BlindPosition:return{Channel:t,StateReliability:Lt.Unconfident,Position:e.Position,RawPosition:e.RawPosition,Time:""};case _t.LightBrightness:case _t.MeasuredBrightness:return{Channel:t,StateReliability:Lt.Unconfident,Brightness:e.Brightness,Time:""};case _t.RemoteButtonState:case _t.ChannelOnOffState:case _t.DoorBellState:return{Channel:t,StateReliability:Lt.Unconfident,State:e.State,Time:""};case _t.MeasuredEnergy:{const n=new Map;for(let[t,r]of Object.entries(e.MeasurementParameters))n.set(jt[t],r);return{Channel:t,StateReliability:Lt.Unconfident,MeasurementParameters:n,Time:""}}case _t.FloodSensorState:return{Channel:t,StateReliability:Lt.Unconfident,State:e.State,Time:""};case _t.GatePosition:return{Channel:t,StateReliability:Lt.Unconfident,Position:e.Position,PositionType:e.PositionType,Time:""};case _t.LightColor:return{Channel:t,StateReliability:Lt.Unconfident,R:e.R,G:e.G,B:e.B,Time:""};case _t.LightWarmth:return{Channel:t,StateReliability:Lt.Unconfident,Temperature:e.Temperature,Time:""};case _t.ReedState:return{Channel:t,StateReliability:Lt.Unconfident,State:e.State,Time:""};case _t.SmokeSensorState:throw new oo("Unsupported device state!");case _t.MeasuredTemperature:return{Channel:t,StateReliability:Lt.Unconfident,Temperature:e.Temperature,Time:"",Type:e.Type};case _t.HumiditySensorState:return{Channel:t,StateReliability:Lt.Unconfident,Humidity:e.Humidity,Time:"",Type:e.Type};case _t.BlindRemoteButtonState:return{Channel:t,StateReliability:Lt.Unconfident,State:e.State,Time:""};case _t.LightRGBWState:return{StateReliability:Lt.Unconfident,Channel:t,Time:"",Brightness:100,R:e.R,G:e.G,B:e.B,W:e.W};case _t.FacadeRemoteButtonState:return{Channel:t,Time:"",StateReliability:Lt.Unconfident,State:e.State};case _t.MovementSensorState:return{Channel:t,Time:"",StateReliability:Lt.Unconfident,Movement:e.Movement,Intensity:e.Intensity};case _t.PressureSensorState:return{Channel:t,Time:"",StateReliability:Lt.Unconfident,Pressure:e.Pressure,PressureType:e.PressureType};case _t.WindSpeedState:return{Channel:t,Time:"",StateReliability:Lt.Unconfident,Value:e.Value};case _t.CurrentWindThreshold:return{Channel:t,Time:"",StateReliability:Lt.Unconfident,WindThreshold:e.WindThreshold};case _t.Unknown:return new mn;default:throw new oo("Unsupported device state!")}}MapDeviceTask(e){let t=new Lr,n=e;switch($v.Get(r.ServiceName).Debug(`[TASK] object: ${JSON.stringify(n)}`),n.ControlFeature){case br.TurnOn:t=new Wr,t.TaskType=At.TurnOn;break;case br.TurnOff:t=new $r,t.TaskType=At.TurnOff;break;case br.ToggleState:t=new Hr,t.TaskType=At.TogleState;break;case br.SetBlindPosition:{const e=$v.Get(Lo.ServiceName).GetDevice(n.DeviceGuid);(null==e?void 0:e.AvailableTaskTypes.any((e=>"IBlindPositionSimple"==e.InterfaceType)))?(t=new Jr,t.TaskType=At.SetBlindPositionSimple,t.Action=n.Data.Action):(t=new zr,t.TaskType=At.SetBlindPosition,t.Action=n.Data.Action,t.Position=n.Data.Position);break}case br.SetLightColor:t=new Kr,t.TaskType=At.SetLightColor,t.R=n.Data.R,t.G=n.Data.G,t.B=n.Data.B;break;case br.SetLightTemperature:t=new jr,t.TaskType=At.SetLightTemperature,t.Temperature=n.Data.Temperature;break;case br.SetLightBrightness:t=new Vr,t.TaskType=At.SetLightBrightness,t.Brightness=n.Data.Brightness;break;case br.SetTemperature:t=new Br,t.TaskType=At.SetTemperature,t.Temperature=n.Data.Temperature;break;case br.GetState:t=new es,t.TaskType=At.GetChannelsState;break;case br.TurnOnWithTimeout:t=new qr,t.TaskType=At.TurnOnWithTime,t.SwitchOffDelaySeconds=n.Data.SwitchOffDelaySeconds;break;case br.SetLightBrightnessDynamicly:t=new Yr,t.TaskType=At.SetLightBrightnessDynamicly,t.Brightness=n.Data.Brightness;break;case br.IdentifyDevice:t=new Xr,t.TaskType=At.IdentifyDevice;break;case br.SetBlindOpenCloseTime:t=new Qr,t.TaskType=At.SetBlindOpenCloseTime,t.Data.CloseTime=n.Data;break;case br.SetBlindMicroventilation:t=new ts,t.TaskType=At.SetBlindMicroventilation,t.Position=n.Data.Position;break;case br.GatewayPulse:t=new rs,t.TaskType=At.ChangeGatewayPositionPulse;break;case br.GatePulse:t=new ns,t.TaskType=At.ChangeGatePositionPulse;break;case br.SetFacadePositionAndTilt:t=new ss,t.TaskType=At.SetFacadePosition,t.Position=n.Data.Position,t.Tilt=n.Data.Tilt,t.FacadeAction=Rr.TiltAndPercentage;break;case br.GetFacadeType:t=new os,t.TaskType=At.GetFacadeType;break;case br.LightRGBW:t=new as,t.TaskType=At.LightRGBW,t.Data=n.Data}return t.Channel=n.Channel,t.DeviceGuid=n.DeviceGuid,t.FeatureType=n.ControlFeature,t.Guid=Fr.NewGuid(),t}MapControllerTasks(e){const t=[];$v.Get(r.ServiceName).Debug(`[TASKS] received tasks object: ${JSON.stringify(e)}`);for(let n of e){const e=new Ro;switch(e.Guid=n.Guid,e.TaskId=se.GenerateMd5(JSON.stringify(n)),n.TaskType){case Us.DeviceTask:e.TaskType=Ms.DeviceTask,e.Task.DeviceTask=this.MapDeviceTask(n);break;case Us.DelayTask:e.TaskType=Ms.DelayTask,e.Task.DelayTask={Delay:new ro(n.Delay)};break;case Us.NotifyTask:e.TaskType=Ms.NotifyTask,e.Task.NotifyTask={Message:n.Message,NotifyType:n.NotifyType,NotificationClients:n.NotificationClients};break;case Us.LockExecution:case Us.LockExecution:e.TaskType=Ms.LockExecution,$v.Get(r.ServiceName).Debug(`[TASKS] received task LockExecution object: ${JSON.stringify(n)}`),e.Task.LockExecution={LockStartHour:new ro(n.LockStartHour),LockEndHour:new ro(n.LockEndHour),LockType:n.LockType,ResetLockScenesGuids:n.ResetLockScenesGuids};case Us.Unknown:}t.push(e)}return t}GetSupportedTaskTypesAsync(){return ko(this,void 0,void 0,(function*(){const e=yield $v.Get(Js.ServiceName).GetSoftwareRuntimeInfoAsync(),[t,n]=e.SoftwareVersion.split(".").map((e=>parseInt(e))),r=[Ws.DeviceTask];return(t>5||5==t&&n>=27)&&r.push(Ws.DelayTask),(t>5||5==t&&n>=37)&&r.push(Ws.LockExecutionTask),(t>6||6==t&&n>=3)&&r.push(Ws.NotifyTaskAppNotify),r}))}}Go.ServiceName="ScenesService";class bo extends ae{constructor(){super(),this.Resource="/logic/sequences/list",this.Method=ue.Get}}class No extends ae{constructor(e){super(),this.Resource="/logic/sequence",this.Method=ue.Get,this.Data=e}}class Eo extends ae{constructor(e){super(),this.Resource="/logic/sequences/used",this.Method=ue.Get,this.Data=e}}class Io{constructor(){this.HandledType=Do.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"}(Do||(Do={}));class Ro{constructor(){this.TaskId="",this.Guid="",this.TaskType=Ms.Unknown,this.Task={}}}class Po extends ae{constructor(e){super(),this.Resource="/logic/sequence",this.Method=ue.Put,this.Data=e}}class Oo extends ae{constructor(e){super(),this.Resource="/logic/sequence/edit",this.Method=ue.Put,this.Data=e}}class Uo extends ae{constructor(e){super(),this.Resource="/logic/sequence",this.Method=ue.Delete,this.Data=e}}class Mo extends ae{constructor(e){super(),this.Resource="/logic/sequence/enable",this.Method=ue.Post,this.Data=e}}class xo extends ae{constructor(e){super(),this.Resource="/logic/sequence/disable",this.Method=ue.Post,this.Data=e}}var Fo=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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._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(Ot.ServiceName),this._session=$v.Get(ze.ServiceName),this._controllerConfiguration=$v.Get(ot.ServiceName),this._onDeviceStateChangedEvent.Subscribe((e=>Fo(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=>Fo(this,void 0,void 0,(function*(){var t;try{this._devices=yield this.GetPairedDevicesAsync()}catch(e){null===(t=s.Log)||void 0===t||t.Error(Lo.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=>Fo(this,void 0,void 0,(function*(){var t;try{yield this.WaitForSynchronizationAsync(),yield this.SyncDevicesStatesAsync()}catch(e){null===(t=s.Log)||void 0===t||t.Error(Lo.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!=Dt.Scene&&(null===(t=s.Log)||void 0===t||t.Debug(Lo.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],s=this.MapApiDeviceStateToDeviceState(e,n);if(null!=s){this._onDeviceStateRefreshedOrChangedEvent.Invoke({Device:e,State:s}),s.TypeAsEnum==_t.SignalStrength?e.Channels.forEach((t=>{let r=new Yn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateRefreshedOrChangedEvent.Invoke({Device:e,State:r})})):s.TypeAsEnum==_t.BatteryState&&e.Channels.forEach((t=>{let r=new xn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateRefreshedOrChangedEvent.Invoke({Device:e,State:r})}));let r=e.States.find((e=>e.TypeAsEnum===s.TypeAsEnum&&e.Data.Channel===s.Data.Channel));if(r){let o=r.StatesComparisonData;if(s.TypeAsEnum==_t.BlindErrorState&&(null===(t=s.Data)||void 0===t?void 0:t.ErrorCode)!=r.Data.ErrorCode)return void this._onDeviceStateChangedEvent.Invoke({Device:e,State:s});r.Data=s.Data,o!==s.StatesComparisonData&&(this._onDeviceStateChangedEvent.Invoke({Device:e,State:s}),s.TypeAsEnum==_t.SignalStrength?e.Channels.forEach((t=>{let r=new Yn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateChangedEvent.Invoke({Device:e,State:r})})):s.TypeAsEnum==_t.BatteryState&&e.Channels.forEach((t=>{let r=new xn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateChangedEvent.Invoke({Device:e,State:r})})))}else e.States.push(s),this._onDeviceStateChangedEvent.Invoke({Device:e,State:s}),s.TypeAsEnum==_t.SignalStrength?e.Channels.forEach((t=>{let r=new Yn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateChangedEvent.Invoke({Device:e,State:r})})):s.TypeAsEnum==_t.BatteryState&&e.Channels.forEach((t=>{let r=new xn(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(be.ServiceName).ClearCache(),this.MapApiDevices(e.Data).forEach((e=>{var t;null===(t=s.Log)||void 0===t||t.Debug(Lo.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(be.ServiceName).ClearCache(),this.MapApiDevices(e.Data).forEach((e=>{var t;null===(t=s.Log)||void 0===t||t.Debug(Lo.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 Fo(this,void 0,void 0,(function*(){var t,n,r,o,i,a;try{let a;if("string"==typeof e){const n=this.GetDevice(e);if(null==n)return null===(t=s.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 Zo(a.Guid),2e4,!1);if(null==u||null==u.Status)return null===(r=s.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===(o=s.Log)||void 0===o||o.Error("Cannot check if device is used in scenes! No data!"),ce.FatalError;var c=yield $v.Get(Go.ServiceName).GetSequencesListAsync();if(c instanceof ke)return null===(i=s.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 ri;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=s.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 Fo(this,void 0,void 0,(function*(){const e=$v.Get(ps.ServiceName).SaveAsync("FastDevicesSync",!1,!0);return yield $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),e}))}DisableFastStatesSyncAsync(){return Fo(this,void 0,void 0,(function*(){const e=$v.Get(ps.ServiceName).SaveAsync("FastDevicesSync",!1,!1);return yield $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),e}))}IsFastStatesSyncEnabledAsync(){return Fo(this,void 0,void 0,(function*(){const e=yield $v.Get(ps.ServiceName).ReadAsync("FastDevicesSync",!1,!1);return e instanceof ls?e.Data:e!=ce.ResourceDoesNotExists&&e}))}GetDevicesForManualPairingAsync(e){return Fo(this,void 0,void 0,(function*(){let t=$v.Get(us.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 Fo(this,void 0,void 0,(function*(){var t=yield $v.Get(us.ServiceName).AddManuallyPairedDeviceAsync(e);return yield $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),t}))}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 Bo;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 Bo,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==_t.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 Fo(this,void 0,void 0,(function*(){var e;const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new jo,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(";"),o=new xt;o.DeviceGuid=r[0],o.Channel=Number(r[1]),o.Status=mt.ExecutingTasks,t.push(o),null===(n=s.Log)||void 0===n||n.Debug(Lo.ServiceName,`Device ${o.DeviceGuid} has task on channel ${o.Channel}`)})),this._onDevicesTasksChangedEvent.Invoke(t)}MapApiDeviceStateToDeviceState(e,t){var n;switch(t.state,t.DataType){case"ChannelOnOff":return new yn(t);case"DoorBell":return new An(t);case"ReedPosition":return new Cn(t);case"BlindPosition":return new Dn(t);case"ButtonState":return new Gn(t);case"LightColor":return new Nn(t);case"LightTemperature":return new In(t);case"LightBrightness":return new Pn(t);case"TemperatureSensor":case"TemperatureState":case"MeasuredTemperature":return new Un(t);case"BatteryState":return new xn(t);case"MeasuredBrightness":case"DeviceBrightnessState":return new Ln(t);case"EnergyMeasuredPower":case"EnergyMeasuredCurrent":case"EnergyMeasuredVoltage":break;case"IEnergy":case"Energy":return new $n(t);case"DistanceSensor":return new qn(t);case"MovementSensor":return new Vn(t);case"BlindsControlButton":return new Kn(t);case"FacadeControlButton":return new zn(t);case"SignalStrength":return new Yn(t);case"GatePosition":return new Xn(t);case"GatewayPosition":return new Zn(t);case"GateControllerHealth":return new er(t);case"IBlindCalibrationStatus":case"BlindCalibration":return new tr(t);case"HumiditySensor":case"HumidityState":return new nr(t);case"VibrationSensor":return new sr(t);case"DigitalInputSensor":return new or(t);case"ConfigurationState":return new ar(t);case"BlindOpenCloseTime":case"IBlindOpenCloseTime":return new cr(t);case"IOvercurrentProtection":case"OvercurrentProtection":return new ur(t);case"IOvercurrentProtectionThreshold":case"OvercurrentProtectionThreshold":return new lr(t);case"FacadePosition":case"FacadeState":return new dr(t);case"FacadeTypeState":return new hr(t);case"CurrentWindThreshold":return new pr(t);case"CurrentLightThreshold":return new fr(t);case"WindSpeed":return new vr(t);case"FloodSensor":return new yr(t);case"PressureState":return new Sr(t);case"ITamperProtection":case"TamperProtection":return new _r(t);case"ILightRGBW":case"LightRGBW":return new Cr(t);case"OnlineCamera":case"IOnlineCamera":return new Sn(t);case"BlindError":case"IBlindError":return t.state.ErrorData=ie(t.state.ErrorData),new Tr(t);default:null===(n=s.Log)||void 0===n||n.Debug(Lo.ServiceName,`Not supported device state ${t.DataType}`)}return null}GetServiceName(){return Lo.ServiceName}SyncDevicesStatesAsync(){return Fo(this,arguments,void 0,(function*(e=!1){var t,n,r;const s=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Wo,15e3,!1);if(yield this.IsFastStatesSyncEnabledAsync()){if(e){let e=new qo;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==s?void 0:s.Status)==ce.OK}{let e=new qo;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,o,i,a=new Dr;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=St.Unknown;try{null===(n=e.AvailableTasks)||void 0===n||n.forEach((e=>{var t=new Ut;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 Mt;t.InterfaceType=e,a.AvailableResponseTypes.push(t)})),null===(o=e.ChannelsConfiguration)||void 0===o||o.forEach((e=>{var t,n,r;try{var o=new Or;o.Number=e.Channel,a.Channels.push(o),o.SetDevice(a),o.Name=e.ChannelName,o.ChannelGroups=e.GroupsGuids,o.IconName=e.IconName,o.IsHidden=e.Hidden,o.Configurations=e.Configurations,o.CustomDataAndRolesSupported=void 0!==e.CustomData&&null!==e.CustomData,void 0!==e.CustomData&&null!==e.CustomData&&(o.CustomData=e.CustomData),void 0!==e.Roles&&null!==e.Roles&&(o.Roles=e.Roles),null===(t=e.AvailableResponses)||void 0===t||t.forEach((e=>{var t=new Mt;t.InterfaceType=e,o.AvailableResponseTypes.push(t)})),null===(n=e.AvailableTasks)||void 0===n||n.forEach((e=>{var t=new Ut;a.AvailableTaskTypes.any((e=>"IBlindPositionSimple"==e.InterfaceType))?"IBlindPosition"==e&&(t.InterfaceType="IBlindPositionSimple"):t.InterfaceType=e,o.AvailableTaskTypes.push(t)}))}catch(e){null===(r=s.Log)||void 0===r||r.Error(e)}}))}catch(e){null===(i=s.Log)||void 0===i||i.Error(e)}t.push(a)})),t)}GetPairedDevicesAsync(){return Fo(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 o=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new $o,15e3,!0);return null==o||void 0===o?[]:o.Status==ce.OK&&null!=o.Data?e?this.MapApiDevices(o.Data):this.MapApiDevices(o.Data.filter((e=>e.DeviceType!=Dt.Scene))):(null===(r=s.Log)||void 0===r||r.Error(Lo.ServiceName,`Failed to get devices. ${o.Status} ${o.Data}`),[])}))}GetDevicesAsync(){return Fo(this,arguments,void 0,(function*(e=!1){return yield this.WaitForSynchronizationAsync(),this.GetPairedDevicesAsync(e)}))}GetFoundDevicesAsync(){return Fo(this,void 0,void 0,(function*(){var e,t;const n=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Ko,15e3,!1);return null==n?[]:n.Status==ce.OK&&null!=n.Data?this.MapApiDevices(n.Data).where((e=>e.DeviceType!==Dt.Scene)).toArray():(null===(t=s.Log)||void 0===t||t.Error(Lo.ServiceName,`Failed to get found devices. ${n.Status} ${n.Data}`),[])}))}GetDevice(e){return this._devices.find((t=>t.Guid===e))}FindDevicesAsync(){return Fo(this,void 0,void 0,(function*(){var e;$v.Get(be.ServiceName).ClearCache(),yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Vo,35e3,!1)}))}StopSearchingForDevices(){return Fo(this,void 0,void 0,(function*(){var e;yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Ho,2e4,!1)}))}RegisterDeviceAsync(e){return Fo(this,void 0,void 0,(function*(){var t,n;try{const n=new zo;n.Data=e.Guid;const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(n,2e4,!1);return $v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==r?void 0:r.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===(n=s.Log)||void 0===n||n.Error(Lo.ServiceName,`Failed to paired devices: ${e}`),Gt.ControllerResponseTimeout}}))}RemoveDeviceAsync(e){return Fo(this,arguments,void 0,(function*(e,t=!1){var n,r=new Jo;t&&(r=new Yo),r.Data=e.Guid;const s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(r,35e3,!1);return $v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==s?void 0:s.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 ei;const r=t;switch(r.FeatureType){case br.SetTemperature:n.Data=r.Temperature;break;case br.SetLightBrightness:n.Data=r.Brightness;break;case br.SetLightColor:n=new ti;const e=r;n.R=e.R,n.G=e.G,n.B=e.B;break;case br.SetLightTemperature:n.Data=r.Temperature;break;case br.SetGatePositionPrecise:switch(r.GateControlAction){case Er.Open:n.Data=101;break;case Er.Close:n.Data=102;break;case Er.Stop:n.Data=103;break;case Er.Percentage:n.Data=r.Position}break;case br.SetBlindPosition:switch(r.Action){case Nr.Open:n.Data=101;break;case Nr.Close:n.Data=102;break;case Nr.Stop:n.Data=103;break;case Nr.Percentage:n.Data=r.Position}break;case br.SetLightBrightnessDynamicly:n.Data=r.Brightness;break;case br.SetBlindOpenCloseTime:n.Data=r.Data;break;case br.SetBlindMicroventilation:n.Data=r.Position;break;case br.SetFacadePositionAndTilt:n=new ni;const t=r;n.FacadeAction=t.FacadeAction,n.Tilt=t.Tilt,n.Position=t.Position;break;case br.LightRGBW:n.Data=r.Data;break;case br.GatePulse:case br.GatewayPulse:n.Data=0;break;case br.TurnOnWithTimeout:n.Data=r.SwitchOffDelaySeconds}return n.Channel=r.Channel,n.DeviceGuid=e.Guid,n.ControlFeature=r.FeatureType,n}ExecuteDeviceTaskAsync(e,t){return Fo(this,void 0,void 0,(function*(){var n,r,o,i,a,c,u,l;try{null===(n=s.Log)||void 0===n||n.Debug(Lo.ServiceName,`Preparing device task execution, device: ${e.Guid} task: ${t.TaskType} channel: ${t.Channel}`);let l=this.MapDeviceTaskToDeviceTaskInfo(e,t);try{const e=new Xo(l);null===(r=s.Log)||void 0===r||r.Debug(Lo.ServiceName,`Sending device task for execution, device: ${l.DeviceGuid} task: ${l.ControlFeature} channel: ${l.Channel} request: ${JSON.stringify(e)}`);const t=yield null===(o=this._connection)||void 0===o?void 0:o.SendAndWaitForResponseAsync(e,15e3,!1);switch(null==t?void 0:t.Status){case ce.OK:return Gt.Executed;case ce.FatalError:return null===(i=s.Log)||void 0===i||i.Error(Lo.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=s.Log)||void 0===a||a.Error(Lo.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=s.Log)||void 0===c||c.Error(Lo.ServiceName,`Failed to get controller response in time.\n${e}`),Gt.ControllerResponseTimeout):(null===(u=s.Log)||void 0===u||u.Error(Lo.ServiceName,`Unknown error occured when tried to execute task on device.\n${e}`),Gt.Failed)}return Gt.Unknown}catch(e){return null===(l=s.Log)||void 0===l||l.Error(Lo.ServiceName,`Unknown error occured when tried to execute task on device.\n${e}`),Gt.Failed}}))}ExecuteDevicesTasksAsync(e){return Fo(this,void 0,void 0,(function*(){var t,n,r,o;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 Qo(a);try{const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(u,12e4,!1);let o=-1;null===(n=null==r?void 0:r.Data)||void 0===n||n.forEach((t=>{var n,a;o++;let c=Gt.Unknown;switch(t.Status){case ce.OK:return Gt.Executed;case ce.FatalError:null===(n=s.Log)||void 0===n||n.Error(Lo.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=s.Log)||void 0===a||a.Error(Lo.ServiceName,`Unknown error occured when trying to execute task on device. Error code: ${r.Data}`),c=Gt.Failed)}let u=0,l=new Ft;for(const[t,n]of e){if(u==o){l.Device=t,l.Task=n,l.Channel=n.Channel,i.push(l);break}u++}}))}catch(t){if(t.message.includes("timeout")){null===(r=s.Log)||void 0===r||r.Error(Lo.ServiceName,`Failed to get controller response in time.\n${t}`);for(const[t,n]of e){let e=new Ft;i.push(e),e.Device=t,e.Task=n,e.Channel=n.Channel,e.Result=Gt.ControllerResponseTimeout}}else{null===(o=s.Log)||void 0===o||o.Error(Lo.ServiceName,`Unknown error occured when tried to execute task on device.\n${t}`);for(const[t,n]of e){let e=new Ft;i.push(e),e.Device=t,e.Task=n,e.Channel=n.Channel,e.Result=Gt.Failed}}}return i}))}}Lo.ServiceName="DevicesService";class Bo{constructor(){this.Channel=0,this.States=[]}}class $o extends ae{constructor(){super(),this.Resource="/devices/list",this.Method=ue.Get}}class Wo extends ae{constructor(){super(),this.Data=!1,this.Resource="/devices/channels/states",this.Method=ue.Get}}class qo extends ae{constructor(){super(),this.Data=!1,this.Resource="/devices/channels/states/sync",this.Method=ue.Get}}class Vo extends ae{constructor(){super(),this.Resource="/devices/search",this.Method=ue.Post}}class Ho extends ae{constructor(){super(),this.Resource="/devices/search/stop",this.Method=ue.Post}}class Ko extends ae{constructor(){super(),this.Resource="/devices/found/list",this.Method=ue.Get}}class jo extends ae{constructor(){super(),this.Resource="/devices/tasks",this.Method=ue.Get}}class zo extends ae{constructor(){super(),this.Resource="/devices/device/pair",this.Method=ue.Put}}class Jo extends ae{constructor(){super(),this.Resource="/devices/device/unpair",this.Method=ue.Put}}class Yo extends ae{constructor(){super(),this.Resource="/devices/device/unpair/force",this.Method=ue.Put}}class Xo extends ae{constructor(e){super(),this.Resource="/devices/device/control",this.Method=ue.Post,this.Data=e}}class Qo extends ae{constructor(e){super(),this.Resource="/devices/devices/control",this.Method=ue.Post,this.Data=e}}class Zo extends ae{constructor(e){super(),this.Resource="/logic/device/used",this.Method=ue.Get,this.Data=e}}class ei{constructor(){this.DeviceGuid="",this.Channel=0,this.ControlFeature=br.GetState,this.SequnceExecutionOrder=0}}class ti extends ei{constructor(){super(...arguments),this.R=0,this.G=0,this.B=0}}class ni extends ei{constructor(){super(...arguments),this.FacadeAction=Rr.Stop,this.Tilt=0,this.Position=0}}class ri{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 oi=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 ii extends Error{constructor(e){super(e),this.name="InvalidOperationException",this.stack=this.stack||(new Error).stack}}const ai=(e,t)=>e===t;class ci{iterator;constructor(e){this.iterator=e}[Symbol.asyncIterator](){return this.iterator()}}class ui{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 li{iterator;constructor(e){this.iterator=e}[Symbol.iterator](){return this.iterator()}}class di extends Array{}const hi=(e,t,n,r)=>{if(r){if(!n)throw new ReferenceError("TAccumulate function is undefined");return fi(e,t,n,r)}return n?gi(e,t,n):pi(e,t)},pi=(e,t)=>{let n;for(const r of e)n=n?t(n,r):r;if(void 0===n)throw new ii(oi.NoElements);return n},gi=(e,t,n)=>{let r=t;for(const t of e)r=n(r,t);return r},fi=(e,t,n,r)=>{let s=t;for(const t of e)s=n(s,t);return r(s)},vi=(e,t)=>{for(const n of e)if(!1===t(n))return!1;return!0},mi=async(e,t)=>{for(const n of e)if(!1===await t(n))return!1;return!0},yi=(e,t)=>t?Si(e,t):wi(e),wi=e=>{for(const t of e)return!0;return!1},Si=(e,t)=>{for(const n of e)if(!0===t(n))return!0;return!1},Ai=async(e,t)=>{for(const n of e)if(!0===await t(n))return!0;return!1},_i=(e,t)=>new li((function*(){yield*e,yield t})),Ci=e=>{if(Array.isArray(e)){if(0===e.length)throw new ii(oi.NoElements);return new ci((async function*(){for await(const t of e)yield t}))}return new ci(e)},Ti=e=>Ci((async function*(){for(const t of e)yield t})),Di=(e,t)=>new ui({generator:t,type:e}),ki=e=>Di(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 s of e)n+=t(s),r+=1;else for(const t of e)n+=t,r+=1;if(0===r)throw new ii(oi.NoElements);return n/r},bi=async(e,t)=>{let n=0,r=0;for(const s of e)n+=await t(s),r+=1;if(0===r)throw new ii(oi.NoElements);return n/r},Ni=(e,t)=>{if(t<1)throw new si("size");return new li((function*(){let n=[];for(const r of e)n.push(r),n.length===t&&(yield n,n=[]);n.length&&(yield n)}))},Ei=(e,t)=>new li((function*(){yield*e,yield*t})),Ii=(e,t,n=ai)=>{for(const r of e)if(n(t,r))return!0;return!1},Ri=async(e,t,n)=>{for(const r of e)if(await n(t,r))return!0;return!1},Pi=(e,t)=>t?Ui(e,t):Oi(e),Oi=e=>{let t=0;for(const n of e)t++;return t},Ui=(e,t)=>{let n=0;for(const r of e)!0===t(r)&&n++;return n},Mi=async(e,t)=>{let n=0;for(const r of e)!0===await t(r)&&n++;return n},xi=(e,t)=>new li((function*(){let n=!1;for(const t of e)n=!0,yield t;n||(yield t)})),Fi=(e,t=ai)=>new li((function*(){const n=[];for(const r of e)n.find((e=>t(e,r)))||(n.push(r),yield r)})),Li=(e,t)=>Ci((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}})),Bi=(e,t)=>new li((function*(){for(const n of e)t(n),yield n})),$i=(e,t)=>Ci((async function*(){for(const n of e)await t(n),yield n})),Wi=(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")},qi=(e,t)=>{let n=0;for(const r of e)if(t===n++)return r;return null},Vi=(e,t,n=ai)=>new li((function*(){const r=[...t];for(const t of e){let e=!1;for(let s=0;s<r.length;s++)if(!0===n(t,r[s])){e=!0;break}!1===e&&(yield t)}})),Hi=(e,t,n)=>Ci((async function*(){const r=[...t];for(const t of e){let e=!1;for(let s=0;s<r.length;s++){const o=r[s];if(!0===await n(t,o)){e=!0;break}}!1===e&&(yield t)}})),Ki=(e,t)=>t?zi(e,t):ji(e),ji=e=>{const t=e[Symbol.iterator]().next();if(!0===t.done)throw new ii(oi.NoElements);return t.value},zi=(e,t)=>{for(const n of e)if(!0===t(n))return n;throw new ii(oi.NoMatch)},Ji=async(e,t)=>{for(const n of e)if(!0===await t(n))return n;throw new ii(oi.NoMatch)},Yi=(e,t)=>t?Qi(e,t):Xi(e),Xi=e=>e[Symbol.iterator]().next().value??null,Qi=(e,t)=>{for(const n of e)if(!0===t(n))return n;return null},Zi=async(e,t)=>{for(const n of e)if(!0===await t(n))return n;return null};class ea extends di{key;constructor(e,t){super(1),this.key=e,this[0]=t}}const ta=(e,t,n)=>{let r;return r=n?((e,t,n)=>function*(){const r=new Array;for(const s of e){const e=t(s);let o=!1;for(let t=0;t<r.length;t++){const i=r[t];if(n(i.key,e)){i.push(s),o=!0;break}}!1===o&&r.push(new ea(e,s))}for(const e of r)yield e})(e,t,n):((e,t)=>function*(){const n={};for(const r of e){const e=t(r),s=n[e];s?s.push(r):n[e]=new ea(e,r)}for(const e in n)yield n[e]})(e,t),new li(r)},na=(e,t,n)=>n?sa(e,t,n):ra(e,t),ra=(e,t)=>Ci((async function*(){const n={};for(const r of e){const e=await t(r),s=n[e];s?s.push(r):n[e]=new ea(e,r)}for(const e in n)yield n[e]})),sa=(e,t,n)=>Ci((async function*(){const r=new Array;for(const s of e){const e=await t(s);let o=!1;for(let t=0;t<r.length;t++){const i=r[t];if(!0===await n(i.key,e)){i.push(s),o=!0;break}}!1===o&&r.push(new ea(e,s))}for(const e of r)yield e})),oa=(e,t,n,r)=>r?((e,t,n,r)=>new li((function*(){const s=new Array;for(const o of e){const e=t(o);let i=!1;for(let t=0;t<s.length;t++){const a=s[t];if(r(a.key,e)){a.push(n(o)),i=!0;break}}if(!1===i){const t=n(o);s.push(new ea(e,t))}}for(const e of s)yield e})))(e,t,n,r):((e,t,n)=>new li((function*(){const r={};for(const s of e){const e=t(s),o=r[e],i=n(s);o?o.push(i):r[e]=new ea(e,i)}for(const e in r)yield r[e]})))(e,t,n),ia=(e,t,n,r,s,o)=>{const i=o?aa(e,t,n,r,s,o):ca(e,t,n,r,s);return new li(i)},aa=(e,t,n,r,s,o)=>function*(){const i=[];for(const e of t){const t=r(e),n=i.find((e=>o(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=>o(t.key,e)))??{key:e,values:[]};yield s(t,r.values)}},ca=(e,t,n,r,s)=>function*(){const o=new Map;for(const e of t){const t=r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}for(const t of e){const e=n(t),r=o.get(e)??[];yield s(t,r)}},ua=(e,t,n,r,s,o)=>{const i=o?la(e,t,n,r,s,o):da(e,t,n,r,s);return Ci(i)},la=(e,t,n,r,s,o)=>async function*(){const i=[];for(const e of t){const t=await r(e),n=i.find((e=>o(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=>o(t.key,e)))??{key:e,values:[]};yield s(t,r.values)}},da=(e,t,n,r,s)=>async function*(){const o=new Map;for(const e of t){const t=await r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}for(const t of e){const e=await n(t),r=o.get(e)??[];yield s(t,r)}},ha=(e,t,n=ai)=>new li((function*(){const r=[...e.distinct(n)];if(0===r.length)return;const s=[...t];for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++)if(!0===n(t,s[e])){yield t;break}}})),pa=(e,t,n)=>Ci((async function*(){const r=[];for await(const t of e.distinctAsync(n))r.push(t);if(0===r.length)return;const s=[...t];for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++){const r=s[e];if(!0===await n(t,r)){yield t;break}}}})),ga=(e,t,n,r,s,o=ai)=>new li((function*(){const i=[...t];for(const t of e){const e=n(t);for(const n of i){const i=r(n);!0===o(e,i)&&(yield s(t,n))}}})),fa=(e,t)=>t?ma(e,t):va(e),va=e=>{let t;for(const n of e)t=n;if(!t)throw new ii(oi.NoElements);return t},ma=(e,t)=>{let n;for(const r of e)!0===t(r)&&(n=r);if(!n)throw new ii(oi.NoMatch);return n},ya=async(e,t)=>{let n;for(const r of e)!0===await t(r)&&(n=r);if(!n)throw new ii(oi.NoMatch);return n},wa=(e,t)=>t?Aa(e,t):Sa(e),Sa=e=>{let t=null;for(const n of e)t=n;return t},Aa=(e,t)=>{let n=null;for(const r of e)!0===t(r)&&(n=r);return n},_a=async(e,t)=>{let n=null;for(const r of e)!0===await t(r)&&(n=r);return n},Ca=(e,t)=>t?Da(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 ii(oi.NoElements);return t},Da=(e,t)=>{let n=null;for(const r of e)n=Math.max(n??Number.NEGATIVE_INFINITY,t(r));if(null===n)throw new ii(oi.NoElements);return n},ka=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 ii(oi.NoElements);return n},Ga=(e,t)=>t?Na(e,t):ba(e),ba=e=>{let t=null;for(const n of e)t=Math.min(t??Number.POSITIVE_INFINITY,n);if(null===t)throw new ii(oi.NoElements);return t},Na=(e,t)=>{let n=null;for(const r of e)n=Math.min(n??Number.POSITIVE_INFINITY,t(r));if(null===n)throw new ii(oi.NoElements);return n},Ea=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 ii(oi.NoElements);return n},Ia=(e,t)=>{const n="string"==typeof t?e=>typeof e===t:e=>e instanceof t;return new li((function*(){for(const t of e)n(t)&&(yield t)}))};async function*Ra(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}function*Pa(e,t,n,r){const s=((e,t)=>{const n=new Map;for(const r of e){const e=t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}class Oa extends ci{orderedPairs;constructor(e){super((async function*(){for await(const t of e())yield*t})),this.orderedPairs=e}static generateAsync(e,t,n,r){let s;return s=e instanceof Oa?async function*(){for await(const s of e.orderedPairs())yield*Ra(s,t,n,r)}:()=>async function*(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=await t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}(e,t,n,r),new Oa(s)}static generate(e,t,n,r){let s;return s=e instanceof Oa?async function*(){for await(const s of e.orderedPairs())yield*Pa(s,t,n,r)}:()=>async function*(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}(e,t,n,r),new Oa(s)}thenBy(e,t){return Oa.generate(this,e,!0,t)}thenByAsync(e,t){return Oa.generateAsync(this,e,!0,t)}thenByDescending(e,t){return Oa.generate(this,e,!1,t)}thenByDescendingAsync(e,t){return Oa.generateAsync(this,e,!1,t)}}function*Ua(e,t,n,r){const s=((e,t)=>{const n=new Map;for(const r of e){const e=t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}async function*Ma(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}class xa extends li{orderedPairs;constructor(e){super((function*(){for(const t of e())yield*t})),this.orderedPairs=e}static generate(e,t,n,r){let s;return s=e instanceof xa?function*(){for(const s of e.orderedPairs())yield*Ua(s,t,n,r)}:()=>Ua(e,t,n,r),new xa(s)}static generateAsync(e,t,n,r){let s;return s=e instanceof xa?async function*(){for(const s of e.orderedPairs())yield*Ma(s,t,n,r)}:()=>Ma(e,t,n,r),new Oa(s)}thenBy(e,t){return xa.generate(this,e,!0,t)}thenByAsync(e,t){return xa.generateAsync(this,e,!0,t)}thenByDescending(e,t){return xa.generate(this,e,!1,t)}thenByDescendingAsync(e,t){return xa.generateAsync(this,e,!1,t)}}const Fa=(e,t)=>xa.generate(e,(e=>e),!0,t),La=(e,t,n)=>xa.generate(e,t,!0,n),Ba=(e,t,n)=>xa.generateAsync(e,t,!0,n),$a=(e,t,n)=>xa.generate(e,t,!1,n),Wa=(e,t,n)=>xa.generateAsync(e,t,!1,n),qa=(e,t)=>xa.generate(e,(e=>e),!1,t),Va=(e,t)=>{const n=[],r=[];for(const s of e)!0===t(s)?r.push(s):n.push(s);return[r,n]},Ha=async(e,t)=>{const n=[],r=[];for(const s of e)!0===await t(s)?r.push(s):n.push(s);return[r,n]},Ka=(e,t)=>new li((function*(){yield t,yield*e})),ja=e=>new li((function*(){const t=[...e];for(let e=t.length-1;e>=0;e--)yield t[e]})),za=(e,t)=>{if("function"==typeof t){const{length:n}=t;return 1===n?Ja(e,t):Ya(e,t)}return Xa(e,t)},Ja=(e,t)=>new li((function*(){for(const n of e)yield t(n)})),Ya=(e,t)=>new li((function*(){let n=0;for(const r of e)yield t(r,n),n++})),Xa=(e,t)=>new li((function*(){for(const n of e)yield n[t]})),Qa=(e,t)=>"function"==typeof t?1===t.length?Za(e,t):ec(e,t):tc(e,t),Za=(e,t)=>Ci((async function*(){for(const n of e)yield t(n)})),ec=(e,t)=>Ci((async function*(){let n=0;for(const r of e)yield t(r,n),n++})),tc=(e,t)=>Ci((async function*(){for(const n of e)yield n[t]})),nc=(e,t)=>"function"==typeof t?1===t.length?rc(e,t):sc(e,t):oc(e,t),rc=(e,t)=>new li((function*(){for(const n of e)for(const e of t(n))yield e})),sc=(e,t)=>new li((function*(){let n=0;for(const r of e){for(const e of t(r,n))yield e;n++}})),oc=(e,t)=>new li((function*(){for(const n of e)for(const e of n[t])yield e})),ic=(e,t)=>1===t.length?ac(e,t):cc(e,t),ac=(e,t)=>Ci((async function*(){for(const n of e){const e=await t(n);for(const t of e)yield t}})),cc=(e,t)=>Ci((async function*(){let n=0;for(const r of e){const e=await t(r,n);for(const t of e)yield t;n++}})),uc=(e,t,n=ai)=>{const r=e[Symbol.iterator](),s=t[Symbol.iterator]();let o=r.next(),i=s.next();for(;!o.done&&!i.done;){if(!n(o.value,i.value))return!1;o=r.next(),i=s.next()}return!0===o.done&&!0===i.done},lc=async(e,t,n)=>{const r=e[Symbol.iterator](),s=t[Symbol.iterator]();let o=r.next(),i=s.next();for(;!o.done&&!i.done;){if(!1===await n(o.value,i.value))return!1;o=r.next(),i=s.next()}return!0===o.done&&!0===i.done},dc=(e,t)=>t?pc(e,t):hc(e),hc=e=>{let t=!1,n=null;for(const r of e){if(!0===t)throw new ii(oi.MoreThanOneElement);t=!0,n=r}if(!1===t)throw new ii(oi.NoElements);return n},pc=(e,t)=>{let n=!1,r=null;for(const s of e)if(t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}if(!1===n)throw new ii(oi.NoMatch);return r},gc=async(e,t)=>{let n=!1,r=null;for(const s of e)if(await t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}if(!1===n)throw new ii(oi.NoMatch);return r},fc=(e,t)=>t?mc(e,t):vc(e),vc=e=>{let t=!1,n=null;for(const r of e){if(!0===t)throw new ii(oi.MoreThanOneElement);t=!0,n=r}return n},mc=(e,t)=>{let n=!1,r=null;for(const s of e)if(t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}return r},yc=async(e,t)=>{let n=!1,r=null;for(const s of e)if(await t(s)){if(!0===n)throw new ii(oi.MoreThanOneElement);n=!0,r=s}return r},wc=(e,t)=>new li((function*(){let n=0;for(const r of e)n++>=t&&(yield r)})),Sc=(e,t)=>1===t.length?Ac(e,t):_c(e,t),Ac=(e,t)=>new li((function*(){let n=!0;for(const r of e)!1===n?yield r:!1===t(r)&&(n=!1,yield r)})),_c=(e,t)=>new li((function*(){let n=0,r=!0;for(const s of e)!1===r?yield s:!1===t(s,n)&&(r=!1,yield s),n++})),Cc=(e,t)=>1===t.length?Tc(e,t):Dc(e,t),Tc=(e,t)=>Ci((async function*(){let n=!0;for(const r of e)!1===n?yield r:!1===await t(r)&&(n=!1,yield r)})),Dc=(e,t)=>Ci((async function*(){let n=0,r=!0;for(const s of e)!1===r?yield s:!1===await t(s,n)&&(r=!1,yield s),n++})),kc=(e,t)=>t?bc(e,t):Gc(e),Gc=e=>{let t=0;for(const n of e)t+=n;return t},bc=(e,t)=>{let n=0;for(const r of e)n+=t(r);return n},Nc=async(e,t)=>{let n=0;for(const r of e)n+=await t(r);return n},Ec=(e,t)=>new li((function*(){let n=t>0?t:0;for(const t of e){if(0==n--)break;yield t}})),Ic=(e,t)=>1===t.length?Rc(e,t):Pc(e,t),Rc=(e,t)=>new li((function*(){for(const n of e){if(!t(n))break;yield n}})),Pc=(e,t)=>new li((function*(){let n=0;for(const r of e){if(!t(r,n++))break;yield r}})),Oc=(e,t)=>1===t.length?Uc(e,t):Mc(e,t),Uc=(e,t)=>Ci((async function*(){for(const n of e){if(!await t(n))break;yield n}})),Mc=(e,t)=>Ci((async function*(){let n=0;for(const r of e){if(!await t(r,n++))break;yield r}})),xc=e=>[...e],Fc=(e,t)=>{const n=new Map;for(const r of e){const e=t(r),s=n.get(e);void 0===s?n.set(e,[r]):s.push(r)}return n},Lc=async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),s=n.get(e);void 0===s?n.set(e,[r]):s.push(r)}return n},Bc=(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},Wc=e=>new Set(e),qc=(e,t,n)=>n?Hc(e,t,n):Vc(e,t),Vc=(e,t)=>new li((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))})),Hc=(e,t,n)=>new li((function*(){const r=[];for(const s of[e,t])for(const e of s){let t=!1;for(const s of r)if(!0===n(e,s)){t=!0;break}!1===t&&(yield e,r.push(e))}})),Kc=(e,t,n)=>Ci((async function*(){const r=[];for(const s of[e,t])for(const e of s){let t=!1;for(const s of r)if(!0===await n(e,s)){t=!0;break}!1===t&&(yield e,r.push(e))}})),jc=(e,t)=>1===t.length?zc(e,t):Jc(e,t),zc=(e,t)=>new li((function*(){for(const n of e)!0===t(n)&&(yield n)})),Jc=(e,t)=>new li((function*(){let n=0;for(const r of e)!0===t(r,n++)&&(yield r)})),Yc=(e,t)=>1===t.length?Xc(e,t):Qc(e,t),Xc=(e,t)=>Ci((async function*(){for(const n of e)!0===await t(n)&&(yield n)})),Qc=(e,t)=>Ci((async function*(){let n=0;for(const r of e)!0===await t(r,n++)&&(yield r)})),Zc=(e,t,n)=>n?tu(e,t,n):eu(e,t),eu=(e,t)=>new li((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]}})),tu=(e,t,n)=>new li((function*(){const r=e[Symbol.iterator](),s=t[Symbol.iterator]();for(;;){const e=r.next(),t=s.next();if(e.done||t.done)break;yield n(e.value,t.value)}})),nu=(e,t,n)=>Ci((async function*(){const r=e[Symbol.iterator](),s=t[Symbol.iterator]();for(;;){const e=r.next(),t=s.next();if(e.done||t.done)break;yield n(e.value,t.value)}})),ru=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(hi,"aggregate"),n(vi,"all"),n(mi,"allAsync"),n(yi,"any"),n(Ai,"anyAsync"),n(_i,"append"),n(Ti,"asAsync"),n(ki,"asParallel"),n(Gi,"average"),n(bi,"averageAsync"),n(Ni,"chunk"),n(Ei,"concatenate"),n(Ii,"contains"),n(Ri,"containsAsync"),n(Pi,"count"),n(Mi,"countAsync"),n(xi,"defaultIfEmpty"),n(Fi,"distinct"),n(Li,"distinctAsync"),n(Bi,"each"),n($i,"eachAsync"),n(Wi,"elementAt"),n(qi,"elementAtOrDefault"),n(Vi,"except"),n(Hi,"exceptAsync"),n(Ki,"first"),n(Ji,"firstAsync"),n(Yi,"firstOrDefault"),n(Zi,"firstOrDefaultAsync"),n(ta,"groupBy"),n(na,"groupByAsync"),n(oa,"groupByWithSel"),n(ia,"groupJoin"),n(ua,"groupJoinAsync"),n(ha,"intersect"),n(pa,"intersectAsync"),n(ga,"joinByKey"),n(fa,"last"),n(ya,"lastAsync"),n(wa,"lastOrDefault"),n(_a,"lastOrDefaultAsync"),n(Ca,"max"),n(ka,"maxAsync"),n(Ga,"min"),n(Ea,"minAsync"),n(Ia,"ofType"),n(Fa,"order"),n(La,"orderBy"),n(Ba,"orderByAsync"),n($a,"orderByDescending"),n(Wa,"orderByDescendingAsync"),n(qa,"orderDescending"),n(Ka,"prepend"),n(ja,"reverse"),n(za,"select"),n(Qa,"selectAsync"),n(nc,"selectMany"),n(ic,"selectManyAsync"),n(uc,"sequenceEquals"),n(lc,"sequenceEqualsAsync"),n(dc,"single"),n(gc,"singleAsync"),n(fc,"singleOrDefault"),n(yc,"singleOrDefaultAsync"),n(wc,"skip"),n(Sc,"skipWhile"),n(Cc,"skipWhileAsync"),n(kc,"sum"),n(Nc,"sumAsync"),n(Ec,"take"),n(Ic,"takeWhile"),n(Oc,"takeWhileAsync"),n(xc,"toArray"),n(Fc,"toMap"),n(Lc,"toMapAsync"),n(Bc,"toObject"),n($c,"toObjectAsync"),n(Va,"partition"),n(Ha,"partitionAsync"),n(Wc,"toSet"),n(qc,"union"),n(Kc,"unionAsync"),n(jc,"where"),n(Yc,"whereAsync"),n(Zc,"zip"),n(nu,"zipAsync")},su=(e,t,n,r)=>{if(r){if(!n)throw new ReferenceError("TAccumulate function is undefined");return au(e,t,n,r)}return n?iu(e,t,n):ou(e,t)},ou=async(e,t)=>{let n;for await(const r of e)n=n?t(n,r):r;if(void 0===n)throw new ii(oi.NoElements);return n},iu=async(e,t,n)=>{let r=t;for await(const t of e)r=n(r,t);return r},au=async(e,t,n,r)=>{let s=t;for await(const t of e)s=n(s,t);return r(s)},cu=async(e,t)=>{for await(const n of e)if(!1===t(n))return!1;return!0},uu=async(e,t)=>{for await(const n of e)if(!1===await t(n))return!1;return!0},lu=(e,t)=>new ci((async function*(){yield*e,yield t})),du=(e,t)=>t?pu(e,t):hu(e),hu=async e=>{for await(const t of e)return!0;return!1},pu=async(e,t)=>{for await(const n of e)if(!0===t(n))return!0;return!1},gu=async(e,t)=>{for await(const n of e)if(!0===await t(n))return!0;return!1},fu=e=>Di(0,(async()=>{const t=[];for await(const n of e)t.push(n);return t})),vu=async(e,t)=>{let n=0,r=0;if(t)for await(const s of e)n+=t(s),r+=1;else for await(const t of e)n+=t,r+=1;if(0===r)throw new ii(oi.NoElements);return n/r},mu=async(e,t)=>{let n=0,r=0;for await(const s of e)n+=await t(s),r+=1;if(0===r)throw new ii(oi.NoElements);return n/r},yu=(e,t)=>{if(t<1)throw new si("size");return new ci((async function*(){let n=[];for await(const r of e)n.push(r),n.length===t&&(yield n,n=[]);n.length&&(yield n)}))},wu=(e,t)=>new ci((async function*(){yield*e,yield*t})),Su=async(e,t,n=ai)=>{for await(const r of e)if(n(t,r))return!0;return!1},Au=async(e,t,n)=>{for await(const r of e)if(await n(t,r))return!0;return!1},_u=(e,t)=>t?Tu(e,t):Cu(e),Cu=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},Du=async(e,t)=>{let n=0;for await(const r of e)!0===await t(r)&&n++;return n},ku=(e,t)=>new ci((async function*(){let n=!1;for await(const t of e)n=!0,yield t;n||(yield t)})),Gu=(e,t=ai)=>new ci((async function*(){const n=[];for await(const r of e)n.find((e=>t(e,r)))||(n.push(r),yield r)})),bu=(e,t)=>new ci((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}})),Nu=(e,t)=>new ci((async function*(){for await(const n of e)t(n),yield n})),Eu=(e,t)=>new ci((async function*(){for await(const n of e)await t(n),yield n})),Iu=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")},Ru=async(e,t)=>{let n=0;for await(const r of e)if(t===n++)return r;return null},Pu=(e,t,n=ai)=>new ci((async function*(){const r=[];for await(const e of t)r.push(e);for await(const t of e){let e=!1;for(let s=0;s<r.length;s++){const o=r[s];if(!0===n(t,o)){e=!0;break}}!1===e&&(yield t)}})),Ou=(e,t,n)=>new ci((async function*(){const r=[];for await(const e of t)r.push(e);for await(const t of e){let e=!1;for(let s=0;s<r.length;s++){const o=r[s];if(!0===await n(t,o)){e=!0;break}}!1===e&&(yield t)}})),Uu=(e,t)=>t?xu(e,t):Mu(e),Mu=async e=>{const t=await e[Symbol.asyncIterator]().next();if(!0===t.done)throw new ii(oi.NoElements);return t.value},xu=async(e,t)=>{for await(const n of e)if(!0===t(n))return n;throw new ii(oi.NoMatch)},Fu=async(e,t)=>{for await(const n of e)if(!0===await t(n))return n;throw new ii(oi.NoMatch)},Lu=(e,t)=>t?$u(e,t):Bu(e),Bu=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},Wu=async(e,t)=>{for await(const n of e)if(!0===await t(n))return n;return null},qu=(e,t,n)=>n?Vu(e,t,n):Hu(e,t),Vu=(e,t,n)=>new ci((async function*(){const r=new Array;for await(const s of e){const e=t(s);let o=!1;for(let t=0;t<r.length;t++){const i=r[t];if(n(i.key,e)){i.push(s),o=!0;break}}!1===o&&r.push(new ea(e,s))}for(const e of r)yield e})),Hu=(e,t)=>new ci((async function*(){const n={};for await(const r of e){const e=t(r),s=n[e];s?s.push(r):n[e]=new ea(e,r)}for(const e in n)yield n[e]})),Ku=(e,t,n)=>n?zu(e,t,n):ju(e,t),ju=(e,t)=>new ci((async function*(){const n={};for await(const r of e){const e=await t(r),s=n[e];s?s.push(r):n[e]=new ea(e,r)}for(const e in n)yield n[e]})),zu=(e,t,n)=>new ci((async function*(){const r=new Array;for await(const s of e){const e=await t(s);let o=!1;for(let t=0;t<r.length;t++){const i=r[t];if(!0===await n(i.key,e)){i.push(s),o=!0;break}}!1===o&&r.push(new ea(e,s))}for(const e of r)yield e})),Ju=(e,t,n,r)=>r?Xu(e,t,n,r):Yu(e,t,n),Yu=(e,t,n)=>new ci((async function*(){const r={};for await(const s of e){const e=t(s),o=r[e],i=n(s);o?o.push(i):r[e]=new ea(e,i)}for(const e in r)yield r[e]})),Xu=(e,t,n,r)=>new ci((async function*(){const s=new Array;for await(const o of e){const e=t(o);let i=!1;for(let t=0;t<s.length;t++){const a=s[t];if(r(a.key,e)){a.push(n(o)),i=!0;break}}if(!1===i){const t=n(o);s.push(new ea(e,t))}}for(const e of s)yield e})),Qu=(e,t,n,r,s,o)=>{const i=o?Zu(e,t,n,r,s,o):el(e,t,n,r,s);return new ci(i)},Zu=(e,t,n,r,s,o)=>async function*(){const i=[];for await(const e of t){const t=r(e),n=i.find((e=>o(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=>o(t.key,e)))??{key:e,values:[]};yield s(t,r.values)}},el=(e,t,n,r,s)=>async function*(){const o=new Map;for await(const e of t){const t=r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}for await(const t of e){const e=n(t),r=o.get(e)??[];yield s(t,r)}},tl=(e,t,n,r,s,o)=>{const i=o?nl(e,t,n,r,s,o):rl(e,t,n,r,s);return new ci(i)},nl=(e,t,n,r,s,o)=>async function*(){const i=[];for await(const e of t){const t=await r(e),n=i.find((e=>o(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=>o(t.key,e)))??{key:e,values:[]};yield s(t,r.values)}},rl=(e,t,n,r,s)=>async function*(){const o=new Map;for await(const e of t){const t=await r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}for await(const t of e){const e=await n(t),r=o.get(e)??[];yield s(t,r)}},sl=(e,t,n=ai)=>new ci((async function*(){const r=await e.distinct(n).toArray();if(0===r.length)return;const s=await t.toArray();for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++){const r=s[e];if(!0===n(t,r)){yield t;break}}}})),ol=(e,t,n)=>new ci((async function*(){const r=await e.distinctAsync(n).toArray();if(0===r.length)return;const s=await t.toArray();for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++){const r=s[e];if(!0===await n(t,r)){yield t;break}}}})),il=(e,t,n,r,s,o=ai)=>new ci((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===o(e,i)&&(yield s(t,n))}}})),al=(e,t)=>t?ul(e,t):cl(e),cl=async e=>{let t=null;for await(const n of e)t=n;if(!t)throw new ii(oi.NoElements);return t},ul=async(e,t)=>{let n=null;for await(const r of e)!0===t(r)&&(n=r);if(!n)throw new ii(oi.NoMatch);return n},ll=async(e,t)=>{let n=null;for await(const r of e)!0===await t(r)&&(n=r);if(!n)throw new ii(oi.NoMatch);return n},dl=(e,t)=>t?pl(e,t):hl(e),hl=async e=>{let t=null;for await(const n of e)t=n;return t},pl=async(e,t)=>{let n=null;for await(const r of e)!0===t(r)&&(n=r);return n},gl=async(e,t)=>{let n=null;for await(const r of e)!0===await t(r)&&(n=r);return n},fl=(e,t)=>t?ml(e,t):vl(e),vl=async e=>{let t=null;for await(const n of e)t=Math.max(t??Number.NEGATIVE_INFINITY,n);if(null===t)throw new ii(oi.NoElements);return t},ml=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 ii(oi.NoElements);return n},yl=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 ii(oi.NoElements);return n},wl=(e,t)=>t?Al(e,t):Sl(e),Sl=async e=>{let t=null;for await(const n of e)t=Math.min(t??Number.POSITIVE_INFINITY,n);if(null===t)throw new ii(oi.NoElements);return t},Al=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 ii(oi.NoElements);return n},_l=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 ii(oi.NoElements);return n},Cl=(e,t)=>{const n="string"==typeof t?e=>typeof e===t:e=>e instanceof t;return new ci((async function*(){for await(const t of e)n(t)&&(yield t)}))},Tl=(e,t)=>Oa.generate(e,(e=>e),!0,t),Dl=(e,t,n)=>Oa.generate(e,t,!0,n),kl=(e,t,n)=>Oa.generateAsync(e,t,!0,n),Gl=(e,t,n)=>Oa.generate(e,t,!1,n),bl=(e,t,n)=>Oa.generateAsync(e,t,!1,n),Nl=(e,t)=>Oa.generate(e,(e=>e),!1,t),El=async(e,t)=>{const n=[],r=[];for await(const s of e)!0===t(s)?r.push(s):n.push(s);return[r,n]},Il=async(e,t)=>{const n=[],r=[];for await(const s of e)!0===await t(s)?r.push(s):n.push(s);return[r,n]},Rl=(e,t)=>new ci((async function*(){yield t,yield*e})),Pl=e=>new ci((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]})),Ol=(e,t)=>"function"==typeof t?1===t.length?Ul(e,t):Ml(e,t):xl(e,t),Ul=(e,t)=>new ci((async function*(){for await(const n of e)yield t(n)})),Ml=(e,t)=>new ci((async function*(){let n=0;for await(const r of e)yield t(r,n),n++})),xl=(e,t)=>new ci((async function*(){for await(const n of e)yield n[t]})),Fl=(e,t)=>"string"==typeof t?Bl(e,t):Ll(e,t),Ll=(e,t)=>new ci((async function*(){for await(const n of e)yield t(n)})),Bl=(e,t)=>new ci((async function*(){for await(const n of e)yield n[t]})),$l=(e,t)=>"function"==typeof t?1===t.length?Wl(e,t):ql(e,t):Vl(e,t),Wl=(e,t)=>new ci((async function*(){for await(const n of e)for(const e of t(n))yield e})),ql=(e,t)=>new ci((async function*(){let n=0;for await(const r of e){for(const e of t(r,n))yield e;n++}})),Vl=(e,t)=>new ci((async function*(){for await(const n of e)for(const e of n[t])yield e})),Hl=(e,t)=>1===t.length?new ci((async function*(){for await(const n of e){const e=await t(n);for(const t of e)yield t}})):new ci((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++}})),Kl=async(e,t,n=ai)=>{const r=e[Symbol.asyncIterator](),s=t[Symbol.asyncIterator]();let o=await Promise.all([r.next(),s.next()]),i=o[0],a=o[1];for(;!i.done&&!a.done;){if(!n(i.value,a.value))return!1;o=await Promise.all([r.next(),s.next()]),i=o[0],a=o[1]}return!0===i.done&&!0===a.done},jl=async(e,t,n)=>{const r=e[Symbol.asyncIterator](),s=t[Symbol.asyncIterator]();let o=await Promise.all([r.next(),s.next()]),i=o[0],a=o[1];for(;!i.done&&!a.done;){if(!1===await n(i.value,a.value))return!1;o=await Promise.all([r.next(),s.next()]),i=o[0],a=o[1]}return!0===i.done&&!0===a.done},zl=(e,t)=>t?Yl(e,t):Jl(e),Jl=async e=>{let t=!1,n=null;for await(const r of e){if(!0===t)throw new ii(oi.MoreThanOneElement);t=!0,n=r}if(!1===t)throw new ii(oi.NoElements);return n},Yl=async(e,t)=>{let n=!1,r=null;for await(const s of e)if(t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}if(!1===n)throw new ii(oi.NoMatch);return r},Xl=async(e,t)=>{let n=!1,r=null;for await(const s of e)if(await t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}if(!1===n)throw new ii(oi.NoMatch);return r},Ql=(e,t)=>t?ed(e,t):Zl(e),Zl=async e=>{let t=!1,n=null;for await(const r of e){if(!0===t)throw new ii(oi.MoreThanOneElement);t=!0,n=r}return n},ed=async(e,t)=>{let n=!1,r=null;for await(const s of e)if(t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}return r},td=async(e,t)=>{let n=!1,r=null;for await(const s of e)if(await t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}return r},nd=(e,t)=>new ci((async function*(){let n=0;for await(const r of e)n++>=t&&(yield r)})),rd=(e,t)=>1===t.length?sd(e,t):od(e,t),sd=(e,t)=>new ci((async function*(){let n=!0;for await(const r of e)!1===n?yield r:!1===t(r)&&(n=!1,yield r)})),od=(e,t)=>new ci((async function*(){let n=0,r=!0;for await(const s of e)!1===r?yield s:!1===t(s,n)&&(r=!1,yield s),n++})),id=(e,t)=>1===t.length?ad(e,t):cd(e,t),ad=(e,t)=>new ci((async function*(){let n=!0;for await(const r of e)!1===n?yield r:!1===await t(r)&&(n=!1,yield r)})),cd=(e,t)=>new ci((async function*(){let n=0,r=!0;for await(const s of e)!1===r?yield s:!1===await t(s,n)&&(r=!1,yield s),n++})),ud=(e,t)=>t?dd(e,t):ld(e),ld=async e=>{let t=0;for await(const n of e)t+=n;return t},dd=async(e,t)=>{let n=0;for await(const r of e)n+=t(r);return n},hd=async(e,t)=>{let n=0;for await(const r of e)n+=await t(r);return n},pd=(e,t)=>new ci((async function*(){let n=t>0?t:0;for await(const t of e){if(0==n--)break;yield t}})),gd=(e,t)=>1===t.length?fd(e,t):vd(e,t),fd=(e,t)=>new ci((async function*(){for await(const n of e){if(!t(n))break;yield n}})),vd=(e,t)=>new ci((async function*(){let n=0;for await(const r of e){if(!t(r,n++))break;yield r}})),md=(e,t)=>1===t.length?yd(e,t):wd(e,t),yd=(e,t)=>new ci((async function*(){for await(const n of e){if(!await t(n))break;yield n}})),wd=(e,t)=>new ci((async function*(){let n=0;for await(const r of e){if(!await t(r,n++))break;yield r}})),Sd=async e=>{const t=[];for await(const n of e)t.push(n);return t},Ad=async(e,t)=>{const n=new Map;for await(const r of e){const e=t(r),s=n.get(e);void 0===s?n.set(e,[r]):s.push(r)}return n},_d=async(e,t)=>{const n=new Map;for await(const r of e){const e=await t(r),s=n.get(e);void 0===s?n.set(e,[r]):s.push(r)}return n},Cd=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},Dd=async e=>{const t=new Set;for await(const n of e)t.add(n);return t},kd=(e,t,n)=>n?bd(e,t,n):Gd(e,t),Gd=(e,t)=>new ci((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))})),bd=(e,t,n)=>new ci((async function*(){const r=[];for(const s of[e,t])for await(const e of s){let t=!1;for(const s of r)if(!0===n(e,s)){t=!0;break}!1===t&&(yield e,r.push(e))}})),Nd=(e,t,n)=>new ci((async function*(){const r=[];for(const s of[e,t])for await(const e of s){let t=!1;for(const s of r)if(!0===await n(e,s)){t=!0;break}!1===t&&(yield e,r.push(e))}})),Ed=(e,t)=>1===t.length?Id(e,t):Rd(e,t),Id=(e,t)=>new ci((async function*(){for await(const n of e)!0===t(n)&&(yield n)})),Rd=(e,t)=>new ci((async function*(){let n=0;for await(const r of e)!0===t(r,n++)&&(yield r)})),Pd=(e,t)=>1===t.length?Od(e,t):Ud(e,t),Od=(e,t)=>new ci((async function*(){for await(const n of e)!0===await t(n)&&(yield n)})),Ud=(e,t)=>new ci((async function*(){let n=0;for await(const r of e)!0===await t(r,n++)&&(yield r)})),Md=(e,t,n)=>n?Fd(e,t,n):xd(e,t),xd=(e,t)=>new ci((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]}})),Fd=(e,t,n)=>new ci((async function*(){const r=e[Symbol.asyncIterator](),s=t[Symbol.asyncIterator]();for(;;){const[e,t]=await Promise.all([r.next(),s.next()]);if(e.done||t.done)break;yield n(e.value,t.value)}})),Ld=(e,t,n)=>new ci((async function*(){const r=e[Symbol.asyncIterator](),s=t[Symbol.asyncIterator]();for(;;){const e=await Promise.all([r.next(),s.next()]),t=e[0],o=e[1];if(t.done||o.done)break;yield n(t.value,o.value)}})),Bd=(e,t,n,r)=>{if(r){if(!n)throw new ReferenceError("TAccumulate function is undefined");return qd(e,t,n,r)}return n?Wd(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 ii(oi.NoElements);return n},Wd=async(e,t,n)=>{let r=t;for await(const t of e)r=n(r,t);return r},qd=async(e,t,n,r)=>{let s=t;for await(const t of e)s=n(s,t);return r(s)},Vd=(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}}},Hd=(e,t)=>{const n=Vd(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))}},Kd=(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}}},jd=(e,t)=>{const n=Kd(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))}},zd=(e,t)=>{const n=e.dataFunc;switch(n.type){case 1:return new ui({generator:()=>{const e=n.generator();return e.push(Promise.resolve(t)),e},type:n.type});case 2:return new ui({generator:async()=>{const e=await n.generator();return e.push(Promise.resolve(t)),e},type:n.type});case 0:return new ui({generator:async()=>{const e=await n.generator();return e.push(t),e},type:n.type})}},Jd=(e,t)=>t?Xd(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}},Xd=async(e,t)=>{const n=Vd(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)}},Qd=async(e,t)=>{const n=Kd(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 s of r)s.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)}},Zd=e=>Ci((async function*(){for await(const t of e)yield t})),eh=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)}},th=async(e,t)=>{let n;n=t?Vd(e,t):e.dataFunc;const r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);let s=0;for(const e of r)s+=e;return s/r.length},nh=async(e,t)=>{const n=Kd(e,t),r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);let s=0;for(const e of r)s+=e;return s/r.length},rh=(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 s of r())n.push(s),n.length===t&&(e.push(Promise.all(n)),n=[]);return n.length&&e.push(Promise.all(n)),e}};break;case 2:const s=e.dataFunc.generator;n={type:2,generator:async()=>{const e=[];let n=[];for(const r of await s())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 o=e.dataFunc.generator;n={type:0,generator:async()=>{const e=[];let n=[];for(const r of await o())n.push(r),n.length===t&&(e.push(n),n=[]);return n.length&&e.push(n),e}}}return new ui(n)},sh=(e,t)=>new ui({generator:async()=>{const[n,r]=await Promise.all([e.toArray(),t.toArray()]);return[...n,...r]},type:0}),oh=async(e,t,n=ai)=>{let r;switch(r=Vd(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))}},ih=async(e,t,n)=>{const r=Kd(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))}},ah=(e,t)=>t?uh(e,t):ch(e),ch=async e=>{const t=e.dataFunc;switch(t.type){case 0:case 2:return(await e.toArray()).length;case 1:return t.generator().length}},uh=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},lh=async(e,t)=>{const n=Kd(e,t);let r;switch(n.type){case 1:r=Promise.all(n.generator());break;case 2:r=Promise.all(await n.generator())}let s=0;for(const e of await r)e&&s++;return s},dh=(e,t)=>{const n=e.dataFunc,r=t instanceof Promise;let s;switch(n.type){case 0:s={generator:()=>n.generator().then((e=>e.length?e:r?t.then((e=>[e])):[t])),type:n.type};break;case 1:s={generator:()=>{const e=n.generator();return e.length?e:r?[t]:[Promise.resolve(t)]},type:n.type};break;case 2:s={generator:async()=>{const e=await n.generator();return e.length?e:r?[t]:[Promise.resolve(t)]},type:n.type}}return new ui(s)},hh=(e,t=ai)=>new ui({generator:async()=>{const n=[];for(const r of await e.toArray())n.find((e=>t(e,r)))||n.push(r);return n},type:0}),ph=(e,t)=>new ui({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}),gh=(e,t)=>new ui(Vd(e,(e=>(t(e),e)))),fh=(e,t)=>{const n=Kd(e,(async e=>(await t(e),e)));return new ui(n)},vh=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]}}},mh=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]}}},yh=(e,t,n=ai)=>new ui({generator:async()=>{const[r,s]=await Promise.all([e.toArray(),t.toArray()]),o=[];for(const e of r){let t=!1;for(let r=0;r<s.length;r++){const o=s[r];if(!0===n(e,o)){t=!0;break}}!1===t&&o.push(e)}return o},type:0}),wh=(e,t,n)=>new ui({generator:async()=>{const[r,s]=await Promise.all([e.toArray(),t.toArray()]),o=[];for(const e of r){let t=!1;for(let r=0;r<s.length;r++){const o=s[r];if(!0===await n(e,o)){t=!0;break}}!1===t&&o.push(e)}return o},type:0}),Sh=e=>eh(e.dataFunc),Ah=(e,t)=>t?Ch(e,t):_h(e),_h=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(0===e.length)throw new ii(oi.NoElements);return e[0]}case 1:{const e=t.generator();if(0===e.length)throw new ii(oi.NoElements);return await e[0]}case 2:{const e=await t.generator();if(0===e.length)throw new ii(oi.NoElements);return await e[0]}}},Ch=async(e,t)=>{const n=await Sh(e);for(const e of n)if(!0===t(e))return e;throw new ii(oi.NoMatch)},Th=async(e,t)=>{const n=await Sh(e);for(const e of n)if(!0===await t(e))return e;throw new ii(oi.NoMatch)},Dh=(e,t)=>t?Gh(e,t):kh(e),kh=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 Sh(e);for(const e of n)if(!0===t(e))return e;return null},bh=async(e,t)=>{const n=await Sh(e);for(const e of n)if(!0===await t(e))return e;return null},Nh=(e,t,n)=>n?Ih(e,t,n):Eh(e,t),Eh=(e,t)=>new ui({generator:async()=>{const n={};for(const r of await e.toArray()){const e=t(r),s=n[e];s?s.push(r):n[e]=new ea(e,r)}const r=new Array;for(const e in n)r.push(n[e]);return r},type:0}),Ih=(e,t,n)=>new ui({generator:async()=>{const r=new Array;for(const s of await e.toArray()){const e=t(s);let o=!1;for(let t=0;t<r.length;t++){const i=r[t];if(n(i.key,e)){i.push(s),o=!0;break}}!1===o&&r.push(new ea(e,s))}const s=new Array;for(const e of r)s.push(e);return s},type:0}),Rh=(e,t,n)=>n?Ph(e,t,n):Oh(e,t),Ph=(e,t,n)=>new ui({generator:async()=>{const r=Kd(e,(async e=>[await t(e),e]));let s;switch(r.type){case 1:s=await Promise.all(r.generator());break;case 2:s=await Promise.all(await r.generator())}const o=new Array;for(const[e,t]of s){let r=!1;for(let s=0;s<o.length;s++){const i=o[s];if(!0===await n(i.key,e)){i.push(t),r=!0;break}}!1===r&&o.push(new ea(e,t))}const i=new Array;for(const e of o)i.push(e);return i},type:0}),Oh=(e,t)=>new ui({generator:async()=>{const n=Kd(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 s={};for(const[e,t]of r){const n=s[e];n?n.push(t):s[e]=new ea(e,t)}const o=new Array;for(const e in s)o.push(s[e]);return o},type:0}),Uh=(e,t,n,r)=>r?Mh(e,t,n,r):xh(e,t,n),Mh=(e,t,n,r)=>new ui({generator:async()=>{const s=new Array;for await(const o of e){const e=t(o);let i=!1;for(let t=0;t<s.length;t++){const a=s[t];if(r(a.key,e)){a.push(n(o)),i=!0;break}}if(!1===i){const t=n(o);s.push(new ea(e,t))}}const o=new Array;for(const e of s)o.push(e);return o},type:0}),xh=(e,t,n)=>new ui({generator:async()=>{const r={};for(const s of await e.toArray()){const e=t(s),o=r[e],i=n(s);o?o.push(i):r[e]=new ea(e,i)}const s=new Array;for(const e in r)s.push(r[e]);return s},type:0}),Fh=(e,t,n,r,s,o)=>{const i=o?Lh(e,t,n,r,s,o):Bh(e,t,n,r,s);return new ui({generator:i,type:0})},Lh=(e,t,n,r,s,o)=>async()=>{const i=[];for await(const e of t){const t=r(e),n=i.find((e=>o(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=>o(e.key,t)))??{key:t,values:[]};return s(e,r.values)}))},Bh=(e,t,n,r,s)=>async()=>{const o=new Map;for await(const e of t){const t=r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}return(await e.toArray()).map((e=>{const t=n(e),r=o.get(t)??[];return s(e,r)}))},$h=(e,t,n,r,s,o)=>{const i=o?Wh(e,t,n,r,s,o):qh(e,t,n,r,s);return new ui({generator:i,type:0})},Wh=(e,t,n,r,s,o)=>async()=>{const i=[];for await(const e of t){const t=await r(e),n=i.find((e=>o(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=>o(e.key,t)))??{key:t,values:[]};return s(e,r.values)}));return await Promise.all(a)},qh=(e,t,n,r,s)=>async()=>{const o=new Map;for await(const e of t){const t=await r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}const i=(await e.toArray()).map((async e=>{const t=await n(e),r=o.get(t)??[];return s(e,r)}));return await Promise.all(i)},Vh=(e,t,n=ai)=>new ui({generator:async()=>{const r=await e.distinct(n).toArray();if(0===r.length)return[];const s=await t.toArray(),o=new Array;for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++){const r=s[e];if(!0===n(t,r)){o.push(t);break}}}return o},type:0}),Hh=(e,t,n)=>new ui({generator:async()=>{const r=await e.distinctAsync(n).toArray();if(0===r.length)return[];const s=await t.toArray(),o=new Array;for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++){const r=s[e];if(!0===await n(t,r)){o.push(t);break}}}return o},type:0}),Kh=(e,t,n,r,s,o=ai)=>new ui({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===o(t,i)&&c.push(s(e,n))}}return c},type:0}),jh=(e,t)=>t?Jh(e,t):zh(e),zh=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(0===e.length)throw new ii(oi.NoElements);return e[e.length-1]}case 1:{const e=t.generator();if(0===e.length)throw new ii(oi.NoElements);return await e[e.length-1]}case 2:{const e=await t.generator();if(0===e.length)throw new ii(oi.NoElements);return await e[e.length-1]}}},Jh=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 ii(oi.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 ii(oi.NoMatch)},Xh=(e,t)=>t?Zh(e,t):Qh(e),Qh=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]}}},Zh=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},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(!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},tp=async(e,t)=>{let n;n=t?Vd(e,t):e.dataFunc;const r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);return Math.max.apply(null,r)},np=async(e,t)=>{const n=Kd(e,t),r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);return Math.max.apply(null,r)},rp=async(e,t)=>{let n;n=t?Vd(e,t):e.dataFunc;const r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);return Math.min.apply(null,r)},sp=async(e,t)=>{const n=Kd(e,t),r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);return Math.min.apply(null,r)},op=(e,t)=>{const n="string"==typeof t?e=>[typeof e===t,e]:e=>[e instanceof t,e];return new ui({generator:async()=>{const t=Vd(e,n),r=await eh(t),s=[];for(const[e,t]of r)e&&s.push(t);return s},type:0})};async function*ip(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}async function*ap(e,t,n,r){const s=((e,t)=>{const n=new Map;for(const r of e){const e=t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}class cp extends ui{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 s;return s=e instanceof cp?async function*(){for await(const s of e.orderedPairs())yield*ip(s,t,n,r)}:()=>async function*(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=await t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}(e,t,n,r),new cp(s)}static generate(e,t,n,r){let s;return s=e instanceof cp?async function*(){for await(const s of e.orderedPairs())yield*ap(s,t,n,r)}:()=>async function*(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}(e,t,n,r),new cp(s)}thenBy(e,t){return cp.generate(this,e,!0,t)}thenByAsync(e,t){return cp.generateAsync(this,e,!0,t)}thenByDescending(e,t){return cp.generate(this,e,!1,t)}thenByDescendingAsync(e,t){return cp.generateAsync(this,e,!1,t)}}const up=(e,t)=>cp.generate(e,(e=>e),!0,t),lp=(e,t,n)=>cp.generate(e,t,!0,n),dp=(e,t,n)=>cp.generateAsync(e,t,!0,n),hp=(e,t,n)=>cp.generate(e,t,!1,n),pp=(e,t,n)=>cp.generateAsync(e,t,!1,n),gp=(e,t)=>cp.generate(e,(e=>e),!1,t),fp=async(e,t)=>{const n=Vd(e,(e=>[t(e),e])),r=await eh(n),s=[],o=[];for(const[e,t]of r)e?o.push(t):s.push(t);return[o,s]},vp=async(e,t)=>{const n=Kd(e,(async e=>[await t(e),e])),r=await eh(n),s=[],o=[];for(const[e,t]of r)e?o.push(t):s.push(t);return[o,s]},mp=(e,t)=>{const n=e.dataFunc;switch(n.type){case 1:return new ui({generator:()=>{const e=n.generator();return e.unshift(Promise.resolve(t)),e},type:n.type});case 2:return new ui({generator:async()=>{const e=await n.generator();return e.unshift(Promise.resolve(t)),e},type:n.type});case 0:return new ui({generator:async()=>{const e=await n.generator();return e.unshift(t),e},type:n.type})}},yp=e=>{const t=e.dataFunc;switch(t.type){case 1:return new ui({generator:()=>t.generator().reverse(),type:t.type});case 2:case 0:return new ui({generator:async()=>(await t.generator()).reverse(),type:t.type})}},wp=(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}}},Sp=(e,t)=>"function"==typeof t?1===t.length?new ui(Vd(e,t)):new ui(wp(e,t)):new ui(Vd(e,(e=>e[t]))),Ap=(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}}},_p=(e,t)=>{let n;return n="function"==typeof t?1===t.length?Kd(e,t):Ap(e,t):Kd(e,(e=>e[t])),new ui(n)},Cp=(e,t)=>new ui({generator:async()=>{let n;n="function"==typeof t?1===t.length?Vd(e,t):wp(e,t):Vd(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 ui({generator:async()=>{let n;n=1===t.length?Kd(e,t):Ap(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}),Dp=async(e,t,n=ai)=>{const r=await e.toArray(),s=await t.toArray();if(r.length!==s.length)return!1;for(let e=0;e<r.length;e++)if(!1===n(r[e],s[e]))return!1;return!0},kp=async(e,t,n)=>{const r=await e.toArray(),s=await t.toArray();if(r.length!==s.length)return!1;for(let e=0;e<r.length;e++){const t=r[e],o=s[e];if(!1===await n(t,o))return!1}return!0},Gp=(e,t)=>t?Np(e,t):bp(e),bp=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);if(0===e.length)throw new ii(oi.NoElements);return e[0]}case 1:{const e=t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);if(0===e.length)throw new ii(oi.NoElements);return e[0]}case 2:{const e=await t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);if(0===e.length)throw new ii(oi.NoElements);return await e[0]}}},Np=async(e,t)=>{const n=await Sh(e);let r=!1,s=null;for(const e of n)if(t(e)){if(!0===r)throw new ii(oi.MoreThanOneMatchingElement);r=!0,s=e}if(!1===r)throw new ii(oi.NoMatch);return s},Ep=async(e,t)=>{const n=await Sh(e);let r=!1,s=null;for(const e of n)if(!0===await t(e)){if(!0===r)throw new ii(oi.MoreThanOneMatchingElement);r=!0,s=e}if(!1===r)throw new ii(oi.NoMatch);return s},Ip=(e,t)=>t?Pp(e,t):Rp(e),Rp=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);return 0===e.length?null:e[0]}case 1:{const e=t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);return 0===e.length?null:e[0]}case 2:{const e=await t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);return 0===e.length?null:await e[0]}}},Pp=async(e,t)=>{const n=await Sh(e);let r=!1,s=null;for(const e of n)if(t(e)){if(!0===r)throw new ii(oi.MoreThanOneElement);r=!0,s=e}return s},Op=async(e,t)=>{const n=await Sh(e);let r=!1,s=null;for(const e of n)if(!0===await t(e)){if(!0===r)throw new ii(oi.MoreThanOneElement);r=!0,s=e}return s},Up=(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:return new ui({generator:async()=>(await n.generator()).slice(t),type:0});case 1:return new ui({generator:()=>n.generator().slice(t),type:1});case 2:return new ui({generator:async()=>(await n.generator()).slice(t),type:2})}},Mp=(e,t)=>new ui({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 s=[];for(;r<n.length;r++)s.push(n[r]);return s},type:0}),xp=(e,t)=>new ui({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 s=[];for(;r<n.length;r++)s.push(n[r]);return s},type:0}),Fp=(e,t)=>t?Bp(e,t):Lp(e),Lp=async e=>{let t=0;for(const n of await e.toArray())t+=n;return t},Bp=async(e,t)=>{let n=0;for(const r of await e.toArray())n+=t(r);return n},$p=async(e,t)=>{const n=Kd(e,t),r=await eh(n);let s=0;for(const e of r)s+=e;return s},Wp=(e,t)=>{const n=t>0?t:0,r=e.dataFunc;switch(r.type){case 1:return new ui({generator:()=>r.generator().splice(0,n),type:1});case 2:return new ui({generator:()=>r.generator().then((e=>e.splice(0,n))),type:2});default:return new ui({generator:()=>r.generator().then((e=>e.splice(0,n))),type:0})}},qp=(e,t)=>new ui({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 s=n[e];if(!0!==t(s,e))break;r.push(s)}return r},type:0}),Vp=(e,t)=>new ui({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 s=n[e];if(!0!==await t(s,e))break;r.push(s)}return r},type:0}),Hp=async(e,t)=>{const n=new Map,r=Vd(e,(e=>[t(e),e])),s=await eh(r);for(const[e,t]of s){const r=n.get(e);void 0===r?n.set(e,[t]):r.push(t)}return n},Kp=async(e,t)=>{const n=new Map,r=Kd(e,(async e=>[await t(e),e])),s=await eh(r);for(const[e,t]of s){const r=n.get(e);void 0===r?n.set(e,[t]):r.push(t)}return n},jp=async(e,t)=>{const n=e.dataFunc,r=await eh(n),s={};for(const e of r)s[t(e)]=e;return s},zp=async(e,t)=>{const n=Kd(e,(async e=>[await t(e),e])),r=await eh(n),s={};for(const[e,t]of r)s[e]=t;return s},Jp=async e=>{const t=e.dataFunc,n=await eh(t);return new Set(n)},Yp=(e,t,n)=>n?Qp(e,t,n):Xp(e,t),Xp=(e,t)=>new ui({generator:async()=>{const n=new Set,r=t.toArray();for await(const t of e)!1===n.has(t)&&n.add(t);const s=await r;for(const e of s)!1===n.has(e)&&n.add(e);return[...n.keys()]},type:0}),Qp=(e,t,n)=>new ui({generator:async()=>{const r=[],s=await Promise.all([e.toArray(),t.toArray()]);for(const e of s)for(const t of e){let e=!1;for(const s of r)if(!0===n(t,s)){e=!0;break}!1===e&&r.push(t)}return r},type:0}),Zp=(e,t,n)=>new ui({generator:async()=>{const r=[],s=await Promise.all([e.toArray(),t.toArray()]);for(const e of s)for(const t of e){let e=!1;for(const s of r)if(!0===await n(t,s)){e=!0;break}!1===e&&r.push(t)}return r},type:0}),eg=(e,t)=>new ui({generator:async()=>(await e.toArray()).filter(t),type:0}),tg=(e,t)=>new ui({generator:async()=>{const n=Ap(e,(async(e,n)=>[await t(e,n),e])),r=await eh(n),s=[];for(const[e,t]of r)e&&s.push(t);return s},type:0}),ng=(e,t,n)=>n?sg(e,t,n):rg(e,t),rg=(e,t)=>new ui({generator:async()=>{const[n,r]=await Promise.all([e.toArray(),t.toArray()]),s=n.length<r.length?n.length:r.length,o=new Array(s);for(let e=0;e<s;e++){const t=n[e],s=r[e];o[e]=[t,s]}return o},type:0}),sg=(e,t,n)=>new ui({generator:async()=>{const[r,s]=await Promise.all([e.toArray(),t.toArray()]),o=r.length<s.length?r.length:s.length,i=new Array(o);for(let e=0;e<o;e++){const t=r[e],o=s[e];i[e]=n(t,o)}return i},type:0}),og=(e,t,n)=>new ui({generator:async()=>{const[r,s]=await Promise.all([e.toArray(),t.toArray()]),o=r.length<s.length?r.length:s.length,i=new Array(o);for(let e=0;e<o;e++){const t=r[e],o=s[e];i[e]=n(t,o)}return Promise.all(i)},type:0}),ig=e=>{const t=di.prototype,n=e.prototype,r=Object.getOwnPropertyNames(t);for(const e of r)n[e]=n[e]??t[e]};ru(li),(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(cu,"all"),n(uu,"allAsync"),n(lu,"append"),n(du,"any"),n(gu,"anyAsync"),n(fu,"asParallel"),n(vu,"average"),n(mu,"averageAsync"),n(yu,"chunk"),n(wu,"concatenate"),n(Su,"contains"),n(Au,"containsAsync"),n(_u,"count"),n(Du,"countAsync"),n(ku,"defaultIfEmpty"),n(Gu,"distinct"),n(bu,"distinctAsync"),n(Nu,"each"),n(Eu,"eachAsync"),n(Iu,"elementAt"),n(Ru,"elementAtOrDefault"),n(Pu,"except"),n(Ou,"exceptAsync"),n(Uu,"first"),n(Fu,"firstAsync"),n(Lu,"firstOrDefault"),n(Wu,"firstOrDefaultAsync"),n(qu,"groupBy"),n(Ku,"groupByAsync"),n(Ju,"groupByWithSel"),n(Qu,"groupJoin"),n(tl,"groupJoinAsync"),n(sl,"intersect"),n(ol,"intersectAsync"),n(il,"joinByKey"),n(al,"last"),n(ll,"lastAsync"),n(dl,"lastOrDefault"),n(gl,"lastOrDefaultAsync"),n(fl,"max"),n(yl,"maxAsync"),n(wl,"min"),n(_l,"minAsync"),n(Cl,"ofType"),n(Tl,"order"),n(Dl,"orderBy"),n(kl,"orderByAsync"),n(Gl,"orderByDescending"),n(bl,"orderByDescendingAsync"),n(Nl,"orderDescending"),n(El,"partition"),n(Il,"partitionAsync"),n(Rl,"prepend"),n(Pl,"reverse"),n(Ol,"select"),n(Fl,"selectAsync"),n($l,"selectMany"),n(Hl,"selectManyAsync"),n(Kl,"sequenceEquals"),n(jl,"sequenceEqualsAsync"),n(zl,"single"),n(Xl,"singleAsync"),n(Ql,"singleOrDefault"),n(td,"singleOrDefaultAsync"),n(nd,"skip"),n(rd,"skipWhile"),n(id,"skipWhileAsync"),n(ud,"sum"),n(hd,"sumAsync"),n(pd,"take"),n(gd,"takeWhile"),n(md,"takeWhileAsync"),n(Sd,"toArray"),n(Ad,"toMap"),n(_d,"toMapAsync"),n(Cd,"toObject"),n(Td,"toObjectAsync"),n(Dd,"toSet"),n(kd,"union"),n(Nd,"unionAsync"),n(Ed,"where"),n(Pd,"whereAsync"),n(Md,"zip"),n(Ld,"zipAsync")})(ci),(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(Bd,"aggregate"),n(Hd,"all"),n(jd,"allAsync"),n(zd,"append"),n(Jd,"any"),n(Qd,"anyAsync"),n(Zd,"asAsync"),n(th,"average"),n(nh,"averageAsync"),n(rh,"chunk"),n(sh,"concatenate"),n(oh,"contains"),n(ih,"containsAsync"),n(ah,"count"),n(lh,"countAsync"),n(dh,"defaultIfEmpty"),n(hh,"distinct"),n(ph,"distinctAsync"),n(gh,"each"),n(fh,"eachAsync"),n(vh,"elementAt"),n(mh,"elementAtOrDefault"),n(yh,"except"),n(wh,"exceptAsync"),n(Ah,"first"),n(Th,"firstAsync"),n(Dh,"firstOrDefault"),n(bh,"firstOrDefaultAsync"),n(Nh,"groupBy"),n(Rh,"groupByAsync"),n(Uh,"groupByWithSel"),n(Fh,"groupJoin"),n($h,"groupJoinAsync"),n(Fh,"groupJoin"),n($h,"groupJoinAsync"),n(Vh,"intersect"),n(Hh,"intersectAsync"),n(Kh,"joinByKey"),n(jh,"last"),n(Yh,"lastAsync"),n(Xh,"lastOrDefault"),n(ep,"lastOrDefaultAsync"),n(tp,"max"),n(np,"maxAsync"),n(rp,"min"),n(sp,"minAsync"),n(op,"ofType"),n(up,"order"),n(lp,"orderBy"),n(dp,"orderByAsync"),n(hp,"orderByDescending"),n(pp,"orderByDescendingAsync"),n(gp,"orderDescending"),n(fp,"partition"),n(vp,"partitionAsync"),n(mp,"prepend"),n(yp,"reverse"),n(Sp,"select"),n(_p,"selectAsync"),n(Cp,"selectMany"),n(Tp,"selectManyAsync"),n(Dp,"sequenceEquals"),n(kp,"sequenceEqualsAsync"),n(Gp,"single"),n(Ep,"singleAsync"),n(Ip,"singleOrDefault"),n(Op,"singleOrDefaultAsync"),n(Up,"skip"),n(Mp,"skipWhile"),n(xp,"skipWhileAsync"),n(Fp,"sum"),n($p,"sumAsync"),n(Wp,"take"),n(qp,"takeWhile"),n(Vp,"takeWhileAsync"),n(Sh,"toArray"),n(Hp,"toMap"),n(Kp,"toMapAsync"),n(jp,"toObject"),n(zp,"toObjectAsync"),n(Jp,"toSet"),n(Yp,"union"),n(Zp,"unionAsync"),n(eg,"where"),n(tg,"whereAsync"),n(ng,"zip"),n(og,"zipAsync")})(ui),(()=>{const{prototype:e}=di,t=Object.getOwnPropertyNames(li.prototype);for(const n of t)e[n]=e[n]??li.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 ii(oi.NoMatch);return t}if(0===this.length)throw new ii(oi.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 ii(oi.NoMatch)}if(0===this.length)throw new ii(oi.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 ii(oi.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 ii(oi.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 ag,cg;!function(e){e.Success="Success",e.GroupDoesNotExists="GroupDoesNotExists",e.ObjectDoesNotExists="ObjectDoesNotExists",e.FatalError="FatalError",e.FunctionNotSupported="FunctionNotSupported"}(ag||(ag={})),function(e){e.Success="Success",e.NoPermissions="NoPermissions",e.NameToShort="NameToShort",e.NameAlreadyExists="NameAlreadyExists",e.OtherError="OtherError",e.UnknownError="UnknownError"}(cg||(cg={}));class ug{constructor(){this._guid="",this._name="",this._iconName="",this._position=0,this._objectsOrder={},null==ug._devicesService&&(ug._devicesService=$v.Get(Lo.ServiceName))}GetDevicesChannelsInGroupAsync(){return e=this,t=arguments,s=function*(e=!1){let t=[],n=[];const s=yield ug._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 s)for(let t of e.Channels.where((e=>e.ChannelGroups.any((e=>e===this._guid)))))n.push(t);return n}const o=Object.keys(this._objectsOrder).map(Number).sort(((e,t)=>e-t));Object.values(this._objectsOrder).forEach((e=>{const n=s.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 o){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,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(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((s=s.apply(e,t||[])).next())}));var e,t,n,s}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(hg.ServiceName).ChangeGroupNameAsync(this,e)}ChangeIconNameAsync(e){return $v.Get(hg.ServiceName).ChangeGroupIconNameAsync(this,e)}}var lg,dg=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 hg{constructor(){this._connection=null,this._synchronized=!1,this._synchronizationTaskCompletionSource=null,this._groups=[],this._objectsGroupingSupported=!1,this._connection=$v.Get(Ot.ServiceName),this._synchronizationTaskCompletionSource=new Promise((e=>{$v.Get(ze.ServiceName).OnUserLoggedInEvent().Subscribe((t=>dg(this,void 0,void 0,(function*(){yield this.GetGroupsAsync(!0),e(),this._synchronized=!0}))))}))}SetObjectsInGroupAndOrderAsync(e,t){return dg(this,void 0,void 0,(function*(){var n;let r=[],s=[];for(let e of t)if(this.IsDevice(e)){for(let t of e.Channels)r.push(`${t.ChannelId}`);s.push(`${e.Guid}`)}else{if(!this.IsDeviceChannel(e))throw new Error("Passed object is not a device or device channel!");r.push(`${e.ChannelId}`),s.push(`${e.ChannelId}`)}const o=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new fg(e,s),15e3,!1);switch($v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),yield this.GetGroupsAsync(!1),null==o?void 0:o.Status){case ce.OK:return new ke(ag.Success,"");case ce.NotSupportedMethod:case ce.ResourceDoesNotExists:case ce.ResourceIsNotAvailable:return new ke(ag.FunctionNotSupported,"");case ce.WrongData:return"GroupDoesNotExists"===o.Data?new ke(ag.GroupDoesNotExists,o.Data):new ke(ag.FatalError,o.Data);case ce.Error:case ce.FatalError:default:return new ke(ag.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(hg.ServiceName,`Group ${e.Name} order position [on array]: ${n} set position: ${e.OrderPosition}`)}))}LogObjectsInGroupOrder(e,t){const n=$v.Get(r.ServiceName);n.Debug(hg.ServiceName,`Group ${e.Name} objects order:`),t.forEach(((e,t)=>{n.Debug(hg.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 dg(this,void 0,void 0,(function*(){var t;const n=e.select((e=>e.Guid)).toArray(),s=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new gg(n),15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==s?void 0:s.Status)===ce.OK?($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),ce.OK):($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to change groups order, controller responded with error ${null==s?void 0:s.Status} data: ${null==s?void 0:s.Data}`),this.LogGroupsOrder(e),null==s?void 0:s.Status)}))}ChangeObjectsPositionsInGroupAsync(e,t){return dg(this,void 0,void 0,(function*(){var n;const s=t.select((e=>e.ChannelId)).toArray(),o=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new wg(e.Guid,s),15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==o?void 0:o.Status)===ce.OK?($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),ce.OK):($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to change objects positions in group, controller responded with error ${null==o?void 0:o.Status} data: ${null==o?void 0:o.Data}`),this.LogObjectsInGroupOrder(e,t),null==o?void 0:o.Status)}))}IsGroupsAndObjectsOrderingAvailable(){return this._objectsGroupingSupported}MoveGroupPositionAsync(e,t){return dg(this,void 0,void 0,(function*(){var n;const s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new pg(e.Guid,t),15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==s?void 0:s.Status)===ce.OK?($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),ce.OK):($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to move group position, controller responded with error ${null==s?void 0:s.Status} data: ${null==s?void 0:s.Data}`),null==s?void 0:s.Status)}))}MoveObjectInGroupPositionAsync(e,t,n){return dg(this,void 0,void 0,(function*(){var s;const o=`${t.GetDevice().Guid}_${t.Number}`,i=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(new yg(e.Guid,o,n),15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==i?void 0:i.Status)===ce.OK?($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),ce.OK):($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to move object in 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)}))}AddDeviceChannelToGroupByGuidAsync(e,t){return dg(this,void 0,void 0,(function*(){var n,s;const o=new Dg;if(o.Data.Channel=e.Number,null==e.GetDevice())throw new Error("Device is not set on this channel!");o.Data.DeviceGuid=null===(n=e.GetDevice())||void 0===n?void 0:n.Guid,o.Data.GroupGuid=t;const i=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(o,15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=i&&null!=i.Status?(i.Status==ce.OK?e.ChannelGroups.push(t):$v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add device channel ${e.Name} to group ${t}, controller responded with error ${i.Status} data: ${i.Data}`),$v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),i.Status):(yield this.GetGroupsAsync(),ce.Error)}))}RemoveDeviceChannelFromGroupByGuidAsync(e,t){return dg(this,void 0,void 0,(function*(){var n,s;const o=new kg;if(null==e.GetDevice())throw new Error("Device is not set on this channel!");o.Data.DeviceGuid=null===(n=e.GetDevice())||void 0===n?void 0:n.Guid,o.Data.Channel=e.Number,o.Data.GroupGuid=t;const i=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(o,15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=i&&null!=i.Status?(i.Status==ce.OK?e.ChannelGroups=e.ChannelGroups.where((e=>e!=t)).toArray():$v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to remove device channel ${e.Name} from group ${t}, controller responded with error ${i.Status} data: ${i.Data}`),$v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),i.Status):(yield this.GetGroupsAsync(),ce.Error)}))}UpsertGroupWithDevicesChannelsAsync(e,t){return dg(this,void 0,void 0,(function*(){if(this._groups.all((t=>t.Guid!=e.Guid))){let t=yield this.AddNewGroupWithIconAsync(e.Name,e.IconName);if(!(t instanceof ug))return t instanceof ke?t:new ke(cg.UnknownError,"");e=t}for(let n of t.where((t=>t.ChannelGroups.all((t=>t!==e.Guid))))){let t=yield this.AddDeviceChannelToGroupAsync(n,e);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),t!==ce.OK)return $v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add device channel ${n.Name} to group ${e.Name}, controller responded with error ${t}`),new ke(cg.UnknownError,`Failed to add device channel ${n.Name} to group ${e.Name}, controller responded with error ${t}`)}let n=yield $v.Get(Lo.ServiceName).GetDevicesAsync();for(let o of n)for(let n of o.Channels.except(t,((e,t)=>e.GetDevice().Guid==t.GetDevice().Guid&&e.Number==t.Number)))for(var s of n.ChannelGroups.where((t=>e.Guid==t))){let t=yield this.RemoveDeviceChannelFromGroupAsync(n,e);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(),t!==ce.OK)return $v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to remove device channel ${n.Name} from group ${e.Name}, controller responded with error ${t}`),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),new ke(cg.UnknownError,`Failed to remove device channel ${n.Name} from group ${e.Name}, controller responded with error ${t}`)}return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),e}))}UpdateGroupWithDevicesChannelsAsync(e,t){return dg(this,void 0,void 0,(function*(){for(let n of t.where((t=>t.ChannelGroups.all((t=>t!==e))))){let t=yield this.AddDeviceChannelToGroupByGuidAsync(n,e);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(),t!==ce.OK)return $v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add device channel ${n.Name} to group ${e}, controller responded with error ${t}`),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),ce.FatalError}let n=yield $v.Get(Lo.ServiceName).GetDevicesAsync();for(let o of n)for(let n of o.Channels.except(t,((e,t)=>e.GetDevice().Guid==t.GetDevice().Guid&&e.Number==t.Number)))for(var s of n.ChannelGroups.where((t=>e==t))){let t=yield this.RemoveDeviceChannelFromGroupByGuidAsync(n,e);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),t!==ce.OK)return $v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add device channel ${n.Name} to group ${e}, controller responded with error ${t}`),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),ce.FatalError}return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),ce.OK}))}ChangeGroupNameByGuidAsync(e,t){return dg(this,void 0,void 0,(function*(){var n,r;let s=new Tg,o=new Gg,i=this._groups.first((t=>t.Guid===e));o.Guid=e,o.Name=t,o.IconName=i.IconName,null===(n=s.Data)||void 0===n||n.push(o);const a=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(s,15e3,!1);if($v.Get(be.ServiceName).ClearCache(),this._groups=yield this.GetGroupsAsync(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=a&&null!=a.Status)switch(a.Status){case ce.OK:return new ke(cg.Success,"");case ce.WrongData:switch(a.Data){case"NameToShort":return new ke(cg.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new ke(cg.NameAlreadyExists,"Group with this name already exists");default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}return new ke(cg.UnknownError,"")}))}ChangeGroupNameAndIconAsync(e,t,n){return this.ChangeGroupNameAndIconByGuidAsync(e.Guid,t,n)}ChangeGroupNameAndIconByGuidAsync(e,t,n){return dg(this,void 0,void 0,(function*(){var r,s;let o=new Tg,i=new Gg,a=this._groups.first((t=>t.Guid===e));i.Guid=e,i.Name=t,i.IconName=n,i.ObjectsOrder=a.ObjectsOrder,null===(r=o.Data)||void 0===r||r.push(i);const c=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(o,15e3,!1);if($v.Get(be.ServiceName).ClearCache(),this._groups=yield this.GetGroupsAsync(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=c&&null!=c.Status)switch(c.Status){case ce.OK:return new ke(cg.Success,"");case ce.WrongData:switch(c.Data){case"NameToShort":return new ke(cg.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new ke(cg.NameAlreadyExists,"Group with this name already exists");default:return new ke(cg.OtherError,`Response error: ${c.Status} data: ${c.Data}`)}default:return new ke(cg.OtherError,`Response error: ${c.Status} data: ${c.Data}`)}return new ke(cg.UnknownError,"")}))}ChangeGroupIconNameByGuidAsync(e,t){return dg(this,void 0,void 0,(function*(){var n,r;let s=new Tg,o=new Gg,i=this._groups.first((t=>t.Guid===e));o.Guid=e,o.Name=i.Name,o.IconName=t,null===(n=s.Data)||void 0===n||n.push(o);const a=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(s,15e3,!1);if($v.Get(be.ServiceName).ClearCache(),this._groups=yield this.GetGroupsAsync(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=a&&null!=a.Status)switch(a.Status){case ce.OK:return new ke(cg.Success,"");case ce.WrongData:switch(a.Data){case"NameToShort":return new ke(cg.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new ke(cg.NameAlreadyExists,"Group with this name already exists");default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}return new ke(cg.UnknownError,"")}))}GetServiceName(){return hg.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 dg(this,void 0,void 0,(function*(){var t;let n=new _g;n.Data=e;const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(n,15e3,!1);$v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync();for(let t of yield $v.Get(Lo.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 $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=r&&null!=r.Status?null==r?void 0:r.Status:ce.Error}))}GetGroupsAsync(){return dg(this,arguments,void 0,(function*(e=!1){var t,n;const s=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Cg,15e3,e);let o=[];if((null==s?void 0:s.Status)===ce.OK){let e=$v.Get(r.ServiceName),t=0,i=yield $v.Get(Lo.ServiceName).GetDevicesAsync();return null===(n=s.Data)||void 0===n||n.forEach((n=>{t++;let r=new ug;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(hg.ServiceName,`Got group: ${r.Name} ${r.Guid} order: ${r.OrderPosition} objects order: ${JSON.stringify(r.ObjectsOrder)}`),o.push(r)})),this._groups=o,o}throw new Error(`Failed to get groups, API responded with status ${null==s?void 0:s.Status} data: ${null==s?void 0:s.Data}`)}))}AddDeviceChannelToGroupAsync(e,t){return this.AddDeviceChannelToGroupByGuidAsync(e,t.Guid)}RemoveDeviceChannelFromGroupAsync(e,t){return this.RemoveDeviceChannelFromGroupByGuidAsync(e,t.Guid)}AddNewGroupAsync(e){return dg(this,void 0,void 0,(function*(){var t,n;let s=new Tg,o=new Gg;o.Name=e,null===(t=s.Data)||void 0===t||t.push(o);const i=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(s,15e3,!1);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=i&&null!=i.Status)switch(i.Status){case ce.OK:return this._groups.first((t=>t.Name===e));case ce.WrongData:switch($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add new group, controller responded with error ${i.Status} data: ${i.Data}`),i.Data){case"NameToShort":return new ke(cg.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new ke(cg.NameAlreadyExists,"Group with this name already exists");default:return new ke(cg.OtherError,`Response error: ${i.Status} data: ${i.Data}`)}default:return new ke(cg.OtherError,`Response error: ${i.Status} data: ${i.Data}`)}return new ke(cg.UnknownError,"")}))}AddNewGroupWithIconAsync(e,t){return dg(this,void 0,void 0,(function*(){var n,s;let o=new Tg,i=new Gg;i.Name=e,i.IconName=t,null===(n=o.Data)||void 0===n||n.push(i);const a=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(o,15e3,!1);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=a&&null!=a.Status)switch(a.Status){case ce.OK:return this._groups.first((t=>t.Name===e));case ce.WrongData:switch($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add new group, controller responded with error ${a.Status} data: ${a.Data}`),a.Data){case"NameToShort":return new ke(cg.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new ke(cg.NameAlreadyExists,"Group with this name already exists");default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}return new ke(cg.UnknownError,"")}))}}hg.ServiceName="ChannelsGroupsService";class pg extends ae{constructor(e,t){super(),this.Resource="/devices/groups/group/move",this.Method=ue.Post,this.Data=new mg,this.Data.GroupGuid=e,this.Data.NewPosition=t}}class gg extends ae{constructor(e){super(),this.Resource="/devices/groups/move",this.Method=ue.Post,this.Data=e}}class fg extends ae{constructor(e,t){super(),this.Resource="/devices/groups/group/objects/set",this.Method=ue.Post,this.Data=new vg,this.Data.GroupGuid=e.Guid,this.Data.ObjectsIds=t}}class vg{constructor(){this.GroupGuid="",this.ObjectsIds=[]}}class mg{constructor(){this.GroupGuid="",this.NewPosition=0}}class yg extends ae{constructor(e,t,n){super(),this.Resource="/devices/groups/group/object/move",this.Method=ue.Post,this.Data=new Sg,this.Data.GroupGuid=e,this.Data.NewPosition=n,this.Data.ObjectId=t}}class wg extends ae{constructor(e,t){super(),this.Resource="/devices/groups/group/objects/move",this.Method=ue.Post,this.Data=new Ag,this.Data.GroupGuid=e,this.Data.OrderedObjectsIds=t}}class Sg{constructor(){this.GroupGuid="",this.ObjectId="",this.NewPosition=0}}class Ag{constructor(){this.GroupGuid="",this.OrderedObjectsIds=[]}}class _g extends ae{constructor(){super(),this.Resource="/devices/groups/group",this.Method=ue.Delete}}class Cg 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 Dg extends ae{constructor(){super(),this.Resource="/devices/device/channel/groups/group/",this.Method=ue.Put,this.Data=new bg}}class kg extends ae{constructor(){super(),this.Resource="/devices/device/channel/groups/group/",this.Method=ue.Delete,this.Data=new bg}}class Gg{constructor(){this.Id=0,this.Guid="",this.Name="",this.IconName="",this.OrderPosition=0,this.ObjectsOrder={}}}class bg{constructor(){this.GroupGuid="",this.DeviceGuid="",this.Channel=0}}class Ng{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"}(lg||(lg={}));var Eg,Ig,Rg,Pg,Og,Ug,Mg,xg,Fg,Lg,Bg,$g=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Wg{constructor(){this._syncLock=new Ng,this._isInFouces=!0,this._canHibernate=!0,this._session=null,this._connection=null,this._currentAppState=lg.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,o;document.location,e.state&&("forward"==e.state.direction?(null===(t=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"Forward button pressed"),null===(n=this._onForwardButtonPressedEvent)||void 0===n||n.Invoke()):(null===(r=s.Log)||void 0===r||r.Warning(Wg.ServiceName,"Back button pressed"),null===(o=this._onBackButtonPressedEvent)||void 0===o||o.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=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"App state changed to: logged in"),this._onAppStateChanged.Invoke(lg.LoggedIn)})),this._session.OnUserLoggedOutEvent().Subscribe((e=>{var t;null===(t=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"App state changed to: logged out"),this._onAppStateChanged.Invoke(lg.LoggedOut)})),this._connection.OnConnectionStateChangedEvent().Subscribe((e=>{var t,n,r,o,i,a;switch(e){case he.Connected:null===(t=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"App state changed to: connected"),this._onAppStateChanged.Invoke(lg.Connected);break;case he.Disconnected:null===(n=s.Log)||void 0===n||n.Warning(Wg.ServiceName,"App state changed to: disconnected"),this._onAppStateChanged.Invoke(lg.Disconnected);break;case he.Connecting:null===(r=s.Log)||void 0===r||r.Warning(Wg.ServiceName,"App state changed to: connecting"),this._onAppStateChanged.Invoke(lg.Connecting);break;case he.Disconnecting:null===(o=s.Log)||void 0===o||o.Warning(Wg.ServiceName,"App state changed to: disconnecting"),this._onAppStateChanged.Invoke(lg.Disconnecting);break;case he.Reconnecting:null===(i=s.Log)||void 0===i||i.Warning(Wg.ServiceName,"App state changed to: reconnecting"),this._onAppStateChanged.Invoke(lg.Reconnecting);break;case he.Failed:null===(a=s.Log)||void 0===a||a.Warning(Wg.ServiceName,"App state changed to: failed"),this._onAppStateChanged.Invoke(lg.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(lg.Suspended),null===(e=s.Log)||void 0===e||e.Warning(Wg.ServiceName,"App state changed to: suspended"),null===(t=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"App switched to background"))}ReturnFromSuspension(){var e,t;this.IsHibernationAllowed()&&(this._returnedFromSuspension=!0,this._onReturnedFromSuspensionEvent.Invoke(),this._onAppStateChanged.Invoke(lg.ReturnedFromSuspension),null===(e=s.Log)||void 0===e||e.Warning(Wg.ServiceName,"App state changed to: returned from suspension"),null===(t=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"App switched to foreground"))}EnterLowPowerMode(){this._onEnterLowPowerModeEvent.Invoke(),this._onAppStateChanged.Invoke(lg.EnteredLowPowerMode)}ExitLowPowerMode(){this._onExitLowPowerModeEvent.Invoke(),this._onAppStateChanged.Invoke(lg.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 Wg.ServiceName}}Wg.ServiceName="AppStateService";class qg{constructor(){this.DeviceGuid="",this.CurrentVersion="",this.NewVersion=""}}class Vg{constructor(){this.UpdatesAvailable=[],this.UpdatesNotAvailable=[]}}class Hg{constructor(){this.UpdatedResourceName=new Map,this.UpdateDescription=new Map,this.UpdateCreationTime=null,this.Version="",this.UpdateChannel=""}}class Kg{constructor(){this.Resource="",this.Version="",this.Type=null}}!function(e){e[e.RadioUpdate=0]="RadioUpdate",e[e.SoftwareUpdate=1]="SoftwareUpdate"}(Eg||(Eg={})),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"}(Ig||(Ig={})),(Bg=Rg||(Rg={}))[Bg.WaitingForUser=1]="WaitingForUser",Bg[Bg.Downloading=2]="Downloading",Bg[Bg.Unpackaging=3]="Unpackaging",Bg[Bg.CheckingApplicability=4]="CheckingApplicability",Bg[Bg.MigratingData=5]="MigratingData",Bg[Bg.CreatingBackup=6]="CreatingBackup",Bg[Bg.Deploying=7]="Deploying",Bg[Bg.Installing=8]="Installing",Bg[Bg.Removing=9]="Removing",Bg[Bg.Error=10]="Error",Bg[Bg.ReadyToDownload=11]="ReadyToDownload",Bg[Bg.PreparingSystem=12]="PreparingSystem",Bg[Bg.CheckingPackageIntegrity=13]="CheckingPackageIntegrity",Bg[Bg.CheckingIntegrity=14]="CheckingIntegrity",Bg[Bg.UndoingInstallation=15]="UndoingInstallation",Bg[Bg.Installed=16]="Installed",(Lg=Pg||(Pg={}))[Lg.Ignore=0]="Ignore",Lg[Lg.Cancel=1]="Cancel",Lg[Lg.Install=2]="Install";class jg{constructor(){this.UpdatedResourceName=new Map,this.Percentage=0,this.PercentageTotal=0,this.Status=Ig.Error,this.UpdateNumber=1,this.AvailableUpdates=1}}class zg{constructor(){this.UpdatedResourceName=new Map,this.Percentage=0,this.PercentageTotal=0,this.SpeedMbps=0,this.CurrentTask=Mg.Unknown}}class Jg{constructor(){this.BulkUpdateStatus=Og.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"}(Og||(Og={})),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"}(Ug||(Ug={})),function(e){e[e.Unknown=0]="Unknown",e[e.DownloadingUpdate=1]="DownloadingUpdate",e[e.DownloadingInstaller=2]="DownloadingInstaller",e[e.CheckingUpdate=3]="CheckingUpdate"}(Mg||(Mg={})),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"}(xg||(xg={})),function(e){e.Public="public",e.Beta="beta",e.Development="dev"}(Fg||(Fg={}));var Yg,Xg,Qg,Zg,ef,tf,nf,rf,sf=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 of{constructor(){this._controllerUpdates=[],this._updateRequestTimeout=12e4,this._oldUpdateVersion=5,this._oldUpdateBuild=56,this._updateOfflineStageTime=9.3,this._updateProviders=$v.Get(Js.ServiceName),this._logger=$v.Get(r.ServiceName),this._connection=$v.Get(Ot.ServiceName),this._appStateService=$v.Get(Wg.ServiceName),this._extensionService=$v.Get(et.ServiceName)}GetAutomaticControllerUpdateDownloadStatusAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this.getRuntimeInfoAsync();if(e instanceof ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot get update branch, feature unsupported in current version. Current version: ${e}`);let r=yield this._connection.SendAndWaitForResponseAsync(new Sf,1e4,!1);return!(r.Status!=ce.OK||!r.Data)}))}GetServiceName(){return of.ServiceName}CheckDeviceVersionAsync(e){return sf(this,void 0,void 0,(function*(){var t;let n;if("string"==typeof e){const t=yield $v.Get(Lo.ServiceName).GetDevice(e);if(null==t)return new ke(xg.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);n=t}else n=e;if(null==n.ProtocolGuid)return new ke(xg.UnsupportedDevice,"Device does not contains data about protocol GUID.");const r=yield null===(t=(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(n.ProtocolGuid,Ss.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(Lo.ServiceName).GetDevice(e);if(null==t)return new ke(xg.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);n=t}else n=e;if(null==n.ProtocolGuid)return new ke(xg.UnsupportedDevice,"Device does not contains data about protocol GUID.");const r=yield null===(t=(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(n.ProtocolGuid,Ss.Device)).first())||void 0===t?void 0:t.GetAvailableUpdateAsync(n);if(null!=r.Type)return r;const s=new uf;s.CurrentResourceVersion=r.CurrentResourceVersion,s.NewResourceVersion=r.Update.Version,s.UpdatedResourceName=r.UpdatedResourceName,s.UpdateResourceGuid=r.Update.ResourceGuid,s.UpdateDescription=new Map([["pl-PL",r.Update.Description]]);let o="n/a";try{o=(yield this._extensionService.GetProtocolInfoAsync(n.ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}return s.Protocol=o,s.ProtocolGuid=n.ProtocolGuid,(yield $v.Get(Lo.ServiceName).GetDevicesAsync()).any((e=>"952ddc14-76c4-4f47-b0bc-5d106c1f9b02"==e.ModelGuid))&&(s.IsUpdateSafe=!1),s}))}CheckDeviceUpdatesBulkAsync(e){return sf(this,void 0,void 0,(function*(){const t=yield yield this._updateProviders.GetUpdatesProvidersAsync(Ss.Device),n=[];for(var r of t){const t=yield r.CheckUpdateBulkAsync(e);if(t instanceof ke)return t;t.map((e=>sf(this,void 0,void 0,(function*(){const t=new uf;t.CurrentResourceVersion=e.CurrentResourceVersion,t.NewResourceVersion=e.Update.Version,t.UpdatedResourceName=e.UpdatedResourceName,t.UpdateDescription=e.UpdateDescription,t.IsUpdateSafe=!0;let s="n/a";try{s=(yield this._extensionService.GetProtocolInfoAsync(r.ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}t.Protocol=s,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 s;let o;if("string"==typeof e){const t=yield $v.Get(Lo.ServiceName).GetDevice(e);if(null==t)return new ke(xg.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);o=t}else o=e;if(null==o.ProtocolGuid)return new ke(xg.UnsupportedDevice,"Device does not contains data about protocol GUID.");const i=yield null===(s=(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(o.ProtocolGuid,Ss.Device)).first())||void 0===s?void 0:s.GetAvailableUpdateAsync(o);if(null!=i.Type)return i;this._appStateService.DisallowHibernation();const a=yield(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(o.ProtocolGuid,Ss.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(Lo.ServiceName).GetDevicesAsync()).where((t=>e.includes(t.Guid))).groupBy((e=>e.ProtocolGuid)),s=[];this._appStateService.DisallowHibernation();const o=r.count();for(let e=0;e<o;e++){const i=r.elementAt(e),a=e*(100/o),c=(e+1)*(100/o),u=e=>{e.PercentageTotal=Math.floor(e.PercentageTotal/100*(c-a)+a),t(e)},l=yield yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(i.key,Ss.Device),d=yield l.first().InstalUpdateBulkAsync(i.select((e=>e.Guid)).toArray(),u,n);if(d instanceof ke)return d;s.push(d)}if(this._appStateService.AllowHibernation(),1==s.length)return s[0];{const e=new Jg;s.some((e=>e.DevicesUpdateResults.count()>0))&&s.any((e=>e.BulkUpdateStatus!=Og.Success))?e.BulkUpdateStatus=Og.PartialSuccess:s.any((e=>e.BulkUpdateStatus!=Og.Success))?e.BulkUpdateStatus=s.first().BulkUpdateStatus:e.BulkUpdateStatus=Og.Success;for(const t of s)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(ze.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 vf,1e4,!1);if(null==r||r.Status!=ce.OK||null==r.Data)return!1;const[s,o]=r.Data.Update.Version.ContainerSoftwareVersion.toString().split(".");return parseInt(s)>parseInt(t)||parseInt(s)==parseInt(t)&&parseInt(o)>parseInt(n)}))}CheckDevicesUpdatesAvailabilityAsync(){return sf(this,void 0,void 0,(function*(){const e=$v.Get(ze.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),s=[];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 qg;t.DeviceGuid=e.DeviceGuid,t.CurrentVersion=e.CurrentVersion,t.NewVersion=e.NewVersion,s.push(t)})),s)}))}CheckControllerUpdatesAsync(){return sf(this,void 0,void 0,(function*(){this._controllerUpdates=[];let e=[];const t=new Vg,n=yield this.getRuntimeInfoAsync();if(n instanceof ke){const e=new af;return e.UpdateType=Eg.SoftwareUpdate,e.ResponseResult=n,t.UpdatesNotAvailable.push(e),t}const r=parseInt(n.SoftwareVersion.toString().split(".")[0]),s=parseInt(n.SoftwareVersion.toString().split(".")[1]);try{e=yield this._updateProviders.GetUpdatesProvidersAsync(Ss.Controller)}catch(e){if(!(e instanceof Ns))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 s=new af;s.ResponseResult=r,s.UpdateType=Eg.RadioUpdate;let o="n/a";try{o=(yield this._extensionService.GetProtocolInfoAsync(e[n].ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}s.UpdatedResourceName=new Map([["pl-PL",o],["en-US",o]]),s.CurrentResourceVersion=yield e[n].GetCurrentRadioVersionAsync(),t.UpdatesNotAvailable.push(s)}else{const s=r,o=new cf;o.UpdatedResourceName=new Map([["pl-PL",s.UpdatedResourceName],["en-US",s.UpdatedResourceName]]),o.CurrentResourceVersion=s.CurrentResourceVersion,o.NewResourceVersion=s.Update.Version,o.UpdateDescription=new Map([["pl-PL",s.Update.Description]]),o.UpdateType=Eg.RadioUpdate,o.UpdateIdentifier=se.GenerateUUID(),o.UpdateIsDownloading=!1,o.DownloadProgress=100,o.UpdateCreationTime=null,t.UpdatesAvailable.push(o),this._controllerUpdates.push(Object.assign(Object.assign({},s),{UpdateIdentifier:o.UpdateIdentifier,ProviderName:e[n].GetUpdateProviderName(),UpdateType:Eg.RadioUpdate}))}}let o=!0;if((r<this._oldUpdateVersion||r===this._oldUpdateVersion&&s<=this._oldUpdateBuild)&&(o=!1),o){const e=yield this._connection.SendAndWaitForResponseAsync(new vf,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 bs;r.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,r.UpdateDescription=ie(e.Data.Update.UpdateDescription),r.UpdatedResourceName=ie(e.Data.Update.UpdateName).get("en-US");const s=new cf;s.UpdatedResourceName=ie(e.Data.Update.UpdateName),s.UpdateDescription=ie(e.Data.Update.UpdateDescription),s.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,s.NewResourceVersion=`${e.Data.Update.Version.BaseRuntime}.${e.Data.Update.Version.ContainerSoftwareVersion}`,s.UpdateType=Eg.SoftwareUpdate,s.UpdateIdentifier=e.Data.Update.Guid,s.UpdateIsDownloading=e.Data.UpdateStep==Zg.DownloadingInstaller||e.Data.UpdateStep==Zg.DownloadingUpdate||e.Data.UpdateStep==Zg.CheckingUpdate,s.DownloadProgress=e.Data.DownloadProgress,s.UpdateCreationTime=e.Data.Update.Creationtime,t.UpdatesAvailable.push(s),this._controllerUpdates.push(Object.assign(Object.assign({},r),{UpdateIdentifier:s.UpdateIdentifier,ProviderName:of.ServiceName,UpdateType:Eg.SoftwareUpdate}))}else{const e=yield this._connection.SendAndWaitForResponseAsync(new mf,15e3,!1);if(null==e)throw new Error("Cannot check updates! Response is empty.");switch(e.Status){case ce.NoData:const r=new af;r.UpdateType=Eg.SoftwareUpdate,r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.ResponseResult=new ke(xg.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 s=new bs;s.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,s.UpdateDescription=ie(e.Data.UpdateDescription),s.UpdatedResourceName=ie(e.Data.UpdateName).get("en-US");const o=new cf;o.UpdatedResourceName=ie(e.Data.UpdateName),o.UpdateDescription=ie(e.Data.UpdateDescription),o.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,o.UpdateType=Eg.SoftwareUpdate,o.UpdateIdentifier=e.Data.Guid,o.NewResourceVersion=`${e.Data.Version.BaseRuntime}.${e.Data.Version.ContainerSoftwareVersion}`,o.UpdateIsDownloading=!1,o.DownloadProgress=0,o.UpdateCreationTime=e.Data.Creationtime,t.UpdatesAvailable.push(o),this._controllerUpdates.push(Object.assign(Object.assign({},s),{UpdateIdentifier:o.UpdateIdentifier,ProviderName:of.ServiceName,UpdateType:Eg.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 s,o=new bs;const i=new af;switch(i.UpdateType=Eg.SoftwareUpdate,i.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.status){case 200:null!=r.body&&(s=yield r.json());break;case 404:i.ResponseResult=new ke(xg.DeviceIsUpToDate,"Updates not found, controller is already up-to-date."),t.UpdatesNotAvailable.push(i);break;default:i.ResponseResult=new ke(xg.CannotGetUpdates,`Response status code does not indicate success. Status: ${r.status}`),t.UpdatesNotAvailable.push(i)}if(null!=s){o.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,o.Update=s;const e=new cf;e.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),e.CurrentResourceVersion=o.CurrentResourceVersion,e.NewResourceVersion=o.Update.Version,e.UpdateDescription=new Map([["pl-PL",o.Update.Description]]),e.UpdateType=Eg.SoftwareUpdate,e.UpdateIdentifier=se.GenerateUUID(),e.DownloadProgress=100,e.UpdateIsDownloading=!1,e.UpdateCreationTime=null,t.UpdatesAvailable.push(e),this._controllerUpdates.push(Object.assign(Object.assign({},o),{UpdateIdentifier:e.UpdateIdentifier,ProviderName:of.ServiceName,UpdateType:Eg.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 ke){const e=new af;e.UpdateType=Eg.SoftwareUpdate,e.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),e.ResponseResult=n,t.UpdatesNotAvailable.push(e)}else{const r=new af;r.UpdateType=Eg.SoftwareUpdate,r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.ResponseResult=new ke(xg.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(Ss.Controller),t=yield this.getRuntimeInfoAsync();if(t instanceof ke)return t;const n=[];let r;r=new Kg,r.Resource="Controller software",r.Type=Eg.SoftwareUpdate,r.Version=`${t.RuntimeVersion}.${t.SoftwareVersion}`,n.push(r);for(let t=0;t<e.length;t++){r=new Kg,r.Version=yield e[t].GetCurrentRadioVersionAsync(),r.Type=Eg.RadioUpdate;let s="n/a";try{s=(yield this._extensionService.GetProtocolInfoAsync(e[t].ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}r.Resource=s,n.push(r)}return n}))}GetControllerUpdateBranchAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this.getRuntimeInfoAsync();if(e instanceof ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot get update branch, feature unsupported in current version. Current version: ${e}`);const r=yield this._connection.SendAndWaitForResponseAsync(new gf,1e4,!1);if(null==r||(null==r?void 0:r.Status)!=ce.OK)return new ke(xg.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 Fg.Public;case 1:return Fg.Beta;case 2:return Fg.Development;default:return new ke(xg.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 ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot set update branch, feature unsupported in current version. Current version: ${t}`);const s=yield this._connection.SendAndWaitForResponseAsync(new ff(e),1e4,!1);return null==s||(null==s?void 0:s.Status)!=ce.OK?new ke(xg.CannotSetUpdatesBranch,`Cannot set update branch, response is empty or status is not OK. Status: ${null==s?void 0:s.Status}`):ce.OK}))}EnableAutomaticControllerUpdateDonwloadAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this.getRuntimeInfoAsync();if(e instanceof ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot enable automatic updates download, feature unsupported in current version. Current version: ${e}`);const r=yield this._connection.SendAndWaitForResponseAsync(new Af,1e4,!1);return null==r||(null==r?void 0:r.Status)!=ce.OK?new ke(xg.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 ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot disable automatic update 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 ke(xg.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 ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot disable automatic update download, feature unsupported in current version. Current version: ${e}`);const r=yield this._connection.SendAndWaitForResponseAsync(new Cf,1e4,!1);if(null==r)return new ke(xg.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 Hg;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 ke(xg.CannotGetUpdates,"Cannot get updates history, response data is empty.");case ce.NoData:return[];default:return new ke(xg.CannotGetUpdates,`Cannot get updates history, response status is not OK. Status: ${r.Status}`)}}))}InstallControllerUpdateAsync(e,t,n,r,s){return sf(this,void 0,void 0,(function*(){const o=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 ke)return a;const c=parseInt(a.SoftwareVersion.toString().split(".")[0]),u=parseInt(a.SoftwareVersion.toString().split(".")[1]);if(0==this._controllerUpdates.length)return new ke(xg.CannotGetUpdates,"Cannot find any updates, make sure you check for available updates by calling CheckControllerUpdateAsync().");if("string"!=typeof n||!o.test(n)){const s=[1],o=t=>{t.UpdateNumber=s[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==Eg.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],o,n);yield a(5e3),t==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((t=>t.UpdateIdentifier!=l[e].UpdateIdentifier))),d.push(t),s[0]++}const h=this._controllerUpdates.find((e=>e.UpdateType==Eg.SoftwareUpdate));if(null!=h)if(c<this._oldUpdateVersion||c===this._oldUpdateVersion&&u<=this._oldUpdateBuild){const e=yield this.UpdateControllerUsingScriptAsync(h.Update,o);e==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=h.UpdateIdentifier))),d.push(e),s[0]++}else{const e=yield this.UpdateControllerUsingApiAsync(o,t,r);this._appStateService.AllowHibernation(),e==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n))),d.push(e),s[0]++}const p=d.where((e=>e instanceof ke)).toArray();if(null!=p&&0!=p.length){let e="";return p.forEach((t=>e+=`${t.Type}, `)),this._appStateService.AllowHibernation(),new ke(xg.UpdatesPartiallyInstalled,`Update installation finished - not all updates were successfully installed. Installation error codes: ${e}`)}return this._appStateService.AllowHibernation(),ce.OK}{let o;const i=this._controllerUpdates.find((e=>e.UpdateIdentifier==n));if(null==i)return new ke(xg.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 Eg.RadioUpdate:return r?new ke(xg.UpdateAlreadyDownloaded,"Update already downloaded set flag downloadOnly to false to install it."):(o=yield(yield this._updateProviders.GetUpdatesProviderAsync(i.ProviderName)).InstallRadioUpdateAsync(i,e,s),this._appStateService.AllowHibernation(),o==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n))),o);case Eg.SoftwareUpdate:if(c<this._oldUpdateVersion||c===this._oldUpdateVersion&&u<=this._oldUpdateBuild){if(r)return new ke(xg.UpdateAlreadyDownloaded,"Update already downloaded set flag downloadOnly to false to install it.");o=yield this.UpdateControllerUsingScriptAsync(i.Update,e),this._appStateService.AllowHibernation(),o==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n)))}else o=yield this.UpdateControllerUsingApiAsync(e,t,r),this._appStateService.AllowHibernation(),o==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n)));return o;default:return new ke(xg.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,s,o,i,a;switch(e.UpdateType){case As.Container:case As.ContainerSoftware:try{return yield null===(n=this._connection)||void 0===n?void 0:n.SendAndHandleResponseAsync(new lf(e.DownloadUri),this._updateRequestTimeout,(n=>{const r=new jg;switch(r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),n.Status){case ce.MultiDataResponseStart:r.Status=Ig.PreparingForUpgrade;break;case ce.MultiDataResponse:if(null==n.Data)return void this._logger.Warning(of.ServiceName,`Recived update response without data! URI: ${e.DownloadUri}`);switch(r.Percentage=Math.round(n.Data.Progress),n.Data.State){case Rg.CheckingApplicability:case Rg.CheckingIntegrity:case Rg.CheckingPackageIntegrity:r.Status=Ig.CheckingPackage;break;case Rg.CreatingBackup:case Rg.MigratingData:case Rg.Removing:r.Status=Ig.MovingData;break;case Rg.Deploying:case Rg.Installing:r.Status=Ig.Upgrading;break;case Rg.Downloading:r.Status=Ig.DownloadingPackage;break;case Rg.Error:r.Status=Ig.Error;break;case Rg.Installed:r.Status=Ig.Upgraded;break;case Rg.PreparingSystem:case Rg.ReadyToDownload:r.Status=Ig.PreparingForUpgrade;break;case Rg.UndoingInstallation:r.Status=Ig.InstallationStopped;break;case Rg.Unpackaging:r.Status=Ig.MovingData;break;case Rg.WaitingForUser:r.Status=Ig.Upgrading}break;case ce.MultiDataResponseStop:r.Status=Ig.OK;break;case ce.Error:case ce.FatalError:r.Status=Ig.Error}t(r)}),!1),ce.OK}catch(e){return new ke(xg.CannotProcessUpdate,`Cannot process update, error: ${e}`)}case As.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 ke)return h;var l=parseFloat(h.RuntimeVersion)>=2||parseFloat(u)>=1.2201125;try{c=(yield $v.Get(Lo.ServiceName).GetDevicesAsync()).length}catch(e){this._logger.Warning(of.ServiceName,`Cannot get number of devices in system! Error: ${e}. Using default value of 10 devices.`)}if(l){let n,r=new jg;r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.Percentage=1,r.Status=Ig.PreparingForUpgrade,t(r);let s=2;const o=Date.now(),i=900*c+8e5,a=i/100,u=o+i,l=new Promise(((o,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=Ig.Upgraded,t(r),o(ce.OK);else{var e=u-Date.now();e<i?s=95-e/a:(clearInterval(n),n=setInterval((()=>{clearInterval(n),r.Percentage=100,r.PercentageTotal=Math.round(r.Percentage),r.Status=Ig.Upgraded,t(r),o(ce.OK)}),e))}};this._appStateService.OnReturnedFromSuspension().Subscribe(l),n=setInterval((()=>{if(s>99)clearInterval(n),r.Percentage=100,r.PercentageTotal=Math.round(r.Percentage),r.Status=Ig.Upgraded,t(r),o(ce.OK);else{var e=s;e<99&&(r.Percentage=Math.round(e),r.PercentageTotal=Math.round(r.Percentage),r.Status=Ig.Upgrading,t(r))}s++}),a);const d=yield null===(c=this._connection)||void 0===c?void 0:c.SendAndWaitForResponseAsync(new df(e.DownloadUri),this._updateRequestTimeout,!1);d.Status!=ce.OK&&(clearInterval(n),r.Percentage=0,r.PercentageTotal=Math.round(r.Percentage),r.Status=Ig.InstallationError,t(r),this._logger.Debug(of.ServiceName,`Update failed with error. Update response status: ${d.Status}`),o(new ke(xg.CannotProcessUpdate,`Update failed with error. Update response status: ${d.Status}`)))}catch(e){this._logger.Debug(of.ServiceName,`Update failed with error. ${e}`),r.Percentage=0,r.PercentageTotal=Math.round(r.Percentage),r.Status=Ig.Error,t(r),clearInterval(n),o(new ke(xg.CannotProcessUpdate,`Update failed with error. ${e}`))}}))));return yield l}{let n=new jg;n.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),n.Percentage=1,n.PercentageTotal=Math.round(n.Percentage),n.Status=Ig.PreparingForUpgrade,t(n);const u=this._connection.GetAuthorizationInfo();if(null==u)return new ke(xg.CannotProcessUpdate,"Cannot process update. Cannot get current controller login credentials!");if((yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(new hf({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=Ig.PreparingForUpgrade,t(n);let r=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(new pf("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=Ig.PreparingForUpgrade,t(n),r=yield null===(o=this._connection)||void 0===o?void 0:o.SendAndWaitForResponseAsync(new pf(`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=Ig.PreparingForUpgrade,t(n);try{if(r=yield null===(i=this._connection)||void 0===i?void 0:i.SendAndWaitForResponseAsync(new pf("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=Ig.Upgrading,t(n);let e,r=0;const s=.95,o=Date.now(),i=900*c+15e5,a=i/95,u=o+i,l=new Promise(((o,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=Ig.Upgraded,t(n),o(ce.OK);else{var s=u-Date.now();s<i?r=95-s/a:(clearInterval(e),e=setInterval((()=>{clearInterval(e),n.Percentage=100,n.PercentageTotal=Math.round(n.Percentage),n.Status=Ig.Upgraded,t(n),o(ce.OK)}),s))}};this._appStateService.OnReturnedFromSuspension().Subscribe(l),e=setInterval((()=>{if(r>99)clearInterval(e),n.Percentage=100,n.PercentageTotal=Math.round(n.Percentage),n.Status=Ig.Upgraded,t(n),o(ce.OK);else{var i=5+r*s;i<99&&(n.Percentage=Math.round(i),n.PercentageTotal=Math.round(n.Percentage),n.Status=Ig.Upgrading,t(n))}r++}),a),null===(c=this._connection)||void 0===c||c.SendAndWaitForResponseAsync(new pf("/runtime/tmp/update.sh"),12e3,!1)}catch(e){o(new ke(xg.CannotProcessUpdate,`Update failed with error. ${e}`))}}))));return yield l}return n.Percentage=0,n.PercentageTotal=Math.round(n.Percentage),n.Status=Ig.InstallationError,t(n),new ke(xg.CannotProcessUpdate,"Execution failed!")}catch(e){return null===(a=this._connection)||void 0===a||a.SendAndWaitForResponseAsync(new pf("/runtime/scripts/restart_all.sh"),12e3,!1),new ke(xg.CannotProcessUpdate,`Execution failed! Error ${e}`)}}return new ke(xg.CannotProcessUpdate,"Execution failed! Cannot clear old update script!")}}return new ke(xg.CannotProcessUpdate,"Execution failed! Cannot loggin using support account!")}default:return new ke(xg.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,s)=>sf(this,void 0,void 0,(function*(){yield this._connection.SendAndHandleResponseAsync(new yf,this._updateRequestTimeout,(s=>{var o,i,a,c;const u=new zg;switch(u.UpdatedResourceName=ie(e.Update.UpdateName),s.Status){case ce.MultiDataResponseStart:u.Percentage=0,u.SpeedMbps=0,u.PercentageTotal=0,u.CurrentTask=Mg.DownloadingInstaller,t(u);break;case ce.MultiDataResponse:if(null!=s.Data){switch(u.Percentage=s.Data.StepProgressInPercentage,u.SpeedMbps=s.Data.DownloadSpeedInMbs,u.PercentageTotal=n?Math.round(2*(null===(o=s.Data)||void 0===o?void 0:o.UpdateProgressInPercentage)):Math.round(null===(i=s.Data)||void 0===i?void 0:i.UpdateProgressInPercentage),s.Data.UpdateStep){case Zg.DownloadingInstaller:u.CurrentTask=Mg.DownloadingInstaller;break;case Zg.DownloadingUpdate:u.CurrentTask=Mg.DownloadingUpdate;break;default:u.CurrentTask=Mg.CheckingUpdate}t(u)}break;case ce.MultiDataResponseStop:if(null!=s.Data)switch(s.Data.UpdateStep){case Zg.UpdateDownloaded:u.Percentage=100,u.PercentageTotal=n?Math.round(2*(null===(a=s.Data)||void 0===a?void 0:a.UpdateProgressInPercentage)):Math.round(null===(c=s.Data)||void 0===c?void 0:c.UpdateProgressInPercentage),u.SpeedMbps=0,u.CurrentTask=Mg.CheckingUpdate,t(u),r(ce.OK);break;case Zg.UpdateDownloadFailed:u.Percentage=0,u.PercentageTotal=0,u.SpeedMbps=0,u.CurrentTask=Mg.Unknown,t(u),r(new ke(xg.UpdateDownloadFailed,"Update download failed!"))}break;case ce.Error:case ce.FatalError:u.Percentage=0,u.PercentageTotal=0,u.SpeedMbps=0,u.CurrentTask=Mg.Unknown,t(u),r(new ke(xg.CannotProcessUpdate,"Update download failed!"))}}),!1)}))))})),s=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 s=0;yield this._connection.SendAndHandleResponseAsync(new wf,this._updateRequestTimeout,(o=>{var i,a;const c=new jg;switch(c.UpdatedResourceName=ie(t.Update.UpdateName),o.Status){case ce.MultiDataResponseStart:c.Status=Ig.PreparingForUpgrade,c.Percentage=null===(i=o.Data)||void 0===i?void 0:i.StepProgressInPercentage,c.PercentageTotal=null===(a=o.Data)||void 0===a?void 0:a.UpdateProgressInPercentage,e(c);break;case ce.MultiDataResponse:null!=o.Data&&(c.Status=Ig.Upgrading,c.Percentage=Math.round(o.Data.StepProgressInPercentage),c.PercentageTotal=Math.round(o.Data.UpdateProgressInPercentage),s=o.Data.StepProgressInPercentage,e(c));break;case ce.MultiDataResponseStop:if(null!=o.Data)switch(o.Data.UpdateStep){case Zg.UpdateInstallationFailed:c.Status=Ig.InstallationError,c.Percentage=0,c.PercentageTotal=0,e(c),n(new ke(xg.CannotProcessUpdate,"Update installation failed!"));break;case Zg.OfflineUpdateStep:{c.Percentage=Math.round(o.Data.StepProgressInPercentage),c.PercentageTotal=Math.round(o.Data.UpdateProgressInPercentage);let t=(100-c.PercentageTotal)/100,i=c.PercentageTotal;const a=setInterval((()=>{s++,i+=t,i>100&&(i=100),s>=100?(c.Status=Ig.Upgraded,c.Percentage=100,c.PercentageTotal=100,e(c),clearInterval(a),n(ce.OK)):(c.Status=Ig.Upgrading,c.Percentage=Math.round(s),c.PercentageTotal=Math.round(i),e(c))}),r/(100-s))}}break;case ce.Error:case ce.FatalError:c.Status=Ig.Error,c.Percentage=0,c.PercentageTotal=0,e(c),n(new ke(xg.CannotProcessUpdate,"Update installation failed!"))}}),!1)}))))}));if(n){const e=yield this._connection.SendAndWaitForResponseAsync(new vf,1e4,!1);if((null==e?void 0:e.Status)==ce.NoData)return new ke(xg.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 Zg.DownloadingInstaller:case Zg.DownloadingUpdate:case Zg.UpdateDownloaded:return new ke(xg.UpdateAlreadyDownloaded,"Update already downloaded, or download is in progress.");case Zg.InstallingUpdate:case Zg.PreparingUpdate:return new ke(xg.UpdateAlreadyInstalled,"Update already installed, or installation is in progress.");default:return yield r(e.Data)}}else{const e=yield this._connection.SendAndWaitForResponseAsync(new vf,1e4,!1);if((null==e?void 0:e.Status)==ce.NoData)return new ke(xg.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 Zg.DownloadingInstaller:case Zg.DownloadingUpdate:return new ke(xg.UpdateAlreadyDownloaded,"Update already downloaded, or donwload in progress.");case Zg.InstallingUpdate:case Zg.PreparingUpdate:return new ke(xg.UpdateAlreadyInstalled,"Update already installed, or installation in progress.");case Zg.UpdateDownloaded:return yield s(e.Data);default:var o=yield r(e.Data);return o!=ce.OK?o:yield s(e.Data)}}}))}getRuntimeInfoAsync(){return sf(this,void 0,void 0,(function*(){try{return yield this._updateProviders.GetSoftwareRuntimeInfoAsync()}catch(e){return e instanceof eo&&e.code==Es.Timeout?new ke(xg.CannotGetCurrentControllerVersionTimeout,"Cannot get runtime info (current controller version), timeout error - please restart controller to fix issue."):new ke(xg.CannotGetCurrentControllerVersion,`Cannot get runtime info (current controller version), error: ${e}`)}}))}}of.ServiceName="UpdatesService";class af{constructor(){this.UpdatedResourceName=new Map,this.CurrentResourceVersion="",this.UpdateType=null,this.ResponseResult=null}}class cf{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 uf{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 lf 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"}(Xg||(Xg={})),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"}(Qg||(Qg={})),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"}(Zg||(Zg={}));class df extends ae{constructor(e){super(),this.Resource="/updates/install/from/url",this.Method=ue.Put,this.Data=e}}class hf extends ae{constructor(e){super(),this.Resource="/users/user/login",this.Method=ue.Put,this.Data=e}}class pf extends ae{constructor(e){super(),this.Resource="/controller/runtime/execute",this.Method=ue.Post,this.Data=e}}class gf extends ae{constructor(){super(),this.Resource="/updates/branch",this.Method=ue.Get}}class ff extends ae{constructor(e){super(),this.Resource="/updates/branch",this.Method=ue.Put,this.Data=e}}class vf extends ae{constructor(){super(),this.Resource="/updates/pending",this.Method=ue.Get}}class mf extends ae{constructor(){super(),this.Resource="/updates/check",this.Method=ue.Get}}class yf extends ae{constructor(){super(),this.Resource="/updates/download",this.Method=ue.Post}}class wf extends ae{constructor(){super(),this.Resource="/updates/install",this.Method=ue.Post}}class Sf extends ae{constructor(){super(),this.Resource="/updates/download/automatic/status",this.Method=ue.Get}}class Af extends ae{constructor(){super(),this.Resource="/updates/download/automatic/enable",this.Method=ue.Put}}class _f extends ae{constructor(){super(),this.Resource="/updates/download/automatic/disable",this.Method=ue.Put}}class Cf 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"}(ef||(ef={})),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"}(tf||(tf={})),function(e){e.Min="Min",e.Max="Max",e.Avg="Avg"}(nf||(nf={}));class Df{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"}(rf||(rf={}));var kf,Gf,bf,Nf,Ef,If,Rf,Pf=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Of{constructor(){this._connection=null,this._connection=$v.Get(Ot.ServiceName)}GetServiceName(){return Of.ServiceName}GetStatesByIntervalAsync(e,t,n,r,s,o){return Pf(this,arguments,void 0,(function*(e,t,n,r,s,o,i=!1){var a;try{if(!(yield this.IsFunctionalitySupportedAsync()))return new ke(ef.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(Lo.ServiceName).GetDevice(e);if(null==t)return new ke(ef.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);c=t}else c=e;if(!c.Channels.any((e=>e.Number==t)))return new ke(ef.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 ke(ef.ResponseTypeNotSupported,"Device or channel not supporting requested DeviceResponseType.");const u=new Mf;u.DeviceGuid=c.Guid,u.DeviceChannel=t,u.Range=r,u.StateInterfaceType=n,u.ReverseOrder=i,u.Limit=s,u.Offset=o;const l=yield null===(a=this._connection)||void 0===a?void 0:a.SendAndWaitForResponseAsync(new Uf(u),2e4,!1);if(null==l)return new ke(ef.OtherError,"Cannot get state history data - response is null.");switch(l.Status){case ce.WrongData:switch(l.Data){case"IncorrectLimitValue":return new ke(ef.IncorrectLimitValue,"Cannot get state history data - limit value is incorrect!");case"IncorrectOffsetValue":return new ke(ef.IncorrectOffsetValue,"Cannot get state history data - offset value is incorrect!");case"IncorrectArguments":return new ke(ef.OtherError,"Cannot get state history data - some parameters are incorrect!");default:return new ke(ef.OtherError,"Cannot get state history data - unknown error!")}case ce.FatalError:return new ke(ef.FatalError,"Cannot get state history data - an exception occurred in the controller while reading data!");case ce.ResourceDoesNotExists:return new ke(ef.ResponseTypeNotSupported,"Device or channel not supporting requested DeviceResponseType.");case ce.OK:if(null==l.Data)return new ke(ef.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===_t.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 ke(ef.OtherError,`Cannot get state history data - controller responded with response code ${l.Status}`)}}catch(e){return new ke(ef.FatalError,`Cannot get state history data - exeption occurs! ${e}`)}}))}GetAvailableStatesAsync(){return Pf(this,void 0,void 0,(function*(){var e;try{const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new xf,12e3,!1);return null==t?new ke(ef.OtherError,"Cannot get available states - response is null."):t.Status!=ce.OK?new ke(ef.OtherError,`Cannot get available states - controller responded with response code ${t.Status}.`):null==t.Data?new ke(ef.NoData,"Cannot get available states - controller responede with status OK, but response does not contain data!"):t.Data.map((e=>{const t=new Df;return t.StateInterfaceType=e.StateInterfaceType,t.StateObjectType=e.StateObjectType,t}))}catch(e){return new ke(ef.FatalError,`Cannot get available states - exeption occurs! ${e}`)}}))}IsFunctionalitySupportedAsync(){return Pf(this,void 0,void 0,(function*(){return!(parseFloat((yield $v.Get(Js.ServiceName).GetSoftwareRuntimeInfoAsync()).SoftwareVersion)<=3.42)}))}GetAvailableStatesPerChannelAsync(e,t){return Pf(this,void 0,void 0,(function*(){var n;let r;if("string"==typeof e){const t=yield $v.Get(Lo.ServiceName).GetDevice(e);if(null==t)return new ke(ef.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);r=t}else r=e;const s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new Ff(new Lf(r.Guid,t)),8e3,!1);if(null==s)return new ke(ef.OtherError,"Cannot get available states - response is null.");switch(s.Status){case ce.ResourceDoesNotExists:switch(s.Data){case"DeviceNotFound":return new ke(ef.CannotFindDevice,"Cannot get available states - device does not exists!");case"ChannelNotFound":return new ke(ef.InvalidChannelNumber,"Cannot get available states - wrong channel!");default:return new ke(ef.OtherError,"Cannot get available states - unknown error!")}case ce.OK:{if(null==s.Data)return new ke(ef.NoData,"Cannot get available states - controller responede with status OK, but response does not contain data!");const e=s.Data.AvailableStates.map((e=>{const t=new Df;return t.StateInterfaceType=e.StateInterfaceType,t.StateObjectType=e.StateObjectType,t}));return s.Data.AvailableStates=e,s.Data}default:return new ke(ef.OtherError,`Cannot get available states - controller responded with response code ${s.Status}`)}}))}}Of.ServiceName="StatesHistoryService";class Uf extends ae{constructor(e){super(),this.Resource="/statehistory/states/get/last",this.Method=ue.Get,this.Data=e}}class Mf{constructor(){this.DeviceGuid="",this.DeviceChannel=0,this.StateInterfaceType="",this.Range=tf.Day,this.ReverseOrder=!1,this.Limit=0,this.Offset=0}}class xf extends ae{constructor(){super(),this.Resource="/statehistory/states/available",this.Method=ue.Get}}class Ff extends ae{constructor(e){super(),this.Resource="/statehistory/states/available/per/channel",this.Method=ue.Get,this.Data=e}}class Lf{constructor(e,t){this.DeviceGuid=e,this.Channel=t}}(Rf=kf||(kf={}))[Rf.User=0]="User",Rf[Rf.Controller=1]="Controller",Rf[Rf.Marketing=2]="Marketing",(If=Gf||(Gf={}))[If.Notification=0]="Notification",If[If.Message=1]="Message",If[If.Alarm=2]="Alarm",If[If.Warning=3]="Warning",If[If.Info=4]="Info",(Ef=bf||(bf={}))[Ef.Other=0]="Other",Ef[Ef.UserLoggedIn=1]="UserLoggedIn",Ef[Ef.UserLoggedOut=2]="UserLoggedOut",Ef[Ef.FoundNewDevice=3]="FoundNewDevice",Ef[Ef.DoorBellPress=4]="DoorBellPress",Ef[Ef.AddedNewDevice=5]="AddedNewDevice",Ef[Ef.RemovedDevice=6]="RemovedDevice",Ef[Ef.RegisteredNewUser=7]="RegisteredNewUser",Ef[Ef.GotAccessToTheInternet=8]="GotAccessToTheInternet",Ef[Ef.LostAccessToTheInternet=9]="LostAccessToTheInternet",Ef[Ef.RemovedUser=10]="RemovedUser",Ef[Ef.NetworkChanged=11]="NetworkChanged",function(e){e.WeatherWidget="WeatherWidget"}(Nf||(Nf={}));var Bf=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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(Ot.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 Wf;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(Nf[e],r);for(let[e,r]of Object.entries(t.MessageActionsData))n.MessageActionsData.set(e,r);this._chatSubscriptions.forEach((e=>{e(n)}))}))}GetCachedMessagesAsync(){return Bf(this,void 0,void 0,(function*(){try{const e=yield this._connection.SendAndWaitForResponseAsync(new qf,12e3,!1);if(null==e)return new ke(ev.OtherError,"Cannot get messages - response is null.");if(e.Status!=ce.OK)return new ke(ev.OtherError,`Cannot get messages - controller responded with response code ${e.Status}.`);if(null==e.Data)return new ke(ev.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 Wf;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(Nf[t],r);for(let[t,r]of Object.entries(e.MessageActionsData))n.MessageActionsData.set(t,r);t.push(n)})),t}catch(e){return new ke(ev.FatalError,`Cannot get messages - exception occurred ${e}`)}}))}SendMessageAsync(e){return Bf(this,void 0,void 0,(function*(){try{const t=yield this._connection.SendAndWaitForResponseAsync(new Vf(`recipient:home ${e}`),8e3,!1);return null==t||null==t.Status?ce.FatalError:t.Status}catch(e){return $v.Get(r.ServiceName).Error(cv.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 Wf{constructor(){this._sender=kf.Controller,this._messageType=Gf.Info,this._messageSource=bf.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 qf extends ae{constructor(){super(),this.Resource="/homemessaging/messages",this.Method=ue.Get}}class Vf extends ae{constructor(e){super(),this.Resource="/homemessaging/message",this.Method=ue.Put,this.Data=e}}var Hf,Kf,jf,zf=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Jf{constructor(){this._chatSubscriptions=[],this._connection=$v.Get(Ot.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 zf(this,void 0,void 0,(function*(){try{const e=yield this._connection.SendAndWaitForResponseAsync(new Qf,12e3,!1);if(null==e)return new ke(ev.OtherError,"Cannot get messages - response is null.");if(e.Status!=ce.OK)return new ke(ev.OtherError,`Cannot get messages - controller responded with response code ${e.Status}.`);if(null==e.Data)return new ke(ev.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 ke(ev.FatalError,`Cannot get messages - exception occurred ${e}`)}}))}SendMessageAsync(e){return zf(this,void 0,void 0,(function*(){try{const t=yield this._connection.SendAndWaitForResponseAsync(new Xf(e),8e3,!1);return null==t||null==t.Status?ce.FatalError:t.Status}catch(e){return $v.Get(r.ServiceName).Error(cv.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 Xf extends ae{constructor(e){super(),this.Resource="/homemessaging/message",this.Method=ue.Put,this.Data=e}}class Qf extends ae{constructor(){super(),this.Resource="/homemessaging/messages",this.Method=ue.Get}}!function(e){e[e.None=0]="None",e[e.ChangeDeviceState=1]="ChangeDeviceState"}(Hf||(Hf={})),function(e){e.GPT3_5_TURBO="gpt-3.5-turbo",e.GPT3_5_TURBO_16K="gpt-3.5-turbo-16k",e.GPT4="gpt-4"}(Kf||(Kf={})),function(e){e[e.UnknownError=0]="UnknownError",e[e.ChatNotConfigured=1]="ChatNotConfigured",e[e.MessageNotSend=2]="MessageNotSend",e[e.InvalidMessageResponseFormat=3]="InvalidMessageResponseFormat"}(jf||(jf={}));var Zf,ev,tv,nv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 rv{constructor(){this._chatSubscriptions=[],this._connection=$v.Get(Ot.ServiceName),this._connection.SubscribeTo("/homemessaging/gpt/notify/message/new",(e=>{const t=e.Data,n=new av;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=Hf[e],s=new Map;for(let[e,t]of Object.entries(r))s.set(e,t);n.ControllerActivities.set(t,s)}if(null!=t.Errors)for(let[e,r]of Object.entries(t.Errors))n.Errors.set(jf[e],r);this._chatSubscriptions.forEach((e=>{e(n)}))}))}IsGptChatAvailableAsync(){return nv(this,void 0,void 0,(function*(){return(yield $v.Get(et.ServiceName).GetExtensionsInfoAsync()).any((e=>"80daeab9-104f-4c1b-9464-61f5fc9bf2bf"==e.ExtensionGuid))}))}GetChatConfigurationAsync(){return nv(this,void 0,void 0,(function*(){try{const e=yield this._connection.SendAndWaitForResponseAsync(new ov,8e3,!1);return null==e||null==e.Status?new ke(ev.FatalError,"Cannot get chat configuration! No data in result"):e.Status!=ce.OK?new ke(ev.Error,`Cannot get chat configuration! Controller responded with code: ${e.Status}`):null==e.Data?new ke(ev.NoData,"Cannot get chat configuration! Controller responded with success, but no data in response!"):e.Data}catch(e){return new ke(ev.FatalError,`Cannot get chat configuration! ${e}`)}}))}SetChatConfigurationAsync(e){return nv(this,void 0,void 0,(function*(){try{const t=yield this._connection.SendAndWaitForResponseAsync(new iv(e),8e3,!1);return null==t||null==t.Status?ce.FatalError:t.Status}catch(e){return $v.Get(r.ServiceName).Error(cv.ServiceName,`Cannot set chat configuration! ${e}`),ce.FatalError}}))}SendMessageAsync(e){return nv(this,void 0,void 0,(function*(){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 $v.Get(r.ServiceName).Error(cv.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 ov extends ae{constructor(){super(),this.Resource="/homemessaging/gpt/configuration",this.Method=ue.Get}}class iv extends ae{constructor(e){super(),this.Resource="/homemessaging/gpt/configuration",this.Method=ue.Put,this.Data=e}}class av{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"}(Zf||(Zf={}));class cv{constructor(){this._services={ControllerChat:new $f,GptChat:new rv,FamillyChat:new Jf}}GetServiceName(){return cv.ServiceName}GetChatImplementation(e){switch(e){case Zf.ControllerChat:return this._services.ControllerChat;case Zf.FamilyChat:return this._services.FamillyChat;case Zf.GptChat:return this._services.GptChat;default:throw new uv(`Chat with type ${e} not implemented!`)}}}cv.ServiceName="ChatService",function(e){e.OtherError="OtherError",e.FatalError="FatalError",e.Error="Error",e.NoData="NoData"}(ev||(ev={}));class uv 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"}(tv||(tv={}));var lv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 dv{constructor(){this._connection=$v.Get(Ot.ServiceName),this._log=$v.Get(r.ServiceName)}GetServiceName(){return dv.ServiceName}IsSupportedAsync(){return lv(this,void 0,void 0,(function*(){let e=yield this._connection.SendAndWaitForResponseAsync(new hv,2e3,!0);return this._log.Debug(dv.ServiceName,`IsSupportedAsync: ${null==e?void 0:e.Status} resp: ${JSON.stringify(e)}`),null!=e&&e.Status==ce.WrongData}))}GetConnectedAppsAsync(){return lv(this,void 0,void 0,(function*(){let e=yield this._connection.SendAndWaitForResponseAsync(new pv,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 lv(this,void 0,void 0,(function*(){let t=yield this._connection.SendAndWaitForResponseAsync(new fv(e),2e3,!1);switch(null==t?void 0:t.Status){case ce.OK:return new ke(tv.Changed,"");case ce.WrongData:switch(t.Data){case"AccessTokenToShort":return new ke(tv.AccessTokenToShort,t.Data);case"AnotherAppWithGivenAccessTokenAlreadyExists":return new ke(tv.AnotherAppWithGivenAccessTokenAlreadyExists,t.Data);case"AppGuidDoesNotExists":return new ke(tv.AppGuidDoesNotExists,t.Data);case"AppNameToShort":return new ke(tv.AppNameToShort,t.Data);case"AppUrlToShort":return new ke(tv.AppUrlToShort,t.Data);case"AppUserIdToShort":return new ke(tv.AppUserIdToShort,t.Data);case"AppUserNameToShort":return new ke(tv.AppUserNameToShort,t.Data);default:return new ke(tv.UnkownError,t.Data)}case ce.ResourceDoesNotExists:case ce.ResourceIsNotAvailable:return new ke(tv.ResourceIsNotAvailable,t.Data);default:return new ke(tv.UnkownError,t.Data)}}))}RemoveConnectedAppAsync(e){return lv(this,void 0,void 0,(function*(){let t=yield this._connection.SendAndWaitForResponseAsync(new gv(e.Guid),2e3,!0);return null==t?void 0:t.Status}))}}dv.ServiceName="ConnectedAppsService";class hv extends ae{constructor(){super(),this.Resource="/applications/app/auth",this.Method=ue.Put,this.Data=""}}class pv extends ae{constructor(){super(),this.Resource="/applications/get",this.Method=ue.Get}}class gv extends ae{constructor(e){super(),this.Resource="/applications/app/delete",this.Method=ue.Delete,this.Data=e}}class fv extends ae{constructor(e){super(),this.Resource="/applications/app/upsert",this.Method=ue.Put,this.Data=e}}var vv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 mv{constructor(){try{const e=window.location.href,t=new URL(e),n=new URLSearchParams(t.search),r=n.get("mig_c_enc"),s=n.get("mig_controllers"),o=n.get("mig_lang");if(null!==r){const e=decodeURIComponent(this.b64DecodeUnicode(decodeURIComponent(r)));localStorage.setItem(mv.AppUserControllersKeyName,e)}null!==s&&localStorage.setItem(mv.AppUserControllersKeyName,decodeURIComponent(s)),null!==o&&localStorage.setItem(mv.AppSelectedLanguageKeyName,o)}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 mv.ServiceName}IsMigrationDataAvailableAsync(){return vv(this,void 0,void 0,(function*(){try{if(this.isIosNavtie()){var e=yield mv.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(mv.AppSelectedLanguageKeyName)||null!==localStorage.getItem(mv.AppUserControllersKeyName)}catch(e){return console.error(e),!1}}))}GetControllersDataAsync(){return vv(this,void 0,void 0,(function*(){try{if(this.isIosNavtie()){let e=yield mv.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(mv.AppUserControllersKeyName);return null!==e?JSON.parse(e):null}}catch(e){return console.error(e),null}}))}GetLanguageCodeAsync(){return vv(this,void 0,void 0,(function*(){try{if(this.isIosNavtie()){let e=yield mv.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(mv.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}}mv.AppSelectedLanguageKeyName="App___SelectedLanguage",mv.AppUserControllersKeyName="App___UserControllersListDatabase",mv.ServiceName="DataMigrationService";var yv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 wv{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(Ot.ServiceName),this._logger=$v.Get(r.ServiceName),this._storage=$v.Get(o.ServiceName),$v.Get(ze.ServiceName).OnUserLoggedInEvent().Subscribe((e=>yv(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(wv.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(wv.ServiceName,`Controller found in local network with ip address: ${r}`)):(this._isInLocalNetwork=!1,this._logger.Debug(wv.ServiceName,"Controller not found in local network."))}else this._logger.Error(wv.ServiceName,"Failed to get network configuration data.")}catch(e){this._logger.Error(wv.ServiceName,`Failed to get network configuration data - ${e}`)}}))))}FindControllerInLocalNetworkAsync(e){return yv(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(wv.ServiceName,"LocalIpAddress")}GetControllerHostName(e){return`ExalusTR7-${e}`}GetMdnsHostName(){return`ExalusTR7-${this.GetControllerHostName(this._connection.GetControllerSerialNumber())}.local`.toLowerCase()}GetControllerNetworkConfigurationAsync(){return yv(this,void 0,void 0,(function*(){var e;const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Sv,2e4,!1);return null==t||null==t.Status||null==t.Data?(this._logger.Error(wv.ServiceName,"Failed to get network configuration data - unknow error."),null):t.Data}))}GetServiceName(){return wv.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,s)=>{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("")}}))}}wv.ServiceName="FindControllerService";class Sv extends ae{constructor(){super(),this.Resource="/network/lan/",this.Method=ue.Get}}var Av,_v,Cv,Tv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Dv{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}Initialize(){this._initialized||(this._initialized=!0,this._controllerConfiguration=$v.Get(ot.ServiceName),this._cache=$v.Get(be.ServiceName),this._session=$v.Get(ze.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(Dv.ServiceName,`Connecting to the WebSockets server ${e}`),this.socket.onerror=t=>(this._log.Debug(Dv.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(Dv.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(Dv.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(Dv.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(Dv.ServiceName,`Received data frame: ${e.Status}`),this._dataReceivedEvent.Invoke(e)}catch(e){this._log.Error(Dv.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(Dv.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(Dv.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(Dv.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(Dv.ServiceName,"Packets logging enabled"),this._logPackets=!0}DisablePacketsLogging(){this._log.Debug(Dv.ServiceName,"Packets logging disabled"),this._logPackets=!1}SendData(e,t){var n;let r=JSON.stringify(e);return t&&this._log.Debug(Dv.ServiceName,`Sending data frame: ${r}`),this._isOpen?null===(n=this.socket)||void 0===n||n.send(r):this._log.Error(Dv.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 s;let o=0;const i=Date.now();if(!this.IsConnected())throw new Error("Connection is not established");return"/users/user/login"!==e.Resource&&(yield null===(s=this._session)||void 0===s?void 0:s.WaitForSessionCreationAsync()),new Promise(((s,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(Dv.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(o);const g=Date.now()-i;switch((r||!0===window.packets)&&this._log.Debug(Dv.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(),s(yield this.SendAndHandleResponseAsync(e,t,n,r))),null==l?void 0:l.Status){case ce.MultiDataResponseStart:case ce.MultiDataResponse:n(l),o=c();break;case ce.MultiDataResponseStop:case ce.FatalError:case ce.Error:n(l),this._dataReceivedEvent.Unsubscribe(u),s();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),o=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,s=!0){var o,i,a;if(e.Method===ue.Get&&n&&!(yield null===(o=this._controllerConfiguration)||void 0===o?void 0:o.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(((o,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;s&&this._log.Debug(Dv.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(),o(yield this.SendAndWaitForResponseWithRepeatAsync(e,t,n,!1,s))),o(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(Dv.ServiceName,t),i(new Error(t))}),t),!this.SendData(e,s)){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 Dv.ServiceName}}Dv.ServiceName="ExalusConnectionService";class kv{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 kv.ServiceName}}kv.ServiceName="PictureInPictureService",(Cv=Av||(Av={}))[Cv.Unknown=-1]="Unknown",Cv[Cv.Web=0]="Web",Cv[Cv.Android=1]="Android",Cv[Cv.iOS=2]="iOS";class Gv{constructor(){this.ClientName="",this.LavvaUserName="",this.ClientType=Av.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"}(_v||(_v={}));var bv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Nv{constructor(){this._connection=$v.Get(Ot.ServiceName),this._logger=$v.Get(r.ServiceName)}GetServiceName(){return Nv.ServiceName}RegisterNotificationsClientAsync(e){return bv(this,void 0,void 0,(function*(){var t;try{const n=new Ev({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 ke(_v.UnknownError,"Cannot register notifications client - unknown error!");switch(r.Status){case ce.WrongData:{const e=this.isValidErrorCode(r.Data)?r.Data:_v.UnknownError;return new ke(e,"Cannot register notifications client - wrong data!")}case ce.ResourceDoesNotExists:return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");case ce.OK:return"string"==typeof r.Data?r.Data:new ke(_v.NoData,"Cannot register notifications client - result status is OK, but no token guid presented in paylode, unknown error!");default:return new ke(_v.UnknownError,"Cannot register notifications client - unknown error!")}}catch(e){return new ke(_v.UnknownError,`Cannot register notifications client - error: ${e}`)}}))}UpdateNotificationsClientAsync(e,t){return bv(this,void 0,void 0,(function*(){var n;try{const r=new Iv({ClientName:t.ClientName,DeviceToken:t.DeviceToken,LavvaUserName:t.LavvaUserName,ClientType:this.getClientType(),NotificationsEnabledForToken:t.EnableNotifications,Guid:e}),s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(r,8e3,!1);if(null==s||null==s.Status)return new ke(_v.UnknownError,"Cannot update notifications client - unknown error!");switch(s.Status){case ce.WrongData:{const e=this.isValidErrorCode(s.Data)?s.Data:_v.UnknownError;return new ke(e,"Cannot update notifications client - wrong data!")}case ce.ResourceDoesNotExists:return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");case ce.OK:return"string"==typeof s.Data?s.Data==e?ce.OK:new ke(_v.UnknownError,`Cannot update notifications client - result status is OK, but token guid is different! request guid ${e}, response guid: ${s.Data}`):new ke(_v.NoData,"Cannot update notifications client - result status is OK, but no token guid presented in paylode, unknown error!");default:return new ke(_v.UnknownError,"Cannot update notifications client - unknown error!")}}catch(e){return this._logger.Error(`Cannot update notifications client - error: ${e}`),new ke(_v.UnknownError,`Cannot update notifications client - error: ${e}`)}}))}GetRegisteredNotificationsClientsMetadataAsync(e){return bv(this,void 0,void 0,(function*(){var e;try{const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Rv,8e3,!1);return null==t||null==t.Status?new ke(_v.UnknownError,"Cannot get notifications clients metadata - unknown error!"):t.Status==ce.ResourceDoesNotExists?new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!"):t.Status!=ce.OK?new ke(_v.UnknownError,`Cannot get notifications clients metadata - response status: ${t.Status}}`):null==t.Data?new ke(_v.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 ke(_v.UnknownError,`Cannot get notifications clients metadata - error: ${e}`)}}))}IsNotificationsEnabledForAllUserTokensAsync(e){return bv(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 ke(_v.UnknownError,"Cannot get notifications status - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:case ce.WrongData:if(null==n.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:_v.UnknownError;return new ke(e,"Cannot get notifications status!")}case ce.OK:return"boolean"==typeof n.Data?n.Data:new ke(_v.NoData,"Cannot get notifications status - result status is OK, but no data, or data type is wrong!");default:return new ke(_v.UnknownError,`Cannot get notifications - response code ${n.Status}}!`)}}catch(e){return this._logger.Error(`Cannot get notifications status - error: ${e}`),new ke(_v.UnknownError,`Cannot get notifications status - error: ${e}`)}}))}IsNotificationsEnabledAsync(e){return bv(this,void 0,void 0,(function*(){var t;try{const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Pv(e),8e3,!1);if(null==n||null==n.Status)return new ke(_v.UnknownError,"Cannot get notifications status - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:if(null==n.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:_v.UnknownError;return new ke(e,"Cannot get notifications status - resource not exists!")}case ce.OK:return"boolean"==typeof n.Data?n.Data:new ke(_v.NoData,"Cannot get notifications status - result status is OK, but no data, or data type is wrong!");default:return new ke(_v.UnknownError,`Cannot get notifications - response code ${n.Status}}!`)}}catch(e){return this._logger.Error(`Cannot get notifications status - error: ${e}`),new ke(_v.UnknownError,`Cannot get notifications status - error: ${e}`)}}))}EnableNotificationsAsync(e){return bv(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 Ov(n),8e3,!1);if(null==r||null==r.Status)return new ke(_v.UnknownError,"Cannot enable notifications - unknown error!");switch(r.Status){case ce.ResourceDoesNotExists:if(null==r.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(r.Data)?r.Data:_v.UnknownError;return new ke(e,"Cannot enable notifications - resource not exists!")}case ce.OK:return ce.OK;default:return new ke(_v.UnknownError,`Cannot enable notifications - response code ${r.Status}}!`)}}catch(e){return this._logger.Error(`Cannot enable notifications - error: ${e}`),new ke(_v.UnknownError,`Cannot enable notifications - error: ${e}`)}}))}EnableNotificationsForAllUserTokensAsync(e){return bv(this,void 0,void 0,(function*(){var t;try{const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Mv(e),8e3,!1);if(null==n||null==n.Status)return new ke(_v.UnknownError,"Cannot enable notifications - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:case ce.WrongData:if(null==n.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:_v.UnknownError;return new ke(e,"Cannot enable notifications!")}case ce.OK:return ce.OK;default:return new ke(_v.UnknownError,`Cannot enable notifications - response code ${n.Status}!`)}}catch(t){return this._logger.Error(`Cannot enable notifications for lavva user ${e} - error: ${t}`),new ke(_v.UnknownError,`Cannot disable notifications for lavva user ${e} - error: ${t}`)}}))}DisableNotificationsAsync(e){return bv(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 ke(_v.UnknownError,"Cannot disable notifications - unknown error!");switch(r.Status){case ce.ResourceDoesNotExists:if(null==r.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(r.Data)?r.Data:_v.UnknownError;return new ke(e,"Cannot disable notifications - resource not exists!")}case ce.OK:return ce.OK;default:return new ke(_v.UnknownError,`Cannot disable notifications - response code ${r.Status}!`)}}catch(e){return this._logger.Error(`Cannot disable notifications - error: ${e}`),new ke(_v.UnknownError,`Cannot disable notifications - error: ${e}`)}}))}DisableNotificationsForAllUserTokensAsync(e){return bv(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 ke(_v.UnknownError,"Cannot disable notifications - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:case ce.WrongData:if(null==n.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:_v.UnknownError;return new ke(e,"Cannot disable notifications!")}case ce.OK:return ce.OK;default:return new ke(_v.UnknownError,`Cannot disable notifications - response code ${n.Status}!`)}}catch(t){return this._logger.Error(`Cannot disable notifications for lavva user ${e} - error: ${t}`),new ke(_v.UnknownError,`Cannot disable notifications for lavva user ${e} - error: ${t}`)}}))}getClientType(){return this.isIos()?Av.iOS:navigator.userAgent.endsWith("LavvaAndroidNative")?Av.Android:Av.Web}isValidErrorCode(e){return Object.values(_v).includes(e)}isIos(){return null!=window.webkit&&null!=window.webkit.messageHandlers}}Nv.ServiceName="NotificationsService";class Ev extends ae{constructor(e){super(),this.Resource="/notifications/token",this.Method=ue.Post,this.Data=e}}class Iv extends ae{constructor(e){super(),this.Resource="/notifications/token",this.Method=ue.Put,this.Data=e}}class Rv extends ae{constructor(){super(),this.Resource="/notifications/tokens/metadata",this.Method=ue.Get}}class Pv extends ae{constructor(e){super(),this.Resource="/notifications/status",this.Method=ue.Get,this.Data={TokenIdentity:e}}}class Ov extends ae{constructor(e){super(),this.Resource="/notifications/enable",this.Method=ue.Post,this.Data=e}}class Uv extends ae{constructor(e){super(),this.Resource="/notifications/disable",this.Method=ue.Post,this.Data=e}}class Mv extends ae{constructor(e){super(),this.Resource="/notifications/enable/for/lavva/user",this.Method=ue.Post,this.Data=e}}class xv extends ae{constructor(e){super(),this.Resource="/notifications/disable/for/lavva/user",this.Method=ue.Post,this.Data=e}}class Fv extends ae{constructor(e){super(),this.Resource="/notifications/status/for/lavva/user",this.Method=ue.Get,this.Data=e}}class Lv{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 Lv.ServiceName}}Lv.ServiceName="AndroidLocationService";class Bv{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 Bv.ServiceName}}Bv.ServiceName="AndroidNotificationsService",ru(Map),ru(Set),(()=>{const e=String.prototype,t=Object.getOwnPropertyNames(li.prototype);for(const n of t)e[n]=e[n]??li.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 ii(oi.NoMatch)}if(0===this.length)throw new ii(oi.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 ii(oi.NoMatch)}if(0===this.length)throw new ii(oi.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 li((function*(){for(let t=e.length-1;t>=0;t--)yield e[t]}))}})(),ig(Array),ig(Int8Array),ig(Int16Array),ig(Int32Array),ig(Uint8Array),ig(Uint8ClampedArray),ig(Uint16Array),ig(Uint32Array),ig(Float32Array),ig(Float64Array);class $v{static Init(){if(s.IsInitialized)return;let e=s.Instance;try{e.RegisterService(new mv),e.RegisterService(new o),e.RegisterService(new Wg),e.RegisterService(new be),e.RegisterService(new ze),e.RegisterService(new kv),$v.IsRunningFromLocalNetwork()?(console.log("\n\nRunning from local network!\n\n"),e.RegisterService(new Dv)):e.RegisterService(new Ot),e.RegisterService(new Lv),e.RegisterService(new Bv),e.RegisterService(new ps),e.RegisterService(new ps),e.RegisterService(new Cs),e.RegisterService(new ot),e.RegisterService(new wv),e.RegisterService(new us),e.RegisterService(new et),e.RegisterService(new Ee),e.RegisterService(new Be),e.RegisterService(new Lo),e.RegisterService(new hg),e.RegisterService(new Js),e.RegisterService(new of),e.RegisterService(new dv),e.RegisterService(new Of),e.RegisterService(new Go),e.RegisterService(new cv),e.RegisterService(new Nv)}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 s.Instance.GetServiceAsync(e,t)}static GetWithTimeoutAsync(e,t){return s.Instance.GetServiceWithTimeoutAsync(e,t)}static Get(e){return s.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"),s=window.URL.createObjectURL(n);return r.href=s,r.download=e,r}}$v.WorksInContextOf="",$v.Version=1})();
1
+ (()=>{"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:()=>$v});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=s.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 s{constructor(){this._services={},this._serviceRegistrationEvent=new n}static get Instance(){return null!=s._instance||(s._instance=new s,this.Log=new r,this.Log.Warning("Initializing DependencyContainer"),s._instance.RegisterService(this.Log),this.IsInitialized=!0,window.services=this),s._instance}RegisterService(e){var t;null===(t=s.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=s.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=s.Log)||void 0===n||n.Debug("DependencyContainer",`Waiting for service availability [${e}] by GetServiceAsync<T>()`),this._services.hasOwnProperty(e)?(null===(r=s.Log)||void 0===r||r.Debug("DependencyContainer",`Got service [${e}] by GetServiceAsync<T>()`),Promise.resolve(this._services[e])):new Promise(((n,r)=>{var o=t=>{var r;(null==t?void 0:t.GetServiceName())===e&&(null===(r=s.Log)||void 0===r||r.Debug("DependencyContainer",`Got service [${e}] by GetServiceAsync<T>()`),this._serviceRegistrationEvent.Unsubscribe(o),n(t))},i=()=>{var n;null===(n=s.Log)||void 0===n||n.Debug("DependencyContainer",`Cancelled service [${e}] retrieval by GetServiceAsync<T>()`),this._serviceRegistrationEvent.Unsubscribe(o),null==t||t.CancellationEvent.Unsubscribe(i),r(new Error("Operation cancelled!"))};null==t||t.CancellationEvent.Subscribe(i),this._serviceRegistrationEvent.Subscribe(o)}))}GetServiceWithTimeoutAsync(e,t){var n,r;return null===(n=s.Log)||void 0===n||n.Debug("DependencyContainer",`Waiting for service[${e}] availability by GetServiceWithTimeoutAsync<T>()`),this._services.hasOwnProperty(e)?(null===(r=s.Log)||void 0===r||r.Debug("DependencyContainer",`Got service [${e}] by GetServiceWithTimeoutAsync<T>()`),Promise.resolve(this._services[e])):new Promise(((n,r)=>{let o=0,i=e=>{var t;(null==e?void 0:e.GetClassName())===e&&(null===(t=s.Log)||void 0===t||t.Debug("DependencyContainer",`Got service [${e}] by GetServiceWithTimeoutAsync<T>()`),window.clearTimeout(o),this._serviceRegistrationEvent.Unsubscribe(i),n(e))};o=window.setTimeout((()=>{var t;window.clearTimeout(o),this._serviceRegistrationEvent.Unsubscribe(i),null===(t=s.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)}))}}s.IsInitialized=!1;class o{GetServiceName(){return o.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=s.Log)||void 0===n||n.Error(o.ServiceName,`Exception has occurred while reading ${this.GetResourceName(e,t)}`),null}}}o.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,T;!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 D{constructor(){}log(e,t){}}D.instance=new D;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 G{static get isBrowser(){return!G.isNode&&"object"==typeof window&&"object"==typeof window.document}static get isWebWorker(){return!G.isNode&&"object"==typeof self&&"importScripts"in self}static get isReactNative(){return!G.isNode&&"object"==typeof window&&void 0===window.document}static get isNode(){return"undefined"!=typeof process&&process.release&&"node"===process.release.name}}function b(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 E(e,t,n,r,s,o){const i={},[a,c]=P();i[a]=c,e.log(S.Trace,`(${t} transport) sending data. ${b(s,o.logMessageContent)}.`);const u=N(s)?"arraybuffer":"text",l=await n.post(r,{content:s,headers:{...i,...o.headers},responseType:u,timeout:o.timeout,withCredentials:o.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 G.isNode&&(e="User-Agent"),[e,O("8.0.7",U(),G.isNode?"NodeJS":"Browser",M())]}function O(e,t,n,r){let s="Microsoft SignalR/";const o=e.split(".");return s+=`${o[0]}.${o[1]}`,s+=` (${e}; `,s+=t&&""!==t?`${t}; `:"Unknown OS; ",s+=`${n}`,s+=r?`; ${r}`:"; Unknown Runtime Version",s+=")",s}function U(){if(!G.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(G.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||G.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,s=null;if(e.timeout){const r=e.timeout;s=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{s&&clearTimeout(s),e.abortSignal&&(e.abortSignal.onabort=null)}if(!r.ok){const e=await L(r,"text");throw new h(e||r.statusText,r.status)}const o=L(r,e.responseType),i=await o;return new u(r.status,r.statusText,i)}getCookieString(e){let t="";return G.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 s=e.headers;s&&Object.keys(s).forEach((e=>{r.setRequestHeader(e,s[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 $ extends l{constructor(e){if(super(),"undefined"!=typeof fetch||G.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 W{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 W,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(),s={[n]:r,...this._options.headers},o={abortSignal:this._pollAbort.signal,headers:s,timeout:1e5,withCredentials:this._options.withCredentials};t===_.Binary&&(o.responseType="arraybuffer");const i=`${e}&_=${Date.now()}`;this._logger.log(S.Trace,`(LongPolling transport) polling: ${i}.`);const a=await this._httpClient.get(i,o);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,o)}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. ${b(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?E(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 s;try{await this._httpClient.delete(this._url,r)}catch(e){s=e}s?s instanceof h&&(404===s.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: ${s}`)):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 s,o=!1;if(t===_.Text){if(G.isBrowser||G.isWebWorker)s=new this._options.EventSource(e,{withCredentials:this._options.withCredentials});else{const t=this._httpClient.getCookieString(e),n={};n.Cookie=t;const[r,o]=P();n[r]=o,s=new this._options.EventSource(e,{withCredentials:this._options.withCredentials,headers:{...n,...this._options.headers}})}try{s.onmessage=e=>{if(this.onreceive)try{this._logger.log(S.Trace,`(SSE transport) data received. ${b(e.data,this._options.logMessageContent)}.`),this.onreceive(e.data)}catch(e){return void this._close(e)}},s.onerror=e=>{o?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."))},s.onopen=()=>{this._logger.log(S.Information,`SSE connected to ${this._url}`),this._eventSource=s,o=!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?E(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,s,o){this._logger=n,this._accessTokenFactory=t,this._logMessageContent=r,this._webSocketConstructor=s,this._httpClient=e,this.onreceive=null,this.onclose=null,this._headers=o}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,s)=>{let o;e=e.replace(/^http/,"ws");const i=this._httpClient.getCookieString(e);let a=!1;if(G.isNode||G.isReactNative){const t={},[r,s]=P();t[r]=s,n&&(t[c.Authorization]=`Bearer ${n}`),i&&(t[c.Cookie]=i),o=new this._webSocketConstructor(e,void 0,{headers:{...t,...this._headers}})}else n&&(e+=(e.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(n)}`);o||(o=new this._webSocketConstructor(e)),t===_.Binary&&(o.binaryType="arraybuffer"),o.onopen=t=>{this._logger.log(S.Information,`WebSocket connected to ${e}.`),this._webSocket=o,a=!0,r()},o.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}.`)},o.onmessage=e=>{if(this._logger.log(S.Trace,`(WebSockets transport) data received. ${b(e.data,this._logMessageContent)}.`),this.onreceive)try{this.onreceive(e.data)}catch(e){return void this._close(e)}},o.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.",s(new Error(t))}}}))}send(e){return this._webSocket&&this._webSocket.readyState===this._webSocketConstructor.OPEN?(this._logger.log(S.Trace,`(WebSockets transport) sending data. ${b(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?D.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,s=null;if(G.isNode){const e=require;r=e("ws"),s=e("eventsource")}G.isNode||"undefined"==typeof WebSocket||t.WebSocket?G.isNode&&!t.WebSocket&&r&&(t.WebSocket=r):t.WebSocket=WebSocket,G.isNode||"undefined"==typeof EventSource||t.EventSource?G.isNode&&!t.EventSource&&void 0!==s&&(t.EventSource=s):t.EventSource=EventSource,this._httpClient=new d(t.httpClient||new $(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 s=this._resolveNegotiateUrl(e);this._logger.log(S.Debug,`Sending negotiation request: ${s}.`);try{const e=await this._httpClient.post(s,{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 s=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(s,r),void(this.connectionId=n.connectionId);const o=[],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)o.push(`${n.transport} failed:`),o.push(i);else if(this._isITransport(i)){if(this.transport=i,!a){try{a=await this._getNegotiationResponse(e)}catch(e){return Promise.reject(e)}s=this._createConnectUrl(e,a.connectionToken)}try{return await this._startTransport(s,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,o.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 o.length>0?Promise.reject(new w(`Unable to connect to the server with any of the available transports. ${o.join(" ")}`,o)):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 s=A[e.transport];if(null==s)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,s))return this._logger.log(S.Debug,`Skipping transport '${A[s]}' because it was disabled by the client.`),new v(`'${A[s]}' is disabled by the client.`,s);if(!(e.transferFormats.map((e=>_[e])).indexOf(n)>=0))return this._logger.log(S.Debug,`Skipping transport '${A[s]}' because it does not support the requested transfer format '${_[n]}'.`),new Error(`'${A[s]}' does not support ${_[n]}.`);if(s===A.WebSockets&&!this._options.WebSocket||s===A.ServerSentEvents&&!this._options.EventSource)return this._logger.log(S.Debug,`Skipping transport '${A[s]}' because it is not supported in your environment.'`),new f(`'${A[s]}' is not supported in your environment.`,s);this._logger.log(S.Debug,`Selecting transport '${A[s]}'.`);try{return this.features.reconnect=s===A.WebSockets?r:void 0,this._constructTransport(s)}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(!G.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 Y{writeHandshakeRequest(e){return J.write(JSON.stringify(e))}parseHandshakeResponse(e){let t,n;if(N(e)){const r=new Uint8Array(e),s=r.indexOf(J.RecordSeparatorCode);if(-1===s)throw new Error("Message is incomplete.");const o=s+1;t=String.fromCharCode.apply(null,Array.prototype.slice.call(r.slice(0,o))),n=r.byteLength>o?r.slice(o).buffer:null}else{const r=e,s=r.indexOf(J.RecordSeparator);if(-1===s)throw new Error("Message is incomplete.");const o=s+1;t=r.substring(0,o),n=r.length>o?r.substring(o):null}const r=J.parse(t),s=JSON.parse(r[0]);if(s.type)throw new Error("Expected a handshake response from the server.");return[n,s]}}!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 X{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"}(T||(T={}));class ee{static create(e,t,n,r,s,o,i){return new ee(e,t,n,r,s,o,i)}constructor(e,t,n,r,s,o,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!=s?s:3e4,this.keepAliveIntervalInMilliseconds=null!=o?o:15e3,this._statefulReconnectBufferSize=null!=i?i:1e5,this._logger=t,this._protocol=n,this.connection=e,this._reconnectPolicy=r,this._handshakeProtocol=new Y,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=T.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!==T.Disconnected&&this._connectionState!==T.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!==T.Disconnected)return Promise.reject(new Error("Cannot start a HubConnection that is not in the 'Disconnected' state."));this._connectionState=T.Connecting,this._logger.log(S.Debug,"Starting HubConnection.");try{await this._startInternal(),G.isBrowser&&window.document.addEventListener("freeze",this._freezeEventListener),this._connectionState=T.Connected,this._connectionStarted=!0,this._logger.log(S.Debug,"HubConnection connected successfully.")}catch(e){return this._connectionState=T.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===T.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===T.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=T.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===T.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),s=this._createStreamInvocation(e,t,r);let o;const i=new X;return i.cancelCallback=()=>{const e=this._createCancelInvocation(s.invocationId);return delete this._callbacks[s.invocationId],o.then((()=>this._sendWithProtocol(e)))},this._callbacks[s.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))},o=this._sendWithProtocol(s).catch((e=>{i.error(e),delete this._callbacks[s.invocationId]})),this._launchStreams(n,o),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),s=this._sendWithProtocol(this._createInvocation(e,t,!0,r));return this._launchStreams(n,s),s}invoke(e,...t){const[n,r]=this._replaceStreamingParams(t),s=this._createInvocation(e,t,!1,r);return new Promise(((e,t)=>{this._callbacks[s.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(s).catch((e=>{t(e),delete this._callbacks[s.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===T.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(),s=!!e.invocationId;let o,i,a;for(const n of r)try{const r=o;o=await n.apply(this,e.arguments),s&&o&&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):s?(i?a=this._createCompletionMessage(e.invocationId,`${i}`,null):void 0!==o?a=this._createCompletionMessage(e.invocationId,null,o):(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)):o&&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===T.Disconnecting?this._completeClose(e):this._connectionState===T.Connected&&this._reconnectPolicy?this._reconnect(e):this._connectionState===T.Connected&&this._completeClose(e)}_completeClose(e){if(this._connectionStarted){this._connectionState=T.Disconnected,this._connectionStarted=!1,this._messageBuffer&&(this._messageBuffer._dispose(null!=e?e:new Error("Connection closed.")),this._messageBuffer=void 0),G.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."),s=this._getNextRetryDelay(n++,0,r);if(null===s)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=T.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!==T.Reconnecting)return void this._logger.log(S.Debug,"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.")}for(;null!==s;){if(this._logger.log(S.Information,`Reconnect attempt number ${n} will start in ${s} ms.`),await new Promise((e=>{this._reconnectDelayHandle=setTimeout(e,s)})),this._reconnectDelayHandle=void 0,this._connectionState!==T.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=T.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!==T.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===T.Disconnecting&&this._completeClose());r=e instanceof Error?e:new Error(e.toString()),s=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 s=e[r];if(this._isObservable(s)){const o=this._invocationId;this._invocationId++,t[o]=s,n.push(o.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=D.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||D.instance,this.protocol||new te,this.reconnectPolicy,this._serverTimeoutInMilliseconds,this._keepAliveIntervalInMilliseconds,this._statefulReconnectBufferSize)}}class se{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 s(e,t,n,s,o,i){return r(function(e,t){return e<<t|e>>>32-t}(r(r(t,e),r(s,i)),o),n)}function o(e,t,n,r,o,i,a){return s(t&n|~t&r,e,t,o,i,a)}function i(e,t,n,r,o,i,a){return s(t&r|n&~r,e,t,o,i,a)}function a(e,t,n,r,o,i,a){return s(t^n^r,e,t,o,i,a)}function c(e,t,n,r,o,i,a){return s(n^(t|~r),e,t,o,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=o(f,v,m,y,g[u+0],7,-680876936),y=o(y,f,v,m,g[u+1],12,-389564586),m=o(m,y,f,v,g[u+2],17,606105819),v=o(v,m,y,f,g[u+3],22,-1044525330),f=o(f,v,m,y,g[u+4],7,-176418897),y=o(y,f,v,m,g[u+5],12,1200080426),m=o(m,y,f,v,g[u+6],17,-1473231341),v=o(v,m,y,f,g[u+7],22,-45705983),f=o(f,v,m,y,g[u+8],7,1770035416),y=o(y,f,v,m,g[u+9],12,-1958414417),m=o(m,y,f,v,g[u+10],17,-42063),v=o(v,m,y,f,g[u+11],22,-1990404162),f=o(f,v,m,y,g[u+12],7,1804603682),y=o(y,f,v,m,g[u+13],12,-40341101),m=o(m,y,f,v,g[u+14],17,-1502002290),v=o(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 oe{static Delay(e){return new Promise((t=>setTimeout(t,e)))}}function ie(e){return new Map(Object.entries(e))}class ae{constructor(){this.TransactionId=se.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 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 De{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 ke{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}}class be{constructor(){this._log=$v.Get(r.ServiceName),be._localStorageService=$v.Get(o.ServiceName)}GetServiceName(){return be.ServiceName}GetResourceName(e){return`${e.Resource}_${e.Method}`}Cache(e){var t;e.Status===ce.OK&&(this._log.Debug(be.ServiceName,`Caching request: ${e.Resource} ${e.Method}`),null===(t=be._localStorageService)||void 0===t||t.Save(this.GetServiceName(),this.GetResourceName(e),e))}GetCache(e){var t;let n=null===(t=be._localStorageService)||void 0===t?void 0:t.Read(this.GetServiceName(),this.GetResourceName(e));return null!=n&&this._log.Debug(be.ServiceName,`Got request response from cache: ${e.Resource} ${e.Method}`),n}ClearCache(){var e;null===(e=be._localStorageService)||void 0===e||e.DropStorage(this.GetServiceName()),this._log.Debug(be.ServiceName,`Clearing cache for ${this.GetServiceName()}`)}Remove(e){var t;null===(t=be._localStorageService)||void 0===t||t.Remove(this.GetServiceName(),this.GetResourceName(e)),this._log.Debug(be.ServiceName,`Clearing cache for cache: ${e.Resource} ${e.Method}`)}}be._localStorageService=null,be.ServiceName="WebApiCacheService";var Ne=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Ee{constructor(){this._imageExistsCaseNumber=0,this._connection=$v.Get(Ot.ServiceName),this._logger=$v.Get(r.ServiceName)}GetServiceName(){return Ee.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(Ee.ServiceName,"Cannot add picture - Base64Imgae size exceeded."),ce.WrongData;let r=new Image;const s=new Promise(((t,n)=>{r.src=e.Base64Image,r.onload=function(){t(!0)},setTimeout((()=>t(!1)),5e3)}));if(!(yield s))return this._logger.Error(Ee.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(Ee.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(Ee.ServiceName,"Cannot add picture - Guid must be empty."),ce.WrongData;const o=new Re;o.Guid=se.GenerateUUID(),o.DateTime=(new Date).toISOString(),o.ImageType=e.ImageType,o.OwnerGuid=`${e.OwnerGuid}_${e.OwnerIdentity}`,o.Base64Image=e.Base64Image;const i=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Oe(o.Guid),8e3,!1);if(null==i||null==i.Status)return this._logger.Error(Ee.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(o),8e3,!1);return null==e||null==e.Status?(this._logger.Error(Ee.ServiceName,"Cannot add picture - unknown error!"),ce.UnknownError):e.Status}return i.Status==ce.OK?(this._logger.Warning(Ee.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(Ee.ServiceName,"Cannot add picture - cannot get current picture status."),ce.Error)}catch(e){return this._logger.Error(Ee.ServiceName,`Cannot add picture! ${e}`),ce.FatalError}}))}EditPictureAsync(e){return Ne(this,void 0,void 0,(function*(){var t,n;try{if(""==e.Guid||null==e.Guid)return this._logger.Error(Ee.ServiceName,"Cannot edit picture - guid is empty."),ce.WrongData;if(e.Base64Image.length*(3/4)>=512e3)return this._logger.Error(Ee.ServiceName,"Cannot edit picture - Base64Imgae size exceeded."),ce.WrongData;let r=new Image;const s=new Promise(((t,n)=>{r.src=e.Base64Image,r.onload=function(){t(!0)},setTimeout((()=>t(!1)),5e3)}));if(!(yield s))return this._logger.Error(Ee.ServiceName,"Cannot edit 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(Ee.ServiceName,"Cannot edit picture - cannot read width/height of image - ensure that given base64 string is an image!"),ce.WrongData;const o=new Re;o.DateTime=(new Date).toISOString(),o.ImageType=e.ImageType,o.Base64Image=e.Base64Image,o.Guid=e.Guid,e.Guid.includes("profilePicture")||e.Guid.includes("devices_group")?o.OwnerGuid=e.OwnerGuid:o.OwnerGuid=`${e.OwnerGuid}_${e.OwnerIdentity}`;const i=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Oe(o.Guid),8e3,!1);if($v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null==i||null==i.Status)return this._logger.Error(Ee.ServiceName,"Cannot edit picture - unknown error!"),ce.UnknownError;if(i.Status==ce.ResourceDoesNotExists)return this._logger.Error(Ee.ServiceName,"Cannot edit picture - picture not exists."),ce.OperationNotPermitted;if(i.Status==ce.OK){const e=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new xe(o),8e3,!1);return $v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null==e||null==e.Status?(this._logger.Error(Ee.ServiceName,"Cannot edit picture - unknown error!"),ce.UnknownError):e.Status}return this._logger.Error(Ee.ServiceName,"Cannot edit picture - cannot get current picture status."),ce.Error}catch(e){return this._logger.Error(Ee.ServiceName,`Cannot edit picture! ${e}`),ce.FatalError}}))}DeletePictureAsync(e){return Ne(this,void 0,void 0,(function*(){var t;try{if(""==e.Guid||null==e.Guid)return this._logger.Error(Ee.ServiceName,"Cannot delete picture - guid is empty."),ce.WrongData;const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Fe(e.Guid),8e3,!1);return $v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null==n||null==n.Status?(this._logger.Error(Ee.ServiceName,"Cannot edit picture - unknown error!"),ce.UnknownError):n.Status}catch(e){return this._logger.Error(Ee.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(Ee.ServiceName,"Cannot get pictures info - unknown error!"),new ke(ce.UnknownError,"NoDataInResult")):t.Status!=ce.OK?(this._logger.Error(Ee.ServiceName,`Cannot get pictures info - controler responded with status ${t.Status}.`),new ke(t.Status,"UnknownReason")):null==t.Data?(this._logger.Error(Ee.ServiceName,"Cannot get pictures info - controler responded with OK, but no data in result.}."),new ke(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(Ee.ServiceName,`Cannot get picture info! ${e}`),new ke(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(Ee.ServiceName,"Cannot get picture - unknown error!"),new ke(ce.UnknownError,"NoDataInResult");switch(n.Status){case ce.ResourceDoesNotExists:return new ke(ce.ResourceDoesNotExists,"PictureNotFound");case ce.OK:if(null==n.Data)return new ke(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 ke(n.Status,"UnknownReason")}}catch(e){return this._logger.Error(Ee.ServiceName,`Cannot get picture! ${e}`),new ke(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(Ee.ServiceName,"Cannot get pictures - unknown error!"),new ke(ce.UnknownError,"NoDataInResult")):t.Status!=ce.OK?(this._logger.Error(Ee.ServiceName,`Cannot get pictures - controler responded with status ${t.Status}.`),new ke(t.Status,"UnknownReason")):null==t.Data?(this._logger.Error(Ee.ServiceName,"Cannot get pictures - controler responded with OK, but no data in result.}."),new ke(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(Ee.ServiceName,`Cannot get pictures! ${e}`),new ke(ce.FatalError,"ExceptionOccurred")}}))}}Ee.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}}var Le=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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._connection=null,this._connection=$v.Get(Ot.ServiceName),this._pictureService=$v.Get(Ee.ServiceName),this._sessionService=$v.Get(ze.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 Be.ServiceName}GetUsersAsync(){return Le(this,void 0,void 0,(function*(){var e,t;const n=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Ve,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 Ke;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=s.Log)||void 0===t||t.Debug(Be.ServiceName,`Failed to retrieve users, error: ${n.Status}`),new Error(`Failed to retrieve users, error: ${n.Status}`)}))}GetUserAsync(e){return Le(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=s.Log)||void 0===n||n.Debug(Be.ServiceName,`Failed to retrieve user, error: ${r.Status}`),Promise.resolve(null);const o=new Ke;return o.AccessLevel=r.Data.AccessLevel,o.Email=r.Data.Email,o.Gender=r.Data.Gender,o.Guid=r.Data.Guid,o.IsAccountOnline=r.Data.IsAccountOnline,o.Name=r.Data.Name,o.IsActive=r.Data.IsActive,o.IsBanned=r.Data.IsBanned,o.Phone=r.Data.Phone,o.Surname=r.Data.Surname,o}))}CreateUserAsync(e,t){return Le(this,void 0,void 0,(function*(){var n;if(null!=e.Guid&&""!=e.Guid)return new ke(ce.WrongData,"GuidMustBeEmpty");const r=new We;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 s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new qe(r),2e4,!1);return $v.Get(be.ServiceName).ClearCache(),null==s||null==s.Status?new ke(ce.FatalError,"UnknownError"):(null==s.Data&&(s.Data=""),new ke(s.Status,s.Data))}))}UpdateUserAsync(e){return Le(this,void 0,void 0,(function*(){var t;if(null==e.Guid||""==e.Guid)return new ke(ce.WrongData,"GuidCannotBeEmpty");const n=new We;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 qe(n),2e4,!1);return $v.Get(be.ServiceName).ClearCache(),null==r||null==r.Status?new ke(ce.FatalError,"UnknownError"):(null==r.Data&&(r.Data=""),new ke(r.Status,r.Data))}))}ChangePasswordAsync(e,t){return Le(this,void 0,void 0,(function*(){var n;if(null==e.Guid||""==e.Guid)return new ke(ce.WrongData,"GuidCannotBeEmpty");const r=yield this.GetUserAsync(e.Guid);if(null==r)return new ke(ce.ResourceIsNotAvailable,"CannotGetUser");const s=new We;s.Guid=e.Guid,s.Password=t,s.AccessLevel=r.AccessLevel,s.Email=r.Email;const o=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new qe(s),2e4,!1);return null==o||null==o.Status?new ke(ce.FatalError,"UnknownError"):(null==o.Data&&(o.Data=""),new ke(o.Status,o.Data))}))}DeleteUserAsync(e){return Le(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 He(e),2e4,!1);return $v.Get(be.ServiceName).ClearCache(),null==r||null==r.Status?ce.FatalError:(r.Status!=ce.OK&&(null===(n=s.Log)||void 0===n||n.Debug(Be.ServiceName,`Failed to delete user, error: ${r.Status}`)),r.Status)}))}GetUserProfilePictureAsync(e){return Le(this,void 0,void 0,(function*(){if(null==e.Guid||""==e.Guid)return new ke(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(be.ServiceName).ClearCache(),null!=e.Type?t:e}return new ke(ce.ResourceDoesNotExists,"PictureNotFound")}))}SetUserProfilePictureAsync(e,t){return Le(this,void 0,void 0,(function*(){if(null==e.Guid||""==e.Guid)return new ke(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(be.ServiceName).ClearCache(),r.Type==ce.ResourceDoesNotExists){const e=yield this._pictureService.AddPictureAsync(n);return e===ce.OK?new ke(ce.OK,"PictureSet"):new ke(e,"PictureServiceError")}if(null!=r.Type)return new ke(ce.Error,"ErrorWhenTryingToCheckIfCurrentProfilePictureExists");{n.Guid=r.Guid,n.OwnerGuid=r.OwnerGuid;const e=yield this._pictureService.EditPictureAsync(n);return e===ce.OK?new ke(ce.OK,"PictureSet"):new ke(e,"PictureServiceError")}}))}}Be.ServiceName="UsersService";class $e extends ae{constructor(e){super(),this.Resource="/users/user",this.Method=ue.Get,this.Data=e}}class We{constructor(){this.Guid="",this.Name="",this.Surname="",this.Email="",this.Password="",this.Phone="",this.Gender=fe.Unknown,this.AccessLevel=ge.Any}}class qe extends ae{constructor(e){super(),this.Resource="/users/user",this.Method=ue.Put,this.Data=e}}class Ve extends ae{constructor(){super(),this.Resource="/users/list",this.Method=ue.Get}}class He extends ae{constructor(e){super(),this.Resource="/users/user",this.Method=ue.Delete,this.Data=e}}class Ke{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(Be.ServiceName).GetUserProfilePictureAsync({Guid:this._guid})}SetUserProfilePictureAsync(e){return $v.Get(Be.ServiceName).SetUserProfilePictureAsync({Guid:this._guid},e)}}var je=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 ze{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 je(this,void 0,void 0,(function*(){var e;null===(e=s.Log)||void 0===e||e.Debug(ze.ServiceName,"Creating _loginTaskCompletionSource"),this._loginTaskCompletionSource=new Promise((e=>{this.OnUserLoggedInEvent().Subscribe((t=>{var n;null===(n=s.Log)||void 0===n||n.Debug(ze.ServiceName,`Logged in as ${t.Name}, completing CreateSessionCompletionSourceAsync()`),e()}))}))}))}RestoreSessionAsync(){return je(this,void 0,void 0,(function*(){var e;null===(e=s.Log)||void 0===e||e.Debug(ze.ServiceName,`Creating RestoreSessionAsync ${this._email} ${this._password}`),void 0!==this._user&&null!==this._user&&(yield this.UserLogInAsync(this._email,this._password))}))}WaitForSessionCreationAsync(){return je(this,void 0,void 0,(function*(){return this._loginTaskCompletionSource}))}OnUserLoggedInEvent(){return this._onUserLoggedInEvent}OnUserLoggedOutEvent(){return this._onUserLoggedOutEvent}get User(){return this._user}UserLogOutAsync(){return je(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(Ot.ServiceName).SendAndWaitForResponseAsync(n,2e4,!1)).Status==ce.OK?(this._onUserLoggedOutEvent.Invoke(this._user),null===(e=s.Log)||void 0===e||e.Debug(ze.ServiceName,"User has been logged out.")):null===(t=s.Log)||void 0===t||t.Debug(ze.ServiceName,"Failed to logout user!")}))}OnConnectionStateChanged(e){return je(this,void 0,void 0,(function*(){switch(e){case he.Disconnected:case he.Failed:break;case he.Connected:$v.Get(ze.ServiceName).RestoreSessionAsync()}}))}AuthorizeAppAsync(e){return je(this,void 0,void 0,(function*(){var t,n,r,o,i=$v.Get(Ot.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 Ke;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(Ot.ServiceName).SubscribeTo("/info/users/user/loggedOut",(e=>je(this,void 0,void 0,(function*(){var t,n;null===(t=s.Log)||void 0===t||t.Debug(ze.ServiceName,`User logged out: ${JSON.stringify(e.Data)}`),null===(n=this._onUserLoggedOutEvent)||void 0===n||n.Invoke(this._user)}))))),null===(t=s.Log)||void 0===t||t.Debug(ze.ServiceName,`Did logging in succeded?: ${a.Status==ce.OK}`),this._onUserLoggedInEvent.Invoke(this._user),c}return a.Status===ce.OperationNotPermitted?(null===(n=s.Log)||void 0===n||n.Debug(ze.ServiceName,`App login response: ${a.Data}`),me.AuthDisabled):a.Status===ce.ResourceDoesNotExists?(null===(r=s.Log)||void 0===r||r.Debug(ze.ServiceName,`App login response: ${a.Data}`),me.MethodNotSupported):(null===(o=s.Log)||void 0===o||o.Debug(ze.ServiceName,`App login response: ${a.Data}`),me.WrongAuthData)}))}UserLogInAsync(e,t){return je(this,void 0,void 0,(function*(){var n,r,o=$v.Get(Ot.ServiceName);const i=yield o.SendAndWaitForResponseAsync(new Xe(e,t),2e4,!1);if(i.Status==ce.OK&&null!=i.Data){this._email=e,this._password=t;var a=new Ke;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,o.OnConnectionStateChangedEvent().Subscribe(this.OnConnectionStateChanged),$v.Get(Ot.ServiceName).SubscribeTo("/info/users/user/loggedOut",(e=>je(this,void 0,void 0,(function*(){var t,n;null===(t=s.Log)||void 0===t||t.Debug(ze.ServiceName,`User logged out: ${JSON.stringify(e.Data)}`),null===(n=this._onUserLoggedOutEvent)||void 0===n||n.Invoke(this._user)}))))),null===(n=s.Log)||void 0===n||n.Debug(ze.ServiceName,`Did logging in succeded?: ${i.Status==ce.OK}`),this._onUserLoggedInEvent.Invoke(this._user),a}return null===(r=s.Log)||void 0===r||r.Debug(ze.ServiceName,`User login response: ${i.Data}`),me.WrongAuthData}))}GetServiceName(){return ze.ServiceName}}ze.ServiceName="SessionService";class Je{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 Xe extends ae{constructor(e,t){super(),this.Data=new Je(e,t),this.Resource="/users/user/login",this.Method=ue.Put}}class Qe{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 Ze=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 et{constructor(){this._extensionInfoCache=new Map,this._protocolInfoCache=new Map,this._isExtensionInfoInitialized=!1,this._semaphore=new Qe(1)}GetServiceName(){return et.ServiceName}GetExtensionsInfoAsync(e){return Ze(this,arguments,void 0,(function*(e,t=!1){$v.Get(r.ServiceName).Debug(et.ServiceName,`Getting ExtensionsInfo, data loaded from cache: ${!t}`);var n=yield this._semaphore.AcquireAsync();if(this._isExtensionInfoInitialized&&!t||(yield this.GetExtensionInfoFromControllerAsync()),n.Release(),0==[...this._extensionInfoCache.values()].length)return[];if(null!=e){const t=this._extensionInfoCache.get(e);if(null==t)throw new rt("Cannot get ExtensionsInfo, extension not found.");return[t]}return[...this._extensionInfoCache.values()]}))}GetProtocolInfoAsync(e){return Ze(this,arguments,void 0,(function*(e,t=!1,n=!1){if($v.Get(r.ServiceName).Debug(et.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 rt("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 rt("Cannot get ProtocolInfo, extension not found.");return[t]}return[...this._protocolInfoCache.values()]}))}GetExtensionInfoFromControllerAsync(){return Ze(this,void 0,void 0,(function*(){const e=new tt,t=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(e,16e3,!1);if(null==t||null==t.Status)throw new rt("Cannot get ExtensionsInfo from controller, controller response does not contain data!");if(t.Status!=ce.OK)throw new rt(`Cannot get ExtensionsInfo from controller! Response status: ${t.Status}`);if(null==t.Data)throw new rt("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 Ze(this,void 0,void 0,(function*(){const e=new nt,t=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(e,16e3,!1);if(null==t||null==t.Status)throw new rt("Cannot get ProtocolInfo from controller, controller response does not contain data!");switch(t.Status){case ce.OK:if(null==t.Data)throw new rt("Cannot get ProtocolInfo from controller, controller response does not contain data!");t.Data.forEach((e=>{this._protocolInfoCache.set(e.PublicGuid,e)}));break;case ce.ResourceDoesNotExists:$v.Get(r.ServiceName).Debug(et.ServiceName,"Cannot get ProtocolInfo from controller, controller software does not implement this yet, update controller to the newest software!");break;default:throw new rt(`Cannot get ProtocolInfo from controller! Response status: ${t.Status}`)}}))}}et.ServiceName="StatisticsInfoService";class tt extends ae{constructor(){super(),this.Resource="/controller/extensions/",this.Method=ue.Get}}class nt extends ae{constructor(){super(),this.Resource="/controller/protocols/",this.Method=ue.Get}}class rt 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(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 ot{GetServiceName(){return ot.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(ze.ServiceName).OnUserLoggedInEvent().Subscribe((t=>st(this,void 0,void 0,(function*(){this._didConfigurationChange=yield this.CheckIfConfigurationHasChangedAsync(),this._didConfigurationChange&&$v.Get(be.ServiceName).ClearCache(),e()}))))})),this._connection=$v.Get(Ot.ServiceName),this._session=$v.Get(ze.ServiceName),this._localStorage=$v.Get(o.ServiceName),this._connection.SubscribeTo("/info/configuration/mode/entry",(e=>{$v.Get(be.ServiceName).ClearCache(),this._appEnteredConfigurationMode||this._onEnteredConfigurationEvent.Invoke()})),this._connection.SubscribeTo("/info/configuration/mode/exit",(e=>{$v.Get(be.ServiceName).ClearCache(),this._appEnteredConfigurationMode||this._onExitedConfigurationEvent.Invoke()}))}ImportControllerConfigurationAsync(e){return st(this,void 0,void 0,(function*(){var t,n,r;let s=yield e.text(),o=this.SplitStringBySize(s),i=new it("");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 o){let t=new it(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 s=0;for(;s<e.length;){let o=e.slice(s,s+n);for(;new Blob([o]).size>t;)o=o.slice(0,-1);r.push(o),s+=o.length}return r}GetControllerSystemTimeAsync(){return st(this,void 0,void 0,(function*(){var e;try{var t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new gt,8e3,!1);return null==t||null==t.Status?ce.Error:t.Status!=ce.OK?t.Status:null==t.Data?ce.ResourceIsNotAvailable:new Date(t.Data)}catch(e){return $v.Get(r.ServiceName).Error(ot.ServiceName,`Cannot get current controller time! ${e}`),ce.FatalError}}))}SetControllerSystemTimeAsync(e){return st(this,void 0,void 0,(function*(){var t;try{var n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new ft(e.toISOString()),8e3,!1);return null==n||null==n.Status?ce.Error:n.Status}catch(e){return $v.Get(r.ServiceName).Error(ot.ServiceName,`Cannot set current controller time! ${e}`),ce.FatalError}}))}StartNtpTimeSynchronizationAsync(){return st(this,void 0,void 0,(function*(){var e;try{var t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new vt,8e3,!1);return null==t||null==t.Status?ce.Error:t.Status}catch(e){return $v.Get(r.ServiceName).Error(ot.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(be.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=300,n=0,r=100/t,s=setInterval((()=>{n+=r,e(parseFloat(n.toPrecision(1)))}),1e3);return yield oe.Delay(1e3*t),$v.Get(be.ServiceName).ClearCache(),clearInterval(s),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(be.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=420,n=0,r=100/t,s=setInterval((()=>{n+=r,e(parseFloat(n.toPrecision(1)))}),1e3);return yield oe.Delay(1e3*t),$v.Get(be.ServiceName).ClearCache(),clearInterval(s),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(be.ServiceName).ClearCache();var r=null===(n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new ct,2e3,!1))||void 0===n?void 0:n.Status;if(r==ce.OK){let t=240,n=0,r=100/t,s=setInterval((()=>{n+=r,e(parseFloat(n.toPrecision(1)))}),1e3);return yield oe.Delay(1e3*t),$v.Get(be.ServiceName).ClearCache(),clearInterval(s),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(be.ServiceName).ClearCache(),yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new dt,2e4,!1)}))}ExitConfigurationModeAsync(){return st(this,void 0,void 0,(function*(){var e;this._appEnteredConfigurationMode=!0,$v.Get(be.ServiceName).ClearCache(),yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new ht,2e4,!1),$v.Get(be.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 pt,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(be.ServiceName).ClearCache(),!0)}))}CanExportOrImportControllerConfigurationAsync(){return st(this,void 0,void 0,(function*(){try{let e=yield $v.Get(et.ServiceName).GetExtensionsInfoAsync(),t=$v.Get(ze.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 at,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 ke(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"),s=n.getMinutes().toString().padStart(2,"0"),o=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}-${s}-${o}-${i}-${a}-config.cexp`}}ot.ServiceName="ControllerConfigurationService";class it extends ae{constructor(e){super(),this.Resource="/configuration/backup/import",this.Method=ue.Put,this.Data=e}}class at extends ae{constructor(){super(),this.Resource="/configuration/backup/export",this.Method=ue.Get}}class ct extends ae{constructor(){super(),this.Resource="/controller/restart",this.Method=ue.Post}}class ut extends ae{constructor(){super(),this.Resource="/controller/factory_reset",this.Method=ue.Post}}class lt extends ae{constructor(){super(),this.Resource="/controller/backups/restore/previous",this.Method=ue.Post}}class dt extends ae{constructor(){super(),this.Resource="/system/configuration/mode/entry",this.Method=ue.Put}}class ht extends ae{constructor(){super(),this.Resource="/system/configuration/mode/exit",this.Method=ue.Put}}class pt extends ae{constructor(){super(),this.Resource="/system/configuration/change/time",this.Method=ue.Get}}class gt extends ae{constructor(){super(),this.Resource="/system/time",this.Method=ue.Get}}class ft extends ae{constructor(e){super(),this.Resource="/system/time",this.Method=ue.Put,this.Data=e}}class vt extends ae{constructor(){super(),this.Resource="/system/time/ntp/update",this.Method=ue.Put}}var mt,yt,wt,St,At,_t,Ct,Tt,Dt,kt,Gt,bt,Nt,Et,It,Rt,Pt=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Ot{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._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 Ot.ServiceName}EnablePacketsLogging(){this._logPackets=!0}DisablePacketsLogging(){this._logPackets=!1}InitializeConnection(){if(this._controllerConfiguration=$v.Get(ot.ServiceName),this._cache=$v.Get(be.ServiceName),this._session=$v.Get(ze.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((()=>Pt(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 Pt(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(Ot.ServiceName,`Got server address: ${t}`),t):(this._log.Error(Ot.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(Ot.ServiceName,`Failed to get server address, status: ${e.status}`),null)}catch(e){return this._log.Error(Ot.ServiceName,e),null}}))}ConnectAsync(e){return Pt(this,void 0,void 0,(function*(){return this._connectedAtLeastOnce=!1,this._address=e,yield this.connectAsync()}))}AuthorizeAsync(e){return new Promise(((t,n)=>Pt(this,void 0,void 0,(function*(){var n;let r=0,s=e=>{window.clearTimeout(r),this._log.Debug(Ot.ServiceName,`Got authorization result: ${e}`),this._connectedAtLeastOnce=!0,t(e)};r=window.setTimeout((()=>{window.clearTimeout(r),this._authorizationReceivedEvent.Unsubscribe(s),t(!1)}),2e3),this._log.Debug(Ot.ServiceName,`Authorizing to cloud using: ${e.SerialNumber} PIN: ${e.PIN}`),this._authorizationReceivedEvent.Subscribe(s),yield null===(n=this._connection)||void 0===n?void 0:n.send("AuthorizeTo",e.SerialNumber,e.PIN)}))))}ConnectAndAuthorizeAsync(e){return Pt(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(Ot.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(Ot.ServiceName,"Server did not return packets broker address, trying to connect to known brokers.");for(let n of this._packetsBrokerServers){this._log.Warning(Ot.ServiceName,`Testing connection to ${n}`),this.SetDefaultPacketsBrokerAddress(n);try{yield this.DisconnectAsync()}catch(e){}this._log.Warning(Ot.ServiceName,`Connecting to server: ${n}`);let r=yield this.connectAsync();if(this._log.Warning(Ot.ServiceName,`Connection result: ${r}`),r==de.Connected){if(yield this.AuthorizeAsync(e))return t=de.Connected,this._connectedAtLeastOnce=!0,t;this._log.Warning(Ot.ServiceName,`Failed to authorize in ${n}`)}}return t}}))}swapBrokersAsync(){return Pt(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 Pt(this,void 0,void 0,(function*(){var e,t,n,r,s,o,i,a,c,u;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((()=>Pt(this,void 0,void 0,(function*(){var e,t;if(this._disconnectedOnPurpose?this._log.Info(Ot.ServiceName,"Connection closed on demand."):this._log.Error(Ot.ServiceName,"Connection closed"),$v.Get(ze.ServiceName).CreateSessionCompletionSourceAsync(),this.FireConnectionStateChanged(),(null===(e=this._connection)||void 0===e?void 0:e.state)===T.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(Ot.ServiceName,"Reconnected from onClose"),this.FireConnectionStateChanged()):de.FailedToConnect})))),null===(t=this._connection)||void 0===t||t.onreconnected((()=>Pt(this,void 0,void 0,(function*(){if(yield this.AuthorizeAsync(new Ce(this._serialId,this._PIN)))return this._log.Info(Ot.ServiceName,"Reconnected from onreconnected"),this.FireConnectionStateChanged()})))),null===(n=this._connection)||void 0===n||n.onreconnecting((()=>(this._log.Warning(Ot.ServiceName,"Reconnecting..."),this.FireConnectionStateChanged()))),yield null===(r=this._connection)||void 0===r?void 0:r.start(),null===(s=this._connection)||void 0===s||s.on("Pong",(()=>{this._log.Debug(Ot.ServiceName,"Pong received <-"),this._pongReceivedEvent.Invoke()})),null===(o=this._connection)||void 0===o||o.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)=>Pt(this,void 0,void 0,(function*(){e.startsWith("NotAuthorized:")?(this._log.Error(Ot.ServiceName,"Failed to authorize!"),yield this.AuthorizeAsync(new Ce(this._serialId,this._PIN))):(this._log.Error(Ot.ServiceName,`Server returned error: ${e} ${t}`),this._errorOccuredEvent.Invoke([e,t]))})))),null===(c=this._connection)||void 0===c||c.on("ControllerDisconnected",(e=>Pt(this,void 0,void 0,(function*(){this._serialId===e&&(this._log.Warning(Ot.ServiceName,`Controller disconnected: ${e}`),yield this.DisconnectAsync())}))));let l=this._dataReceivedEvent;return null===(u=this._connection)||void 0===u||u.on("Data",((e,t)=>{const n=JSON.parse(t);(this._logPackets||!0===window.packets)&&this._log.Debug(Ot.ServiceName,`Received data:\n${JSON.stringify(n,null,2)}`),l.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 T.Connected:return t.Invoke(he.Connected),de.Connected;case T.Connecting:return t.Invoke(he.Connecting),de.Connected;case T.Disconnected:if(this._connectedAtLeastOnce)return t.Invoke(he.Disconnected),de.FailedToConnect;break;case T.Disconnecting:if(this._connectedAtLeastOnce)return t.Invoke(he.Disconnecting),de.FailedToConnect;break;case T.Reconnecting:return t.Invoke(he.Reconnecting),de.FailedToConnect}return de.FailedToConnect}DisconnectAsync(){return Pt(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)===T.Connected}SendAndWaitForResponseAsync(e,t,n,r=!0){return this.SendAndWaitForResponseWithRepeatAsync(e,t,n,r)}SendAndWaitForResponseWithRepeatAsync(e,t,n){return Pt(this,arguments,void 0,(function*(e,t,n,r=!0,s=!0){var o,i,a;if(e.Method===ue.Get&&n&&!(yield null===(o=this._controllerConfiguration)||void 0===o?void 0:o.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(((o,i)=>Pt(this,void 0,void 0,(function*(){let a=i=>Pt(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;s&&this._log.Debug(Ot.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(),o(yield this.SendAndWaitForResponseWithRepeatAsync(e,t,n,!1,s))),o(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(Ot.ServiceName,t),i(new p(t))}),t),!(yield this.SendAsync(e,s))){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 Pt(this,arguments,void 0,(function*(e,t,n,r=!0){var s;let o=0;const i=Date.now();if(!this.IsConnected())throw new Error("Connection is not established");return"/users/user/login"!==e.Resource&&(yield null===(s=this._session)||void 0===s?void 0:s.WaitForSessionCreationAsync()),new Promise(((s,a)=>Pt(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(Ot.ServiceName,t),a(new p(t))}),t);let u=l=>Pt(this,void 0,void 0,(function*(){var d,h,p;if((null==l?void 0:l.TransactionId)==e.TransactionId){window.clearTimeout(o);const g=Date.now()-i;switch((r||!0===window.packets)&&this._log.Debug(Ot.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(),s(yield this.SendAndHandleResponseAsync(e,t,n,r))),null==l?void 0:l.Status){case ce.MultiDataResponseStart:case ce.MultiDataResponse:n(l),o=c();break;case ce.MultiDataResponseStop:case ce.FatalError:case ce.Error:n(l),this._dataReceivedEvent.Unsubscribe(u),s();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),o=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))}}))))}))}PingControllerAsync(){return Pt(this,void 0,void 0,(function*(){var e;if((null===(e=this._connection)||void 0===e?void 0:e.state)!==T.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(Ot.ServiceName,`Sent DataFrame ${e.Resource} ${e.Method} transaction id: ${e.TransactionId} data:\n${JSON.stringify(e,null,2)}`):t&&this._log.Debug(Ot.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(Ot.ServiceName,`${e}`),n(!1)}))}))}OnDataReceivedEvent(){return this._dataReceivedEvent}OnConnectionStateChangedEvent(){return this._connectionStateChangedEvent}OnErrorOccuredEvent(){return this._errorOccuredEvent}}Ot.ServiceName="ExalusConnectionService",function(e){e[e.NoTasksExecuting=0]="NoTasksExecuting",e[e.ExecutingTasks=1]="ExecutingTasks"}(mt||(mt={})),(bt=yt||(yt={}))[bt.Default=0]="Default",bt[bt.Monostable=1]="Monostable",bt[bt.Bistable=2]="Bistable",bt[bt.Gate=3]="Gate",bt[bt.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"}(wt||(wt={}));class Ut{constructor(){this._type=At.Unknown,this._interfaceType=""}get Type(){return this._type}get InterfaceType(){return this._interfaceType}set InterfaceType(e){this._interfaceType=e,this._type=e}}(Nt=St||(St={}))[Nt.Unknown=0]="Unknown",Nt[Nt.BlindMotor=1]="BlindMotor",Nt[Nt.DinModule=2]="DinModule",Nt[Nt.DinModuleWithAntenna=3]="DinModuleWithAntenna",Nt[Nt.Remote=4]="Remote",Nt[Nt.RemoteForBlinds=5]="RemoteForBlinds",Nt[Nt.RemoteForFacadeBlinds=6]="RemoteForFacadeBlinds",Nt[Nt.MovementSensor=7]="MovementSensor",Nt[Nt.TemperatureSensor=8]="TemperatureSensor",Nt[Nt.HumiditySensor=9]="HumiditySensor",Nt[Nt.DinPowerMeter=10]="DinPowerMeter",Nt[Nt.Intercom=11]="Intercom",Nt[Nt.SecurityCamera=12]="SecurityCamera",Nt[Nt.Multisensor=13]="Multisensor",Nt[Nt.FloodSensor=14]="FloodSensor",Nt[Nt.FlushMountedReceiver=15]="FlushMountedReceiver",Nt[Nt.FlushMountedBlindController=16]="FlushMountedBlindController",Nt[Nt.FlushMountedDimmer=17]="FlushMountedDimmer",Nt[Nt.FlushMountedRelay=18]="FlushMountedRelay",Nt[Nt.FlushMountedGateController=19]="FlushMountedGateController",Nt[Nt.WindSensor=20]="WindSensor",Nt[Nt.FlushMountedGateAndGatewayController=21]="FlushMountedGateAndGatewayController",Nt[Nt.AirPressureSensor=22]="AirPressureSensor",Nt[Nt.LightBrightnessSensor=23]="LightBrightnessSensor",Nt[Nt.ReedSensor=24]="ReedSensor",Nt[Nt.FlushMountedTransceiver=25]="FlushMountedTransceiver",Nt[Nt.FlushMountedRGBLightController=26]="FlushMountedRGBLightController",Nt[Nt.WallMountedThermoregulator=27]="WallMountedThermoregulator",Nt[Nt.ImpulseCounter=28]="ImpulseCounter",Nt[Nt.FlushMountedFacadeController=29]="FlushMountedFacadeController",Nt[Nt.WallMountedGateController=30]="WallMountedGateController",Nt[Nt.WallMountedRGBLightController=31]="WallMountedRGBLightController",Nt[Nt.WallMountedDimmer=32]="WallMountedDimmer",Nt[Nt.WallMountedRemote=33]="WallMountedRemote",Nt[Nt.DinRelay=34]="DinRelay",Nt[Nt.DinReceiver=35]="DinReceiver",Nt[Nt.DinBlindController=36]="DinBlindController",Nt[Nt.DinTransceiver=37]="DinTransceiver",Nt[Nt.SocketPlugIn=38]="SocketPlugIn",Nt[Nt.WallMountedRelay=39]="WallMountedRelay",Nt[Nt.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"}(At||(At={}));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}}!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"}(_t||(_t={})),(Rt=Ct||(Ct={}))[Rt.NotResponding=0]="NotResponding",Rt[Rt.Working=1]="Working",Rt[Rt.Broken=2]="Broken",Rt[Rt.FirmareUpgradeMode=3]="FirmareUpgradeMode",(It=Tt||(Tt={}))[It.TwoWay=1]="TwoWay",It[It.OneWay=2]="OneWay",It[It.ConditionalTwoWay=3]="ConditionalTwoWay",(Et=Dt||(Dt={}))[Et.Unknown=-1]="Unknown",Et[Et.Multipurpose=0]="Multipurpose",Et[Et.Controller=1]="Controller",Et[Et.Driver=2]="Driver",Et[Et.Receiver=3]="Receiver",Et[Et.Remote=4]="Remote",Et[Et.Sensor=5]="Sensor",Et[Et.Scene=6]="Scene";class xt{constructor(){this.DeviceGuid="",this.Channel=0,this.Status=mt.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"}(kt||(kt={})),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 Ft{constructor(){this.Device=null,this.Channel=0,this.Task=null,this.Result=Gt.Unknown}}var Lt,Bt,$t,Wt,qt,Vt,Ht,Kt,jt,zt,Jt,Yt,Xt,Qt,Zt,en,tn,nn,rn,sn,on,an,cn,un,ln,dn,hn,pn,gn,fn,vn;class mn{constructor(){this._type="",this._data=null,this._typeAsEnum=_t.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 s=0;for(r=Object.getOwnPropertySymbols(e);s<r.length;s++)t.indexOf(r[s])<0&&Object.prototype.propertyIsEnumerable.call(e,r[s])&&(n[r[s]]=e[r[s]])}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}}(vn=Lt||(Lt={}))[vn.Confident=0]="Confident",vn[vn.Unconfident=1]="Unconfident";class yn extends mn{constructor(e){super(),this.TypeAsEnum=_t.ChannelOnOffState,this.Type="ChannelOnOffState",this.Data=e.state}}class wn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=Bt.Unknown,this.Time=""}}!function(e){e[e.On=0]="On",e[e.Off=1]="Off",e[e.Unknown=2]="Unknown"}(Bt||(Bt={})),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 Sn extends mn{constructor(e){super(),this.TypeAsEnum=_t.OnlineCamera,this.Type="OnlineCameraState",this.Data=e.state}}class An extends mn{constructor(e){super(),this.TypeAsEnum=_t.DoorBellState,this.Type="DoorBellState",this.Data=e.state}}class _n{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=Wt.Relased,this.Time=""}}!function(e){e[e.Pressed=0]="Pressed",e[e.Relased=1]="Relased",e[e.PressedAndRelased=2]="PressedAndRelased"}(Wt||(Wt={}));class Cn extends mn{constructor(e){super(),this.TypeAsEnum=_t.ReedState,this.Type="ReedState",this.Data=e.state}}class Tn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=!1,this.Time=""}}class Dn extends mn{constructor(e){super(),this.TypeAsEnum=_t.BlindPosition,this.Type="BlindPostionState",this.Data=e.state}GetBlindStatus(){switch(this.Data.Position){case 200:return qt.UnableToMove;case 201:return qt.MotorOverheatedPleaseWait;default:return qt.Working}}}!function(e){e[e.Unknown=0]="Unknown",e[e.Working=1]="Working",e[e.UnableToMove=200]="UnableToMove",e[e.MotorOverheatedPleaseWait=201]="MotorOverheatedPleaseWait"}(qt||(qt={}));class kn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Position=0,this.RawPosition=0,this.Time=""}}class Gn extends mn{constructor(e){super(),this.TypeAsEnum=_t.RemoteButtonState,this.Type="RemoteButtonState",this.Data=e.state}}class bn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=Vt.Relased,this.Time=""}}!function(e){e[e.Pressed=1]="Pressed",e[e.Relased=2]="Relased",e[e.PressedAndRelased=3]="PressedAndRelased"}(Vt||(Vt={}));class Nn extends mn{constructor(e){super(),this.TypeAsEnum=_t.LightColor,this.Type="LightColorState",this.Data=e.state}}class En{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.R=0,this.G=0,this.B=0,this.Time=""}}class In extends mn{constructor(e){super(),this.TypeAsEnum=_t.LightWarmth,this.Type="LightWarmthState",this.Data=e.state}}class Rn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Temperature=0,this.Time=""}}class Pn extends mn{constructor(e){super(),this.TypeAsEnum=_t.LightBrightness,this.Type="LightBrightnessState",this.Data=e.state}}class On{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Brightness=0,this.Time=""}}class Un extends mn{constructor(e){super(),this.TypeAsEnum=_t.MeasuredTemperature,this.Type="MeasuredTemperatureState",this.Data=e.state}}class Mn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Temperature=0,this.Type=Ht.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"}(Ht||(Ht={}));class xn extends mn{constructor(e){super(),this.TypeAsEnum=_t.BatteryState,this.Type="BatteryState",this.Data=e.state}}class Fn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=Kt.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"}(Kt||(Kt={}));class Ln extends mn{constructor(e){super(),this.TypeAsEnum=_t.MeasuredBrightness,this.Type="MeasuredBrightnessState",this.Data=e.state}}class Bn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Brightness=0,this.Time=""}}class $n extends mn{constructor(e){super(),this.TypeAsEnum=_t.MeasuredEnergy,this.Type="MeasuredEnergyState",this.Data=e.state,this.Data.MeasurementParameters=new Map(Object.entries(e.state.MeasurementParameters))}}class Wn{constructor(){this.Channel=0,this.StateReliability=Lt.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"}(jt||(jt={}));class qn extends mn{constructor(e){super(),this.TypeAsEnum=_t.MeasuredDistance,this.Type="MeasuredDistanceState",this.Data=e.state}}!function(e){e[e.No=0]="No",e[e.Yes=1]="Yes"}(zt||(zt={}));class Vn extends mn{constructor(e){super(),this.TypeAsEnum=_t.MovementSensorState,this.Type="MovementSensorState",this.Data=e.state}}class Hn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Intensity=0,this.Movement=Jt.No,this.Time=""}}!function(e){e[e.No=0]="No",e[e.Yes=1]="Yes"}(Jt||(Jt={}));class Kn extends mn{constructor(e){super(),this.TypeAsEnum=_t.BlindRemoteButtonState,this.Type="BlindRemoteButtonState",this.Data=e.state}}class jn{constructor(){this.Channel=0,this.StateReliability=Lt.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 zn extends mn{constructor(e){super(),this.TypeAsEnum=_t.FacadeRemoteButtonState,this.Type="FacadeRemoteButtonState",this.Data=e.state}}class Jn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=Xt.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"}(Xt||(Xt={}));class Yn extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(Qt||(Qt={}));class Xn extends mn{constructor(e){super(),this.TypeAsEnum=_t.GatePosition,this.Type="GatePositionState",this.Data=e.state}}class Qn{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.PositionType=Zt.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"}(Zt||(Zt={}));class Zn extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(en||(en={}));class er extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(tn||(tn={}));class tr extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(nn||(nn={}));class nr extends mn{constructor(e){super(),this.TypeAsEnum=_t.HumiditySensorState,this.Type="HumiditySensorState",this.Data=e.state}}class rr{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Type=rn.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"}(rn||(rn={}));class sr extends mn{constructor(e){super(),this.TypeAsEnum=_t.VibrationSensorState,this.Type="VibrationSensorState",this.Data=e.state}}!function(e){e[e.No=0]="No",e[e.Yes=1]="Yes"}(sn||(sn={}));class or extends mn{constructor(e){super(),this.TypeAsEnum=_t.BinarySensorState,this.Type="BinarySensorState",this.Data=e.state}}class ir{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=on.Low,this.Time=""}}!function(e){e[e.High=1]="High",e[e.Low=0]="Low"}(on||(on={}));class ar extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(an||(an={}));class cr extends mn{constructor(e){super(),this.TypeAsEnum=_t.BlindOpenCloseTime,this.Type="BlindOpenCloseTimeState",this.Data=e.state}}class ur extends mn{constructor(e){super(),this.TypeAsEnum=_t.OvercurrentProtectionState,this.Type="OvercurrentProtectionState",this.Data=e.state}}class lr extends mn{constructor(e){super(),this.TypeAsEnum=_t.OvercurrentProtectionThreshold,this.Type="OvercurrentProtectionThresholdState",this.Data=e.state}}class dr extends mn{constructor(e){super(),this.TypeAsEnum=_t.FacadePosition,this.Type="FacadePositionState",this.Data=e.state}}class hr extends mn{constructor(e){super(),this.TypeAsEnum=_t.FacadeType,this.Type="FacadeTypeState",this.Data=e.state}}class pr extends mn{constructor(e){super(),this.TypeAsEnum=_t.CurrentWindThreshold,this.Type="CurrentWindThresholdState",this.Data=e.state}}class gr{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.WindThreshold=cn.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"}(cn||(cn={}));class fr extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(un||(un={}));class vr extends mn{constructor(e){super(),this.TypeAsEnum=_t.WindSpeedState,this.Type="WindSpeedState",this.Data=e.state}}class mr{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Value=0,this.Time=""}}class yr extends mn{constructor(e){super(),this.TypeAsEnum=_t.FloodSensorState,this.Type="FloodSensorState",this.Data=e.state}}class wr{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.State=ln.NoFloodDetected,this.Time=""}}!function(e){e[e.FloodDetected=1]="FloodDetected",e[e.NoFloodDetected=0]="NoFloodDetected"}(ln||(ln={})),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"}(dn||(dn={}));class Sr extends mn{constructor(e){super(),this.TypeAsEnum=_t.PressureSensorState,this.Type="PressureSensorState",this.Data=e.state}}class Ar{constructor(){this.Channel=0,this.StateReliability=Lt.Unconfident,this.Pressure=0,this.Time="",this.PressureType=hn.OutsidePressure}}!function(e){e[e.InsidePressure=0]="InsidePressure",e[e.OutsidePressure=1]="OutsidePressure",e[e.SetPressure=2]="SetPressure"}(hn||(hn={})),function(e){e[e.Facade90=0]="Facade90",e[e.Facade180=1]="Facade180"}(pn||(pn={}));class _r extends mn{constructor(e){super(),this.TypeAsEnum=_t.TamperProtectionState,this.Type="TamperProtection",this.Data=e.state}}!function(e){e[e.OK=0]="OK",e[e.Breach=1]="Breach"}(gn||(gn={}));class Cr extends mn{constructor(e){super(),this.TypeAsEnum=_t.LightRGBWState,this.Type="LightRGBW",this.Data=e.state}}class Tr extends mn{constructor(e){super(),this.TypeAsEnum=_t.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"}(fn||(fn={}));class Dr{constructor(){this._onDeviceStateChangedEvent=new n,this._onDeviceStateRefreshedOrChangedEvent=new n,this._onDeviceTasksExecutionChangedOnChannelsEvent=new n,this._onDeviceFirmwareVersionChangedEvent=new n,this._iconType=St.Unknown,this._serialNumber=null,this._model=null,this._modelGuid=null,this._manufacturerGuid=null,this._isVirtual=!1,this._isEnabled=!1,this._deviceState=Ct.Working,this._deviceType=Dt.Unknown,this._communicationWay=Tt.OneWay,this._availableTasksTypes=[],this._availableResponseTypes=[],this._channels=[],this._protocolGuid=null,this._softwareVersion=null,null==Dr._devicesService&&(Dr._devicesService=$v.Get(Lo.ServiceName));const e=this._onDeviceStateChangedEvent,t=this._onDeviceTasksExecutionChangedOnChannelsEvent;Dr._devicesService.OnDeviceStateChangedEvent().Subscribe((t=>{t.Device.Guid==this._guid&&e.Invoke(t.State)})),Dr._devicesService.OnDeviceStateRefreshedOrChangedEvent().Subscribe((e=>{e.Device.Guid==this._guid&&this._onDeviceStateRefreshedOrChangedEvent.Invoke(e.State)})),Dr._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===Dt.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!==At.SetBlindPositionSimple))}return!1}get States(){return r.DoesThrowStackTrace?$v.Get(Lo.ServiceName).GetDeviceStates(this).selectMany((e=>e.States)).toArray():Dr._devicesService.GetDeviceStates(this).selectMany((e=>e.States)).toArray()}RemoveDeviceAsync(){return Dr._devicesService.RemoveDeviceAsync(this)}ExecuteDeviceTaskAsync(e){return Dr._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*(){try{const t=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(new kr(this,e),2e4,!1);switch(t.Status){case ce.OK:return this._name=e,$v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),new De(ye.Changed,"");case ce.WrongData:if("DeviceNotFound"==t.Data)return new De(ye.Failed,"DeviceNotFound");break;case ce.NoPermissionsToCallGivenResource:return new De(ye.NoPermissions,"")}}catch(e){return e.message.includes("timeout")?new De(ye.ControllerResponseTimeout,""):new De(ye.UnknownError,"")}return new De(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 Dr._devicesService.ExecuteDeviceTaskAsync(this,e)}}class kr 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 br,Nr,Er,Ir,Rr,Pr=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Or{constructor(){this._device=new Dr,this._number=0,this._name="",this._iconName="",this._channelId="",this._mode=yt.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==Or._devicesService&&(Or._devicesService=$v.Get(Lo.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 Pr(this,void 0,void 0,(function*(){const n=this.GetChannelConfigurationData();n.CustomData[e]=t,this._customData[e]=t;const r=new Ur;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 Ur;return n.DeviceGuid=this._device.Guid,n.ChannelConfiguration=t,this.ChangeConfigurationAsync(n)}GetChannelConfigurationData(){const e=new Mr;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 Ur;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 Ur;return t.DeviceGuid=this._device.Guid,t.ChannelConfiguration=e,this.ChangeConfigurationAsync(t)}ChangeNameAsync(e){const t=this.GetChannelConfigurationData(),n=new Ur;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 Ur;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 Ur;return n.DeviceGuid=this._device.Guid,n.ChannelConfiguration=t,this._channelGroups=e,this.ChangeConfigurationAsync(n)}ChangeConfigurationAsync(e){return Pr(this,void 0,void 0,(function*(){var t;try{const n=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(new xr(e),2e4,!1);switch($v.Get(be.ServiceName).ClearCache(),yield $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),n.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 De(ye.Changed,"");case ce.WrongData:if("DeviceNotFound"===n.Data)return null===(t=s.Log)||void 0===t||t.Error("Failed to change channel configuration, referenced device does not exist!"),new De(ye.WrongData,"DeviceNotFound");break;case ce.FatalError:return new De(ye.UnknownError,"")}}catch(e){if(e.message.includes("timeout"))return new De(ye.ControllerResponseTimeout,"")}return new De(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(Lo.ServiceName).GetDeviceStates(this.GetDevice()).where((e=>e.Channel==this.Number)).selectMany((e=>e.States)).toArray():Or._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,Or._devicesService.ExecuteDeviceTaskAsync(this._device,e)):Promise.resolve(Gt.Failed)}}Or._devicesService=null;class Ur{constructor(){this.DeviceGuid="",this.ChannelConfiguration=new Mr}}class Mr{constructor(){this.Channel=0,this.ChannelName="",this.Configuration=yt.Default,this.GroupsGuids=[],this.IconName="",this.Hidden=!1,this.Configurations={},this.CustomData={},this.Roles=[]}}class xr 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"}(br||(br={}));class Fr{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 Lr{constructor(){this._taskType=At.GetChannelsState,this._featureType=br.GetState,this._channel=0,this._guid=Fr.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 Br extends Lr{constructor(){super(),this.Temperature=0,this.FeatureType=br.SetTemperature,this.TaskType=At.SetTemperature}}class $r extends Lr{constructor(){super(),this.FeatureType=br.TurnOff,this.TaskType=At.TurnOff}}class Wr extends Lr{constructor(){super(),this.FeatureType=br.TurnOn,this.TaskType=At.TurnOn}}class qr extends Lr{constructor(){super(),this.SwitchOffDelaySeconds=0,this.FeatureType=br.TurnOnWithTimeout,this.TaskType=At.TurnOnWithTime}}class Vr extends Lr{constructor(){super(),this.Brightness=0,this.FeatureType=br.SetLightBrightness,this.TaskType=At.SetLightBrightness}}class Hr extends Lr{constructor(){super(),this.FeatureType=br.ToggleState,this.TaskType=At.TogleState}}class Kr extends Lr{constructor(){super(),this.R=0,this.G=0,this.B=0,this.FeatureType=br.SetLightColor,this.TaskType=At.SetLightColor}}class jr extends Lr{constructor(){super(),this.Temperature=0,this.FeatureType=br.SetLightTemperature,this.TaskType=At.SetLightTemperature}}class zr extends Lr{constructor(){super(),this.Action=Nr.Stop,this.Position=0,this.FeatureType=br.SetBlindPosition,this.TaskType=At.SetBlindPosition}}!function(e){e[e.Open=0]="Open",e[e.Close=1]="Close",e[e.Stop=2]="Stop",e[e.Percentage=3]="Percentage"}(Nr||(Nr={})),function(e){e[e.Open=0]="Open",e[e.Close=1]="Close",e[e.Stop=2]="Stop",e[e.Percentage=3]="Percentage"}(Er||(Er={}));class Jr extends Lr{constructor(){super(),this.Action=Ir.Stop,this.Position=0,this.FeatureType=br.SetBlindPosition,this.TaskType=At.SetBlindPositionSimple}}!function(e){e[e.Open=0]="Open",e[e.Close=1]="Close",e[e.Stop=2]="Stop"}(Ir||(Ir={}));class Yr extends Lr{constructor(){super(),this.Brightness=0,this.FeatureType=br.SetLightBrightnessDynamicly,this.TaskType=At.SetLightBrightnessDynamicly}}class Xr extends Lr{constructor(){super(),this.FeatureType=br.IdentifyDevice,this.TaskType=At.IdentifyDevice}}class Qr extends Lr{constructor(){super(),this.Data=new Zr,this.FeatureType=br.SetBlindOpenCloseTime,this.TaskType=At.SetBlindOpenCloseTime}}class Zr{constructor(){this.Channel=0,this.CloseTime=0,this.OpenTime=0}}class es extends Lr{constructor(){super(),this.FeatureType=br.GetState,this.TaskType=At.GetChannelsState}}class ts extends Lr{constructor(){super(),this.Position=0,this.FeatureType=br.SetBlindMicroventilation,this.TaskType=At.SetBlindMicroventilation}}class ns extends Lr{constructor(){super(),this.FeatureType=br.GatePulse,this.TaskType=At.ChangeGatewayPositionPulse}}class rs extends Lr{constructor(){super(),this.FeatureType=br.GatewayPulse,this.TaskType=At.ChangeGatewayPositionPulse}}class ss extends Lr{constructor(){super(),this.FacadeAction=Rr.Stop,this.Tilt=0,this.Position=0,this.FeatureType=br.SetFacadePositionAndTilt,this.TaskType=At.SetFacadePosition}}class os extends Lr{constructor(){super(),this.FeatureType=br.GetFacadeType,this.TaskType=At.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"}(Rr||(Rr={}));class is{constructor(){this.R=0,this.G=0,this.B=0,this.W=0,this.Brightness=0,this.Channel=0}}class as extends Lr{constructor(){super(),this.Data=new is,this.FeatureType=br.LightRGBW,this.TaskType=At.LightRGBW}}var cs=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 us{constructor(){this._manualDeviceProtocolServices=new Map}GetServiceName(){return us.ServiceName}RegisterManuallyPairedDevicesProtocol(e){$v.Get(r.ServiceName).Debug(us.ServiceName,`Registering new manual device protocol service: ${e.GetServiceName()}`),$v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),this._manualDeviceProtocolServices.set(e.GetServiceName(),e)}GetDevicesForManualPairingAsync(e){return cs(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 cs(this,void 0,void 0,(function*(){const t=[...this._manualDeviceProtocolServices.values()].find((t=>t.ProtocolExtensionGuid==e.ProtocolExtensionGuid));return null!=t?t.AddManuallyPairedDeviceAsync(e):($v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),Gt.Failed)}))}GetRegisteredProtocolGuids(){return[...this._manualDeviceProtocolServices.values()].map((e=>e.ProtocolExtensionGuid))}}us.ServiceName="ManualDeviceService";class ls{constructor(){this.ResourceGuid="",this.Data=null,this.IsGlobal=!1,this.InsertTime=new Date}}var ds,hs=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 ps{constructor(){this._connection=null,this._localDb=null,this._connection=$v.Get(Ot.ServiceName),this._localDb=$v.Get(o.ServiceName)}GetLocalDbName(e,t){return`${e}_${t}`}SaveAsync(e,t,n){return hs(this,void 0,void 0,(function*(){let r=new gs(e,t,n),s=yield this._connection.SendAndWaitForResponseAsync(r,35e3,!1);if(s.Status===ce.OK){const r=new ms;r.ResourceGuid=e,r.Data=JSON.stringify(n),r.IsGlobal=t,this._localDb.Save(ps.ServiceName,this.GetLocalDbName(e,t),r)}return s.Status}))}ReadAsync(e,t,n){return hs(this,void 0,void 0,(function*(){let r=new fs(e,t);if(!n){const n=this._localDb.Read(ps.ServiceName,this.GetLocalDbName(e,t));if(null!=n){const e=n,t=new ls;return t.Data=JSON.parse(e.Data),t.IsGlobal=e.IsGlobal,t.ResourceGuid=e.ResourceGuid,t}}let s=yield this._connection.SendAndWaitForResponseAsync(r,35e3,!1);if(s.Status===ce.OK){const e=new ls;return e.ResourceGuid=s.ResourceGuid,e.Data=JSON.parse(s.Data),e.IsGlobal=s.IsGlobal,e}return s.Status}))}RemoveAsync(e,t){return hs(this,void 0,void 0,(function*(){let n=new vs(e,t);return(yield this._connection.SendAndWaitForResponseAsync(n,35e3,!1)).Status}))}GetServiceName(){return ps.ServiceName}}ps.ServiceName="RemoteStorageService";class gs 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 fs 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 vs 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 ms extends ae{constructor(){super(...arguments),this.ResourceGuid="",this.Data="",this.IsGlobal=!1,this.InsertTime=new Date}}class ys{constructor(){this.Longitude=0,this.Latitude=0}}class ws{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"}(ds||(ds={}));var Ss,As,_s=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Cs{IsControllerGeolocationSetAsync(){return _s(this,void 0,void 0,(function*(){let e=new Ts,t=yield $v.Get(Ot.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 _s(this,void 0,void 0,(function*(){return new Promise(((e,t)=>_s(this,void 0,void 0,(function*(){window.navigator.geolocation.getCurrentPosition((t=>{e(t)}),(t=>{e(t)}))}))))}))}SetControllerGeolocationAsync(e){return _s(this,void 0,void 0,(function*(){var t,n;let r=new ks;r.Data.Latitude=e.Latitude,r.Data.Longitude=e.Longitude,null===(t=s.Log)||void 0===t||t.Warning(Cs.ServiceName,`SetControllerGeolocationAsync() ${JSON.stringify(r)}`);let o=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(r,15e3,!1);switch(null===(n=s.Log)||void 0===n||n.Warning(Cs.ServiceName,`${JSON.stringify(o)}`),$v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null==o?void 0:o.Status){case ce.OK:return new ke(ds.OK,"");case ce.NoPermissionToPerformThisOperation:case ce.NoPermissionsToCallGivenResource:return new ke(ds.NoPermissions,"");case ce.UserIsNotLoggedIn:return new ke(ds.UserIsNotLoggedIn,"");default:return new ke(ds.UnknownError,"")}}))}GetControlllerGeolocationAsync(){return _s(this,void 0,void 0,(function*(){var e,t;let n=new Ds;null===(e=s.Log)||void 0===e||e.Warning(Cs.ServiceName,`GetControlllerGeolocationAsync(): ${JSON.stringify(n)}`);let r=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(n,15e3,!0);if(null===(t=s.Log)||void 0===t||t.Warning(Cs.ServiceName,`${JSON.stringify(r)}`),(null==r?void 0:r.Status)===ce.OK){let e=new ws;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 Cs.ServiceName}}Cs.ServiceName="GeolocationService";class Ts extends ae{constructor(){super(),this.Resource="/geolocation/isset",this.Method=ue.Get}}class Ds extends ae{constructor(){super(),this.Resource="/geolocation/get",this.Method=ue.Get}}class ks extends ae{constructor(){super(),this.Data=new ys,this.Resource="/geolocation/save",this.Method=ue.Put}}!function(e){e[e.Device=0]="Device",e[e.Controller=1]="Controller"}(Ss||(Ss={}));class Gs{constructor(){this.UpdateGuid="",this.Channel="",this.Version="",this.CurrentVersion="",this.DownloadUri="",this.Download="",this.Name="",this.Description="",this.UpdateType=As.Unknown,this.ResourceGuid=""}}class bs{constructor(){this.UpdateDescription=new Map,this.Update=new Gs,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"}(As||(As={}));class Ns extends Error{constructor(e){super(e),this.message=e,this.name="UpdateProviderNotFound"}}var Es,Is,Rs,Ps,Os,Us,Ms,xs,Fs,Ls,Bs,$s,Ws,qs,Vs,Hs,Ks,js,zs=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Js{constructor(){this._services=new Map,this._runtimeInfo=new Ys,this._hardwareInfo=new Qs,this._semaphore=new Qe(1),this._isRuntimeInfoInitialized=!1,this._isHardwareInfoInitialized=!1}GetServiceName(){return Js.ServiceName}RegisterUpdatesProvider(e){$v.Get(r.ServiceName).Debug(Js.ServiceName,`Registering new update provider: ${e.GetUpdateProviderName()}`),this._services.set(e.GetUpdateProviderName(),e)}GetUpdatesProviderAsync(e){return zs(this,void 0,void 0,(function*(){$v.Get(r.ServiceName).Debug(Js.ServiceName,`Getting update provider [${e}] by GetUpdateProviderAsync<T>()`);const t=this._services.get(e);if(null==t)throw new Ns("Cannot get update provider! Requested update provider has not been registered.");return t}))}GetUpdatesProvidersAsync(e){return zs(this,void 0,void 0,(function*(){$v.Get(r.ServiceName).Debug(Js.ServiceName,`Getting update providers with type ${e} by GetUpdateProvidersAsync<T>()`);let t=[];if(t=[...this._services.values()].filter((t=>t.ProviderType==e)),0==t.length)throw new Ns("Cannot get update providers! Requested update providers has not been registered.");return t}))}GetUpdatesProvidersByProtocolAsync(e,t,n){return zs(this,void 0,void 0,(function*(){if(new RegExp("^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$").test(e)){$v.Get(r.ServiceName).Debug(Js.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 Ns("Cannot get update providers! Requested update providers has not been registered.");return s}throw new Ns("Cannot get update providers! Bad parameters.")}))}GetUpdatesProvidersByExtensionAsync(e,t,n){return zs(this,void 0,void 0,(function*(){if(new RegExp("^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$").test(e)){$v.Get(r.ServiceName).Debug(Js.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 Ns("Cannot get update providers! Requested update providers has not been registered.");return s}throw new Ns("Cannot get update providers! Bad parameters.")}))}GetSoftwareRuntimeInfoAsync(){return zs(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 zs(this,void 0,void 0,(function*(){$v.Get(r.ServiceName).Debug(Js.ServiceName,"Getting runtime version info from controller.");try{const e=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(new Xs,16e3,!1);if(null==e||null==e.Status)throw new eo('Cannot get runtime info, controller response result is empty."',Es.EmptyResponse);if(e.Status!=ce.OK)throw new eo(`Cannot get runtime info, controller responded with status ${e.Status}.`,Es.WrongResponseStatus);if(null==e.Data)throw new eo("Cannot get runtime info, controller responded with status OK but response does not contains data.",Es.NoDataInResponse);this._runtimeInfo=e.Data,this._isRuntimeInfoInitialized=!0}catch(e){throw e instanceof p?new eo("Cannot get runtime info, controller response timeout.",Es.Timeout):e}}))}GetHardwareInfoAsync(){return zs(this,arguments,void 0,(function*(e=!1){return!this._isHardwareInfoInitialized||e?(yield this.GetHardwareControllerInfoAsync(),this._hardwareInfo):this._hardwareInfo}))}GetHardwareControllerInfoAsync(){return zs(this,void 0,void 0,(function*(){$v.Get(r.ServiceName).Debug(Js.ServiceName,"Getting hardware info from controller.");const e=yield $v.Get(Ot.ServiceName).SendAndWaitForResponseAsync(new Zs,8e3,!1);if(null==e||null==e.Status)throw new eo('Cannot get hardware info, controller response result is empty."',Es.EmptyResponse);if(e.Status!=ce.OK)throw new eo(`Cannot get hardware info, controller responded with status ${e.Status}.`,Es.WrongResponseStatus);if(null==e.Data)throw new eo("Cannot get hardware info, controller responded with status OK but response does not contains data.",Es.NoDataInResponse);this._hardwareInfo=e.Data,this._isRuntimeInfoInitialized=!0}))}}Js.ServiceName="UpdateProvider";class Ys{constructor(){this.BaseLinuxVersion="",this.BaseMonoVersion="",this.RuntimeVersion="",this.UpdateChannel="",this.SoftwareVersion=""}}class Xs extends ae{constructor(){super(),this.Resource="/controller/software/info",this.Method=ue.Get}}class Qs{constructor(){this.GetControllerHardwareVersion=0,this.DevicePIN="",this.GetControllerSerialNumber="",this.HostnamePrefix="",this.DefaultStaticIpAddress="",this.GetAvailableHardware=[],this.ControllerSecret=""}}class Zs extends ae{constructor(){super(),this.Resource="/controller/hardware/info",this.Method=ue.Get}}class eo 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"}(Es||(Es={})),function(e){e.OtherError="OtherError",e.FatalError="FatalError",e.NoData="NoData",e.InvalidSceneGuid="InvalidSceneGuid"}(Is||(Is={}));class to{constructor(){this._comparisonParams=new Map,this.Type=_t.Unknown,this.DeviceGuid="",this.ComparisonMethod=Rs.Default}GetCheckDeviceState(){return this._checkDeviceState}SetCheckDeviceState(e){this._checkDeviceState=e,e instanceof Fn&&(this.Type=_t.BatteryState),e instanceof ir&&(this.Type=_t.BinarySensorState),e instanceof kn&&(this.Type=_t.BlindPosition),e instanceof On&&(this.Type=_t.LightBrightness),e instanceof Bn&&(this.Type=_t.MeasuredBrightness),e instanceof bn&&(this.Type=_t.RemoteButtonState),e instanceof wn&&(this.Type=_t.ChannelOnOffState),e instanceof _n&&(this.Type=_t.DoorBellState),e instanceof Wn&&(this.Type=_t.MeasuredEnergy),e instanceof wr&&(this.Type=_t.FloodSensorState),e instanceof Qn&&(this.Type=_t.GatePosition),e instanceof En&&(this.Type=_t.LightColor),e instanceof Rn&&(this.Type=_t.LightWarmth),e instanceof Tn&&(this.Type=_t.ReedState),e instanceof Mn&&(this.Type=_t.MeasuredTemperature),e instanceof rr&&(this.Type=_t.HumiditySensorState),e instanceof jn&&(this.Type=_t.BlindRemoteButtonState),e instanceof Jn&&(this.Type=_t.FacadeRemoteButtonState),e instanceof Hn&&(this.Type=_t.MovementSensorState),e instanceof Wn&&(this.Type=_t.MeasuredEnergy),e instanceof Ar&&(this.Type=_t.PressureSensorState),e instanceof mr&&(this.Type=_t.WindSpeedState),e instanceof gr&&(this.Type=_t.CurrentWindThreshold)}GetComparisonParam(e){return this._comparisonParams.get(e)}GetComparisonParams(){return this._comparisonParams}SetComparisonParam(e,t){this._comparisonParams.set(e,t)}}class no{constructor(e){this._value=e}get Value(){return this._value}set Value(e){this._value=e}}class ro{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"}(Rs||(Rs={})),function(e){e[e.DeltaValue=0]="DeltaValue",e[e.DeltaCalculationTimeRange=1]="DeltaCalculationTimeRange",e[e.StateRepeatCount=2]="StateRepeatCount",e[e.StateRepeatTimeRange=3]="StateRepeatTimeRange"}(Ps||(Ps={})),function(e){e[e.SunRise=1]="SunRise",e[e.SunSet=2]="SunSet"}(Os||(Os={}));class so{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"}(Us||(Us={})),function(e){e.Unknown="Unknown",e.DeviceTask="DeviceTask",e.DelayTask="DelayTask",e.NotifyTask="NotifyTask",e.LockExecution="LockExecution"}(Ms||(Ms={})),(js=xs||(xs={}))[js.Unknown=0]="Unknown",js[js.Second=1]="Second",js[js.Minute=2]="Minute",js[js.Hour=3]="Hour",js[js.Day=4]="Day",js[js.DayOfWeek=5]="DayOfWeek",js[js.Month=6]="Month",js[js.Year=7]="Year",js[js.Date=8]="Date",js[js.Time=9]="Time",js[js.WeatherType=11]="WeatherType",js[js.CompareNumbers=12]="CompareNumbers",js[js.CompareBooleans=13]="CompareBooleans",js[js.DeviceState=14]="DeviceState",js[js.Timer=15]="Timer",js[js.Temperature=17]="Temperature",js[js.DaysOfWeek=18]="DaysOfWeek",js[js.AstronomicalClockWithOffset=19]="AstronomicalClockWithOffset",js[js.SceneExecuted=20]="SceneExecuted",(Ks=Fs||(Fs={}))[Ks.Unknown=0]="Unknown",Ks[Ks.Equal=1]="Equal",Ks[Ks.NotEqueal=2]="NotEqueal",Ks[Ks.BiggerThan=3]="BiggerThan",Ks[Ks.SmallerThan=4]="SmallerThan",Ks[Ks.BiggerThanOrEqual=5]="BiggerThanOrEqual",Ks[Ks.SmallerThanOrEqual=6]="SmallerThanOrEqual",Ks[Ks.OneOfBothIsTrue=7]="OneOfBothIsTrue",Ks[Ks.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"}(Ls||(Ls={})),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"}(Bs||(Bs={})),(Hs=$s||($s={})).Null="Null",Hs.Condition="Condition",Hs.ConditionGroup="ConditionGroup",Hs.ArgumentAsInt="ArgumentAsInt",Hs.ArgumentAsTimeSpan="ArgumentAsTimeSpan",Hs.ArgumentAsBoolean="ArgumentAsBoolean",Hs.ArgumentAsTimeout="ArgumentAsTimeout",Hs.ArgumentAsDayOfWeek="ArgumentAsDayOfWeek",Hs.ArgumentAsDaysOfWeek="ArgumentAsDaysOfWeek",Hs.ArgumentAsAstronomicalClock="ArgumentAsAstronomicalClock",Hs.ArgumentAsTime="ArgumentAsTime",Hs.ArgumentAsDeviceState="ArgumentAsDeviceState",Hs.ArgumentAsNumber="ArgumentAsNumber",Hs.ArgumentAsAstronomicalClockWithOffset="ArgumentAsAstronomicalClockWithOffset",Hs.ArgumentAsConditionInfo="ArgumentAsConditionInfo",function(e){e.DeviceTask="DeviceTask",e.DelayTask="DelayTask",e.LockExecutionTask="LockExecutionTask",e.NotifyTaskAppNotify="NotifyTaskAppNotify",e.NotifyTaskEmailNotify="NotifyTaskEmailNotify"}(Ws||(Ws={}));class oo 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"}(qs||(qs={})),function(e){e[e.Timeout=0]="Timeout",e[e.TimeRange=1]="TimeRange"}(Vs||(Vs={}));var io,ao,co;class uo{constructor(e,t="Cube"){this._result=null,this._tmp=new lo,this._tmpTask=null,this._prevSeqGuid="",this._currentSeqGuid="",this._editingExistingSequence=!1,this._rawExistingSequenceTasks=null,this._sequenceName="",this._sequenceIcon="",this._service=$v.Get(Go.ServiceName),e&&(this._sequenceName=e,this._sequenceIcon=t,this._tmp.Guid=Fr.NewGuid())}SetSequenceName(e){const t=n=>{if(n.RightArgumentType!=co.Null)return t(n.RightArgument);n.Tasks.ControllerTasks.where((e=>e.TaskType==Us.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==co.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 uo;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=Fr.NewGuid(),e.RightArgumentType==co.Condition&&t(e.RightArgument)};null!=e._result&&t(e._result),null!=this._tmp&&(this._tmp.Guid=Fr.NewGuid())})(e),e}GetPrevious(){let e="";const t=(n,r)=>n.Guid==r?{sequence:n,prevGuid:e}:n.RightArgumentType==co.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!=co.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=Fs.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Fs.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=Fr.NewGuid(),this._tmp.HandledType=xs.AstronomicalClockWithOffset,this._tmp.LeftArgumentType=co.ArgumentAsAstronomicalClockWithOffset,this._tmp.AtMeetCondition=t,t&&null!=n&&n!=Fs.Equal)throw new Ao("AtmeetCondition supports only comparation type 'Equal'.");if(e.Offset<-3600||e.Offset>3600)throw new Ao("Offset must be in range between -3600 and 3600 seconds.");if(t)this._tmp.ConditionType=Fs.Equal;else{if(null==n)throw new Ao("Comparasion type must be provided if atMeetCondition is false!");this._tmp.ConditionType=n}return this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=co.ArgumentAsAstronomicalClockWithOffset,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsActionWithEmptyCondition(){return this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.Unknown,this._tmp.LeftArgumentType=co.Null,this._tmp.ConditionType=Fs.Equal,this._tmp.LeftArgument.Argument=null,this._tmp.LeftArgument.HandledType=co.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=Fs.Equal){return this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.DaysOfWeek,this._tmp.LeftArgumentType=co.ArgumentAsDaysOfWeek,this._tmp.ConditionType=n,this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=co.ArgumentAsDaysOfWeek,this._tmp.AtMeetCondition=t,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsTimeSpan(e,t=Fs.Equal){return this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.Timer,this._tmp.LeftArgumentType=co.ArgumentAsTimeSpan,this._tmp.ConditionType=t,this._tmp.AtMeetCondition=!0,this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=co.ArgumentAsTimeSpan,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsTime(e,t,n=Fs.Equal){return this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.Time,this._tmp.LeftArgumentType=co.ArgumentAsTime,this._tmp.ConditionType=n,this._tmp.AtMeetCondition=t,this._tmp.LeftArgument.Argument=e,this._tmp.LeftArgument.HandledType=co.ArgumentAsTime,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsDeviceState(e,t,n,r=Fs.Equal){return this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.DeviceState,this._tmp.LeftArgumentType=co.ArgumentAsDeviceState,this._tmp.ConditionType=r,this._tmp.AtMeetCondition=t,this._tmp.ConditionTimeout=n,this._tmp.LeftArgument.Argument=this.GenerateDeviceStateArgument(e),this._tmp.LeftArgument.HandledType=co.ArgumentAsDeviceState,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}ArgumentAsSceneExecuted(e){this._tmp.Guid=Fr.NewGuid(),this._tmp.HandledType=xs.SceneExecuted,this._tmp.LeftArgumentType=co.ArgumentAsConditionInfo,this._tmp.ConditionType=Fs.Equal,this._tmp.AtMeetCondition=!0;const t=new so;return t.DeviceGuid=e.DeviceGuid,this._tmp.LeftArgument.Argument=t,this._tmp.LeftArgument.HandledType=co.ArgumentAsConditionInfo,{AddArgument:()=>this.AddSequence(),EditArgument:e=>this.EditSequence(e)}}GenerateDeviceStateArgument(e){const t=new go;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),{[Ps[e]]:t.Value});switch(t.ComparisonParams=n,t.DeviceGuid=e.DeviceGuid,t.DeviceStateType=this.MapResponseTypeToDeviceStateType(e.Type),e.Type){case _t.BatteryState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State,t.CheckedDeviceState.Percentage=e.GetCheckDeviceState().Percentage;break;case _t.BinarySensorState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.BlindPosition:t.CheckedDeviceState.Position=e.GetCheckDeviceState().Position;break;case _t.LightBrightness:case _t.MeasuredBrightness:t.CheckedDeviceState.Brightness=e.GetCheckDeviceState().Brightness;break;case _t.RemoteButtonState:case _t.ChannelOnOffState:case _t.DoorBellState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.MeasuredEnergy:{let n={},r=e.GetCheckDeviceState().MeasurementParameters.entries();for(const[e,t]of r)n=Object.assign(Object.assign({},n),{[jt[e]]:t});t.CheckedDeviceState.MeasurementParameters=n;break}case _t.FloodSensorState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.GatePosition:t.CheckedDeviceState.Position=e.GetCheckDeviceState().Position,t.CheckedDeviceState.PositionType=e.GetCheckDeviceState().PositionType;break;case _t.LightColor:{const n=e.GetCheckDeviceState();t.CheckedDeviceState.R=n.R,t.CheckedDeviceState.G=n.G,t.CheckedDeviceState.B=n.B;break}case _t.LightWarmth:t.CheckedDeviceState.Temperature=e.GetCheckDeviceState().Temperature;break;case _t.ReedState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.SmokeSensorState:throw new oo("Unsupported device state!");case _t.MeasuredTemperature:t.CheckedDeviceState.Temperature=e.GetCheckDeviceState().Temperature;break;case _t.HumiditySensorState:t.CheckedDeviceState.Humidity=e.GetCheckDeviceState().Humidity;break;case _t.BlindRemoteButtonState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.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 _t.FacadeRemoteButtonState:t.CheckedDeviceState.State=e.GetCheckDeviceState().State;break;case _t.MovementSensorState:{let n=e.GetCheckDeviceState();t.CheckedDeviceState.Movement=n.Movement,t.CheckedDeviceState.Intensity=n.Intensity;break}case _t.PressureSensorState:t.CheckedDeviceState.Pressure=e.GetCheckDeviceState().Pressure,t.CheckedDeviceState.PressureType=e.GetCheckDeviceState().PressureType;break;case _t.WindSpeedState:t.CheckedDeviceState.Value=e.GetCheckDeviceState().Value;break;case _t.CurrentWindThreshold:t.CheckedDeviceState.WindThreshold=e.GetCheckDeviceState().WindThreshold;break;case _t.Unknown:t.CheckedDeviceState={};break;default:throw new oo("Unsupported device state!")}return t}MapResponseTypeToDeviceStateType(e){switch(e){case _t.BatteryState:return Ls.BatteryState;case _t.BinarySensorState:return Ls.BinarySensor;case _t.BlindPosition:return Ls.BlindPosition;case _t.LightBrightness:return Ls.LightBrightness;case _t.RemoteButtonState:return Ls.ButtonState;case _t.ChannelOnOffState:return Ls.ChannelOnOff;case _t.DoorBellState:return Ls.DoorBell;case _t.MeasuredEnergy:return Ls.Energy;case _t.FloodSensorState:return Ls.FloodSensor;case _t.GatePosition:return Ls.GatePosition;case _t.MeasuredBrightness:return Ls.Brightness;case _t.LightColor:return Ls.LightColor;case _t.LightWarmth:return Ls.LightTemperature;case _t.ReedState:return Ls.ReedState;case _t.SmokeSensorState:return Ls.SmokeSensor;case _t.MeasuredTemperature:return Ls.Temperature;case _t.HumiditySensorState:return Ls.Humidity;case _t.BlindRemoteButtonState:return Ls.BlindsControlButton;case _t.FacadeRemoteButtonState:return Ls.FacadeControlButton;case _t.MovementSensorState:return Ls.Movement;case _t.PressureSensorState:return Ls.AirPressure;case _t.WindSpeedState:return Ls.WindSpeed;case _t.CurrentWindThreshold:return Ls.WindThreshold;default:return Ls.Unknown}}AddSequence(){const e=(t,n)=>{if(t.RightArgumentType!=co.Null)return e(t.RightArgument,n);t.RightArgumentType=co.Condition,t.RightArgument=n,this._editingExistingSequence&&null!=this._rawExistingSequenceTasks&&(n.Tasks=JSON.parse(JSON.stringify(this._rawExistingSequenceTasks)),t.Tasks=new fo)};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 lo,{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=Fs.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Fs.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!=co.Condition){if(n.RightArgumentType==co.Condition)return t(n.RightArgument,r);throw new _o(`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 _o(`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 lo,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=Fs.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Fs.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==co.Condition?e.RightArgument.Guid:"",this._prevSeqGuid=null!=t?t.Guid:""):this._prevSeqGuid==n&&(this._prevSeqGuid=null!=t?t.Guid:""))},r=(e,s)=>{if(e.Guid!=s){if(t=e,e.RightArgumentType==co.Null)throw new _o(`Cannot remove sequence, sequence with given guid ${s} not found!`);return r(e.RightArgument,s)}null==t?this._result=null:(t.RightArgument=e.RightArgument,t.RightArgumentType=e.RightArgumentType),n(e,s)};if(null==this._result)throw new _o("Cannot remove sequence, sequence not configured!");return this._result.Guid==e&&this._result.RightArgumentType!=co.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=Fs.Equal)=>this.ArgumentAsDeviceState(e,t,n,r),ArgumentAsTime:(e,t,n=Fs.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!=co.Null)return e(t.RightArgument);null!=this._rawExistingSequenceTasks&&(t.Tasks=this._rawExistingSequenceTasks)};if(null==this._result)throw new _o("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:se.GenerateMd5(JSON.stringify(this._tmpTask))}}ParseDeviceTask(e){const t=new mo;return t.Channel=e.Channel,t.DeviceGuid=e.DeviceGuid,t.ControlFeature=this.MapTaskTypeToControlFeature(e.TaskType),t.Data={},t.Data.Channel=e.Channel,e.TaskType==At.SetBlindPosition||e instanceof zr?(t.Data.Position=e.Position,t.Data.Action=e.Action):e.TaskType==At.SetBlindPositionSimple||e instanceof Jr?(t.Data.Action=e.Action,t.Data.Position=0):e.TaskType==At.SetLightColor||e instanceof Kr?(t.Data.R=e.R,t.Data.G=e.G,t.Data.B=e.B):e.TaskType==At.SetLightTemperature||e instanceof jr?t.Data.Temperature=e.Temperature:e.TaskType==At.SetLightBrightness||e instanceof Vr?t.Data.Brightness=e.Brightness:e.TaskType==At.SetTemperature||e instanceof Br?t.Data.Temperature=e.Temperature:e.TaskType==At.TurnOnWithTime||e instanceof qr?t.Data.SwitchOffDelaySeconds=e.SwitchOffDelaySeconds:e.TaskType==At.SetLightBrightnessDynamicly||e instanceof Yr?t.Data.Brightness=e.Brightness:e.TaskType==At.SetBlindOpenCloseTime||e instanceof Qr?(t.Data.CloseTime=e.Data.CloseTime,t.Data.OpenTime=e.Data.OpenTime):e.TaskType==At.SetBlindMicroventilation||e instanceof ts?t.Data.Position=e.Position:e.TaskType==At.SetFacadePosition||e instanceof ss?(t.Data.FacadeAction=e.FacadeAction,t.Data.Position=e.Position,t.Data.Tilt=e.Tilt):(e.TaskType==At.LightRGBW||e instanceof as)&&(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 yo;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:se.GenerateMd5(JSON.stringify(t))}}NotifyTask(e){if(e.NotifyType==qs.Email)throw new To("NotifyType 'Email' is not supported!");if(e.NotifyType==qs.None)throw new Error("NotifyType mus be set!");if(""==e.Message)throw new Ao("Message must be set!");if(e.Message.length>1e3)throw new Ao("Message is too long! Max length is 1000 characters.");const t=new So;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:se.GenerateMd5(JSON.stringify(t))}}LockExecutionTask(e){const t=new wo;if(t.LockType=e.LockType,t.LockType==Vs.Timeout&&"00:00:00"!=t.LockEndHour)throw new To("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:se.GenerateMd5(JSON.stringify(t))}}AddTask(){const e=t=>{if(t.RightArgumentType!=co.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 mo&&t.Tasks.DevicesTasks.push(structuredClone(this._tmpTask)),t.Tasks.ControllerTasks.push(structuredClone(this._tmpTask)),this._tmpTask=null,$v.Get(r.ServiceName).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=>{if(n.RightArgumentType!=co.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 Co("Task not found, cannot edit!");this._tmpTask instanceof mo&&null!=n.Tasks.DevicesTasks&&(n.Tasks.DevicesTasks=n.Tasks.DevicesTasks.map((t=>se.GenerateMd5(JSON.stringify(t))==e?structuredClone(this._tmpTask):t))),n.Tasks.ControllerTasks=n.Tasks.ControllerTasks.map((t=>se.GenerateMd5(JSON.stringify(t))==e?structuredClone(this._tmpTask):t)),this._tmpTask=null,$v.Get(r.ServiceName).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,s;if(e.RightArgumentType!=co.Null)return t(e.RightArgument,n);{const t=e.Tasks.ControllerTasks.filter((e=>se.GenerateMd5(JSON.stringify(e))!=n));if(e.Tasks.ControllerTasks=null==t?[]:t,null===(s=null===(r=e.Tasks)||void 0===r?void 0:r.DevicesTasks)||void 0===s?void 0:s.any()){const t=e.Tasks.DevicesTasks.filter((e=>se.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 At.Unknown:throw new Ao("Unsupported task type!");case At.SetBlindPosition:case At.SetBlindPositionSimple:return br.SetBlindPosition;case At.SetBlindMicroventilation:return br.SetBlindMicroventilation;case At.TurnOff:return br.TurnOff;case At.TurnOn:return br.TurnOn;case At.TurnOnWithTime:return br.TurnOnWithTimeout;case At.TogleState:return br.ToggleState;case At.SetLightBrightnessDynamicly:return br.SetLightBrightnessDynamicly;case At.SetLightBrightness:return br.SetLightBrightness;case At.SetLightColor:return br.SetLightColor;case At.SetLightTemperature:return br.SetLightTemperature;case At.PairDevice:case At.UnpairDevice:throw new Ao("Unsupported task type!");case At.IdentifyDevice:return br.IdentifyDevice;case At.GetChannelsState:return br.GetState;case At.GetPowerMeasurements:case At.GetAvailableData:case At.MultipleDataRequest:throw new Ao("Unsupported task type!");case At.SetBlindOpenCloseTime:return br.SetBlindOpenCloseTime;case At.SetTemperature:return br.SetTemperature;case At.ChangeGatePositionPulse:return br.GatePulse;case At.ChangeGatewayPositionPulse:return br.GatewayPulse;case At.SetFacadePosition:case At.GetFacadeType:return br.SetFacadePositionAndTilt;case At.LightRGBW:return br.LightRGBW;default:throw new Ao("Unsupported task type!")}}GetSupportedTaskTypesAsync(){return e=this,t=void 0,r=function*(){const e=yield $v.Get(Js.ServiceName).GetSoftwareRuntimeInfoAsync(),[t,n]=e.SoftwareVersion.split(".").map((e=>parseInt(e))),r=[Ws.DeviceTask];return(t>5||5==t&&n>=27)&&r.push(Ws.DelayTask),(t>5||5==t&&n>=37)&&r.push(Ws.LockExecutionTask),(t>6||6==t&&n>=3)&&r.push(Ws.NotifyTaskAppNotify),r},new((n=void 0)||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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!=co.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==co.Condition?this.FindArgumentWithGuid(e.RightArgument,t):null}GetAllowedArguments(){const e=[];return null==this._result?(e.push({ArgumentType:ao.ArgumentAsAstronomicalClockWithOffset,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:ao.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:ao.ArgumentAsDeviceState,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:ao.ArgumentAsSceneExecuted,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:ao.ArgumentAsTime,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e.push({ArgumentType:ao.ArgumentAsTimeSpan,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1})):null!=this._result&&(null==this._result.RightArgument||this._result.RightArgument instanceof ho)&&(this._result.LeftArgumentType==co.ArgumentAsDaysOfWeek&&(e.push({ArgumentType:ao.ArgumentAsTime,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!0}),e.push({ArgumentType:ao.ArgumentAsAstronomicalClockWithOffset,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!0})),this._result.LeftArgumentType==co.ArgumentAsTime&&e.push({ArgumentType:ao.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!1}),this._result.LeftArgumentType==co.ArgumentAsAstronomicalClockWithOffset&&e.push({ArgumentType:ao.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!1})),0==e.any((e=>e.ArgumentType==ao.ArgumentAsAstronomicalClockWithOffset))&&e.push({ArgumentType:ao.ArgumentAsAstronomicalClockWithOffset,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==ao.ArgumentAsDaysOfWeek))&&e.push({ArgumentType:ao.ArgumentAsDaysOfWeek,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==ao.ArgumentAsDeviceState))&&e.push({ArgumentType:ao.ArgumentAsDeviceState,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==ao.ArgumentAsSceneExecuted))&&e.push({ArgumentType:ao.ArgumentAsSceneExecuted,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),0==e.any((e=>e.ArgumentType==ao.ArgumentAsTime))&&e.push({ArgumentType:ao.ArgumentAsTime,InitialAtMeetConditionValue:!1,ChangableAtMeetCondition:!0}),0==e.any((e=>e.ArgumentType==ao.ArgumentAsTimeSpan))&&e.push({ArgumentType:ao.ArgumentAsTimeSpan,InitialAtMeetConditionValue:!0,ChangableAtMeetCondition:!1}),e}ValidateScene(){var e,t,n,r;if(null==this._result)throw new Error("No context!");const s=[],o=(e,t,n)=>e.RightArgumentType==co.Null?e.LeftArgumentType==t&&e.AtMeetCondition==n?e:null:e.LeftArgumentType==t&&e.AtMeetCondition==n?e:o(e.RightArgument,t,n),i=o(this._result,co.ArgumentAsDaysOfWeek,!0);null!=i&&((null===(e=i.RightArgument)||void 0===e?void 0:e.LeftArgumentType)==co.ArgumentAsTime||(null===(t=i.RightArgument)||void 0===t?void 0:t.LeftArgumentType)==co.ArgumentAsAstronomicalClockWithOffset)&&s.push(io.OptimizeDayOfWeekArgument);const a=o(this._result,co.ArgumentAsTime,!0);return null!=a&&(null===(n=a.RightArgument)||void 0===n?void 0:n.LeftArgumentType)==co.ArgumentAsDaysOfWeek&&(null===(r=a.RightArgument)||void 0===r?void 0:r.AtMeetCondition)&&s.push(io.OptimizeAtInDayOfWeekArgument),{IsValid:0==s.length,Errors:s,TryFix:()=>this.TryFix(s),Ignore:()=>this.Commit()}}TryFix(e){if(null==this._result)throw new Error("No context!");if(e.includes(io.OptimizeDayOfWeekArgument)){const e=t=>{var n,r;return t.LeftArgumentType==co.ArgumentAsDaysOfWeek?(null===(n=t.RightArgument)||void 0===n?void 0:n.LeftArgumentType)==co.ArgumentAsTime||(null===(r=t.RightArgument)||void 0===r?void 0:r.LeftArgumentType)==co.ArgumentAsAstronomicalClockWithOffset?t:e(t.RightArgument):t.RightArgumentType==co.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(io.OptimizeAtInDayOfWeekArgument)){const e=t=>{var n,r;return t.LeftArgumentType==co.ArgumentAsTime?(null===(n=t.RightArgument)||void 0===n?void 0:n.LeftArgumentType)==co.ArgumentAsDaysOfWeek&&(null===(r=t.RightArgument)||void 0===r?void 0:r.AtMeetCondition)?t:e(t.RightArgument):t.RightArgumentType==co.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"}(io||(io={})),function(e){e.Unknown="Unknown",e.ArgumentAsAstronomicalClockWithOffset="ArgumentAsAstronomicalClockWithOffset",e.ArgumentAsDaysOfWeek="ArgumentAsDaysOfWeek",e.ArgumentAsTimeSpan="ArgumentAsTimeSpan",e.ArgumentAsTime="ArgumentAsTime",e.ArgumentAsDeviceState="ArgumentAsDeviceState",e.ArgumentAsSceneExecuted="ArgumentAsSceneExecuted"}(ao||(ao={}));class lo{constructor(){this.Tasks=new fo,this.Guid="",this.ObjectType=1,this.Name="",this.Icon="",this.AtMeetCondition=!1,this.ExecuteOnce=!1,this.IsDisabled=!1,this.HandledType=xs.Unknown,this.ConditionType=Fs.Unknown,this.ConditionTimeout=0,this.LeftArgumentType=co.Null,this.RightArgumentType=co.Null,this.LeftArgument=new po({},co.Null),this.RightArgument=new ho}}class ho{constructor(){this.HandledType=0,this.Argument=null}}class po{constructor(e,t){this.Argument=e,this.HandledType=t}}class go{constructor(){this.DeviceStateType=Ls.Unknown,this.Channel=0,this.DeviceGuid="",this.ComparisonMethod=Rs.Default,this.ComparisonParams=null,this.CheckedDeviceState={}}}class fo{constructor(){this.ControllerTasks=[],this.DevicesTasks=[]}}class vo{constructor(){this.Guid=Fr.NewGuid(),this.RunParallel=!1,this.TaskType=Us.Unknown}}class mo extends vo{constructor(){super(...arguments),this.TaskType=Us.DeviceTask,this.DeviceGuid="",this.Channel=0,this.ControlFeature=br.TurnOn}}class yo extends vo{constructor(){super(...arguments),this.TaskType=Us.DelayTask,this.Delay="00:00:00"}}class wo extends vo{constructor(){super(...arguments),this.TaskType=Us.LockExecution,this.LockType=Vs.Timeout,this.LockStartHour="00:00:00",this.LockEndHour="00:00:00",this.ResetLockScenesGuids=[]}}class So extends vo{constructor(){super(...arguments),this.TaskType=Us.NotifyTask,this.Title="",this.Message="",this.NotifyType=qs.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"}(co||(co={}));class Ao extends Error{constructor(e){super(e),this.message=e,this.name="BadParametersScenesBuilderException"}}class _o extends Error{constructor(e){super(e),this.message=e,this.name="SequenceNotFoundScenesBuilderException"}}class Co extends Error{constructor(e){super(e),this.message=e,this.name="TaskNotFoundScenesBuilderException"}}class To extends Error{constructor(e){super(e),this.message=e,this.name="UnsupportedArgumentScenesBuilderException"}}var Do,ko=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Go{constructor(){this._connection=$v.Get(Ot.ServiceName),this._configurationService=$v.Get(ot.ServiceName)}GetServiceName(){return Go.ServiceName}GetSequencesListAsync(){return ko(this,void 0,void 0,(function*(){var e;const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new bo,12e3,!1);return $v.Get(r.ServiceName).Debug(`GetSequencesListAsync result:\n ${JSON.stringify(t)}}`),null==t?new ke(Is.OtherError,"Cannot get sequences list - response is null."):t.Status!=ce.OK?new ke(Is.OtherError,`Cannot get sequences list - controller responded with response code ${t.Status}.`):null==t.Data?new ke(Is.NoData,"Cannot get sequences list - controller responded with status OK, but response does not contain data!"):t.Data}))}GetSequenceAsync(e){return ko(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 No(n),12e3,!1);if(null==r)return new ke(Is.OtherError,"Cannot get sequence - response is null.");if(r.Status!=ce.OK)return new ke(Is.OtherError,`Cannot get sequence - controller responded with response code ${r.Status}.`);if(null==r.Data)return new ke(Is.NoData,"Cannot get sequence - controller responded with status OK, but response does not contain data!");const s=r.Data;return this.MapSequence(s)}))}GetSequenceBuilder(e,t){return new uo(e,t)}CreateSequenceAsync(e){return ko(this,void 0,void 0,(function*(){var t;try{yield this._configurationService.EnterConfigurationModeAsync(),$v.Get(r.ServiceName).Debug(`Creating sequence ${e.Name} json: \n${JSON.stringify(e)}`);const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Po(e),2e4,!1);return null==n||null==n.Status?ce.Error:n.Status}catch(t){return $v.Get(r.ServiceName).Error(`Creating sequence ${e.Name} error: ${t}`),ce.FatalError}finally{yield this._configurationService.ExitConfigurationModeAsync()}}))}CheckIfSequenceIsUsedInAnotherSequenceAsync(e){return ko(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 Eo(n),12e3,!1);if(null==r)return new ke(Is.OtherError,"Cannot get sequence - response is null.");switch(r.Status){case ce.WrongData:return new ke(Is.InvalidSceneGuid,"Cannot check if sequence is used in another sequence! Sequence not found, invalid sequence guid!");case ce.OK:return null==r.Data?new ke(Is.NoData,"Cannot get sequence - controller responded with status OK, but response does not contain data!"):r.Data;default:return new ke(Is.OtherError,`Cannot check if sequence is used in another sequence! Controller responded with code: ${r.Status}`)}}catch(e){return new ke(Is.FatalError,`Cannot check if sequence is used in another sequence! Fatal error! ${e}`)}}))}DeleteSequenceAsync(e){return ko(this,void 0,void 0,(function*(){var t;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 Uo(n),12e3,!1);return null==r||null==r.Status?ce.Error:r.Status}catch(e){return ce.FatalError}finally{yield this._configurationService.ExitConfigurationModeAsync()}}))}EditSequenceAsync(e){return ko(this,void 0,void 0,(function*(){var t;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 Oo(n),2e4,!1);return null==r||null==r.Status?ce.Error:r.Status}catch(t){return $v.Get(r.ServiceName).Error(`Editing sequence ${e.Name} error: ${t}`),ce.FatalError}finally{yield this._configurationService.ExitConfigurationModeAsync()}}))}EnableSequenceAsync(e){return ko(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 Mo(n),12e3,!1);return null==r||null==r.Status?ce.Error:r.Status}))}DisableSequenceAsync(e){return ko(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 xo(n),12e3,!1);return null==r||null==r.Status?ce.Error:r.Status}))}RunSequenceAsync(e){return ko(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 Wr;switch(n.Channel=1,n.DeviceGuid=t,yield $v.Get(Lo.ServiceName).ExecuteDeviceTaskAsync({Guid:t},n)){case Gt.Executed:return ce.OK;case Gt.DeviceNotFound:return ce.WrongData;default:return ce.Error}}))}GetUtilsAsync(){return ko(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 ko(this,void 0,void 0,(function*(){const e=$v.Get(Cs.ServiceName),t=new ys;let n=!1;t.Latitude=49.9958888026741,t.Longitude=18.9172596008914;try{if(yield e.IsControllerGeolocationSetAsync()){const n=yield e.GetControlllerGeolocationAsync();n instanceof ws&&(t.Latitude=n.Latitude,t.Longitude=n.Longitude)}}catch(e){$v.Get(r.ServiceName).Warning(`Cannot get localization data, using default values: 49.9958888026741, 18.9172596008914. Error: ${e}`)}const s=e=>{let n=7.95204*Math.sin(.01768*e+3.03217)+9.98906*Math.sin(.03383*e+3.4687)+4*(t.Longitude-15*Math.round(t.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()})()&&(n-=60),n},o=e=>Math.asin(-.39795*Math.cos(2*Math.PI*(e+10)/365)),i=e=>{const n=t.Latitude*Math.PI/180;let r=Math.sin(n)*Math.sin(e)/(Math.cos(n)*Math.cos(e));return r=(e=>(e<-1&&(e=-1),e>1&&(e=1),e))(r),r},a=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)},c=e=>{const t=new Date;t.setDate(t.getDate()+e);const r=(u=t,Math.floor((u.valueOf()-new Date(u.getFullYear(),0,0).valueOf())/1e3/60/60/24));var u;const l=s(r),d=o(r),h=((e,t)=>{let n=720-720/Math.PI*Math.acos(-e)-t;return n<0&&(n+=1440),n})(i(d),l),p=a(h);return new Date>p&&!n?(n=!0,c(1)):(n=!1,new Date(t.getFullYear(),t.getMonth(),t.getDate(),p.getHours(),p.getMinutes()))},u=e=>{const t=new Date;t.setDate(t.getDate()+e);const r=(c=t,Math.floor((c.valueOf()-new Date(c.getFullYear(),0,0).valueOf())/1e3/60/60/24));var c;const l=s(r),d=o(r),h=i(d),p=Math.floor(((e,t)=>{let n=720+720/Math.PI*Math.acos(-e)-t;return n>1439&&(n-=1439),n})(h,l)),g=a(p);return new Date>g&&!n?(n=!0,u(1)):(n=!1,new Date(t.getFullYear(),t.getMonth(),t.getDate(),g.getHours(),g.getMinutes()))};return{GetSunRiseTime:()=>c(0),GetSunSetTime:()=>u(0)}}))}MapSequence(e,t=!1){const n=Object.assign({},e),r=e=>{if(e.RightArgumentType!=Do.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=Us.DeviceTask,e.RunParallel=!1}))),null!=e.Tasks.ControllerTasks&&e.Tasks.ControllerTasks.map((e=>{null==(null==e?void 0:e.Guid)&&(e.Guid=Fr.NewGuid())}))};return r(e),n._rawRequestData=JSON.parse(JSON.stringify(e)),t?(n.RightArgument=null,n.RightArgumentType=$s.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==$s.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===$s.Condition&&(e.RightArgumentType=this.MapArgumentType(e.RightArgumentType),e.RightArgument=this.MapRightArgument(e.RightArgument,e.RightArgumentType))),e}MapLeftArgument(e,t){let n=new Io;switch(n.HandledType=e.HandledType,t){case $s.ArgumentAsAstronomicalClock:n.Argument.ArgumentAsAstronomicalClock={Position:e.Argument};break;case $s.ArgumentAsAstronomicalClockWithOffset:n.Argument.ArgumentAsAstronomicalClockWithOffset={Offset:e.Argument.Offset,Position:e.Argument.Position};break;case $s.ArgumentAsBoolean:n.Argument.ArgumentAsBoolean=e.Argument;break;case $s.ArgumentAsDayOfWeek:n.Argument.ArgumentAsDayOfWeek=e.Argument;break;case $s.ArgumentAsDaysOfWeek:n.Argument.ArgumentAsDaysOfWeek=e.Argument;break;case $s.ArgumentAsInt:n.Argument.ArgumentAsInt=e.Argument;break;case $s.ArgumentAsTimeout:n.Argument.ArgumentAsTimeout=e.Argument;break;case $s.ArgumentAsTimeSpan:n.Argument.ArgumentAsTimeSpan={days:e.Argument.days,hours:e.Argument.hours,minutes:e.Argument.minutes,seconds:e.Argument.seconds};break;case $s.ArgumentAsTime:n.Argument.ArgumentAsTime={Hour:e.Argument.Hour,Minute:e.Argument.Minute,Second:e.Argument.Second};break;case $s.ArgumentAsDeviceState:{const t=new to;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?Rs.Default:e.Argument.ComparisonMethod,null!=e.Argument.ComparisonParams&&Object.entries(e.Argument.ComparisonParams).forEach((e=>{switch(e[0]){case"DeltaValue":case"StateRepeatCount":t.SetComparisonParam(Ps[e[0]],new no(e[1]));break;case"DeltaCalculationTimeRange":case"StateRepeatTimeRange":t.SetComparisonParam(Ps[e[0]],new ro(e[1]))}})),n.Argument.ArgumentAsDeviceState=t;break}case $s.ArgumentAsConditionInfo:n.Argument.ArgumentAsConditionInfo={DeviceGuid:e.Argument.DeviceGuid}}return n}MapArgumentType(e){return $s[Do[e]]}MapDeviceStateTypeToResponseType(e){switch(e){case Ls.BatteryState:return _t.BatteryState;case Ls.BinarySensor:return _t.BinarySensorState;case Ls.BlindPosition:return _t.BlindPosition;case Ls.Brightness:return _t.MeasuredBrightness;case Ls.ButtonState:return _t.RemoteButtonState;case Ls.ChannelOnOff:return _t.ChannelOnOffState;case Ls.DoorBell:return _t.DoorBellState;case Ls.Energy:return _t.MeasuredEnergy;case Ls.FloodSensor:return _t.FloodSensorState;case Ls.GatePosition:return _t.GatePosition;case Ls.LightBrightness:return _t.LightBrightness;case Ls.LightColor:return _t.LightColor;case Ls.LightTemperature:return _t.LightWarmth;case Ls.ReedState:return _t.ReedState;case Ls.SmokeSensor:return _t.SmokeSensorState;case Ls.Temperature:return _t.MeasuredTemperature;case Ls.Humidity:return _t.HumiditySensorState;case Ls.BlindsControlButton:return _t.BlindRemoteButtonState;case Ls.FacadeControlButton:return _t.FacadeRemoteButtonState;case Ls.Movement:return _t.MovementSensorState;case Ls.AirPressure:return _t.PressureSensorState;case Ls.WindSpeed:return _t.WindSpeedState;case Ls.WindThreshold:return _t.CurrentWindThreshold;default:return _t.Unknown}}CreateDeviceState(e,t,n){switch(n){case _t.BatteryState:return{Channel:t,StateReliability:Lt.Unconfident,Percentage:e.Percentage,State:e.State,Time:""};case _t.BinarySensorState:return{Channel:t,StateReliability:Lt.Unconfident,State:e.State,Time:""};case _t.BlindPosition:return{Channel:t,StateReliability:Lt.Unconfident,Position:e.Position,RawPosition:e.RawPosition,Time:""};case _t.LightBrightness:case _t.MeasuredBrightness:return{Channel:t,StateReliability:Lt.Unconfident,Brightness:e.Brightness,Time:""};case _t.RemoteButtonState:case _t.ChannelOnOffState:case _t.DoorBellState:return{Channel:t,StateReliability:Lt.Unconfident,State:e.State,Time:""};case _t.MeasuredEnergy:{const n=new Map;for(let[t,r]of Object.entries(e.MeasurementParameters))n.set(jt[t],r);return{Channel:t,StateReliability:Lt.Unconfident,MeasurementParameters:n,Time:""}}case _t.FloodSensorState:return{Channel:t,StateReliability:Lt.Unconfident,State:e.State,Time:""};case _t.GatePosition:return{Channel:t,StateReliability:Lt.Unconfident,Position:e.Position,PositionType:e.PositionType,Time:""};case _t.LightColor:return{Channel:t,StateReliability:Lt.Unconfident,R:e.R,G:e.G,B:e.B,Time:""};case _t.LightWarmth:return{Channel:t,StateReliability:Lt.Unconfident,Temperature:e.Temperature,Time:""};case _t.ReedState:return{Channel:t,StateReliability:Lt.Unconfident,State:e.State,Time:""};case _t.SmokeSensorState:throw new oo("Unsupported device state!");case _t.MeasuredTemperature:return{Channel:t,StateReliability:Lt.Unconfident,Temperature:e.Temperature,Time:"",Type:e.Type};case _t.HumiditySensorState:return{Channel:t,StateReliability:Lt.Unconfident,Humidity:e.Humidity,Time:"",Type:e.Type};case _t.BlindRemoteButtonState:return{Channel:t,StateReliability:Lt.Unconfident,State:e.State,Time:""};case _t.LightRGBWState:return{StateReliability:Lt.Unconfident,Channel:t,Time:"",Brightness:100,R:e.R,G:e.G,B:e.B,W:e.W};case _t.FacadeRemoteButtonState:return{Channel:t,Time:"",StateReliability:Lt.Unconfident,State:e.State};case _t.MovementSensorState:return{Channel:t,Time:"",StateReliability:Lt.Unconfident,Movement:e.Movement,Intensity:e.Intensity};case _t.PressureSensorState:return{Channel:t,Time:"",StateReliability:Lt.Unconfident,Pressure:e.Pressure,PressureType:e.PressureType};case _t.WindSpeedState:return{Channel:t,Time:"",StateReliability:Lt.Unconfident,Value:e.Value};case _t.CurrentWindThreshold:return{Channel:t,Time:"",StateReliability:Lt.Unconfident,WindThreshold:e.WindThreshold};case _t.Unknown:return new mn;default:throw new oo("Unsupported device state!")}}MapDeviceTask(e){let t=new Lr,n=e;switch($v.Get(r.ServiceName).Debug(`[TASK] object: ${JSON.stringify(n)}`),n.ControlFeature){case br.TurnOn:t=new Wr,t.TaskType=At.TurnOn;break;case br.TurnOff:t=new $r,t.TaskType=At.TurnOff;break;case br.ToggleState:t=new Hr,t.TaskType=At.TogleState;break;case br.SetBlindPosition:{const e=$v.Get(Lo.ServiceName).GetDevice(n.DeviceGuid);(null==e?void 0:e.AvailableTaskTypes.any((e=>"IBlindPositionSimple"==e.InterfaceType)))?(t=new Jr,t.TaskType=At.SetBlindPositionSimple,t.Action=n.Data.Action):(t=new zr,t.TaskType=At.SetBlindPosition,t.Action=n.Data.Action,t.Position=n.Data.Position);break}case br.SetLightColor:t=new Kr,t.TaskType=At.SetLightColor,t.R=n.Data.R,t.G=n.Data.G,t.B=n.Data.B;break;case br.SetLightTemperature:t=new jr,t.TaskType=At.SetLightTemperature,t.Temperature=n.Data.Temperature;break;case br.SetLightBrightness:t=new Vr,t.TaskType=At.SetLightBrightness,t.Brightness=n.Data.Brightness;break;case br.SetTemperature:t=new Br,t.TaskType=At.SetTemperature,t.Temperature=n.Data.Temperature;break;case br.GetState:t=new es,t.TaskType=At.GetChannelsState;break;case br.TurnOnWithTimeout:t=new qr,t.TaskType=At.TurnOnWithTime,t.SwitchOffDelaySeconds=n.Data.SwitchOffDelaySeconds;break;case br.SetLightBrightnessDynamicly:t=new Yr,t.TaskType=At.SetLightBrightnessDynamicly,t.Brightness=n.Data.Brightness;break;case br.IdentifyDevice:t=new Xr,t.TaskType=At.IdentifyDevice;break;case br.SetBlindOpenCloseTime:t=new Qr,t.TaskType=At.SetBlindOpenCloseTime,t.Data.CloseTime=n.Data;break;case br.SetBlindMicroventilation:t=new ts,t.TaskType=At.SetBlindMicroventilation,t.Position=n.Data.Position;break;case br.GatewayPulse:t=new rs,t.TaskType=At.ChangeGatewayPositionPulse;break;case br.GatePulse:t=new ns,t.TaskType=At.ChangeGatePositionPulse;break;case br.SetFacadePositionAndTilt:t=new ss,t.TaskType=At.SetFacadePosition,t.Position=n.Data.Position,t.Tilt=n.Data.Tilt,t.FacadeAction=Rr.TiltAndPercentage;break;case br.GetFacadeType:t=new os,t.TaskType=At.GetFacadeType;break;case br.LightRGBW:t=new as,t.TaskType=At.LightRGBW,t.Data=n.Data}return t.Channel=n.Channel,t.DeviceGuid=n.DeviceGuid,t.FeatureType=n.ControlFeature,t.Guid=Fr.NewGuid(),t}MapControllerTasks(e){const t=[];$v.Get(r.ServiceName).Debug(`[TASKS] received tasks object: ${JSON.stringify(e)}`);for(let n of e){const e=new Ro;switch(e.Guid=n.Guid,e.TaskId=se.GenerateMd5(JSON.stringify(n)),n.TaskType){case Us.DeviceTask:e.TaskType=Ms.DeviceTask,e.Task.DeviceTask=this.MapDeviceTask(n);break;case Us.DelayTask:e.TaskType=Ms.DelayTask,e.Task.DelayTask={Delay:new ro(n.Delay)};break;case Us.NotifyTask:e.TaskType=Ms.NotifyTask,e.Task.NotifyTask={Message:n.Message,NotifyType:n.NotifyType,NotificationClients:n.NotificationClients};break;case Us.LockExecution:case Us.LockExecution:e.TaskType=Ms.LockExecution,$v.Get(r.ServiceName).Debug(`[TASKS] received task LockExecution object: ${JSON.stringify(n)}`),e.Task.LockExecution={LockStartHour:new ro(n.LockStartHour),LockEndHour:new ro(n.LockEndHour),LockType:n.LockType,ResetLockScenesGuids:n.ResetLockScenesGuids};case Us.Unknown:}t.push(e)}return t}GetSupportedTaskTypesAsync(){return ko(this,void 0,void 0,(function*(){const e=yield $v.Get(Js.ServiceName).GetSoftwareRuntimeInfoAsync(),[t,n]=e.SoftwareVersion.split(".").map((e=>parseInt(e))),r=[Ws.DeviceTask];return(t>5||5==t&&n>=27)&&r.push(Ws.DelayTask),(t>5||5==t&&n>=37)&&r.push(Ws.LockExecutionTask),(t>6||6==t&&n>=3)&&r.push(Ws.NotifyTaskAppNotify),r}))}}Go.ServiceName="ScenesService";class bo extends ae{constructor(){super(),this.Resource="/logic/sequences/list",this.Method=ue.Get}}class No extends ae{constructor(e){super(),this.Resource="/logic/sequence",this.Method=ue.Get,this.Data=e}}class Eo extends ae{constructor(e){super(),this.Resource="/logic/sequences/used",this.Method=ue.Get,this.Data=e}}class Io{constructor(){this.HandledType=Do.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"}(Do||(Do={}));class Ro{constructor(){this.TaskId="",this.Guid="",this.TaskType=Ms.Unknown,this.Task={}}}class Po extends ae{constructor(e){super(),this.Resource="/logic/sequence",this.Method=ue.Put,this.Data=e}}class Oo extends ae{constructor(e){super(),this.Resource="/logic/sequence/edit",this.Method=ue.Put,this.Data=e}}class Uo extends ae{constructor(e){super(),this.Resource="/logic/sequence",this.Method=ue.Delete,this.Data=e}}class Mo extends ae{constructor(e){super(),this.Resource="/logic/sequence/enable",this.Method=ue.Post,this.Data=e}}class xo extends ae{constructor(e){super(),this.Resource="/logic/sequence/disable",this.Method=ue.Post,this.Data=e}}var Fo=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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._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(Ot.ServiceName),this._session=$v.Get(ze.ServiceName),this._controllerConfiguration=$v.Get(ot.ServiceName),this._onDeviceStateChangedEvent.Subscribe((e=>Fo(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=>Fo(this,void 0,void 0,(function*(){var t;try{this._devices=yield this.GetPairedDevicesAsync()}catch(e){null===(t=s.Log)||void 0===t||t.Error(Lo.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=>Fo(this,void 0,void 0,(function*(){var t;try{yield this.WaitForSynchronizationAsync(),yield this.SyncDevicesStatesAsync()}catch(e){null===(t=s.Log)||void 0===t||t.Error(Lo.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!=Dt.Scene&&(null===(t=s.Log)||void 0===t||t.Debug(Lo.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],s=this.MapApiDeviceStateToDeviceState(e,n);if(null!=s){this._onDeviceStateRefreshedOrChangedEvent.Invoke({Device:e,State:s}),s.TypeAsEnum==_t.SignalStrength?e.Channels.forEach((t=>{let r=new Yn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateRefreshedOrChangedEvent.Invoke({Device:e,State:r})})):s.TypeAsEnum==_t.BatteryState&&e.Channels.forEach((t=>{let r=new xn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateRefreshedOrChangedEvent.Invoke({Device:e,State:r})}));let r=e.States.find((e=>e.TypeAsEnum===s.TypeAsEnum&&e.Data.Channel===s.Data.Channel));if(r){let o=r.StatesComparisonData;if(s.TypeAsEnum==_t.BlindErrorState&&(null===(t=s.Data)||void 0===t?void 0:t.ErrorCode)!=r.Data.ErrorCode)return void this._onDeviceStateChangedEvent.Invoke({Device:e,State:s});r.Data=s.Data,o!==s.StatesComparisonData&&(this._onDeviceStateChangedEvent.Invoke({Device:e,State:s}),s.TypeAsEnum==_t.SignalStrength?e.Channels.forEach((t=>{let r=new Yn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateChangedEvent.Invoke({Device:e,State:r})})):s.TypeAsEnum==_t.BatteryState&&e.Channels.forEach((t=>{let r=new xn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateChangedEvent.Invoke({Device:e,State:r})})))}else e.States.push(s),this._onDeviceStateChangedEvent.Invoke({Device:e,State:s}),s.TypeAsEnum==_t.SignalStrength?e.Channels.forEach((t=>{let r=new Yn(Object.assign({},n));r.Data.Channel=t.Number,this._onDeviceStateChangedEvent.Invoke({Device:e,State:r})})):s.TypeAsEnum==_t.BatteryState&&e.Channels.forEach((t=>{let r=new xn(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(be.ServiceName).ClearCache(),this.MapApiDevices(e.Data).forEach((e=>{var t;null===(t=s.Log)||void 0===t||t.Debug(Lo.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(be.ServiceName).ClearCache(),this.MapApiDevices(e.Data).forEach((e=>{var t;null===(t=s.Log)||void 0===t||t.Debug(Lo.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 Fo(this,void 0,void 0,(function*(){var t,n,r,o,i,a;try{let a;if("string"==typeof e){const n=this.GetDevice(e);if(null==n)return null===(t=s.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 Zo(a.Guid),2e4,!1);if(null==u||null==u.Status)return null===(r=s.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===(o=s.Log)||void 0===o||o.Error("Cannot check if device is used in scenes! No data!"),ce.FatalError;var c=yield $v.Get(Go.ServiceName).GetSequencesListAsync();if(c instanceof ke)return null===(i=s.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 ri;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=s.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 Fo(this,void 0,void 0,(function*(){const e=$v.Get(ps.ServiceName).SaveAsync("FastDevicesSync",!1,!0);return yield $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),e}))}DisableFastStatesSyncAsync(){return Fo(this,void 0,void 0,(function*(){const e=$v.Get(ps.ServiceName).SaveAsync("FastDevicesSync",!1,!1);return yield $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),e}))}IsFastStatesSyncEnabledAsync(){return Fo(this,void 0,void 0,(function*(){const e=yield $v.Get(ps.ServiceName).ReadAsync("FastDevicesSync",!1,!1);return e instanceof ls?e.Data:e!=ce.ResourceDoesNotExists&&e}))}GetDevicesForManualPairingAsync(e){return Fo(this,void 0,void 0,(function*(){let t=$v.Get(us.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 Fo(this,void 0,void 0,(function*(){var t=yield $v.Get(us.ServiceName).AddManuallyPairedDeviceAsync(e);return yield $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),t}))}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 Bo;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 Bo,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==_t.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 Fo(this,void 0,void 0,(function*(){var e;const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new jo,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(";"),o=new xt;o.DeviceGuid=r[0],o.Channel=Number(r[1]),o.Status=mt.ExecutingTasks,t.push(o),null===(n=s.Log)||void 0===n||n.Debug(Lo.ServiceName,`Device ${o.DeviceGuid} has task on channel ${o.Channel}`)})),this._onDevicesTasksChangedEvent.Invoke(t)}MapApiDeviceStateToDeviceState(e,t){var n;switch(t.state,t.DataType){case"ChannelOnOff":return new yn(t);case"DoorBell":return new An(t);case"ReedPosition":return new Cn(t);case"BlindPosition":return new Dn(t);case"ButtonState":return new Gn(t);case"LightColor":return new Nn(t);case"LightTemperature":return new In(t);case"LightBrightness":return new Pn(t);case"TemperatureSensor":case"TemperatureState":case"MeasuredTemperature":return new Un(t);case"BatteryState":return new xn(t);case"MeasuredBrightness":case"DeviceBrightnessState":return new Ln(t);case"EnergyMeasuredPower":case"EnergyMeasuredCurrent":case"EnergyMeasuredVoltage":break;case"IEnergy":case"Energy":return new $n(t);case"DistanceSensor":return new qn(t);case"MovementSensor":return new Vn(t);case"BlindsControlButton":return new Kn(t);case"FacadeControlButton":return new zn(t);case"SignalStrength":return new Yn(t);case"GatePosition":return new Xn(t);case"GatewayPosition":return new Zn(t);case"GateControllerHealth":return new er(t);case"IBlindCalibrationStatus":case"BlindCalibration":return new tr(t);case"HumiditySensor":case"HumidityState":return new nr(t);case"VibrationSensor":return new sr(t);case"DigitalInputSensor":return new or(t);case"ConfigurationState":return new ar(t);case"BlindOpenCloseTime":case"IBlindOpenCloseTime":return new cr(t);case"IOvercurrentProtection":case"OvercurrentProtection":return new ur(t);case"IOvercurrentProtectionThreshold":case"OvercurrentProtectionThreshold":return new lr(t);case"FacadePosition":case"FacadeState":return new dr(t);case"FacadeTypeState":return new hr(t);case"CurrentWindThreshold":return new pr(t);case"CurrentLightThreshold":return new fr(t);case"WindSpeed":return new vr(t);case"FloodSensor":return new yr(t);case"PressureState":return new Sr(t);case"ITamperProtection":case"TamperProtection":return new _r(t);case"ILightRGBW":case"LightRGBW":return new Cr(t);case"OnlineCamera":case"IOnlineCamera":return new Sn(t);case"BlindError":case"IBlindError":return t.state.ErrorData=ie(t.state.ErrorData),new Tr(t);default:null===(n=s.Log)||void 0===n||n.Debug(Lo.ServiceName,`Not supported device state ${t.DataType}`)}return null}GetServiceName(){return Lo.ServiceName}SyncDevicesStatesAsync(){return Fo(this,arguments,void 0,(function*(e=!1){var t,n,r;const s=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Wo,15e3,!1);if(yield this.IsFastStatesSyncEnabledAsync()){if(e){let e=new qo;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==s?void 0:s.Status)==ce.OK}{let e=new qo;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,o,i,a=new Dr;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=St.Unknown;try{null===(n=e.AvailableTasks)||void 0===n||n.forEach((e=>{var t=new Ut;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 Mt;t.InterfaceType=e,a.AvailableResponseTypes.push(t)})),null===(o=e.ChannelsConfiguration)||void 0===o||o.forEach((e=>{var t,n,r;try{var o=new Or;o.Number=e.Channel,a.Channels.push(o),o.SetDevice(a),o.Name=e.ChannelName,o.ChannelGroups=e.GroupsGuids,o.IconName=e.IconName,o.IsHidden=e.Hidden,o.Configurations=e.Configurations,o.CustomDataAndRolesSupported=void 0!==e.CustomData&&null!==e.CustomData,void 0!==e.CustomData&&null!==e.CustomData&&(o.CustomData=e.CustomData),void 0!==e.Roles&&null!==e.Roles&&(o.Roles=e.Roles),null===(t=e.AvailableResponses)||void 0===t||t.forEach((e=>{var t=new Mt;t.InterfaceType=e,o.AvailableResponseTypes.push(t)})),null===(n=e.AvailableTasks)||void 0===n||n.forEach((e=>{var t=new Ut;a.AvailableTaskTypes.any((e=>"IBlindPositionSimple"==e.InterfaceType))?"IBlindPosition"==e&&(t.InterfaceType="IBlindPositionSimple"):t.InterfaceType=e,o.AvailableTaskTypes.push(t)}))}catch(e){null===(r=s.Log)||void 0===r||r.Error(e)}}))}catch(e){null===(i=s.Log)||void 0===i||i.Error(e)}t.push(a)})),t)}GetPairedDevicesAsync(){return Fo(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 o=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new $o,15e3,!0);return null==o||void 0===o?[]:o.Status==ce.OK&&null!=o.Data?e?this.MapApiDevices(o.Data):this.MapApiDevices(o.Data.filter((e=>e.DeviceType!=Dt.Scene))):(null===(r=s.Log)||void 0===r||r.Error(Lo.ServiceName,`Failed to get devices. ${o.Status} ${o.Data}`),[])}))}GetDevicesAsync(){return Fo(this,arguments,void 0,(function*(e=!1){return yield this.WaitForSynchronizationAsync(),this.GetPairedDevicesAsync(e)}))}GetFoundDevicesAsync(){return Fo(this,void 0,void 0,(function*(){var e,t;const n=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Ko,15e3,!1);return null==n?[]:n.Status==ce.OK&&null!=n.Data?this.MapApiDevices(n.Data).where((e=>e.DeviceType!==Dt.Scene)).toArray():(null===(t=s.Log)||void 0===t||t.Error(Lo.ServiceName,`Failed to get found devices. ${n.Status} ${n.Data}`),[])}))}GetDevice(e){return this._devices.find((t=>t.Guid===e))}FindDevicesAsync(){return Fo(this,void 0,void 0,(function*(){var e;$v.Get(be.ServiceName).ClearCache(),yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Vo,35e3,!1)}))}StopSearchingForDevices(){return Fo(this,void 0,void 0,(function*(){var e;yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Ho,2e4,!1)}))}RegisterDeviceAsync(e){return Fo(this,void 0,void 0,(function*(){var t,n;try{const n=new zo;n.Data=e.Guid;const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(n,2e4,!1);return $v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==r?void 0:r.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===(n=s.Log)||void 0===n||n.Error(Lo.ServiceName,`Failed to paired devices: ${e}`),Gt.ControllerResponseTimeout}}))}RemoveDeviceAsync(e){return Fo(this,arguments,void 0,(function*(e,t=!1){var n,r=new Jo;t&&(r=new Yo),r.Data=e.Guid;const s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(r,35e3,!1);return $v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==s?void 0:s.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 ei;const r=t;switch(r.FeatureType){case br.SetTemperature:n.Data=r.Temperature;break;case br.SetLightBrightness:n.Data=r.Brightness;break;case br.SetLightColor:n=new ti;const e=r;n.R=e.R,n.G=e.G,n.B=e.B;break;case br.SetLightTemperature:n.Data=r.Temperature;break;case br.SetGatePositionPrecise:switch(r.GateControlAction){case Er.Open:n.Data=101;break;case Er.Close:n.Data=102;break;case Er.Stop:n.Data=103;break;case Er.Percentage:n.Data=r.Position}break;case br.SetBlindPosition:switch(r.Action){case Nr.Open:n.Data=101;break;case Nr.Close:n.Data=102;break;case Nr.Stop:n.Data=103;break;case Nr.Percentage:n.Data=r.Position}break;case br.SetLightBrightnessDynamicly:n.Data=r.Brightness;break;case br.SetBlindOpenCloseTime:n.Data=r.Data;break;case br.SetBlindMicroventilation:n.Data=r.Position;break;case br.SetFacadePositionAndTilt:n=new ni;const t=r;n.FacadeAction=t.FacadeAction,n.Tilt=t.Tilt,n.Position=t.Position;break;case br.LightRGBW:n.Data=r.Data;break;case br.GatePulse:case br.GatewayPulse:n.Data=0;break;case br.TurnOnWithTimeout:n.Data=r.SwitchOffDelaySeconds}return n.Channel=r.Channel,n.DeviceGuid=e.Guid,n.ControlFeature=r.FeatureType,n}ExecuteDeviceTaskAsync(e,t){return Fo(this,void 0,void 0,(function*(){var n,r,o,i,a,c,u,l;try{null===(n=s.Log)||void 0===n||n.Debug(Lo.ServiceName,`Preparing device task execution, device: ${e.Guid} task: ${t.TaskType} channel: ${t.Channel}`);let l=this.MapDeviceTaskToDeviceTaskInfo(e,t);try{const e=new Xo(l);null===(r=s.Log)||void 0===r||r.Debug(Lo.ServiceName,`Sending device task for execution, device: ${l.DeviceGuid} task: ${l.ControlFeature} channel: ${l.Channel} request: ${JSON.stringify(e)}`);const t=yield null===(o=this._connection)||void 0===o?void 0:o.SendAndWaitForResponseAsync(e,15e3,!1);switch(null==t?void 0:t.Status){case ce.OK:return Gt.Executed;case ce.FatalError:return null===(i=s.Log)||void 0===i||i.Error(Lo.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=s.Log)||void 0===a||a.Error(Lo.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=s.Log)||void 0===c||c.Error(Lo.ServiceName,`Failed to get controller response in time.\n${e}`),Gt.ControllerResponseTimeout):(null===(u=s.Log)||void 0===u||u.Error(Lo.ServiceName,`Unknown error occured when tried to execute task on device.\n${e}`),Gt.Failed)}return Gt.Unknown}catch(e){return null===(l=s.Log)||void 0===l||l.Error(Lo.ServiceName,`Unknown error occured when tried to execute task on device.\n${e}`),Gt.Failed}}))}ExecuteDevicesTasksAsync(e){return Fo(this,void 0,void 0,(function*(){var t,n,r,o;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 Qo(a);try{const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(u,12e4,!1);let o=-1;null===(n=null==r?void 0:r.Data)||void 0===n||n.forEach((t=>{var n,a;o++;let c=Gt.Unknown;switch(t.Status){case ce.OK:return Gt.Executed;case ce.FatalError:null===(n=s.Log)||void 0===n||n.Error(Lo.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=s.Log)||void 0===a||a.Error(Lo.ServiceName,`Unknown error occured when trying to execute task on device. Error code: ${r.Data}`),c=Gt.Failed)}let u=0,l=new Ft;for(const[t,n]of e){if(u==o){l.Device=t,l.Task=n,l.Channel=n.Channel,i.push(l);break}u++}}))}catch(t){if(t.message.includes("timeout")){null===(r=s.Log)||void 0===r||r.Error(Lo.ServiceName,`Failed to get controller response in time.\n${t}`);for(const[t,n]of e){let e=new Ft;i.push(e),e.Device=t,e.Task=n,e.Channel=n.Channel,e.Result=Gt.ControllerResponseTimeout}}else{null===(o=s.Log)||void 0===o||o.Error(Lo.ServiceName,`Unknown error occured when tried to execute task on device.\n${t}`);for(const[t,n]of e){let e=new Ft;i.push(e),e.Device=t,e.Task=n,e.Channel=n.Channel,e.Result=Gt.Failed}}}return i}))}}Lo.ServiceName="DevicesService";class Bo{constructor(){this.Channel=0,this.States=[]}}class $o extends ae{constructor(){super(),this.Resource="/devices/list",this.Method=ue.Get}}class Wo extends ae{constructor(){super(),this.Data=!1,this.Resource="/devices/channels/states",this.Method=ue.Get}}class qo extends ae{constructor(){super(),this.Data=!1,this.Resource="/devices/channels/states/sync",this.Method=ue.Get}}class Vo extends ae{constructor(){super(),this.Resource="/devices/search",this.Method=ue.Post}}class Ho extends ae{constructor(){super(),this.Resource="/devices/search/stop",this.Method=ue.Post}}class Ko extends ae{constructor(){super(),this.Resource="/devices/found/list",this.Method=ue.Get}}class jo extends ae{constructor(){super(),this.Resource="/devices/tasks",this.Method=ue.Get}}class zo extends ae{constructor(){super(),this.Resource="/devices/device/pair",this.Method=ue.Put}}class Jo extends ae{constructor(){super(),this.Resource="/devices/device/unpair",this.Method=ue.Put}}class Yo extends ae{constructor(){super(),this.Resource="/devices/device/unpair/force",this.Method=ue.Put}}class Xo extends ae{constructor(e){super(),this.Resource="/devices/device/control",this.Method=ue.Post,this.Data=e}}class Qo extends ae{constructor(e){super(),this.Resource="/devices/devices/control",this.Method=ue.Post,this.Data=e}}class Zo extends ae{constructor(e){super(),this.Resource="/logic/device/used",this.Method=ue.Get,this.Data=e}}class ei{constructor(){this.DeviceGuid="",this.Channel=0,this.ControlFeature=br.GetState,this.SequnceExecutionOrder=0}}class ti extends ei{constructor(){super(...arguments),this.R=0,this.G=0,this.B=0}}class ni extends ei{constructor(){super(...arguments),this.FacadeAction=Rr.Stop,this.Tilt=0,this.Position=0}}class ri{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 oi=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 ii extends Error{constructor(e){super(e),this.name="InvalidOperationException",this.stack=this.stack||(new Error).stack}}const ai=(e,t)=>e===t;class ci{iterator;constructor(e){this.iterator=e}[Symbol.asyncIterator](){return this.iterator()}}class ui{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 li{iterator;constructor(e){this.iterator=e}[Symbol.iterator](){return this.iterator()}}class di extends Array{}const hi=(e,t,n,r)=>{if(r){if(!n)throw new ReferenceError("TAccumulate function is undefined");return fi(e,t,n,r)}return n?gi(e,t,n):pi(e,t)},pi=(e,t)=>{let n;for(const r of e)n=n?t(n,r):r;if(void 0===n)throw new ii(oi.NoElements);return n},gi=(e,t,n)=>{let r=t;for(const t of e)r=n(r,t);return r},fi=(e,t,n,r)=>{let s=t;for(const t of e)s=n(s,t);return r(s)},vi=(e,t)=>{for(const n of e)if(!1===t(n))return!1;return!0},mi=async(e,t)=>{for(const n of e)if(!1===await t(n))return!1;return!0},yi=(e,t)=>t?Si(e,t):wi(e),wi=e=>{for(const t of e)return!0;return!1},Si=(e,t)=>{for(const n of e)if(!0===t(n))return!0;return!1},Ai=async(e,t)=>{for(const n of e)if(!0===await t(n))return!0;return!1},_i=(e,t)=>new li((function*(){yield*e,yield t})),Ci=e=>{if(Array.isArray(e)){if(0===e.length)throw new ii(oi.NoElements);return new ci((async function*(){for await(const t of e)yield t}))}return new ci(e)},Ti=e=>Ci((async function*(){for(const t of e)yield t})),Di=(e,t)=>new ui({generator:t,type:e}),ki=e=>Di(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 s of e)n+=t(s),r+=1;else for(const t of e)n+=t,r+=1;if(0===r)throw new ii(oi.NoElements);return n/r},bi=async(e,t)=>{let n=0,r=0;for(const s of e)n+=await t(s),r+=1;if(0===r)throw new ii(oi.NoElements);return n/r},Ni=(e,t)=>{if(t<1)throw new si("size");return new li((function*(){let n=[];for(const r of e)n.push(r),n.length===t&&(yield n,n=[]);n.length&&(yield n)}))},Ei=(e,t)=>new li((function*(){yield*e,yield*t})),Ii=(e,t,n=ai)=>{for(const r of e)if(n(t,r))return!0;return!1},Ri=async(e,t,n)=>{for(const r of e)if(await n(t,r))return!0;return!1},Pi=(e,t)=>t?Ui(e,t):Oi(e),Oi=e=>{let t=0;for(const n of e)t++;return t},Ui=(e,t)=>{let n=0;for(const r of e)!0===t(r)&&n++;return n},Mi=async(e,t)=>{let n=0;for(const r of e)!0===await t(r)&&n++;return n},xi=(e,t)=>new li((function*(){let n=!1;for(const t of e)n=!0,yield t;n||(yield t)})),Fi=(e,t=ai)=>new li((function*(){const n=[];for(const r of e)n.find((e=>t(e,r)))||(n.push(r),yield r)})),Li=(e,t)=>Ci((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}})),Bi=(e,t)=>new li((function*(){for(const n of e)t(n),yield n})),$i=(e,t)=>Ci((async function*(){for(const n of e)await t(n),yield n})),Wi=(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")},qi=(e,t)=>{let n=0;for(const r of e)if(t===n++)return r;return null},Vi=(e,t,n=ai)=>new li((function*(){const r=[...t];for(const t of e){let e=!1;for(let s=0;s<r.length;s++)if(!0===n(t,r[s])){e=!0;break}!1===e&&(yield t)}})),Hi=(e,t,n)=>Ci((async function*(){const r=[...t];for(const t of e){let e=!1;for(let s=0;s<r.length;s++){const o=r[s];if(!0===await n(t,o)){e=!0;break}}!1===e&&(yield t)}})),Ki=(e,t)=>t?zi(e,t):ji(e),ji=e=>{const t=e[Symbol.iterator]().next();if(!0===t.done)throw new ii(oi.NoElements);return t.value},zi=(e,t)=>{for(const n of e)if(!0===t(n))return n;throw new ii(oi.NoMatch)},Ji=async(e,t)=>{for(const n of e)if(!0===await t(n))return n;throw new ii(oi.NoMatch)},Yi=(e,t)=>t?Qi(e,t):Xi(e),Xi=e=>e[Symbol.iterator]().next().value??null,Qi=(e,t)=>{for(const n of e)if(!0===t(n))return n;return null},Zi=async(e,t)=>{for(const n of e)if(!0===await t(n))return n;return null};class ea extends di{key;constructor(e,t){super(1),this.key=e,this[0]=t}}const ta=(e,t,n)=>{let r;return r=n?((e,t,n)=>function*(){const r=new Array;for(const s of e){const e=t(s);let o=!1;for(let t=0;t<r.length;t++){const i=r[t];if(n(i.key,e)){i.push(s),o=!0;break}}!1===o&&r.push(new ea(e,s))}for(const e of r)yield e})(e,t,n):((e,t)=>function*(){const n={};for(const r of e){const e=t(r),s=n[e];s?s.push(r):n[e]=new ea(e,r)}for(const e in n)yield n[e]})(e,t),new li(r)},na=(e,t,n)=>n?sa(e,t,n):ra(e,t),ra=(e,t)=>Ci((async function*(){const n={};for(const r of e){const e=await t(r),s=n[e];s?s.push(r):n[e]=new ea(e,r)}for(const e in n)yield n[e]})),sa=(e,t,n)=>Ci((async function*(){const r=new Array;for(const s of e){const e=await t(s);let o=!1;for(let t=0;t<r.length;t++){const i=r[t];if(!0===await n(i.key,e)){i.push(s),o=!0;break}}!1===o&&r.push(new ea(e,s))}for(const e of r)yield e})),oa=(e,t,n,r)=>r?((e,t,n,r)=>new li((function*(){const s=new Array;for(const o of e){const e=t(o);let i=!1;for(let t=0;t<s.length;t++){const a=s[t];if(r(a.key,e)){a.push(n(o)),i=!0;break}}if(!1===i){const t=n(o);s.push(new ea(e,t))}}for(const e of s)yield e})))(e,t,n,r):((e,t,n)=>new li((function*(){const r={};for(const s of e){const e=t(s),o=r[e],i=n(s);o?o.push(i):r[e]=new ea(e,i)}for(const e in r)yield r[e]})))(e,t,n),ia=(e,t,n,r,s,o)=>{const i=o?aa(e,t,n,r,s,o):ca(e,t,n,r,s);return new li(i)},aa=(e,t,n,r,s,o)=>function*(){const i=[];for(const e of t){const t=r(e),n=i.find((e=>o(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=>o(t.key,e)))??{key:e,values:[]};yield s(t,r.values)}},ca=(e,t,n,r,s)=>function*(){const o=new Map;for(const e of t){const t=r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}for(const t of e){const e=n(t),r=o.get(e)??[];yield s(t,r)}},ua=(e,t,n,r,s,o)=>{const i=o?la(e,t,n,r,s,o):da(e,t,n,r,s);return Ci(i)},la=(e,t,n,r,s,o)=>async function*(){const i=[];for(const e of t){const t=await r(e),n=i.find((e=>o(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=>o(t.key,e)))??{key:e,values:[]};yield s(t,r.values)}},da=(e,t,n,r,s)=>async function*(){const o=new Map;for(const e of t){const t=await r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}for(const t of e){const e=await n(t),r=o.get(e)??[];yield s(t,r)}},ha=(e,t,n=ai)=>new li((function*(){const r=[...e.distinct(n)];if(0===r.length)return;const s=[...t];for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++)if(!0===n(t,s[e])){yield t;break}}})),pa=(e,t,n)=>Ci((async function*(){const r=[];for await(const t of e.distinctAsync(n))r.push(t);if(0===r.length)return;const s=[...t];for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++){const r=s[e];if(!0===await n(t,r)){yield t;break}}}})),ga=(e,t,n,r,s,o=ai)=>new li((function*(){const i=[...t];for(const t of e){const e=n(t);for(const n of i){const i=r(n);!0===o(e,i)&&(yield s(t,n))}}})),fa=(e,t)=>t?ma(e,t):va(e),va=e=>{let t;for(const n of e)t=n;if(!t)throw new ii(oi.NoElements);return t},ma=(e,t)=>{let n;for(const r of e)!0===t(r)&&(n=r);if(!n)throw new ii(oi.NoMatch);return n},ya=async(e,t)=>{let n;for(const r of e)!0===await t(r)&&(n=r);if(!n)throw new ii(oi.NoMatch);return n},wa=(e,t)=>t?Aa(e,t):Sa(e),Sa=e=>{let t=null;for(const n of e)t=n;return t},Aa=(e,t)=>{let n=null;for(const r of e)!0===t(r)&&(n=r);return n},_a=async(e,t)=>{let n=null;for(const r of e)!0===await t(r)&&(n=r);return n},Ca=(e,t)=>t?Da(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 ii(oi.NoElements);return t},Da=(e,t)=>{let n=null;for(const r of e)n=Math.max(n??Number.NEGATIVE_INFINITY,t(r));if(null===n)throw new ii(oi.NoElements);return n},ka=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 ii(oi.NoElements);return n},Ga=(e,t)=>t?Na(e,t):ba(e),ba=e=>{let t=null;for(const n of e)t=Math.min(t??Number.POSITIVE_INFINITY,n);if(null===t)throw new ii(oi.NoElements);return t},Na=(e,t)=>{let n=null;for(const r of e)n=Math.min(n??Number.POSITIVE_INFINITY,t(r));if(null===n)throw new ii(oi.NoElements);return n},Ea=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 ii(oi.NoElements);return n},Ia=(e,t)=>{const n="string"==typeof t?e=>typeof e===t:e=>e instanceof t;return new li((function*(){for(const t of e)n(t)&&(yield t)}))};async function*Ra(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}function*Pa(e,t,n,r){const s=((e,t)=>{const n=new Map;for(const r of e){const e=t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}class Oa extends ci{orderedPairs;constructor(e){super((async function*(){for await(const t of e())yield*t})),this.orderedPairs=e}static generateAsync(e,t,n,r){let s;return s=e instanceof Oa?async function*(){for await(const s of e.orderedPairs())yield*Ra(s,t,n,r)}:()=>async function*(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=await t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}(e,t,n,r),new Oa(s)}static generate(e,t,n,r){let s;return s=e instanceof Oa?async function*(){for await(const s of e.orderedPairs())yield*Pa(s,t,n,r)}:()=>async function*(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}(e,t,n,r),new Oa(s)}thenBy(e,t){return Oa.generate(this,e,!0,t)}thenByAsync(e,t){return Oa.generateAsync(this,e,!0,t)}thenByDescending(e,t){return Oa.generate(this,e,!1,t)}thenByDescendingAsync(e,t){return Oa.generateAsync(this,e,!1,t)}}function*Ua(e,t,n,r){const s=((e,t)=>{const n=new Map;for(const r of e){const e=t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}async function*Ma(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}class xa extends li{orderedPairs;constructor(e){super((function*(){for(const t of e())yield*t})),this.orderedPairs=e}static generate(e,t,n,r){let s;return s=e instanceof xa?function*(){for(const s of e.orderedPairs())yield*Ua(s,t,n,r)}:()=>Ua(e,t,n,r),new xa(s)}static generateAsync(e,t,n,r){let s;return s=e instanceof xa?async function*(){for(const s of e.orderedPairs())yield*Ma(s,t,n,r)}:()=>Ma(e,t,n,r),new Oa(s)}thenBy(e,t){return xa.generate(this,e,!0,t)}thenByAsync(e,t){return xa.generateAsync(this,e,!0,t)}thenByDescending(e,t){return xa.generate(this,e,!1,t)}thenByDescendingAsync(e,t){return xa.generateAsync(this,e,!1,t)}}const Fa=(e,t)=>xa.generate(e,(e=>e),!0,t),La=(e,t,n)=>xa.generate(e,t,!0,n),Ba=(e,t,n)=>xa.generateAsync(e,t,!0,n),$a=(e,t,n)=>xa.generate(e,t,!1,n),Wa=(e,t,n)=>xa.generateAsync(e,t,!1,n),qa=(e,t)=>xa.generate(e,(e=>e),!1,t),Va=(e,t)=>{const n=[],r=[];for(const s of e)!0===t(s)?r.push(s):n.push(s);return[r,n]},Ha=async(e,t)=>{const n=[],r=[];for(const s of e)!0===await t(s)?r.push(s):n.push(s);return[r,n]},Ka=(e,t)=>new li((function*(){yield t,yield*e})),ja=e=>new li((function*(){const t=[...e];for(let e=t.length-1;e>=0;e--)yield t[e]})),za=(e,t)=>{if("function"==typeof t){const{length:n}=t;return 1===n?Ja(e,t):Ya(e,t)}return Xa(e,t)},Ja=(e,t)=>new li((function*(){for(const n of e)yield t(n)})),Ya=(e,t)=>new li((function*(){let n=0;for(const r of e)yield t(r,n),n++})),Xa=(e,t)=>new li((function*(){for(const n of e)yield n[t]})),Qa=(e,t)=>"function"==typeof t?1===t.length?Za(e,t):ec(e,t):tc(e,t),Za=(e,t)=>Ci((async function*(){for(const n of e)yield t(n)})),ec=(e,t)=>Ci((async function*(){let n=0;for(const r of e)yield t(r,n),n++})),tc=(e,t)=>Ci((async function*(){for(const n of e)yield n[t]})),nc=(e,t)=>"function"==typeof t?1===t.length?rc(e,t):sc(e,t):oc(e,t),rc=(e,t)=>new li((function*(){for(const n of e)for(const e of t(n))yield e})),sc=(e,t)=>new li((function*(){let n=0;for(const r of e){for(const e of t(r,n))yield e;n++}})),oc=(e,t)=>new li((function*(){for(const n of e)for(const e of n[t])yield e})),ic=(e,t)=>1===t.length?ac(e,t):cc(e,t),ac=(e,t)=>Ci((async function*(){for(const n of e){const e=await t(n);for(const t of e)yield t}})),cc=(e,t)=>Ci((async function*(){let n=0;for(const r of e){const e=await t(r,n);for(const t of e)yield t;n++}})),uc=(e,t,n=ai)=>{const r=e[Symbol.iterator](),s=t[Symbol.iterator]();let o=r.next(),i=s.next();for(;!o.done&&!i.done;){if(!n(o.value,i.value))return!1;o=r.next(),i=s.next()}return!0===o.done&&!0===i.done},lc=async(e,t,n)=>{const r=e[Symbol.iterator](),s=t[Symbol.iterator]();let o=r.next(),i=s.next();for(;!o.done&&!i.done;){if(!1===await n(o.value,i.value))return!1;o=r.next(),i=s.next()}return!0===o.done&&!0===i.done},dc=(e,t)=>t?pc(e,t):hc(e),hc=e=>{let t=!1,n=null;for(const r of e){if(!0===t)throw new ii(oi.MoreThanOneElement);t=!0,n=r}if(!1===t)throw new ii(oi.NoElements);return n},pc=(e,t)=>{let n=!1,r=null;for(const s of e)if(t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}if(!1===n)throw new ii(oi.NoMatch);return r},gc=async(e,t)=>{let n=!1,r=null;for(const s of e)if(await t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}if(!1===n)throw new ii(oi.NoMatch);return r},fc=(e,t)=>t?mc(e,t):vc(e),vc=e=>{let t=!1,n=null;for(const r of e){if(!0===t)throw new ii(oi.MoreThanOneElement);t=!0,n=r}return n},mc=(e,t)=>{let n=!1,r=null;for(const s of e)if(t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}return r},yc=async(e,t)=>{let n=!1,r=null;for(const s of e)if(await t(s)){if(!0===n)throw new ii(oi.MoreThanOneElement);n=!0,r=s}return r},wc=(e,t)=>new li((function*(){let n=0;for(const r of e)n++>=t&&(yield r)})),Sc=(e,t)=>1===t.length?Ac(e,t):_c(e,t),Ac=(e,t)=>new li((function*(){let n=!0;for(const r of e)!1===n?yield r:!1===t(r)&&(n=!1,yield r)})),_c=(e,t)=>new li((function*(){let n=0,r=!0;for(const s of e)!1===r?yield s:!1===t(s,n)&&(r=!1,yield s),n++})),Cc=(e,t)=>1===t.length?Tc(e,t):Dc(e,t),Tc=(e,t)=>Ci((async function*(){let n=!0;for(const r of e)!1===n?yield r:!1===await t(r)&&(n=!1,yield r)})),Dc=(e,t)=>Ci((async function*(){let n=0,r=!0;for(const s of e)!1===r?yield s:!1===await t(s,n)&&(r=!1,yield s),n++})),kc=(e,t)=>t?bc(e,t):Gc(e),Gc=e=>{let t=0;for(const n of e)t+=n;return t},bc=(e,t)=>{let n=0;for(const r of e)n+=t(r);return n},Nc=async(e,t)=>{let n=0;for(const r of e)n+=await t(r);return n},Ec=(e,t)=>new li((function*(){let n=t>0?t:0;for(const t of e){if(0==n--)break;yield t}})),Ic=(e,t)=>1===t.length?Rc(e,t):Pc(e,t),Rc=(e,t)=>new li((function*(){for(const n of e){if(!t(n))break;yield n}})),Pc=(e,t)=>new li((function*(){let n=0;for(const r of e){if(!t(r,n++))break;yield r}})),Oc=(e,t)=>1===t.length?Uc(e,t):Mc(e,t),Uc=(e,t)=>Ci((async function*(){for(const n of e){if(!await t(n))break;yield n}})),Mc=(e,t)=>Ci((async function*(){let n=0;for(const r of e){if(!await t(r,n++))break;yield r}})),xc=e=>[...e],Fc=(e,t)=>{const n=new Map;for(const r of e){const e=t(r),s=n.get(e);void 0===s?n.set(e,[r]):s.push(r)}return n},Lc=async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),s=n.get(e);void 0===s?n.set(e,[r]):s.push(r)}return n},Bc=(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},Wc=e=>new Set(e),qc=(e,t,n)=>n?Hc(e,t,n):Vc(e,t),Vc=(e,t)=>new li((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))})),Hc=(e,t,n)=>new li((function*(){const r=[];for(const s of[e,t])for(const e of s){let t=!1;for(const s of r)if(!0===n(e,s)){t=!0;break}!1===t&&(yield e,r.push(e))}})),Kc=(e,t,n)=>Ci((async function*(){const r=[];for(const s of[e,t])for(const e of s){let t=!1;for(const s of r)if(!0===await n(e,s)){t=!0;break}!1===t&&(yield e,r.push(e))}})),jc=(e,t)=>1===t.length?zc(e,t):Jc(e,t),zc=(e,t)=>new li((function*(){for(const n of e)!0===t(n)&&(yield n)})),Jc=(e,t)=>new li((function*(){let n=0;for(const r of e)!0===t(r,n++)&&(yield r)})),Yc=(e,t)=>1===t.length?Xc(e,t):Qc(e,t),Xc=(e,t)=>Ci((async function*(){for(const n of e)!0===await t(n)&&(yield n)})),Qc=(e,t)=>Ci((async function*(){let n=0;for(const r of e)!0===await t(r,n++)&&(yield r)})),Zc=(e,t,n)=>n?tu(e,t,n):eu(e,t),eu=(e,t)=>new li((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]}})),tu=(e,t,n)=>new li((function*(){const r=e[Symbol.iterator](),s=t[Symbol.iterator]();for(;;){const e=r.next(),t=s.next();if(e.done||t.done)break;yield n(e.value,t.value)}})),nu=(e,t,n)=>Ci((async function*(){const r=e[Symbol.iterator](),s=t[Symbol.iterator]();for(;;){const e=r.next(),t=s.next();if(e.done||t.done)break;yield n(e.value,t.value)}})),ru=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(hi,"aggregate"),n(vi,"all"),n(mi,"allAsync"),n(yi,"any"),n(Ai,"anyAsync"),n(_i,"append"),n(Ti,"asAsync"),n(ki,"asParallel"),n(Gi,"average"),n(bi,"averageAsync"),n(Ni,"chunk"),n(Ei,"concatenate"),n(Ii,"contains"),n(Ri,"containsAsync"),n(Pi,"count"),n(Mi,"countAsync"),n(xi,"defaultIfEmpty"),n(Fi,"distinct"),n(Li,"distinctAsync"),n(Bi,"each"),n($i,"eachAsync"),n(Wi,"elementAt"),n(qi,"elementAtOrDefault"),n(Vi,"except"),n(Hi,"exceptAsync"),n(Ki,"first"),n(Ji,"firstAsync"),n(Yi,"firstOrDefault"),n(Zi,"firstOrDefaultAsync"),n(ta,"groupBy"),n(na,"groupByAsync"),n(oa,"groupByWithSel"),n(ia,"groupJoin"),n(ua,"groupJoinAsync"),n(ha,"intersect"),n(pa,"intersectAsync"),n(ga,"joinByKey"),n(fa,"last"),n(ya,"lastAsync"),n(wa,"lastOrDefault"),n(_a,"lastOrDefaultAsync"),n(Ca,"max"),n(ka,"maxAsync"),n(Ga,"min"),n(Ea,"minAsync"),n(Ia,"ofType"),n(Fa,"order"),n(La,"orderBy"),n(Ba,"orderByAsync"),n($a,"orderByDescending"),n(Wa,"orderByDescendingAsync"),n(qa,"orderDescending"),n(Ka,"prepend"),n(ja,"reverse"),n(za,"select"),n(Qa,"selectAsync"),n(nc,"selectMany"),n(ic,"selectManyAsync"),n(uc,"sequenceEquals"),n(lc,"sequenceEqualsAsync"),n(dc,"single"),n(gc,"singleAsync"),n(fc,"singleOrDefault"),n(yc,"singleOrDefaultAsync"),n(wc,"skip"),n(Sc,"skipWhile"),n(Cc,"skipWhileAsync"),n(kc,"sum"),n(Nc,"sumAsync"),n(Ec,"take"),n(Ic,"takeWhile"),n(Oc,"takeWhileAsync"),n(xc,"toArray"),n(Fc,"toMap"),n(Lc,"toMapAsync"),n(Bc,"toObject"),n($c,"toObjectAsync"),n(Va,"partition"),n(Ha,"partitionAsync"),n(Wc,"toSet"),n(qc,"union"),n(Kc,"unionAsync"),n(jc,"where"),n(Yc,"whereAsync"),n(Zc,"zip"),n(nu,"zipAsync")},su=(e,t,n,r)=>{if(r){if(!n)throw new ReferenceError("TAccumulate function is undefined");return au(e,t,n,r)}return n?iu(e,t,n):ou(e,t)},ou=async(e,t)=>{let n;for await(const r of e)n=n?t(n,r):r;if(void 0===n)throw new ii(oi.NoElements);return n},iu=async(e,t,n)=>{let r=t;for await(const t of e)r=n(r,t);return r},au=async(e,t,n,r)=>{let s=t;for await(const t of e)s=n(s,t);return r(s)},cu=async(e,t)=>{for await(const n of e)if(!1===t(n))return!1;return!0},uu=async(e,t)=>{for await(const n of e)if(!1===await t(n))return!1;return!0},lu=(e,t)=>new ci((async function*(){yield*e,yield t})),du=(e,t)=>t?pu(e,t):hu(e),hu=async e=>{for await(const t of e)return!0;return!1},pu=async(e,t)=>{for await(const n of e)if(!0===t(n))return!0;return!1},gu=async(e,t)=>{for await(const n of e)if(!0===await t(n))return!0;return!1},fu=e=>Di(0,(async()=>{const t=[];for await(const n of e)t.push(n);return t})),vu=async(e,t)=>{let n=0,r=0;if(t)for await(const s of e)n+=t(s),r+=1;else for await(const t of e)n+=t,r+=1;if(0===r)throw new ii(oi.NoElements);return n/r},mu=async(e,t)=>{let n=0,r=0;for await(const s of e)n+=await t(s),r+=1;if(0===r)throw new ii(oi.NoElements);return n/r},yu=(e,t)=>{if(t<1)throw new si("size");return new ci((async function*(){let n=[];for await(const r of e)n.push(r),n.length===t&&(yield n,n=[]);n.length&&(yield n)}))},wu=(e,t)=>new ci((async function*(){yield*e,yield*t})),Su=async(e,t,n=ai)=>{for await(const r of e)if(n(t,r))return!0;return!1},Au=async(e,t,n)=>{for await(const r of e)if(await n(t,r))return!0;return!1},_u=(e,t)=>t?Tu(e,t):Cu(e),Cu=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},Du=async(e,t)=>{let n=0;for await(const r of e)!0===await t(r)&&n++;return n},ku=(e,t)=>new ci((async function*(){let n=!1;for await(const t of e)n=!0,yield t;n||(yield t)})),Gu=(e,t=ai)=>new ci((async function*(){const n=[];for await(const r of e)n.find((e=>t(e,r)))||(n.push(r),yield r)})),bu=(e,t)=>new ci((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}})),Nu=(e,t)=>new ci((async function*(){for await(const n of e)t(n),yield n})),Eu=(e,t)=>new ci((async function*(){for await(const n of e)await t(n),yield n})),Iu=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")},Ru=async(e,t)=>{let n=0;for await(const r of e)if(t===n++)return r;return null},Pu=(e,t,n=ai)=>new ci((async function*(){const r=[];for await(const e of t)r.push(e);for await(const t of e){let e=!1;for(let s=0;s<r.length;s++){const o=r[s];if(!0===n(t,o)){e=!0;break}}!1===e&&(yield t)}})),Ou=(e,t,n)=>new ci((async function*(){const r=[];for await(const e of t)r.push(e);for await(const t of e){let e=!1;for(let s=0;s<r.length;s++){const o=r[s];if(!0===await n(t,o)){e=!0;break}}!1===e&&(yield t)}})),Uu=(e,t)=>t?xu(e,t):Mu(e),Mu=async e=>{const t=await e[Symbol.asyncIterator]().next();if(!0===t.done)throw new ii(oi.NoElements);return t.value},xu=async(e,t)=>{for await(const n of e)if(!0===t(n))return n;throw new ii(oi.NoMatch)},Fu=async(e,t)=>{for await(const n of e)if(!0===await t(n))return n;throw new ii(oi.NoMatch)},Lu=(e,t)=>t?$u(e,t):Bu(e),Bu=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},Wu=async(e,t)=>{for await(const n of e)if(!0===await t(n))return n;return null},qu=(e,t,n)=>n?Vu(e,t,n):Hu(e,t),Vu=(e,t,n)=>new ci((async function*(){const r=new Array;for await(const s of e){const e=t(s);let o=!1;for(let t=0;t<r.length;t++){const i=r[t];if(n(i.key,e)){i.push(s),o=!0;break}}!1===o&&r.push(new ea(e,s))}for(const e of r)yield e})),Hu=(e,t)=>new ci((async function*(){const n={};for await(const r of e){const e=t(r),s=n[e];s?s.push(r):n[e]=new ea(e,r)}for(const e in n)yield n[e]})),Ku=(e,t,n)=>n?zu(e,t,n):ju(e,t),ju=(e,t)=>new ci((async function*(){const n={};for await(const r of e){const e=await t(r),s=n[e];s?s.push(r):n[e]=new ea(e,r)}for(const e in n)yield n[e]})),zu=(e,t,n)=>new ci((async function*(){const r=new Array;for await(const s of e){const e=await t(s);let o=!1;for(let t=0;t<r.length;t++){const i=r[t];if(!0===await n(i.key,e)){i.push(s),o=!0;break}}!1===o&&r.push(new ea(e,s))}for(const e of r)yield e})),Ju=(e,t,n,r)=>r?Xu(e,t,n,r):Yu(e,t,n),Yu=(e,t,n)=>new ci((async function*(){const r={};for await(const s of e){const e=t(s),o=r[e],i=n(s);o?o.push(i):r[e]=new ea(e,i)}for(const e in r)yield r[e]})),Xu=(e,t,n,r)=>new ci((async function*(){const s=new Array;for await(const o of e){const e=t(o);let i=!1;for(let t=0;t<s.length;t++){const a=s[t];if(r(a.key,e)){a.push(n(o)),i=!0;break}}if(!1===i){const t=n(o);s.push(new ea(e,t))}}for(const e of s)yield e})),Qu=(e,t,n,r,s,o)=>{const i=o?Zu(e,t,n,r,s,o):el(e,t,n,r,s);return new ci(i)},Zu=(e,t,n,r,s,o)=>async function*(){const i=[];for await(const e of t){const t=r(e),n=i.find((e=>o(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=>o(t.key,e)))??{key:e,values:[]};yield s(t,r.values)}},el=(e,t,n,r,s)=>async function*(){const o=new Map;for await(const e of t){const t=r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}for await(const t of e){const e=n(t),r=o.get(e)??[];yield s(t,r)}},tl=(e,t,n,r,s,o)=>{const i=o?nl(e,t,n,r,s,o):rl(e,t,n,r,s);return new ci(i)},nl=(e,t,n,r,s,o)=>async function*(){const i=[];for await(const e of t){const t=await r(e),n=i.find((e=>o(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=>o(t.key,e)))??{key:e,values:[]};yield s(t,r.values)}},rl=(e,t,n,r,s)=>async function*(){const o=new Map;for await(const e of t){const t=await r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}for await(const t of e){const e=await n(t),r=o.get(e)??[];yield s(t,r)}},sl=(e,t,n=ai)=>new ci((async function*(){const r=await e.distinct(n).toArray();if(0===r.length)return;const s=await t.toArray();for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++){const r=s[e];if(!0===n(t,r)){yield t;break}}}})),ol=(e,t,n)=>new ci((async function*(){const r=await e.distinctAsync(n).toArray();if(0===r.length)return;const s=await t.toArray();for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++){const r=s[e];if(!0===await n(t,r)){yield t;break}}}})),il=(e,t,n,r,s,o=ai)=>new ci((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===o(e,i)&&(yield s(t,n))}}})),al=(e,t)=>t?ul(e,t):cl(e),cl=async e=>{let t=null;for await(const n of e)t=n;if(!t)throw new ii(oi.NoElements);return t},ul=async(e,t)=>{let n=null;for await(const r of e)!0===t(r)&&(n=r);if(!n)throw new ii(oi.NoMatch);return n},ll=async(e,t)=>{let n=null;for await(const r of e)!0===await t(r)&&(n=r);if(!n)throw new ii(oi.NoMatch);return n},dl=(e,t)=>t?pl(e,t):hl(e),hl=async e=>{let t=null;for await(const n of e)t=n;return t},pl=async(e,t)=>{let n=null;for await(const r of e)!0===t(r)&&(n=r);return n},gl=async(e,t)=>{let n=null;for await(const r of e)!0===await t(r)&&(n=r);return n},fl=(e,t)=>t?ml(e,t):vl(e),vl=async e=>{let t=null;for await(const n of e)t=Math.max(t??Number.NEGATIVE_INFINITY,n);if(null===t)throw new ii(oi.NoElements);return t},ml=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 ii(oi.NoElements);return n},yl=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 ii(oi.NoElements);return n},wl=(e,t)=>t?Al(e,t):Sl(e),Sl=async e=>{let t=null;for await(const n of e)t=Math.min(t??Number.POSITIVE_INFINITY,n);if(null===t)throw new ii(oi.NoElements);return t},Al=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 ii(oi.NoElements);return n},_l=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 ii(oi.NoElements);return n},Cl=(e,t)=>{const n="string"==typeof t?e=>typeof e===t:e=>e instanceof t;return new ci((async function*(){for await(const t of e)n(t)&&(yield t)}))},Tl=(e,t)=>Oa.generate(e,(e=>e),!0,t),Dl=(e,t,n)=>Oa.generate(e,t,!0,n),kl=(e,t,n)=>Oa.generateAsync(e,t,!0,n),Gl=(e,t,n)=>Oa.generate(e,t,!1,n),bl=(e,t,n)=>Oa.generateAsync(e,t,!1,n),Nl=(e,t)=>Oa.generate(e,(e=>e),!1,t),El=async(e,t)=>{const n=[],r=[];for await(const s of e)!0===t(s)?r.push(s):n.push(s);return[r,n]},Il=async(e,t)=>{const n=[],r=[];for await(const s of e)!0===await t(s)?r.push(s):n.push(s);return[r,n]},Rl=(e,t)=>new ci((async function*(){yield t,yield*e})),Pl=e=>new ci((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]})),Ol=(e,t)=>"function"==typeof t?1===t.length?Ul(e,t):Ml(e,t):xl(e,t),Ul=(e,t)=>new ci((async function*(){for await(const n of e)yield t(n)})),Ml=(e,t)=>new ci((async function*(){let n=0;for await(const r of e)yield t(r,n),n++})),xl=(e,t)=>new ci((async function*(){for await(const n of e)yield n[t]})),Fl=(e,t)=>"string"==typeof t?Bl(e,t):Ll(e,t),Ll=(e,t)=>new ci((async function*(){for await(const n of e)yield t(n)})),Bl=(e,t)=>new ci((async function*(){for await(const n of e)yield n[t]})),$l=(e,t)=>"function"==typeof t?1===t.length?Wl(e,t):ql(e,t):Vl(e,t),Wl=(e,t)=>new ci((async function*(){for await(const n of e)for(const e of t(n))yield e})),ql=(e,t)=>new ci((async function*(){let n=0;for await(const r of e){for(const e of t(r,n))yield e;n++}})),Vl=(e,t)=>new ci((async function*(){for await(const n of e)for(const e of n[t])yield e})),Hl=(e,t)=>1===t.length?new ci((async function*(){for await(const n of e){const e=await t(n);for(const t of e)yield t}})):new ci((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++}})),Kl=async(e,t,n=ai)=>{const r=e[Symbol.asyncIterator](),s=t[Symbol.asyncIterator]();let o=await Promise.all([r.next(),s.next()]),i=o[0],a=o[1];for(;!i.done&&!a.done;){if(!n(i.value,a.value))return!1;o=await Promise.all([r.next(),s.next()]),i=o[0],a=o[1]}return!0===i.done&&!0===a.done},jl=async(e,t,n)=>{const r=e[Symbol.asyncIterator](),s=t[Symbol.asyncIterator]();let o=await Promise.all([r.next(),s.next()]),i=o[0],a=o[1];for(;!i.done&&!a.done;){if(!1===await n(i.value,a.value))return!1;o=await Promise.all([r.next(),s.next()]),i=o[0],a=o[1]}return!0===i.done&&!0===a.done},zl=(e,t)=>t?Yl(e,t):Jl(e),Jl=async e=>{let t=!1,n=null;for await(const r of e){if(!0===t)throw new ii(oi.MoreThanOneElement);t=!0,n=r}if(!1===t)throw new ii(oi.NoElements);return n},Yl=async(e,t)=>{let n=!1,r=null;for await(const s of e)if(t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}if(!1===n)throw new ii(oi.NoMatch);return r},Xl=async(e,t)=>{let n=!1,r=null;for await(const s of e)if(await t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}if(!1===n)throw new ii(oi.NoMatch);return r},Ql=(e,t)=>t?ed(e,t):Zl(e),Zl=async e=>{let t=!1,n=null;for await(const r of e){if(!0===t)throw new ii(oi.MoreThanOneElement);t=!0,n=r}return n},ed=async(e,t)=>{let n=!1,r=null;for await(const s of e)if(t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}return r},td=async(e,t)=>{let n=!1,r=null;for await(const s of e)if(await t(s)){if(!0===n)throw new ii(oi.MoreThanOneMatchingElement);n=!0,r=s}return r},nd=(e,t)=>new ci((async function*(){let n=0;for await(const r of e)n++>=t&&(yield r)})),rd=(e,t)=>1===t.length?sd(e,t):od(e,t),sd=(e,t)=>new ci((async function*(){let n=!0;for await(const r of e)!1===n?yield r:!1===t(r)&&(n=!1,yield r)})),od=(e,t)=>new ci((async function*(){let n=0,r=!0;for await(const s of e)!1===r?yield s:!1===t(s,n)&&(r=!1,yield s),n++})),id=(e,t)=>1===t.length?ad(e,t):cd(e,t),ad=(e,t)=>new ci((async function*(){let n=!0;for await(const r of e)!1===n?yield r:!1===await t(r)&&(n=!1,yield r)})),cd=(e,t)=>new ci((async function*(){let n=0,r=!0;for await(const s of e)!1===r?yield s:!1===await t(s,n)&&(r=!1,yield s),n++})),ud=(e,t)=>t?dd(e,t):ld(e),ld=async e=>{let t=0;for await(const n of e)t+=n;return t},dd=async(e,t)=>{let n=0;for await(const r of e)n+=t(r);return n},hd=async(e,t)=>{let n=0;for await(const r of e)n+=await t(r);return n},pd=(e,t)=>new ci((async function*(){let n=t>0?t:0;for await(const t of e){if(0==n--)break;yield t}})),gd=(e,t)=>1===t.length?fd(e,t):vd(e,t),fd=(e,t)=>new ci((async function*(){for await(const n of e){if(!t(n))break;yield n}})),vd=(e,t)=>new ci((async function*(){let n=0;for await(const r of e){if(!t(r,n++))break;yield r}})),md=(e,t)=>1===t.length?yd(e,t):wd(e,t),yd=(e,t)=>new ci((async function*(){for await(const n of e){if(!await t(n))break;yield n}})),wd=(e,t)=>new ci((async function*(){let n=0;for await(const r of e){if(!await t(r,n++))break;yield r}})),Sd=async e=>{const t=[];for await(const n of e)t.push(n);return t},Ad=async(e,t)=>{const n=new Map;for await(const r of e){const e=t(r),s=n.get(e);void 0===s?n.set(e,[r]):s.push(r)}return n},_d=async(e,t)=>{const n=new Map;for await(const r of e){const e=await t(r),s=n.get(e);void 0===s?n.set(e,[r]):s.push(r)}return n},Cd=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},Dd=async e=>{const t=new Set;for await(const n of e)t.add(n);return t},kd=(e,t,n)=>n?bd(e,t,n):Gd(e,t),Gd=(e,t)=>new ci((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))})),bd=(e,t,n)=>new ci((async function*(){const r=[];for(const s of[e,t])for await(const e of s){let t=!1;for(const s of r)if(!0===n(e,s)){t=!0;break}!1===t&&(yield e,r.push(e))}})),Nd=(e,t,n)=>new ci((async function*(){const r=[];for(const s of[e,t])for await(const e of s){let t=!1;for(const s of r)if(!0===await n(e,s)){t=!0;break}!1===t&&(yield e,r.push(e))}})),Ed=(e,t)=>1===t.length?Id(e,t):Rd(e,t),Id=(e,t)=>new ci((async function*(){for await(const n of e)!0===t(n)&&(yield n)})),Rd=(e,t)=>new ci((async function*(){let n=0;for await(const r of e)!0===t(r,n++)&&(yield r)})),Pd=(e,t)=>1===t.length?Od(e,t):Ud(e,t),Od=(e,t)=>new ci((async function*(){for await(const n of e)!0===await t(n)&&(yield n)})),Ud=(e,t)=>new ci((async function*(){let n=0;for await(const r of e)!0===await t(r,n++)&&(yield r)})),Md=(e,t,n)=>n?Fd(e,t,n):xd(e,t),xd=(e,t)=>new ci((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]}})),Fd=(e,t,n)=>new ci((async function*(){const r=e[Symbol.asyncIterator](),s=t[Symbol.asyncIterator]();for(;;){const[e,t]=await Promise.all([r.next(),s.next()]);if(e.done||t.done)break;yield n(e.value,t.value)}})),Ld=(e,t,n)=>new ci((async function*(){const r=e[Symbol.asyncIterator](),s=t[Symbol.asyncIterator]();for(;;){const e=await Promise.all([r.next(),s.next()]),t=e[0],o=e[1];if(t.done||o.done)break;yield n(t.value,o.value)}})),Bd=(e,t,n,r)=>{if(r){if(!n)throw new ReferenceError("TAccumulate function is undefined");return qd(e,t,n,r)}return n?Wd(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 ii(oi.NoElements);return n},Wd=async(e,t,n)=>{let r=t;for await(const t of e)r=n(r,t);return r},qd=async(e,t,n,r)=>{let s=t;for await(const t of e)s=n(s,t);return r(s)},Vd=(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}}},Hd=(e,t)=>{const n=Vd(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))}},Kd=(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}}},jd=(e,t)=>{const n=Kd(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))}},zd=(e,t)=>{const n=e.dataFunc;switch(n.type){case 1:return new ui({generator:()=>{const e=n.generator();return e.push(Promise.resolve(t)),e},type:n.type});case 2:return new ui({generator:async()=>{const e=await n.generator();return e.push(Promise.resolve(t)),e},type:n.type});case 0:return new ui({generator:async()=>{const e=await n.generator();return e.push(t),e},type:n.type})}},Jd=(e,t)=>t?Xd(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}},Xd=async(e,t)=>{const n=Vd(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)}},Qd=async(e,t)=>{const n=Kd(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 s of r)s.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)}},Zd=e=>Ci((async function*(){for await(const t of e)yield t})),eh=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)}},th=async(e,t)=>{let n;n=t?Vd(e,t):e.dataFunc;const r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);let s=0;for(const e of r)s+=e;return s/r.length},nh=async(e,t)=>{const n=Kd(e,t),r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);let s=0;for(const e of r)s+=e;return s/r.length},rh=(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 s of r())n.push(s),n.length===t&&(e.push(Promise.all(n)),n=[]);return n.length&&e.push(Promise.all(n)),e}};break;case 2:const s=e.dataFunc.generator;n={type:2,generator:async()=>{const e=[];let n=[];for(const r of await s())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 o=e.dataFunc.generator;n={type:0,generator:async()=>{const e=[];let n=[];for(const r of await o())n.push(r),n.length===t&&(e.push(n),n=[]);return n.length&&e.push(n),e}}}return new ui(n)},sh=(e,t)=>new ui({generator:async()=>{const[n,r]=await Promise.all([e.toArray(),t.toArray()]);return[...n,...r]},type:0}),oh=async(e,t,n=ai)=>{let r;switch(r=Vd(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))}},ih=async(e,t,n)=>{const r=Kd(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))}},ah=(e,t)=>t?uh(e,t):ch(e),ch=async e=>{const t=e.dataFunc;switch(t.type){case 0:case 2:return(await e.toArray()).length;case 1:return t.generator().length}},uh=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},lh=async(e,t)=>{const n=Kd(e,t);let r;switch(n.type){case 1:r=Promise.all(n.generator());break;case 2:r=Promise.all(await n.generator())}let s=0;for(const e of await r)e&&s++;return s},dh=(e,t)=>{const n=e.dataFunc,r=t instanceof Promise;let s;switch(n.type){case 0:s={generator:()=>n.generator().then((e=>e.length?e:r?t.then((e=>[e])):[t])),type:n.type};break;case 1:s={generator:()=>{const e=n.generator();return e.length?e:r?[t]:[Promise.resolve(t)]},type:n.type};break;case 2:s={generator:async()=>{const e=await n.generator();return e.length?e:r?[t]:[Promise.resolve(t)]},type:n.type}}return new ui(s)},hh=(e,t=ai)=>new ui({generator:async()=>{const n=[];for(const r of await e.toArray())n.find((e=>t(e,r)))||n.push(r);return n},type:0}),ph=(e,t)=>new ui({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}),gh=(e,t)=>new ui(Vd(e,(e=>(t(e),e)))),fh=(e,t)=>{const n=Kd(e,(async e=>(await t(e),e)));return new ui(n)},vh=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]}}},mh=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]}}},yh=(e,t,n=ai)=>new ui({generator:async()=>{const[r,s]=await Promise.all([e.toArray(),t.toArray()]),o=[];for(const e of r){let t=!1;for(let r=0;r<s.length;r++){const o=s[r];if(!0===n(e,o)){t=!0;break}}!1===t&&o.push(e)}return o},type:0}),wh=(e,t,n)=>new ui({generator:async()=>{const[r,s]=await Promise.all([e.toArray(),t.toArray()]),o=[];for(const e of r){let t=!1;for(let r=0;r<s.length;r++){const o=s[r];if(!0===await n(e,o)){t=!0;break}}!1===t&&o.push(e)}return o},type:0}),Sh=e=>eh(e.dataFunc),Ah=(e,t)=>t?Ch(e,t):_h(e),_h=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(0===e.length)throw new ii(oi.NoElements);return e[0]}case 1:{const e=t.generator();if(0===e.length)throw new ii(oi.NoElements);return await e[0]}case 2:{const e=await t.generator();if(0===e.length)throw new ii(oi.NoElements);return await e[0]}}},Ch=async(e,t)=>{const n=await Sh(e);for(const e of n)if(!0===t(e))return e;throw new ii(oi.NoMatch)},Th=async(e,t)=>{const n=await Sh(e);for(const e of n)if(!0===await t(e))return e;throw new ii(oi.NoMatch)},Dh=(e,t)=>t?Gh(e,t):kh(e),kh=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 Sh(e);for(const e of n)if(!0===t(e))return e;return null},bh=async(e,t)=>{const n=await Sh(e);for(const e of n)if(!0===await t(e))return e;return null},Nh=(e,t,n)=>n?Ih(e,t,n):Eh(e,t),Eh=(e,t)=>new ui({generator:async()=>{const n={};for(const r of await e.toArray()){const e=t(r),s=n[e];s?s.push(r):n[e]=new ea(e,r)}const r=new Array;for(const e in n)r.push(n[e]);return r},type:0}),Ih=(e,t,n)=>new ui({generator:async()=>{const r=new Array;for(const s of await e.toArray()){const e=t(s);let o=!1;for(let t=0;t<r.length;t++){const i=r[t];if(n(i.key,e)){i.push(s),o=!0;break}}!1===o&&r.push(new ea(e,s))}const s=new Array;for(const e of r)s.push(e);return s},type:0}),Rh=(e,t,n)=>n?Ph(e,t,n):Oh(e,t),Ph=(e,t,n)=>new ui({generator:async()=>{const r=Kd(e,(async e=>[await t(e),e]));let s;switch(r.type){case 1:s=await Promise.all(r.generator());break;case 2:s=await Promise.all(await r.generator())}const o=new Array;for(const[e,t]of s){let r=!1;for(let s=0;s<o.length;s++){const i=o[s];if(!0===await n(i.key,e)){i.push(t),r=!0;break}}!1===r&&o.push(new ea(e,t))}const i=new Array;for(const e of o)i.push(e);return i},type:0}),Oh=(e,t)=>new ui({generator:async()=>{const n=Kd(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 s={};for(const[e,t]of r){const n=s[e];n?n.push(t):s[e]=new ea(e,t)}const o=new Array;for(const e in s)o.push(s[e]);return o},type:0}),Uh=(e,t,n,r)=>r?Mh(e,t,n,r):xh(e,t,n),Mh=(e,t,n,r)=>new ui({generator:async()=>{const s=new Array;for await(const o of e){const e=t(o);let i=!1;for(let t=0;t<s.length;t++){const a=s[t];if(r(a.key,e)){a.push(n(o)),i=!0;break}}if(!1===i){const t=n(o);s.push(new ea(e,t))}}const o=new Array;for(const e of s)o.push(e);return o},type:0}),xh=(e,t,n)=>new ui({generator:async()=>{const r={};for(const s of await e.toArray()){const e=t(s),o=r[e],i=n(s);o?o.push(i):r[e]=new ea(e,i)}const s=new Array;for(const e in r)s.push(r[e]);return s},type:0}),Fh=(e,t,n,r,s,o)=>{const i=o?Lh(e,t,n,r,s,o):Bh(e,t,n,r,s);return new ui({generator:i,type:0})},Lh=(e,t,n,r,s,o)=>async()=>{const i=[];for await(const e of t){const t=r(e),n=i.find((e=>o(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=>o(e.key,t)))??{key:t,values:[]};return s(e,r.values)}))},Bh=(e,t,n,r,s)=>async()=>{const o=new Map;for await(const e of t){const t=r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}return(await e.toArray()).map((e=>{const t=n(e),r=o.get(t)??[];return s(e,r)}))},$h=(e,t,n,r,s,o)=>{const i=o?Wh(e,t,n,r,s,o):qh(e,t,n,r,s);return new ui({generator:i,type:0})},Wh=(e,t,n,r,s,o)=>async()=>{const i=[];for await(const e of t){const t=await r(e),n=i.find((e=>o(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=>o(e.key,t)))??{key:t,values:[]};return s(e,r.values)}));return await Promise.all(a)},qh=(e,t,n,r,s)=>async()=>{const o=new Map;for await(const e of t){const t=await r(e),n=o.get(t);n?n.push(e):o.set(t,[e])}const i=(await e.toArray()).map((async e=>{const t=await n(e),r=o.get(t)??[];return s(e,r)}));return await Promise.all(i)},Vh=(e,t,n=ai)=>new ui({generator:async()=>{const r=await e.distinct(n).toArray();if(0===r.length)return[];const s=await t.toArray(),o=new Array;for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++){const r=s[e];if(!0===n(t,r)){o.push(t);break}}}return o},type:0}),Hh=(e,t,n)=>new ui({generator:async()=>{const r=await e.distinctAsync(n).toArray();if(0===r.length)return[];const s=await t.toArray(),o=new Array;for(let e=0;e<r.length;e++){const t=r[e];for(let e=0;e<s.length;e++){const r=s[e];if(!0===await n(t,r)){o.push(t);break}}}return o},type:0}),Kh=(e,t,n,r,s,o=ai)=>new ui({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===o(t,i)&&c.push(s(e,n))}}return c},type:0}),jh=(e,t)=>t?Jh(e,t):zh(e),zh=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(0===e.length)throw new ii(oi.NoElements);return e[e.length-1]}case 1:{const e=t.generator();if(0===e.length)throw new ii(oi.NoElements);return await e[e.length-1]}case 2:{const e=await t.generator();if(0===e.length)throw new ii(oi.NoElements);return await e[e.length-1]}}},Jh=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 ii(oi.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 ii(oi.NoMatch)},Xh=(e,t)=>t?Zh(e,t):Qh(e),Qh=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]}}},Zh=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},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(!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},tp=async(e,t)=>{let n;n=t?Vd(e,t):e.dataFunc;const r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);return Math.max.apply(null,r)},np=async(e,t)=>{const n=Kd(e,t),r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);return Math.max.apply(null,r)},rp=async(e,t)=>{let n;n=t?Vd(e,t):e.dataFunc;const r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);return Math.min.apply(null,r)},sp=async(e,t)=>{const n=Kd(e,t),r=await eh(n);if(0===r.length)throw new ii(oi.NoElements);return Math.min.apply(null,r)},op=(e,t)=>{const n="string"==typeof t?e=>[typeof e===t,e]:e=>[e instanceof t,e];return new ui({generator:async()=>{const t=Vd(e,n),r=await eh(t),s=[];for(const[e,t]of r)e&&s.push(t);return s},type:0})};async function*ip(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for(const r of e){const e=await t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}async function*ap(e,t,n,r){const s=((e,t)=>{const n=new Map;for(const r of e){const e=t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}class cp extends ui{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 s;return s=e instanceof cp?async function*(){for await(const s of e.orderedPairs())yield*ip(s,t,n,r)}:()=>async function*(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=await t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}(e,t,n,r),new cp(s)}static generate(e,t,n,r){let s;return s=e instanceof cp?async function*(){for await(const s of e.orderedPairs())yield*ap(s,t,n,r)}:()=>async function*(e,t,n,r){const s=await(async(e,t)=>{const n=new Map;for await(const r of e){const e=t(r),s=n.get(e);s?s.push(r):n.set(e,[r])}return n})(e,t),o=[...s.keys()].sort(r||void 0);if(n)for(let e=0;e<o.length;e++)yield s.get(o[e]);else for(let e=o.length-1;e>=0;e--)yield s.get(o[e])}(e,t,n,r),new cp(s)}thenBy(e,t){return cp.generate(this,e,!0,t)}thenByAsync(e,t){return cp.generateAsync(this,e,!0,t)}thenByDescending(e,t){return cp.generate(this,e,!1,t)}thenByDescendingAsync(e,t){return cp.generateAsync(this,e,!1,t)}}const up=(e,t)=>cp.generate(e,(e=>e),!0,t),lp=(e,t,n)=>cp.generate(e,t,!0,n),dp=(e,t,n)=>cp.generateAsync(e,t,!0,n),hp=(e,t,n)=>cp.generate(e,t,!1,n),pp=(e,t,n)=>cp.generateAsync(e,t,!1,n),gp=(e,t)=>cp.generate(e,(e=>e),!1,t),fp=async(e,t)=>{const n=Vd(e,(e=>[t(e),e])),r=await eh(n),s=[],o=[];for(const[e,t]of r)e?o.push(t):s.push(t);return[o,s]},vp=async(e,t)=>{const n=Kd(e,(async e=>[await t(e),e])),r=await eh(n),s=[],o=[];for(const[e,t]of r)e?o.push(t):s.push(t);return[o,s]},mp=(e,t)=>{const n=e.dataFunc;switch(n.type){case 1:return new ui({generator:()=>{const e=n.generator();return e.unshift(Promise.resolve(t)),e},type:n.type});case 2:return new ui({generator:async()=>{const e=await n.generator();return e.unshift(Promise.resolve(t)),e},type:n.type});case 0:return new ui({generator:async()=>{const e=await n.generator();return e.unshift(t),e},type:n.type})}},yp=e=>{const t=e.dataFunc;switch(t.type){case 1:return new ui({generator:()=>t.generator().reverse(),type:t.type});case 2:case 0:return new ui({generator:async()=>(await t.generator()).reverse(),type:t.type})}},wp=(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}}},Sp=(e,t)=>"function"==typeof t?1===t.length?new ui(Vd(e,t)):new ui(wp(e,t)):new ui(Vd(e,(e=>e[t]))),Ap=(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}}},_p=(e,t)=>{let n;return n="function"==typeof t?1===t.length?Kd(e,t):Ap(e,t):Kd(e,(e=>e[t])),new ui(n)},Cp=(e,t)=>new ui({generator:async()=>{let n;n="function"==typeof t?1===t.length?Vd(e,t):wp(e,t):Vd(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 ui({generator:async()=>{let n;n=1===t.length?Kd(e,t):Ap(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}),Dp=async(e,t,n=ai)=>{const r=await e.toArray(),s=await t.toArray();if(r.length!==s.length)return!1;for(let e=0;e<r.length;e++)if(!1===n(r[e],s[e]))return!1;return!0},kp=async(e,t,n)=>{const r=await e.toArray(),s=await t.toArray();if(r.length!==s.length)return!1;for(let e=0;e<r.length;e++){const t=r[e],o=s[e];if(!1===await n(t,o))return!1}return!0},Gp=(e,t)=>t?Np(e,t):bp(e),bp=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);if(0===e.length)throw new ii(oi.NoElements);return e[0]}case 1:{const e=t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);if(0===e.length)throw new ii(oi.NoElements);return e[0]}case 2:{const e=await t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);if(0===e.length)throw new ii(oi.NoElements);return await e[0]}}},Np=async(e,t)=>{const n=await Sh(e);let r=!1,s=null;for(const e of n)if(t(e)){if(!0===r)throw new ii(oi.MoreThanOneMatchingElement);r=!0,s=e}if(!1===r)throw new ii(oi.NoMatch);return s},Ep=async(e,t)=>{const n=await Sh(e);let r=!1,s=null;for(const e of n)if(!0===await t(e)){if(!0===r)throw new ii(oi.MoreThanOneMatchingElement);r=!0,s=e}if(!1===r)throw new ii(oi.NoMatch);return s},Ip=(e,t)=>t?Pp(e,t):Rp(e),Rp=async e=>{const t=e.dataFunc;switch(t.type){case 0:{const e=await t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);return 0===e.length?null:e[0]}case 1:{const e=t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);return 0===e.length?null:e[0]}case 2:{const e=await t.generator();if(e.length>1)throw new ii(oi.MoreThanOneElement);return 0===e.length?null:await e[0]}}},Pp=async(e,t)=>{const n=await Sh(e);let r=!1,s=null;for(const e of n)if(t(e)){if(!0===r)throw new ii(oi.MoreThanOneElement);r=!0,s=e}return s},Op=async(e,t)=>{const n=await Sh(e);let r=!1,s=null;for(const e of n)if(!0===await t(e)){if(!0===r)throw new ii(oi.MoreThanOneElement);r=!0,s=e}return s},Up=(e,t)=>{const n=e.dataFunc;switch(n.type){case 0:return new ui({generator:async()=>(await n.generator()).slice(t),type:0});case 1:return new ui({generator:()=>n.generator().slice(t),type:1});case 2:return new ui({generator:async()=>(await n.generator()).slice(t),type:2})}},Mp=(e,t)=>new ui({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 s=[];for(;r<n.length;r++)s.push(n[r]);return s},type:0}),xp=(e,t)=>new ui({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 s=[];for(;r<n.length;r++)s.push(n[r]);return s},type:0}),Fp=(e,t)=>t?Bp(e,t):Lp(e),Lp=async e=>{let t=0;for(const n of await e.toArray())t+=n;return t},Bp=async(e,t)=>{let n=0;for(const r of await e.toArray())n+=t(r);return n},$p=async(e,t)=>{const n=Kd(e,t),r=await eh(n);let s=0;for(const e of r)s+=e;return s},Wp=(e,t)=>{const n=t>0?t:0,r=e.dataFunc;switch(r.type){case 1:return new ui({generator:()=>r.generator().splice(0,n),type:1});case 2:return new ui({generator:()=>r.generator().then((e=>e.splice(0,n))),type:2});default:return new ui({generator:()=>r.generator().then((e=>e.splice(0,n))),type:0})}},qp=(e,t)=>new ui({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 s=n[e];if(!0!==t(s,e))break;r.push(s)}return r},type:0}),Vp=(e,t)=>new ui({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 s=n[e];if(!0!==await t(s,e))break;r.push(s)}return r},type:0}),Hp=async(e,t)=>{const n=new Map,r=Vd(e,(e=>[t(e),e])),s=await eh(r);for(const[e,t]of s){const r=n.get(e);void 0===r?n.set(e,[t]):r.push(t)}return n},Kp=async(e,t)=>{const n=new Map,r=Kd(e,(async e=>[await t(e),e])),s=await eh(r);for(const[e,t]of s){const r=n.get(e);void 0===r?n.set(e,[t]):r.push(t)}return n},jp=async(e,t)=>{const n=e.dataFunc,r=await eh(n),s={};for(const e of r)s[t(e)]=e;return s},zp=async(e,t)=>{const n=Kd(e,(async e=>[await t(e),e])),r=await eh(n),s={};for(const[e,t]of r)s[e]=t;return s},Jp=async e=>{const t=e.dataFunc,n=await eh(t);return new Set(n)},Yp=(e,t,n)=>n?Qp(e,t,n):Xp(e,t),Xp=(e,t)=>new ui({generator:async()=>{const n=new Set,r=t.toArray();for await(const t of e)!1===n.has(t)&&n.add(t);const s=await r;for(const e of s)!1===n.has(e)&&n.add(e);return[...n.keys()]},type:0}),Qp=(e,t,n)=>new ui({generator:async()=>{const r=[],s=await Promise.all([e.toArray(),t.toArray()]);for(const e of s)for(const t of e){let e=!1;for(const s of r)if(!0===n(t,s)){e=!0;break}!1===e&&r.push(t)}return r},type:0}),Zp=(e,t,n)=>new ui({generator:async()=>{const r=[],s=await Promise.all([e.toArray(),t.toArray()]);for(const e of s)for(const t of e){let e=!1;for(const s of r)if(!0===await n(t,s)){e=!0;break}!1===e&&r.push(t)}return r},type:0}),eg=(e,t)=>new ui({generator:async()=>(await e.toArray()).filter(t),type:0}),tg=(e,t)=>new ui({generator:async()=>{const n=Ap(e,(async(e,n)=>[await t(e,n),e])),r=await eh(n),s=[];for(const[e,t]of r)e&&s.push(t);return s},type:0}),ng=(e,t,n)=>n?sg(e,t,n):rg(e,t),rg=(e,t)=>new ui({generator:async()=>{const[n,r]=await Promise.all([e.toArray(),t.toArray()]),s=n.length<r.length?n.length:r.length,o=new Array(s);for(let e=0;e<s;e++){const t=n[e],s=r[e];o[e]=[t,s]}return o},type:0}),sg=(e,t,n)=>new ui({generator:async()=>{const[r,s]=await Promise.all([e.toArray(),t.toArray()]),o=r.length<s.length?r.length:s.length,i=new Array(o);for(let e=0;e<o;e++){const t=r[e],o=s[e];i[e]=n(t,o)}return i},type:0}),og=(e,t,n)=>new ui({generator:async()=>{const[r,s]=await Promise.all([e.toArray(),t.toArray()]),o=r.length<s.length?r.length:s.length,i=new Array(o);for(let e=0;e<o;e++){const t=r[e],o=s[e];i[e]=n(t,o)}return Promise.all(i)},type:0}),ig=e=>{const t=di.prototype,n=e.prototype,r=Object.getOwnPropertyNames(t);for(const e of r)n[e]=n[e]??t[e]};ru(li),(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(cu,"all"),n(uu,"allAsync"),n(lu,"append"),n(du,"any"),n(gu,"anyAsync"),n(fu,"asParallel"),n(vu,"average"),n(mu,"averageAsync"),n(yu,"chunk"),n(wu,"concatenate"),n(Su,"contains"),n(Au,"containsAsync"),n(_u,"count"),n(Du,"countAsync"),n(ku,"defaultIfEmpty"),n(Gu,"distinct"),n(bu,"distinctAsync"),n(Nu,"each"),n(Eu,"eachAsync"),n(Iu,"elementAt"),n(Ru,"elementAtOrDefault"),n(Pu,"except"),n(Ou,"exceptAsync"),n(Uu,"first"),n(Fu,"firstAsync"),n(Lu,"firstOrDefault"),n(Wu,"firstOrDefaultAsync"),n(qu,"groupBy"),n(Ku,"groupByAsync"),n(Ju,"groupByWithSel"),n(Qu,"groupJoin"),n(tl,"groupJoinAsync"),n(sl,"intersect"),n(ol,"intersectAsync"),n(il,"joinByKey"),n(al,"last"),n(ll,"lastAsync"),n(dl,"lastOrDefault"),n(gl,"lastOrDefaultAsync"),n(fl,"max"),n(yl,"maxAsync"),n(wl,"min"),n(_l,"minAsync"),n(Cl,"ofType"),n(Tl,"order"),n(Dl,"orderBy"),n(kl,"orderByAsync"),n(Gl,"orderByDescending"),n(bl,"orderByDescendingAsync"),n(Nl,"orderDescending"),n(El,"partition"),n(Il,"partitionAsync"),n(Rl,"prepend"),n(Pl,"reverse"),n(Ol,"select"),n(Fl,"selectAsync"),n($l,"selectMany"),n(Hl,"selectManyAsync"),n(Kl,"sequenceEquals"),n(jl,"sequenceEqualsAsync"),n(zl,"single"),n(Xl,"singleAsync"),n(Ql,"singleOrDefault"),n(td,"singleOrDefaultAsync"),n(nd,"skip"),n(rd,"skipWhile"),n(id,"skipWhileAsync"),n(ud,"sum"),n(hd,"sumAsync"),n(pd,"take"),n(gd,"takeWhile"),n(md,"takeWhileAsync"),n(Sd,"toArray"),n(Ad,"toMap"),n(_d,"toMapAsync"),n(Cd,"toObject"),n(Td,"toObjectAsync"),n(Dd,"toSet"),n(kd,"union"),n(Nd,"unionAsync"),n(Ed,"where"),n(Pd,"whereAsync"),n(Md,"zip"),n(Ld,"zipAsync")})(ci),(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(Bd,"aggregate"),n(Hd,"all"),n(jd,"allAsync"),n(zd,"append"),n(Jd,"any"),n(Qd,"anyAsync"),n(Zd,"asAsync"),n(th,"average"),n(nh,"averageAsync"),n(rh,"chunk"),n(sh,"concatenate"),n(oh,"contains"),n(ih,"containsAsync"),n(ah,"count"),n(lh,"countAsync"),n(dh,"defaultIfEmpty"),n(hh,"distinct"),n(ph,"distinctAsync"),n(gh,"each"),n(fh,"eachAsync"),n(vh,"elementAt"),n(mh,"elementAtOrDefault"),n(yh,"except"),n(wh,"exceptAsync"),n(Ah,"first"),n(Th,"firstAsync"),n(Dh,"firstOrDefault"),n(bh,"firstOrDefaultAsync"),n(Nh,"groupBy"),n(Rh,"groupByAsync"),n(Uh,"groupByWithSel"),n(Fh,"groupJoin"),n($h,"groupJoinAsync"),n(Fh,"groupJoin"),n($h,"groupJoinAsync"),n(Vh,"intersect"),n(Hh,"intersectAsync"),n(Kh,"joinByKey"),n(jh,"last"),n(Yh,"lastAsync"),n(Xh,"lastOrDefault"),n(ep,"lastOrDefaultAsync"),n(tp,"max"),n(np,"maxAsync"),n(rp,"min"),n(sp,"minAsync"),n(op,"ofType"),n(up,"order"),n(lp,"orderBy"),n(dp,"orderByAsync"),n(hp,"orderByDescending"),n(pp,"orderByDescendingAsync"),n(gp,"orderDescending"),n(fp,"partition"),n(vp,"partitionAsync"),n(mp,"prepend"),n(yp,"reverse"),n(Sp,"select"),n(_p,"selectAsync"),n(Cp,"selectMany"),n(Tp,"selectManyAsync"),n(Dp,"sequenceEquals"),n(kp,"sequenceEqualsAsync"),n(Gp,"single"),n(Ep,"singleAsync"),n(Ip,"singleOrDefault"),n(Op,"singleOrDefaultAsync"),n(Up,"skip"),n(Mp,"skipWhile"),n(xp,"skipWhileAsync"),n(Fp,"sum"),n($p,"sumAsync"),n(Wp,"take"),n(qp,"takeWhile"),n(Vp,"takeWhileAsync"),n(Sh,"toArray"),n(Hp,"toMap"),n(Kp,"toMapAsync"),n(jp,"toObject"),n(zp,"toObjectAsync"),n(Jp,"toSet"),n(Yp,"union"),n(Zp,"unionAsync"),n(eg,"where"),n(tg,"whereAsync"),n(ng,"zip"),n(og,"zipAsync")})(ui),(()=>{const{prototype:e}=di,t=Object.getOwnPropertyNames(li.prototype);for(const n of t)e[n]=e[n]??li.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 ii(oi.NoMatch);return t}if(0===this.length)throw new ii(oi.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 ii(oi.NoMatch)}if(0===this.length)throw new ii(oi.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 ii(oi.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 ii(oi.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 ag,cg;!function(e){e.Success="Success",e.GroupDoesNotExists="GroupDoesNotExists",e.ObjectDoesNotExists="ObjectDoesNotExists",e.FatalError="FatalError",e.FunctionNotSupported="FunctionNotSupported"}(ag||(ag={})),function(e){e.Success="Success",e.NoPermissions="NoPermissions",e.NameToShort="NameToShort",e.NameAlreadyExists="NameAlreadyExists",e.OtherError="OtherError",e.UnknownError="UnknownError"}(cg||(cg={}));class ug{constructor(){this._guid="",this._name="",this._iconName="",this._position=0,this._objectsOrder={},null==ug._devicesService&&(ug._devicesService=$v.Get(Lo.ServiceName))}GetDevicesChannelsInGroupAsync(){return e=this,t=arguments,s=function*(e=!1){let t=[],n=[];const s=yield ug._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 s)for(let t of e.Channels.where((e=>e.ChannelGroups.any((e=>e===this._guid)))))n.push(t);return n}const o=Object.keys(this._objectsOrder).map(Number).sort(((e,t)=>e-t));Object.values(this._objectsOrder).forEach((e=>{const n=s.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 o){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,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(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((s=s.apply(e,t||[])).next())}));var e,t,n,s}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(hg.ServiceName).ChangeGroupNameAsync(this,e)}ChangeIconNameAsync(e){return $v.Get(hg.ServiceName).ChangeGroupIconNameAsync(this,e)}}var lg,dg=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 hg{constructor(){this._connection=null,this._synchronized=!1,this._synchronizationTaskCompletionSource=null,this._groups=[],this._objectsGroupingSupported=!1,this._connection=$v.Get(Ot.ServiceName),this._synchronizationTaskCompletionSource=new Promise((e=>{$v.Get(ze.ServiceName).OnUserLoggedInEvent().Subscribe((t=>dg(this,void 0,void 0,(function*(){yield this.GetGroupsAsync(!0),e(),this._synchronized=!0}))))}))}SetObjectsInGroupAndOrderAsync(e,t){return dg(this,void 0,void 0,(function*(){var n;let r=[],s=[];for(let e of t)if(this.IsDevice(e)){for(let t of e.Channels)r.push(`${t.ChannelId}`);s.push(`${e.Guid}`)}else{if(!this.IsDeviceChannel(e))throw new Error("Passed object is not a device or device channel!");r.push(`${e.ChannelId}`),s.push(`${e.ChannelId}`)}const o=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new fg(e,s),15e3,!1);switch($v.Get(be.ServiceName).ClearCache(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),yield this.GetGroupsAsync(!1),null==o?void 0:o.Status){case ce.OK:return new ke(ag.Success,"");case ce.NotSupportedMethod:case ce.ResourceDoesNotExists:case ce.ResourceIsNotAvailable:return new ke(ag.FunctionNotSupported,"");case ce.WrongData:return"GroupDoesNotExists"===o.Data?new ke(ag.GroupDoesNotExists,o.Data):new ke(ag.FatalError,o.Data);case ce.Error:case ce.FatalError:default:return new ke(ag.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(hg.ServiceName,`Group ${e.Name} order position [on array]: ${n} set position: ${e.OrderPosition}`)}))}LogObjectsInGroupOrder(e,t){const n=$v.Get(r.ServiceName);n.Debug(hg.ServiceName,`Group ${e.Name} objects order:`),t.forEach(((e,t)=>{n.Debug(hg.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 dg(this,void 0,void 0,(function*(){var t;const n=e.select((e=>e.Guid)).toArray(),s=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new gg(n),15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==s?void 0:s.Status)===ce.OK?($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),ce.OK):($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to change groups order, controller responded with error ${null==s?void 0:s.Status} data: ${null==s?void 0:s.Data}`),this.LogGroupsOrder(e),null==s?void 0:s.Status)}))}ChangeObjectsPositionsInGroupAsync(e,t){return dg(this,void 0,void 0,(function*(){var n;const s=t.select((e=>e.ChannelId)).toArray(),o=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new wg(e.Guid,s),15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==o?void 0:o.Status)===ce.OK?($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),ce.OK):($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to change objects positions in group, controller responded with error ${null==o?void 0:o.Status} data: ${null==o?void 0:o.Data}`),this.LogObjectsInGroupOrder(e,t),null==o?void 0:o.Status)}))}IsGroupsAndObjectsOrderingAvailable(){return this._objectsGroupingSupported}MoveGroupPositionAsync(e,t){return dg(this,void 0,void 0,(function*(){var n;const s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new pg(e.Guid,t),15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==s?void 0:s.Status)===ce.OK?($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),ce.OK):($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to move group position, controller responded with error ${null==s?void 0:s.Status} data: ${null==s?void 0:s.Data}`),null==s?void 0:s.Status)}))}MoveObjectInGroupPositionAsync(e,t,n){return dg(this,void 0,void 0,(function*(){var s;const o=`${t.GetDevice().Guid}_${t.Number}`,i=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(new yg(e.Guid,o,n),15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),(null==i?void 0:i.Status)===ce.OK?($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),ce.OK):($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to move object in 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)}))}AddDeviceChannelToGroupByGuidAsync(e,t){return dg(this,void 0,void 0,(function*(){var n,s;const o=new Dg;if(o.Data.Channel=e.Number,null==e.GetDevice())throw new Error("Device is not set on this channel!");o.Data.DeviceGuid=null===(n=e.GetDevice())||void 0===n?void 0:n.Guid,o.Data.GroupGuid=t;const i=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(o,15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=i&&null!=i.Status?(i.Status==ce.OK?e.ChannelGroups.push(t):$v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add device channel ${e.Name} to group ${t}, controller responded with error ${i.Status} data: ${i.Data}`),$v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),i.Status):(yield this.GetGroupsAsync(),ce.Error)}))}RemoveDeviceChannelFromGroupByGuidAsync(e,t){return dg(this,void 0,void 0,(function*(){var n,s;const o=new kg;if(null==e.GetDevice())throw new Error("Device is not set on this channel!");o.Data.DeviceGuid=null===(n=e.GetDevice())||void 0===n?void 0:n.Guid,o.Data.Channel=e.Number,o.Data.GroupGuid=t;const i=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(o,15e3,!1);return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=i&&null!=i.Status?(i.Status==ce.OK?e.ChannelGroups=e.ChannelGroups.where((e=>e!=t)).toArray():$v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to remove device channel ${e.Name} from group ${t}, controller responded with error ${i.Status} data: ${i.Data}`),$v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),i.Status):(yield this.GetGroupsAsync(),ce.Error)}))}UpsertGroupWithDevicesChannelsAsync(e,t){return dg(this,void 0,void 0,(function*(){if(this._groups.all((t=>t.Guid!=e.Guid))){let t=yield this.AddNewGroupWithIconAsync(e.Name,e.IconName);if(!(t instanceof ug))return t instanceof ke?t:new ke(cg.UnknownError,"");e=t}for(let n of t.where((t=>t.ChannelGroups.all((t=>t!==e.Guid))))){let t=yield this.AddDeviceChannelToGroupAsync(n,e);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),t!==ce.OK)return $v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add device channel ${n.Name} to group ${e.Name}, controller responded with error ${t}`),new ke(cg.UnknownError,`Failed to add device channel ${n.Name} to group ${e.Name}, controller responded with error ${t}`)}let n=yield $v.Get(Lo.ServiceName).GetDevicesAsync();for(let o of n)for(let n of o.Channels.except(t,((e,t)=>e.GetDevice().Guid==t.GetDevice().Guid&&e.Number==t.Number)))for(var s of n.ChannelGroups.where((t=>e.Guid==t))){let t=yield this.RemoveDeviceChannelFromGroupAsync(n,e);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(),t!==ce.OK)return $v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to remove device channel ${n.Name} from group ${e.Name}, controller responded with error ${t}`),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),new ke(cg.UnknownError,`Failed to remove device channel ${n.Name} from group ${e.Name}, controller responded with error ${t}`)}return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),e}))}UpdateGroupWithDevicesChannelsAsync(e,t){return dg(this,void 0,void 0,(function*(){for(let n of t.where((t=>t.ChannelGroups.all((t=>t!==e))))){let t=yield this.AddDeviceChannelToGroupByGuidAsync(n,e);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(),t!==ce.OK)return $v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add device channel ${n.Name} to group ${e}, controller responded with error ${t}`),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),ce.FatalError}let n=yield $v.Get(Lo.ServiceName).GetDevicesAsync();for(let o of n)for(let n of o.Channels.except(t,((e,t)=>e.GetDevice().Guid==t.GetDevice().Guid&&e.Number==t.Number)))for(var s of n.ChannelGroups.where((t=>e==t))){let t=yield this.RemoveDeviceChannelFromGroupByGuidAsync(n,e);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),t!==ce.OK)return $v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add device channel ${n.Name} to group ${e}, controller responded with error ${t}`),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),ce.FatalError}return $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),ce.OK}))}ChangeGroupNameByGuidAsync(e,t){return dg(this,void 0,void 0,(function*(){var n,r;let s=new Tg,o=new Gg,i=this._groups.first((t=>t.Guid===e));o.Guid=e,o.Name=t,o.IconName=i.IconName,null===(n=s.Data)||void 0===n||n.push(o);const a=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(s,15e3,!1);if($v.Get(be.ServiceName).ClearCache(),this._groups=yield this.GetGroupsAsync(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=a&&null!=a.Status)switch(a.Status){case ce.OK:return new ke(cg.Success,"");case ce.WrongData:switch(a.Data){case"NameToShort":return new ke(cg.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new ke(cg.NameAlreadyExists,"Group with this name already exists");default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}return new ke(cg.UnknownError,"")}))}ChangeGroupNameAndIconAsync(e,t,n){return this.ChangeGroupNameAndIconByGuidAsync(e.Guid,t,n)}ChangeGroupNameAndIconByGuidAsync(e,t,n){return dg(this,void 0,void 0,(function*(){var r,s;let o=new Tg,i=new Gg,a=this._groups.first((t=>t.Guid===e));i.Guid=e,i.Name=t,i.IconName=n,i.ObjectsOrder=a.ObjectsOrder,null===(r=o.Data)||void 0===r||r.push(i);const c=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(o,15e3,!1);if($v.Get(be.ServiceName).ClearCache(),this._groups=yield this.GetGroupsAsync(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=c&&null!=c.Status)switch(c.Status){case ce.OK:return new ke(cg.Success,"");case ce.WrongData:switch(c.Data){case"NameToShort":return new ke(cg.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new ke(cg.NameAlreadyExists,"Group with this name already exists");default:return new ke(cg.OtherError,`Response error: ${c.Status} data: ${c.Data}`)}default:return new ke(cg.OtherError,`Response error: ${c.Status} data: ${c.Data}`)}return new ke(cg.UnknownError,"")}))}ChangeGroupIconNameByGuidAsync(e,t){return dg(this,void 0,void 0,(function*(){var n,r;let s=new Tg,o=new Gg,i=this._groups.first((t=>t.Guid===e));o.Guid=e,o.Name=i.Name,o.IconName=t,null===(n=s.Data)||void 0===n||n.push(o);const a=yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(s,15e3,!1);if($v.Get(be.ServiceName).ClearCache(),this._groups=yield this.GetGroupsAsync(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=a&&null!=a.Status)switch(a.Status){case ce.OK:return new ke(cg.Success,"");case ce.WrongData:switch(a.Data){case"NameToShort":return new ke(cg.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new ke(cg.NameAlreadyExists,"Group with this name already exists");default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}return new ke(cg.UnknownError,"")}))}GetServiceName(){return hg.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 dg(this,void 0,void 0,(function*(){var t;let n=new _g;n.Data=e;const r=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(n,15e3,!1);$v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync();for(let t of yield $v.Get(Lo.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 $v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=r&&null!=r.Status?null==r?void 0:r.Status:ce.Error}))}GetGroupsAsync(){return dg(this,arguments,void 0,(function*(e=!1){var t,n;const s=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Cg,15e3,e);let o=[];if((null==s?void 0:s.Status)===ce.OK){let e=$v.Get(r.ServiceName),t=0,i=yield $v.Get(Lo.ServiceName).GetDevicesAsync();return null===(n=s.Data)||void 0===n||n.forEach((n=>{t++;let r=new ug;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(hg.ServiceName,`Got group: ${r.Name} ${r.Guid} order: ${r.OrderPosition} objects order: ${JSON.stringify(r.ObjectsOrder)}`),o.push(r)})),this._groups=o,o}throw new Error(`Failed to get groups, API responded with status ${null==s?void 0:s.Status} data: ${null==s?void 0:s.Data}`)}))}AddDeviceChannelToGroupAsync(e,t){return this.AddDeviceChannelToGroupByGuidAsync(e,t.Guid)}RemoveDeviceChannelFromGroupAsync(e,t){return this.RemoveDeviceChannelFromGroupByGuidAsync(e,t.Guid)}AddNewGroupAsync(e){return dg(this,void 0,void 0,(function*(){var t,n;let s=new Tg,o=new Gg;o.Name=e,null===(t=s.Data)||void 0===t||t.push(o);const i=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(s,15e3,!1);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=i&&null!=i.Status)switch(i.Status){case ce.OK:return this._groups.first((t=>t.Name===e));case ce.WrongData:switch($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add new group, controller responded with error ${i.Status} data: ${i.Data}`),i.Data){case"NameToShort":return new ke(cg.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new ke(cg.NameAlreadyExists,"Group with this name already exists");default:return new ke(cg.OtherError,`Response error: ${i.Status} data: ${i.Data}`)}default:return new ke(cg.OtherError,`Response error: ${i.Status} data: ${i.Data}`)}return new ke(cg.UnknownError,"")}))}AddNewGroupWithIconAsync(e,t){return dg(this,void 0,void 0,(function*(){var n,s;let o=new Tg,i=new Gg;i.Name=e,i.IconName=t,null===(n=o.Data)||void 0===n||n.push(i);const a=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(o,15e3,!1);if($v.Get(be.ServiceName).ClearCache(),yield this.GetGroupsAsync(!1),yield $v.Get(Lo.ServiceName).GetDevicesAsync(),$v.Get(ot.ServiceName).ExitConfigurationModeAsync(),null!=a&&null!=a.Status)switch(a.Status){case ce.OK:return this._groups.first((t=>t.Name===e));case ce.WrongData:switch($v.Get(r.ServiceName).Error(hg.ServiceName,`Failed to add new group, controller responded with error ${a.Status} data: ${a.Data}`),a.Data){case"NameToShort":return new ke(cg.NameToShort,"At least 3 characters required");case"NameAlreadyExists":return new ke(cg.NameAlreadyExists,"Group with this name already exists");default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}default:return new ke(cg.OtherError,`Response error: ${a.Status} data: ${a.Data}`)}return new ke(cg.UnknownError,"")}))}}hg.ServiceName="ChannelsGroupsService";class pg extends ae{constructor(e,t){super(),this.Resource="/devices/groups/group/move",this.Method=ue.Post,this.Data=new mg,this.Data.GroupGuid=e,this.Data.NewPosition=t}}class gg extends ae{constructor(e){super(),this.Resource="/devices/groups/move",this.Method=ue.Post,this.Data=e}}class fg extends ae{constructor(e,t){super(),this.Resource="/devices/groups/group/objects/set",this.Method=ue.Post,this.Data=new vg,this.Data.GroupGuid=e.Guid,this.Data.ObjectsIds=t}}class vg{constructor(){this.GroupGuid="",this.ObjectsIds=[]}}class mg{constructor(){this.GroupGuid="",this.NewPosition=0}}class yg extends ae{constructor(e,t,n){super(),this.Resource="/devices/groups/group/object/move",this.Method=ue.Post,this.Data=new Sg,this.Data.GroupGuid=e,this.Data.NewPosition=n,this.Data.ObjectId=t}}class wg extends ae{constructor(e,t){super(),this.Resource="/devices/groups/group/objects/move",this.Method=ue.Post,this.Data=new Ag,this.Data.GroupGuid=e,this.Data.OrderedObjectsIds=t}}class Sg{constructor(){this.GroupGuid="",this.ObjectId="",this.NewPosition=0}}class Ag{constructor(){this.GroupGuid="",this.OrderedObjectsIds=[]}}class _g extends ae{constructor(){super(),this.Resource="/devices/groups/group",this.Method=ue.Delete}}class Cg 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 Dg extends ae{constructor(){super(),this.Resource="/devices/device/channel/groups/group/",this.Method=ue.Put,this.Data=new bg}}class kg extends ae{constructor(){super(),this.Resource="/devices/device/channel/groups/group/",this.Method=ue.Delete,this.Data=new bg}}class Gg{constructor(){this.Id=0,this.Guid="",this.Name="",this.IconName="",this.OrderPosition=0,this.ObjectsOrder={}}}class bg{constructor(){this.GroupGuid="",this.DeviceGuid="",this.Channel=0}}class Ng{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"}(lg||(lg={}));var Eg,Ig,Rg,Pg,Og,Ug,Mg,xg,Fg,Lg,Bg,$g=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Wg{constructor(){this._syncLock=new Ng,this._isInFouces=!0,this._canHibernate=!0,this._session=null,this._connection=null,this._currentAppState=lg.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,o;document.location,e.state&&("forward"==e.state.direction?(null===(t=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"Forward button pressed"),null===(n=this._onForwardButtonPressedEvent)||void 0===n||n.Invoke()):(null===(r=s.Log)||void 0===r||r.Warning(Wg.ServiceName,"Back button pressed"),null===(o=this._onBackButtonPressedEvent)||void 0===o||o.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=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"App state changed to: logged in"),this._onAppStateChanged.Invoke(lg.LoggedIn)})),this._session.OnUserLoggedOutEvent().Subscribe((e=>{var t;null===(t=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"App state changed to: logged out"),this._onAppStateChanged.Invoke(lg.LoggedOut)})),this._connection.OnConnectionStateChangedEvent().Subscribe((e=>{var t,n,r,o,i,a;switch(e){case he.Connected:null===(t=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"App state changed to: connected"),this._onAppStateChanged.Invoke(lg.Connected);break;case he.Disconnected:null===(n=s.Log)||void 0===n||n.Warning(Wg.ServiceName,"App state changed to: disconnected"),this._onAppStateChanged.Invoke(lg.Disconnected);break;case he.Connecting:null===(r=s.Log)||void 0===r||r.Warning(Wg.ServiceName,"App state changed to: connecting"),this._onAppStateChanged.Invoke(lg.Connecting);break;case he.Disconnecting:null===(o=s.Log)||void 0===o||o.Warning(Wg.ServiceName,"App state changed to: disconnecting"),this._onAppStateChanged.Invoke(lg.Disconnecting);break;case he.Reconnecting:null===(i=s.Log)||void 0===i||i.Warning(Wg.ServiceName,"App state changed to: reconnecting"),this._onAppStateChanged.Invoke(lg.Reconnecting);break;case he.Failed:null===(a=s.Log)||void 0===a||a.Warning(Wg.ServiceName,"App state changed to: failed"),this._onAppStateChanged.Invoke(lg.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(lg.Suspended),null===(e=s.Log)||void 0===e||e.Warning(Wg.ServiceName,"App state changed to: suspended"),null===(t=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"App switched to background"))}ReturnFromSuspension(){var e,t;this.IsHibernationAllowed()&&(this._returnedFromSuspension=!0,this._onReturnedFromSuspensionEvent.Invoke(),this._onAppStateChanged.Invoke(lg.ReturnedFromSuspension),null===(e=s.Log)||void 0===e||e.Warning(Wg.ServiceName,"App state changed to: returned from suspension"),null===(t=s.Log)||void 0===t||t.Warning(Wg.ServiceName,"App switched to foreground"))}EnterLowPowerMode(){this._onEnterLowPowerModeEvent.Invoke(),this._onAppStateChanged.Invoke(lg.EnteredLowPowerMode)}ExitLowPowerMode(){this._onExitLowPowerModeEvent.Invoke(),this._onAppStateChanged.Invoke(lg.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 Wg.ServiceName}}Wg.ServiceName="AppStateService";class qg{constructor(){this.DeviceGuid="",this.CurrentVersion="",this.NewVersion=""}}class Vg{constructor(){this.UpdatesAvailable=[],this.UpdatesNotAvailable=[]}}class Hg{constructor(){this.UpdatedResourceName=new Map,this.UpdateDescription=new Map,this.UpdateCreationTime=null,this.Version="",this.UpdateChannel=""}}class Kg{constructor(){this.Resource="",this.Version="",this.Type=null}}!function(e){e[e.RadioUpdate=0]="RadioUpdate",e[e.SoftwareUpdate=1]="SoftwareUpdate"}(Eg||(Eg={})),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"}(Ig||(Ig={})),(Bg=Rg||(Rg={}))[Bg.WaitingForUser=1]="WaitingForUser",Bg[Bg.Downloading=2]="Downloading",Bg[Bg.Unpackaging=3]="Unpackaging",Bg[Bg.CheckingApplicability=4]="CheckingApplicability",Bg[Bg.MigratingData=5]="MigratingData",Bg[Bg.CreatingBackup=6]="CreatingBackup",Bg[Bg.Deploying=7]="Deploying",Bg[Bg.Installing=8]="Installing",Bg[Bg.Removing=9]="Removing",Bg[Bg.Error=10]="Error",Bg[Bg.ReadyToDownload=11]="ReadyToDownload",Bg[Bg.PreparingSystem=12]="PreparingSystem",Bg[Bg.CheckingPackageIntegrity=13]="CheckingPackageIntegrity",Bg[Bg.CheckingIntegrity=14]="CheckingIntegrity",Bg[Bg.UndoingInstallation=15]="UndoingInstallation",Bg[Bg.Installed=16]="Installed",(Lg=Pg||(Pg={}))[Lg.Ignore=0]="Ignore",Lg[Lg.Cancel=1]="Cancel",Lg[Lg.Install=2]="Install";class jg{constructor(){this.UpdatedResourceName=new Map,this.Percentage=0,this.PercentageTotal=0,this.Status=Ig.Error,this.UpdateNumber=1,this.AvailableUpdates=1}}class zg{constructor(){this.UpdatedResourceName=new Map,this.Percentage=0,this.PercentageTotal=0,this.SpeedMbps=0,this.CurrentTask=Mg.Unknown}}class Jg{constructor(){this.BulkUpdateStatus=Og.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"}(Og||(Og={})),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"}(Ug||(Ug={})),function(e){e[e.Unknown=0]="Unknown",e[e.DownloadingUpdate=1]="DownloadingUpdate",e[e.DownloadingInstaller=2]="DownloadingInstaller",e[e.CheckingUpdate=3]="CheckingUpdate"}(Mg||(Mg={})),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"}(xg||(xg={})),function(e){e.Public="public",e.Beta="beta",e.Development="dev"}(Fg||(Fg={}));var Yg,Xg,Qg,Zg,ef,tf,nf,rf,sf=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 of{constructor(){this._controllerUpdates=[],this._updateRequestTimeout=12e4,this._oldUpdateVersion=5,this._oldUpdateBuild=56,this._updateOfflineStageTime=9.3,this._updateProviders=$v.Get(Js.ServiceName),this._logger=$v.Get(r.ServiceName),this._connection=$v.Get(Ot.ServiceName),this._appStateService=$v.Get(Wg.ServiceName),this._extensionService=$v.Get(et.ServiceName)}GetAutomaticControllerUpdateDownloadStatusAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this.getRuntimeInfoAsync();if(e instanceof ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot get update branch, feature unsupported in current version. Current version: ${e}`);let r=yield this._connection.SendAndWaitForResponseAsync(new Sf,1e4,!1);return!(r.Status!=ce.OK||!r.Data)}))}GetServiceName(){return of.ServiceName}CheckDeviceVersionAsync(e){return sf(this,void 0,void 0,(function*(){var t;let n;if("string"==typeof e){const t=yield $v.Get(Lo.ServiceName).GetDevice(e);if(null==t)return new ke(xg.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);n=t}else n=e;if(null==n.ProtocolGuid)return new ke(xg.UnsupportedDevice,"Device does not contains data about protocol GUID.");const r=yield null===(t=(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(n.ProtocolGuid,Ss.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(Lo.ServiceName).GetDevice(e);if(null==t)return new ke(xg.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);n=t}else n=e;if(null==n.ProtocolGuid)return new ke(xg.UnsupportedDevice,"Device does not contains data about protocol GUID.");const r=yield null===(t=(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(n.ProtocolGuid,Ss.Device)).first())||void 0===t?void 0:t.GetAvailableUpdateAsync(n);if(null!=r.Type)return r;const s=new uf;s.CurrentResourceVersion=r.CurrentResourceVersion,s.NewResourceVersion=r.Update.Version,s.UpdatedResourceName=r.UpdatedResourceName,s.UpdateResourceGuid=r.Update.ResourceGuid,s.UpdateDescription=new Map([["pl-PL",r.Update.Description]]);let o="n/a";try{o=(yield this._extensionService.GetProtocolInfoAsync(n.ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}return s.Protocol=o,s.ProtocolGuid=n.ProtocolGuid,(yield $v.Get(Lo.ServiceName).GetDevicesAsync()).any((e=>"952ddc14-76c4-4f47-b0bc-5d106c1f9b02"==e.ModelGuid))&&(s.IsUpdateSafe=!1),s}))}CheckDeviceUpdatesBulkAsync(e){return sf(this,void 0,void 0,(function*(){const t=yield yield this._updateProviders.GetUpdatesProvidersAsync(Ss.Device),n=[];for(var r of t){const t=yield r.CheckUpdateBulkAsync(e);if(t instanceof ke)return t;t.map((e=>sf(this,void 0,void 0,(function*(){const t=new uf;t.CurrentResourceVersion=e.CurrentResourceVersion,t.NewResourceVersion=e.Update.Version,t.UpdatedResourceName=e.UpdatedResourceName,t.UpdateDescription=e.UpdateDescription,t.IsUpdateSafe=!0;let s="n/a";try{s=(yield this._extensionService.GetProtocolInfoAsync(r.ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}t.Protocol=s,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 s;let o;if("string"==typeof e){const t=yield $v.Get(Lo.ServiceName).GetDevice(e);if(null==t)return new ke(xg.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);o=t}else o=e;if(null==o.ProtocolGuid)return new ke(xg.UnsupportedDevice,"Device does not contains data about protocol GUID.");const i=yield null===(s=(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(o.ProtocolGuid,Ss.Device)).first())||void 0===s?void 0:s.GetAvailableUpdateAsync(o);if(null!=i.Type)return i;this._appStateService.DisallowHibernation();const a=yield(yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(o.ProtocolGuid,Ss.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(Lo.ServiceName).GetDevicesAsync()).where((t=>e.includes(t.Guid))).groupBy((e=>e.ProtocolGuid)),s=[];this._appStateService.DisallowHibernation();const o=r.count();for(let e=0;e<o;e++){const i=r.elementAt(e),a=e*(100/o),c=(e+1)*(100/o),u=e=>{e.PercentageTotal=Math.floor(e.PercentageTotal/100*(c-a)+a),t(e)},l=yield yield this._updateProviders.GetUpdatesProvidersByProtocolAsync(i.key,Ss.Device),d=yield l.first().InstalUpdateBulkAsync(i.select((e=>e.Guid)).toArray(),u,n);if(d instanceof ke)return d;s.push(d)}if(this._appStateService.AllowHibernation(),1==s.length)return s[0];{const e=new Jg;s.some((e=>e.DevicesUpdateResults.count()>0))&&s.any((e=>e.BulkUpdateStatus!=Og.Success))?e.BulkUpdateStatus=Og.PartialSuccess:s.any((e=>e.BulkUpdateStatus!=Og.Success))?e.BulkUpdateStatus=s.first().BulkUpdateStatus:e.BulkUpdateStatus=Og.Success;for(const t of s)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(ze.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 vf,1e4,!1);if(null==r||r.Status!=ce.OK||null==r.Data)return!1;const[s,o]=r.Data.Update.Version.ContainerSoftwareVersion.toString().split(".");return parseInt(s)>parseInt(t)||parseInt(s)==parseInt(t)&&parseInt(o)>parseInt(n)}))}CheckDevicesUpdatesAvailabilityAsync(){return sf(this,void 0,void 0,(function*(){const e=$v.Get(ze.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),s=[];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 qg;t.DeviceGuid=e.DeviceGuid,t.CurrentVersion=e.CurrentVersion,t.NewVersion=e.NewVersion,s.push(t)})),s)}))}CheckControllerUpdatesAsync(){return sf(this,void 0,void 0,(function*(){this._controllerUpdates=[];let e=[];const t=new Vg,n=yield this.getRuntimeInfoAsync();if(n instanceof ke){const e=new af;return e.UpdateType=Eg.SoftwareUpdate,e.ResponseResult=n,t.UpdatesNotAvailable.push(e),t}const r=parseInt(n.SoftwareVersion.toString().split(".")[0]),s=parseInt(n.SoftwareVersion.toString().split(".")[1]);try{e=yield this._updateProviders.GetUpdatesProvidersAsync(Ss.Controller)}catch(e){if(!(e instanceof Ns))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 s=new af;s.ResponseResult=r,s.UpdateType=Eg.RadioUpdate;let o="n/a";try{o=(yield this._extensionService.GetProtocolInfoAsync(e[n].ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}s.UpdatedResourceName=new Map([["pl-PL",o],["en-US",o]]),s.CurrentResourceVersion=yield e[n].GetCurrentRadioVersionAsync(),t.UpdatesNotAvailable.push(s)}else{const s=r,o=new cf;o.UpdatedResourceName=new Map([["pl-PL",s.UpdatedResourceName],["en-US",s.UpdatedResourceName]]),o.CurrentResourceVersion=s.CurrentResourceVersion,o.NewResourceVersion=s.Update.Version,o.UpdateDescription=new Map([["pl-PL",s.Update.Description]]),o.UpdateType=Eg.RadioUpdate,o.UpdateIdentifier=se.GenerateUUID(),o.UpdateIsDownloading=!1,o.DownloadProgress=100,o.UpdateCreationTime=null,t.UpdatesAvailable.push(o),this._controllerUpdates.push(Object.assign(Object.assign({},s),{UpdateIdentifier:o.UpdateIdentifier,ProviderName:e[n].GetUpdateProviderName(),UpdateType:Eg.RadioUpdate}))}}let o=!0;if((r<this._oldUpdateVersion||r===this._oldUpdateVersion&&s<=this._oldUpdateBuild)&&(o=!1),o){const e=yield this._connection.SendAndWaitForResponseAsync(new vf,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 bs;r.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,r.UpdateDescription=ie(e.Data.Update.UpdateDescription),r.UpdatedResourceName=ie(e.Data.Update.UpdateName).get("en-US");const s=new cf;s.UpdatedResourceName=ie(e.Data.Update.UpdateName),s.UpdateDescription=ie(e.Data.Update.UpdateDescription),s.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,s.NewResourceVersion=`${e.Data.Update.Version.BaseRuntime}.${e.Data.Update.Version.ContainerSoftwareVersion}`,s.UpdateType=Eg.SoftwareUpdate,s.UpdateIdentifier=e.Data.Update.Guid,s.UpdateIsDownloading=e.Data.UpdateStep==Zg.DownloadingInstaller||e.Data.UpdateStep==Zg.DownloadingUpdate||e.Data.UpdateStep==Zg.CheckingUpdate,s.DownloadProgress=e.Data.DownloadProgress,s.UpdateCreationTime=e.Data.Update.Creationtime,t.UpdatesAvailable.push(s),this._controllerUpdates.push(Object.assign(Object.assign({},r),{UpdateIdentifier:s.UpdateIdentifier,ProviderName:of.ServiceName,UpdateType:Eg.SoftwareUpdate}))}else{const e=yield this._connection.SendAndWaitForResponseAsync(new mf,15e3,!1);if(null==e)throw new Error("Cannot check updates! Response is empty.");switch(e.Status){case ce.NoData:const r=new af;r.UpdateType=Eg.SoftwareUpdate,r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.ResponseResult=new ke(xg.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 s=new bs;s.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,s.UpdateDescription=ie(e.Data.UpdateDescription),s.UpdatedResourceName=ie(e.Data.UpdateName).get("en-US");const o=new cf;o.UpdatedResourceName=ie(e.Data.UpdateName),o.UpdateDescription=ie(e.Data.UpdateDescription),o.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,o.UpdateType=Eg.SoftwareUpdate,o.UpdateIdentifier=e.Data.Guid,o.NewResourceVersion=`${e.Data.Version.BaseRuntime}.${e.Data.Version.ContainerSoftwareVersion}`,o.UpdateIsDownloading=!1,o.DownloadProgress=0,o.UpdateCreationTime=e.Data.Creationtime,t.UpdatesAvailable.push(o),this._controllerUpdates.push(Object.assign(Object.assign({},s),{UpdateIdentifier:o.UpdateIdentifier,ProviderName:of.ServiceName,UpdateType:Eg.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 s,o=new bs;const i=new af;switch(i.UpdateType=Eg.SoftwareUpdate,i.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.status){case 200:null!=r.body&&(s=yield r.json());break;case 404:i.ResponseResult=new ke(xg.DeviceIsUpToDate,"Updates not found, controller is already up-to-date."),t.UpdatesNotAvailable.push(i);break;default:i.ResponseResult=new ke(xg.CannotGetUpdates,`Response status code does not indicate success. Status: ${r.status}`),t.UpdatesNotAvailable.push(i)}if(null!=s){o.CurrentResourceVersion=`${n.RuntimeVersion}.${n.SoftwareVersion}`,o.Update=s;const e=new cf;e.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),e.CurrentResourceVersion=o.CurrentResourceVersion,e.NewResourceVersion=o.Update.Version,e.UpdateDescription=new Map([["pl-PL",o.Update.Description]]),e.UpdateType=Eg.SoftwareUpdate,e.UpdateIdentifier=se.GenerateUUID(),e.DownloadProgress=100,e.UpdateIsDownloading=!1,e.UpdateCreationTime=null,t.UpdatesAvailable.push(e),this._controllerUpdates.push(Object.assign(Object.assign({},o),{UpdateIdentifier:e.UpdateIdentifier,ProviderName:of.ServiceName,UpdateType:Eg.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 ke){const e=new af;e.UpdateType=Eg.SoftwareUpdate,e.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),e.ResponseResult=n,t.UpdatesNotAvailable.push(e)}else{const r=new af;r.UpdateType=Eg.SoftwareUpdate,r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.ResponseResult=new ke(xg.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(Ss.Controller),t=yield this.getRuntimeInfoAsync();if(t instanceof ke)return t;const n=[];let r;r=new Kg,r.Resource="Controller software",r.Type=Eg.SoftwareUpdate,r.Version=`${t.RuntimeVersion}.${t.SoftwareVersion}`,n.push(r);for(let t=0;t<e.length;t++){r=new Kg,r.Version=yield e[t].GetCurrentRadioVersionAsync(),r.Type=Eg.RadioUpdate;let s="n/a";try{s=(yield this._extensionService.GetProtocolInfoAsync(e[t].ProtocolGuid)).first().Name}catch(e){this._logger.Warning(`Cannot get protocol name! error: ${e}`)}r.Resource=s,n.push(r)}return n}))}GetControllerUpdateBranchAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this.getRuntimeInfoAsync();if(e instanceof ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot get update branch, feature unsupported in current version. Current version: ${e}`);const r=yield this._connection.SendAndWaitForResponseAsync(new gf,1e4,!1);if(null==r||(null==r?void 0:r.Status)!=ce.OK)return new ke(xg.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 Fg.Public;case 1:return Fg.Beta;case 2:return Fg.Development;default:return new ke(xg.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 ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot set update branch, feature unsupported in current version. Current version: ${t}`);const s=yield this._connection.SendAndWaitForResponseAsync(new ff(e),1e4,!1);return null==s||(null==s?void 0:s.Status)!=ce.OK?new ke(xg.CannotSetUpdatesBranch,`Cannot set update branch, response is empty or status is not OK. Status: ${null==s?void 0:s.Status}`):ce.OK}))}EnableAutomaticControllerUpdateDonwloadAsync(){return sf(this,void 0,void 0,(function*(){const e=yield this.getRuntimeInfoAsync();if(e instanceof ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot enable automatic updates download, feature unsupported in current version. Current version: ${e}`);const r=yield this._connection.SendAndWaitForResponseAsync(new Af,1e4,!1);return null==r||(null==r?void 0:r.Status)!=ce.OK?new ke(xg.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 ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot disable automatic update 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 ke(xg.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 ke)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 ke(xg.FeatureUnsupportedInCurrentVersion,`Cannot disable automatic update download, feature unsupported in current version. Current version: ${e}`);const r=yield this._connection.SendAndWaitForResponseAsync(new Cf,1e4,!1);if(null==r)return new ke(xg.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 Hg;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 ke(xg.CannotGetUpdates,"Cannot get updates history, response data is empty.");case ce.NoData:return[];default:return new ke(xg.CannotGetUpdates,`Cannot get updates history, response status is not OK. Status: ${r.Status}`)}}))}InstallControllerUpdateAsync(e,t,n,r,s){return sf(this,void 0,void 0,(function*(){const o=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 ke)return a;const c=parseInt(a.SoftwareVersion.toString().split(".")[0]),u=parseInt(a.SoftwareVersion.toString().split(".")[1]);if(0==this._controllerUpdates.length)return new ke(xg.CannotGetUpdates,"Cannot find any updates, make sure you check for available updates by calling CheckControllerUpdateAsync().");if("string"!=typeof n||!o.test(n)){const s=[1],o=t=>{t.UpdateNumber=s[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==Eg.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],o,n);yield a(5e3),t==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((t=>t.UpdateIdentifier!=l[e].UpdateIdentifier))),d.push(t),s[0]++}const h=this._controllerUpdates.find((e=>e.UpdateType==Eg.SoftwareUpdate));if(null!=h)if(c<this._oldUpdateVersion||c===this._oldUpdateVersion&&u<=this._oldUpdateBuild){const e=yield this.UpdateControllerUsingScriptAsync(h.Update,o);e==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=h.UpdateIdentifier))),d.push(e),s[0]++}else{const e=yield this.UpdateControllerUsingApiAsync(o,t,r);this._appStateService.AllowHibernation(),e==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n))),d.push(e),s[0]++}const p=d.where((e=>e instanceof ke)).toArray();if(null!=p&&0!=p.length){let e="";return p.forEach((t=>e+=`${t.Type}, `)),this._appStateService.AllowHibernation(),new ke(xg.UpdatesPartiallyInstalled,`Update installation finished - not all updates were successfully installed. Installation error codes: ${e}`)}return this._appStateService.AllowHibernation(),ce.OK}{let o;const i=this._controllerUpdates.find((e=>e.UpdateIdentifier==n));if(null==i)return new ke(xg.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 Eg.RadioUpdate:return r?new ke(xg.UpdateAlreadyDownloaded,"Update already downloaded set flag downloadOnly to false to install it."):(o=yield(yield this._updateProviders.GetUpdatesProviderAsync(i.ProviderName)).InstallRadioUpdateAsync(i,e,s),this._appStateService.AllowHibernation(),o==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n))),o);case Eg.SoftwareUpdate:if(c<this._oldUpdateVersion||c===this._oldUpdateVersion&&u<=this._oldUpdateBuild){if(r)return new ke(xg.UpdateAlreadyDownloaded,"Update already downloaded set flag downloadOnly to false to install it.");o=yield this.UpdateControllerUsingScriptAsync(i.Update,e),this._appStateService.AllowHibernation(),o==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n)))}else o=yield this.UpdateControllerUsingApiAsync(e,t,r),this._appStateService.AllowHibernation(),o==ce.OK&&(this._controllerUpdates=this._controllerUpdates.filter((e=>e.UpdateIdentifier!=n)));return o;default:return new ke(xg.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,s,o,i,a;switch(e.UpdateType){case As.Container:case As.ContainerSoftware:try{return yield null===(n=this._connection)||void 0===n?void 0:n.SendAndHandleResponseAsync(new lf(e.DownloadUri),this._updateRequestTimeout,(n=>{const r=new jg;switch(r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),n.Status){case ce.MultiDataResponseStart:r.Status=Ig.PreparingForUpgrade;break;case ce.MultiDataResponse:if(null==n.Data)return void this._logger.Warning(of.ServiceName,`Recived update response without data! URI: ${e.DownloadUri}`);switch(r.Percentage=Math.round(n.Data.Progress),n.Data.State){case Rg.CheckingApplicability:case Rg.CheckingIntegrity:case Rg.CheckingPackageIntegrity:r.Status=Ig.CheckingPackage;break;case Rg.CreatingBackup:case Rg.MigratingData:case Rg.Removing:r.Status=Ig.MovingData;break;case Rg.Deploying:case Rg.Installing:r.Status=Ig.Upgrading;break;case Rg.Downloading:r.Status=Ig.DownloadingPackage;break;case Rg.Error:r.Status=Ig.Error;break;case Rg.Installed:r.Status=Ig.Upgraded;break;case Rg.PreparingSystem:case Rg.ReadyToDownload:r.Status=Ig.PreparingForUpgrade;break;case Rg.UndoingInstallation:r.Status=Ig.InstallationStopped;break;case Rg.Unpackaging:r.Status=Ig.MovingData;break;case Rg.WaitingForUser:r.Status=Ig.Upgrading}break;case ce.MultiDataResponseStop:r.Status=Ig.OK;break;case ce.Error:case ce.FatalError:r.Status=Ig.Error}t(r)}),!1),ce.OK}catch(e){return new ke(xg.CannotProcessUpdate,`Cannot process update, error: ${e}`)}case As.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 ke)return h;var l=parseFloat(h.RuntimeVersion)>=2||parseFloat(u)>=1.2201125;try{c=(yield $v.Get(Lo.ServiceName).GetDevicesAsync()).length}catch(e){this._logger.Warning(of.ServiceName,`Cannot get number of devices in system! Error: ${e}. Using default value of 10 devices.`)}if(l){let n,r=new jg;r.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),r.Percentage=1,r.Status=Ig.PreparingForUpgrade,t(r);let s=2;const o=Date.now(),i=900*c+8e5,a=i/100,u=o+i,l=new Promise(((o,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=Ig.Upgraded,t(r),o(ce.OK);else{var e=u-Date.now();e<i?s=95-e/a:(clearInterval(n),n=setInterval((()=>{clearInterval(n),r.Percentage=100,r.PercentageTotal=Math.round(r.Percentage),r.Status=Ig.Upgraded,t(r),o(ce.OK)}),e))}};this._appStateService.OnReturnedFromSuspension().Subscribe(l),n=setInterval((()=>{if(s>99)clearInterval(n),r.Percentage=100,r.PercentageTotal=Math.round(r.Percentage),r.Status=Ig.Upgraded,t(r),o(ce.OK);else{var e=s;e<99&&(r.Percentage=Math.round(e),r.PercentageTotal=Math.round(r.Percentage),r.Status=Ig.Upgrading,t(r))}s++}),a);const d=yield null===(c=this._connection)||void 0===c?void 0:c.SendAndWaitForResponseAsync(new df(e.DownloadUri),this._updateRequestTimeout,!1);d.Status!=ce.OK&&(clearInterval(n),r.Percentage=0,r.PercentageTotal=Math.round(r.Percentage),r.Status=Ig.InstallationError,t(r),this._logger.Debug(of.ServiceName,`Update failed with error. Update response status: ${d.Status}`),o(new ke(xg.CannotProcessUpdate,`Update failed with error. Update response status: ${d.Status}`)))}catch(e){this._logger.Debug(of.ServiceName,`Update failed with error. ${e}`),r.Percentage=0,r.PercentageTotal=Math.round(r.Percentage),r.Status=Ig.Error,t(r),clearInterval(n),o(new ke(xg.CannotProcessUpdate,`Update failed with error. ${e}`))}}))));return yield l}{let n=new jg;n.UpdatedResourceName=new Map([["pl-PL","Oprogramowanie kontrolera"],["en-US","Controller software"]]),n.Percentage=1,n.PercentageTotal=Math.round(n.Percentage),n.Status=Ig.PreparingForUpgrade,t(n);const u=this._connection.GetAuthorizationInfo();if(null==u)return new ke(xg.CannotProcessUpdate,"Cannot process update. Cannot get current controller login credentials!");if((yield null===(r=this._connection)||void 0===r?void 0:r.SendAndWaitForResponseAsync(new hf({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=Ig.PreparingForUpgrade,t(n);let r=yield null===(s=this._connection)||void 0===s?void 0:s.SendAndWaitForResponseAsync(new pf("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=Ig.PreparingForUpgrade,t(n),r=yield null===(o=this._connection)||void 0===o?void 0:o.SendAndWaitForResponseAsync(new pf(`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=Ig.PreparingForUpgrade,t(n);try{if(r=yield null===(i=this._connection)||void 0===i?void 0:i.SendAndWaitForResponseAsync(new pf("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=Ig.Upgrading,t(n);let e,r=0;const s=.95,o=Date.now(),i=900*c+15e5,a=i/95,u=o+i,l=new Promise(((o,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=Ig.Upgraded,t(n),o(ce.OK);else{var s=u-Date.now();s<i?r=95-s/a:(clearInterval(e),e=setInterval((()=>{clearInterval(e),n.Percentage=100,n.PercentageTotal=Math.round(n.Percentage),n.Status=Ig.Upgraded,t(n),o(ce.OK)}),s))}};this._appStateService.OnReturnedFromSuspension().Subscribe(l),e=setInterval((()=>{if(r>99)clearInterval(e),n.Percentage=100,n.PercentageTotal=Math.round(n.Percentage),n.Status=Ig.Upgraded,t(n),o(ce.OK);else{var i=5+r*s;i<99&&(n.Percentage=Math.round(i),n.PercentageTotal=Math.round(n.Percentage),n.Status=Ig.Upgrading,t(n))}r++}),a),null===(c=this._connection)||void 0===c||c.SendAndWaitForResponseAsync(new pf("/runtime/tmp/update.sh"),12e3,!1)}catch(e){o(new ke(xg.CannotProcessUpdate,`Update failed with error. ${e}`))}}))));return yield l}return n.Percentage=0,n.PercentageTotal=Math.round(n.Percentage),n.Status=Ig.InstallationError,t(n),new ke(xg.CannotProcessUpdate,"Execution failed!")}catch(e){return null===(a=this._connection)||void 0===a||a.SendAndWaitForResponseAsync(new pf("/runtime/scripts/restart_all.sh"),12e3,!1),new ke(xg.CannotProcessUpdate,`Execution failed! Error ${e}`)}}return new ke(xg.CannotProcessUpdate,"Execution failed! Cannot clear old update script!")}}return new ke(xg.CannotProcessUpdate,"Execution failed! Cannot loggin using support account!")}default:return new ke(xg.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,s)=>sf(this,void 0,void 0,(function*(){yield this._connection.SendAndHandleResponseAsync(new yf,this._updateRequestTimeout,(s=>{var o,i,a,c;const u=new zg;switch(u.UpdatedResourceName=ie(e.Update.UpdateName),s.Status){case ce.MultiDataResponseStart:u.Percentage=0,u.SpeedMbps=0,u.PercentageTotal=0,u.CurrentTask=Mg.DownloadingInstaller,t(u);break;case ce.MultiDataResponse:if(null!=s.Data){switch(u.Percentage=s.Data.StepProgressInPercentage,u.SpeedMbps=s.Data.DownloadSpeedInMbs,u.PercentageTotal=n?Math.round(2*(null===(o=s.Data)||void 0===o?void 0:o.UpdateProgressInPercentage)):Math.round(null===(i=s.Data)||void 0===i?void 0:i.UpdateProgressInPercentage),s.Data.UpdateStep){case Zg.DownloadingInstaller:u.CurrentTask=Mg.DownloadingInstaller;break;case Zg.DownloadingUpdate:u.CurrentTask=Mg.DownloadingUpdate;break;default:u.CurrentTask=Mg.CheckingUpdate}t(u)}break;case ce.MultiDataResponseStop:if(null!=s.Data)switch(s.Data.UpdateStep){case Zg.UpdateDownloaded:u.Percentage=100,u.PercentageTotal=n?Math.round(2*(null===(a=s.Data)||void 0===a?void 0:a.UpdateProgressInPercentage)):Math.round(null===(c=s.Data)||void 0===c?void 0:c.UpdateProgressInPercentage),u.SpeedMbps=0,u.CurrentTask=Mg.CheckingUpdate,t(u),r(ce.OK);break;case Zg.UpdateDownloadFailed:u.Percentage=0,u.PercentageTotal=0,u.SpeedMbps=0,u.CurrentTask=Mg.Unknown,t(u),r(new ke(xg.UpdateDownloadFailed,"Update download failed!"))}break;case ce.Error:case ce.FatalError:u.Percentage=0,u.PercentageTotal=0,u.SpeedMbps=0,u.CurrentTask=Mg.Unknown,t(u),r(new ke(xg.CannotProcessUpdate,"Update download failed!"))}}),!1)}))))})),s=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 s=0;yield this._connection.SendAndHandleResponseAsync(new wf,this._updateRequestTimeout,(o=>{var i,a;const c=new jg;switch(c.UpdatedResourceName=ie(t.Update.UpdateName),o.Status){case ce.MultiDataResponseStart:c.Status=Ig.PreparingForUpgrade,c.Percentage=null===(i=o.Data)||void 0===i?void 0:i.StepProgressInPercentage,c.PercentageTotal=null===(a=o.Data)||void 0===a?void 0:a.UpdateProgressInPercentage,e(c);break;case ce.MultiDataResponse:null!=o.Data&&(c.Status=Ig.Upgrading,c.Percentage=Math.round(o.Data.StepProgressInPercentage),c.PercentageTotal=Math.round(o.Data.UpdateProgressInPercentage),s=o.Data.StepProgressInPercentage,e(c));break;case ce.MultiDataResponseStop:if(null!=o.Data)switch(o.Data.UpdateStep){case Zg.UpdateInstallationFailed:c.Status=Ig.InstallationError,c.Percentage=0,c.PercentageTotal=0,e(c),n(new ke(xg.CannotProcessUpdate,"Update installation failed!"));break;case Zg.OfflineUpdateStep:{c.Percentage=Math.round(o.Data.StepProgressInPercentage),c.PercentageTotal=Math.round(o.Data.UpdateProgressInPercentage);let t=(100-c.PercentageTotal)/100,i=c.PercentageTotal;const a=setInterval((()=>{s++,i+=t,i>100&&(i=100),s>=100?(c.Status=Ig.Upgraded,c.Percentage=100,c.PercentageTotal=100,e(c),clearInterval(a),n(ce.OK)):(c.Status=Ig.Upgrading,c.Percentage=Math.round(s),c.PercentageTotal=Math.round(i),e(c))}),r/(100-s))}}break;case ce.Error:case ce.FatalError:c.Status=Ig.Error,c.Percentage=0,c.PercentageTotal=0,e(c),n(new ke(xg.CannotProcessUpdate,"Update installation failed!"))}}),!1)}))))}));if(n){const e=yield this._connection.SendAndWaitForResponseAsync(new vf,1e4,!1);if((null==e?void 0:e.Status)==ce.NoData)return new ke(xg.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 Zg.DownloadingInstaller:case Zg.DownloadingUpdate:case Zg.UpdateDownloaded:return new ke(xg.UpdateAlreadyDownloaded,"Update already downloaded, or download is in progress.");case Zg.InstallingUpdate:case Zg.PreparingUpdate:return new ke(xg.UpdateAlreadyInstalled,"Update already installed, or installation is in progress.");default:return yield r(e.Data)}}else{const e=yield this._connection.SendAndWaitForResponseAsync(new vf,1e4,!1);if((null==e?void 0:e.Status)==ce.NoData)return new ke(xg.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 Zg.DownloadingInstaller:case Zg.DownloadingUpdate:return new ke(xg.UpdateAlreadyDownloaded,"Update already downloaded, or donwload in progress.");case Zg.InstallingUpdate:case Zg.PreparingUpdate:return new ke(xg.UpdateAlreadyInstalled,"Update already installed, or installation in progress.");case Zg.UpdateDownloaded:return yield s(e.Data);default:var o=yield r(e.Data);return o!=ce.OK?o:yield s(e.Data)}}}))}getRuntimeInfoAsync(){return sf(this,void 0,void 0,(function*(){try{return yield this._updateProviders.GetSoftwareRuntimeInfoAsync()}catch(e){return e instanceof eo&&e.code==Es.Timeout?new ke(xg.CannotGetCurrentControllerVersionTimeout,"Cannot get runtime info (current controller version), timeout error - please restart controller to fix issue."):new ke(xg.CannotGetCurrentControllerVersion,`Cannot get runtime info (current controller version), error: ${e}`)}}))}}of.ServiceName="UpdatesService";class af{constructor(){this.UpdatedResourceName=new Map,this.CurrentResourceVersion="",this.UpdateType=null,this.ResponseResult=null}}class cf{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 uf{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 lf 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"}(Xg||(Xg={})),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"}(Qg||(Qg={})),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"}(Zg||(Zg={}));class df extends ae{constructor(e){super(),this.Resource="/updates/install/from/url",this.Method=ue.Put,this.Data=e}}class hf extends ae{constructor(e){super(),this.Resource="/users/user/login",this.Method=ue.Put,this.Data=e}}class pf extends ae{constructor(e){super(),this.Resource="/controller/runtime/execute",this.Method=ue.Post,this.Data=e}}class gf extends ae{constructor(){super(),this.Resource="/updates/branch",this.Method=ue.Get}}class ff extends ae{constructor(e){super(),this.Resource="/updates/branch",this.Method=ue.Put,this.Data=e}}class vf extends ae{constructor(){super(),this.Resource="/updates/pending",this.Method=ue.Get}}class mf extends ae{constructor(){super(),this.Resource="/updates/check",this.Method=ue.Get}}class yf extends ae{constructor(){super(),this.Resource="/updates/download",this.Method=ue.Post}}class wf extends ae{constructor(){super(),this.Resource="/updates/install",this.Method=ue.Post}}class Sf extends ae{constructor(){super(),this.Resource="/updates/download/automatic/status",this.Method=ue.Get}}class Af extends ae{constructor(){super(),this.Resource="/updates/download/automatic/enable",this.Method=ue.Put}}class _f extends ae{constructor(){super(),this.Resource="/updates/download/automatic/disable",this.Method=ue.Put}}class Cf 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"}(ef||(ef={})),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"}(tf||(tf={})),function(e){e.Min="Min",e.Max="Max",e.Avg="Avg"}(nf||(nf={}));class Df{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"}(rf||(rf={}));var kf,Gf,bf,Nf,Ef,If,Rf,Pf=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Of{constructor(){this._connection=null,this._connection=$v.Get(Ot.ServiceName)}GetServiceName(){return Of.ServiceName}GetStatesByIntervalAsync(e,t,n,r,s,o){return Pf(this,arguments,void 0,(function*(e,t,n,r,s,o,i=!1){var a;try{if(!(yield this.IsFunctionalitySupportedAsync()))return new ke(ef.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(Lo.ServiceName).GetDevice(e);if(null==t)return new ke(ef.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);c=t}else c=e;if(!c.Channels.any((e=>e.Number==t)))return new ke(ef.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 ke(ef.ResponseTypeNotSupported,"Device or channel not supporting requested DeviceResponseType.");const u=new Mf;u.DeviceGuid=c.Guid,u.DeviceChannel=t,u.Range=r,u.StateInterfaceType=n,u.ReverseOrder=i,u.Limit=s,u.Offset=o;const l=yield null===(a=this._connection)||void 0===a?void 0:a.SendAndWaitForResponseAsync(new Uf(u),2e4,!1);if(null==l)return new ke(ef.OtherError,"Cannot get state history data - response is null.");switch(l.Status){case ce.WrongData:switch(l.Data){case"IncorrectLimitValue":return new ke(ef.IncorrectLimitValue,"Cannot get state history data - limit value is incorrect!");case"IncorrectOffsetValue":return new ke(ef.IncorrectOffsetValue,"Cannot get state history data - offset value is incorrect!");case"IncorrectArguments":return new ke(ef.OtherError,"Cannot get state history data - some parameters are incorrect!");default:return new ke(ef.OtherError,"Cannot get state history data - unknown error!")}case ce.FatalError:return new ke(ef.FatalError,"Cannot get state history data - an exception occurred in the controller while reading data!");case ce.ResourceDoesNotExists:return new ke(ef.ResponseTypeNotSupported,"Device or channel not supporting requested DeviceResponseType.");case ce.OK:if(null==l.Data)return new ke(ef.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===_t.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 ke(ef.OtherError,`Cannot get state history data - controller responded with response code ${l.Status}`)}}catch(e){return new ke(ef.FatalError,`Cannot get state history data - exeption occurs! ${e}`)}}))}GetAvailableStatesAsync(){return Pf(this,void 0,void 0,(function*(){var e;try{const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new xf,12e3,!1);return null==t?new ke(ef.OtherError,"Cannot get available states - response is null."):t.Status!=ce.OK?new ke(ef.OtherError,`Cannot get available states - controller responded with response code ${t.Status}.`):null==t.Data?new ke(ef.NoData,"Cannot get available states - controller responede with status OK, but response does not contain data!"):t.Data.map((e=>{const t=new Df;return t.StateInterfaceType=e.StateInterfaceType,t.StateObjectType=e.StateObjectType,t}))}catch(e){return new ke(ef.FatalError,`Cannot get available states - exeption occurs! ${e}`)}}))}IsFunctionalitySupportedAsync(){return Pf(this,void 0,void 0,(function*(){return!(parseFloat((yield $v.Get(Js.ServiceName).GetSoftwareRuntimeInfoAsync()).SoftwareVersion)<=3.42)}))}GetAvailableStatesPerChannelAsync(e,t){return Pf(this,void 0,void 0,(function*(){var n;let r;if("string"==typeof e){const t=yield $v.Get(Lo.ServiceName).GetDevice(e);if(null==t)return new ke(ef.CannotFindDevice,`Device with specified GUID ${e} does not exists.`);r=t}else r=e;const s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(new Ff(new Lf(r.Guid,t)),8e3,!1);if(null==s)return new ke(ef.OtherError,"Cannot get available states - response is null.");switch(s.Status){case ce.ResourceDoesNotExists:switch(s.Data){case"DeviceNotFound":return new ke(ef.CannotFindDevice,"Cannot get available states - device does not exists!");case"ChannelNotFound":return new ke(ef.InvalidChannelNumber,"Cannot get available states - wrong channel!");default:return new ke(ef.OtherError,"Cannot get available states - unknown error!")}case ce.OK:{if(null==s.Data)return new ke(ef.NoData,"Cannot get available states - controller responede with status OK, but response does not contain data!");const e=s.Data.AvailableStates.map((e=>{const t=new Df;return t.StateInterfaceType=e.StateInterfaceType,t.StateObjectType=e.StateObjectType,t}));return s.Data.AvailableStates=e,s.Data}default:return new ke(ef.OtherError,`Cannot get available states - controller responded with response code ${s.Status}`)}}))}}Of.ServiceName="StatesHistoryService";class Uf extends ae{constructor(e){super(),this.Resource="/statehistory/states/get/last",this.Method=ue.Get,this.Data=e}}class Mf{constructor(){this.DeviceGuid="",this.DeviceChannel=0,this.StateInterfaceType="",this.Range=tf.Day,this.ReverseOrder=!1,this.Limit=0,this.Offset=0}}class xf extends ae{constructor(){super(),this.Resource="/statehistory/states/available",this.Method=ue.Get}}class Ff extends ae{constructor(e){super(),this.Resource="/statehistory/states/available/per/channel",this.Method=ue.Get,this.Data=e}}class Lf{constructor(e,t){this.DeviceGuid=e,this.Channel=t}}(Rf=kf||(kf={}))[Rf.User=0]="User",Rf[Rf.Controller=1]="Controller",Rf[Rf.Marketing=2]="Marketing",(If=Gf||(Gf={}))[If.Notification=0]="Notification",If[If.Message=1]="Message",If[If.Alarm=2]="Alarm",If[If.Warning=3]="Warning",If[If.Info=4]="Info",(Ef=bf||(bf={}))[Ef.Other=0]="Other",Ef[Ef.UserLoggedIn=1]="UserLoggedIn",Ef[Ef.UserLoggedOut=2]="UserLoggedOut",Ef[Ef.FoundNewDevice=3]="FoundNewDevice",Ef[Ef.DoorBellPress=4]="DoorBellPress",Ef[Ef.AddedNewDevice=5]="AddedNewDevice",Ef[Ef.RemovedDevice=6]="RemovedDevice",Ef[Ef.RegisteredNewUser=7]="RegisteredNewUser",Ef[Ef.GotAccessToTheInternet=8]="GotAccessToTheInternet",Ef[Ef.LostAccessToTheInternet=9]="LostAccessToTheInternet",Ef[Ef.RemovedUser=10]="RemovedUser",Ef[Ef.NetworkChanged=11]="NetworkChanged",function(e){e.WeatherWidget="WeatherWidget"}(Nf||(Nf={}));var Bf=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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(Ot.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 Wf;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(Nf[e],r);for(let[e,r]of Object.entries(t.MessageActionsData))n.MessageActionsData.set(e,r);this._chatSubscriptions.forEach((e=>{e(n)}))}))}GetCachedMessagesAsync(){return Bf(this,void 0,void 0,(function*(){try{const e=yield this._connection.SendAndWaitForResponseAsync(new qf,12e3,!1);if(null==e)return new ke(ev.OtherError,"Cannot get messages - response is null.");if(e.Status!=ce.OK)return new ke(ev.OtherError,`Cannot get messages - controller responded with response code ${e.Status}.`);if(null==e.Data)return new ke(ev.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 Wf;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(Nf[t],r);for(let[t,r]of Object.entries(e.MessageActionsData))n.MessageActionsData.set(t,r);t.push(n)})),t}catch(e){return new ke(ev.FatalError,`Cannot get messages - exception occurred ${e}`)}}))}SendMessageAsync(e){return Bf(this,void 0,void 0,(function*(){try{const t=yield this._connection.SendAndWaitForResponseAsync(new Vf(`recipient:home ${e}`),8e3,!1);return null==t||null==t.Status?ce.FatalError:t.Status}catch(e){return $v.Get(r.ServiceName).Error(cv.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 Wf{constructor(){this._sender=kf.Controller,this._messageType=Gf.Info,this._messageSource=bf.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 qf extends ae{constructor(){super(),this.Resource="/homemessaging/messages",this.Method=ue.Get}}class Vf extends ae{constructor(e){super(),this.Resource="/homemessaging/message",this.Method=ue.Put,this.Data=e}}var Hf,Kf,jf,zf=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Jf{constructor(){this._chatSubscriptions=[],this._connection=$v.Get(Ot.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 zf(this,void 0,void 0,(function*(){try{const e=yield this._connection.SendAndWaitForResponseAsync(new Qf,12e3,!1);if(null==e)return new ke(ev.OtherError,"Cannot get messages - response is null.");if(e.Status!=ce.OK)return new ke(ev.OtherError,`Cannot get messages - controller responded with response code ${e.Status}.`);if(null==e.Data)return new ke(ev.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 ke(ev.FatalError,`Cannot get messages - exception occurred ${e}`)}}))}SendMessageAsync(e){return zf(this,void 0,void 0,(function*(){try{const t=yield this._connection.SendAndWaitForResponseAsync(new Xf(e),8e3,!1);return null==t||null==t.Status?ce.FatalError:t.Status}catch(e){return $v.Get(r.ServiceName).Error(cv.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 Xf extends ae{constructor(e){super(),this.Resource="/homemessaging/message",this.Method=ue.Put,this.Data=e}}class Qf extends ae{constructor(){super(),this.Resource="/homemessaging/messages",this.Method=ue.Get}}!function(e){e[e.None=0]="None",e[e.ChangeDeviceState=1]="ChangeDeviceState"}(Hf||(Hf={})),function(e){e.GPT3_5_TURBO="gpt-3.5-turbo",e.GPT3_5_TURBO_16K="gpt-3.5-turbo-16k",e.GPT4="gpt-4"}(Kf||(Kf={})),function(e){e[e.UnknownError=0]="UnknownError",e[e.ChatNotConfigured=1]="ChatNotConfigured",e[e.MessageNotSend=2]="MessageNotSend",e[e.InvalidMessageResponseFormat=3]="InvalidMessageResponseFormat"}(jf||(jf={}));var Zf,ev,tv,nv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 rv{constructor(){this._chatSubscriptions=[],this._connection=$v.Get(Ot.ServiceName),this._connection.SubscribeTo("/homemessaging/gpt/notify/message/new",(e=>{const t=e.Data,n=new av;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=Hf[e],s=new Map;for(let[e,t]of Object.entries(r))s.set(e,t);n.ControllerActivities.set(t,s)}if(null!=t.Errors)for(let[e,r]of Object.entries(t.Errors))n.Errors.set(jf[e],r);this._chatSubscriptions.forEach((e=>{e(n)}))}))}IsGptChatAvailableAsync(){return nv(this,void 0,void 0,(function*(){return(yield $v.Get(et.ServiceName).GetExtensionsInfoAsync()).any((e=>"80daeab9-104f-4c1b-9464-61f5fc9bf2bf"==e.ExtensionGuid))}))}GetChatConfigurationAsync(){return nv(this,void 0,void 0,(function*(){try{const e=yield this._connection.SendAndWaitForResponseAsync(new ov,8e3,!1);return null==e||null==e.Status?new ke(ev.FatalError,"Cannot get chat configuration! No data in result"):e.Status!=ce.OK?new ke(ev.Error,`Cannot get chat configuration! Controller responded with code: ${e.Status}`):null==e.Data?new ke(ev.NoData,"Cannot get chat configuration! Controller responded with success, but no data in response!"):e.Data}catch(e){return new ke(ev.FatalError,`Cannot get chat configuration! ${e}`)}}))}SetChatConfigurationAsync(e){return nv(this,void 0,void 0,(function*(){try{const t=yield this._connection.SendAndWaitForResponseAsync(new iv(e),8e3,!1);return null==t||null==t.Status?ce.FatalError:t.Status}catch(e){return $v.Get(r.ServiceName).Error(cv.ServiceName,`Cannot set chat configuration! ${e}`),ce.FatalError}}))}SendMessageAsync(e){return nv(this,void 0,void 0,(function*(){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 $v.Get(r.ServiceName).Error(cv.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 ov extends ae{constructor(){super(),this.Resource="/homemessaging/gpt/configuration",this.Method=ue.Get}}class iv extends ae{constructor(e){super(),this.Resource="/homemessaging/gpt/configuration",this.Method=ue.Put,this.Data=e}}class av{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"}(Zf||(Zf={}));class cv{constructor(){this._services={ControllerChat:new $f,GptChat:new rv,FamillyChat:new Jf}}GetServiceName(){return cv.ServiceName}GetChatImplementation(e){switch(e){case Zf.ControllerChat:return this._services.ControllerChat;case Zf.FamilyChat:return this._services.FamillyChat;case Zf.GptChat:return this._services.GptChat;default:throw new uv(`Chat with type ${e} not implemented!`)}}}cv.ServiceName="ChatService",function(e){e.OtherError="OtherError",e.FatalError="FatalError",e.Error="Error",e.NoData="NoData"}(ev||(ev={}));class uv 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"}(tv||(tv={}));var lv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 dv{constructor(){this._connection=$v.Get(Ot.ServiceName),this._log=$v.Get(r.ServiceName)}GetServiceName(){return dv.ServiceName}IsSupportedAsync(){return lv(this,void 0,void 0,(function*(){let e=yield this._connection.SendAndWaitForResponseAsync(new hv,2e3,!0);return this._log.Debug(dv.ServiceName,`IsSupportedAsync: ${null==e?void 0:e.Status} resp: ${JSON.stringify(e)}`),null!=e&&e.Status==ce.WrongData}))}GetConnectedAppsAsync(){return lv(this,void 0,void 0,(function*(){let e=yield this._connection.SendAndWaitForResponseAsync(new pv,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 lv(this,void 0,void 0,(function*(){let t=yield this._connection.SendAndWaitForResponseAsync(new fv(e),2e3,!1);switch(null==t?void 0:t.Status){case ce.OK:return new ke(tv.Changed,"");case ce.WrongData:switch(t.Data){case"AccessTokenToShort":return new ke(tv.AccessTokenToShort,t.Data);case"AnotherAppWithGivenAccessTokenAlreadyExists":return new ke(tv.AnotherAppWithGivenAccessTokenAlreadyExists,t.Data);case"AppGuidDoesNotExists":return new ke(tv.AppGuidDoesNotExists,t.Data);case"AppNameToShort":return new ke(tv.AppNameToShort,t.Data);case"AppUrlToShort":return new ke(tv.AppUrlToShort,t.Data);case"AppUserIdToShort":return new ke(tv.AppUserIdToShort,t.Data);case"AppUserNameToShort":return new ke(tv.AppUserNameToShort,t.Data);default:return new ke(tv.UnkownError,t.Data)}case ce.ResourceDoesNotExists:case ce.ResourceIsNotAvailable:return new ke(tv.ResourceIsNotAvailable,t.Data);default:return new ke(tv.UnkownError,t.Data)}}))}RemoveConnectedAppAsync(e){return lv(this,void 0,void 0,(function*(){let t=yield this._connection.SendAndWaitForResponseAsync(new gv(e.Guid),2e3,!0);return null==t?void 0:t.Status}))}}dv.ServiceName="ConnectedAppsService";class hv extends ae{constructor(){super(),this.Resource="/applications/app/auth",this.Method=ue.Put,this.Data=""}}class pv extends ae{constructor(){super(),this.Resource="/applications/get",this.Method=ue.Get}}class gv extends ae{constructor(e){super(),this.Resource="/applications/app/delete",this.Method=ue.Delete,this.Data=e}}class fv extends ae{constructor(e){super(),this.Resource="/applications/app/upsert",this.Method=ue.Put,this.Data=e}}var vv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 mv{constructor(){try{const e=window.location.href,t=new URL(e),n=new URLSearchParams(t.search),r=n.get("mig_c_enc"),s=n.get("mig_controllers"),o=n.get("mig_lang");if(null!==r){const e=decodeURIComponent(this.b64DecodeUnicode(decodeURIComponent(r)));localStorage.setItem(mv.AppUserControllersKeyName,e)}null!==s&&localStorage.setItem(mv.AppUserControllersKeyName,decodeURIComponent(s)),null!==o&&localStorage.setItem(mv.AppSelectedLanguageKeyName,o)}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 mv.ServiceName}IsMigrationDataAvailableAsync(){return vv(this,void 0,void 0,(function*(){try{if(this.isIosNavtie()){var e=yield mv.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(mv.AppSelectedLanguageKeyName)||null!==localStorage.getItem(mv.AppUserControllersKeyName)}catch(e){return console.error(e),!1}}))}GetControllersDataAsync(){return vv(this,void 0,void 0,(function*(){try{if(this.isIosNavtie()){let e=yield mv.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(mv.AppUserControllersKeyName);return null!==e?JSON.parse(e):null}}catch(e){return console.error(e),null}}))}GetLanguageCodeAsync(){return vv(this,void 0,void 0,(function*(){try{if(this.isIosNavtie()){let e=yield mv.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(mv.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}}mv.AppSelectedLanguageKeyName="App___SelectedLanguage",mv.AppUserControllersKeyName="App___UserControllersListDatabase",mv.ServiceName="DataMigrationService";var yv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 wv{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(Ot.ServiceName),this._logger=$v.Get(r.ServiceName),this._storage=$v.Get(o.ServiceName),$v.Get(ze.ServiceName).OnUserLoggedInEvent().Subscribe((e=>yv(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(wv.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(wv.ServiceName,`Controller found in local network with ip address: ${r}`)):(this._isInLocalNetwork=!1,this._logger.Debug(wv.ServiceName,"Controller not found in local network."))}else this._logger.Error(wv.ServiceName,"Failed to get network configuration data.")}catch(e){this._logger.Error(wv.ServiceName,`Failed to get network configuration data - ${e}`)}}))))}FindControllerInLocalNetworkAsync(e){return yv(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(wv.ServiceName,"LocalIpAddress")}GetControllerHostName(e){return`ExalusTR7-${e}`}GetMdnsHostName(){return`ExalusTR7-${this.GetControllerHostName(this._connection.GetControllerSerialNumber())}.local`.toLowerCase()}GetControllerNetworkConfigurationAsync(){return yv(this,void 0,void 0,(function*(){var e;const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Sv,2e4,!1);return null==t||null==t.Status||null==t.Data?(this._logger.Error(wv.ServiceName,"Failed to get network configuration data - unknow error."),null):t.Data}))}GetServiceName(){return wv.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,s)=>{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("")}}))}}wv.ServiceName="FindControllerService";class Sv extends ae{constructor(){super(),this.Resource="/network/lan/",this.Method=ue.Get}}var Av,_v,Cv,Tv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Dv{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}Initialize(){this._initialized||(this._initialized=!0,this._controllerConfiguration=$v.Get(ot.ServiceName),this._cache=$v.Get(be.ServiceName),this._session=$v.Get(ze.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(Dv.ServiceName,`Connecting to the WebSockets server ${e}`),this.socket.onerror=t=>(this._log.Debug(Dv.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(Dv.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(Dv.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(Dv.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(Dv.ServiceName,`Received data frame: ${e.Status}`),this._dataReceivedEvent.Invoke(e)}catch(e){this._log.Error(Dv.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(Dv.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(Dv.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(Dv.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(Dv.ServiceName,"Packets logging enabled"),this._logPackets=!0}DisablePacketsLogging(){this._log.Debug(Dv.ServiceName,"Packets logging disabled"),this._logPackets=!1}SendData(e,t){var n;let r=JSON.stringify(e);return t&&this._log.Debug(Dv.ServiceName,`Sending data frame: ${r}`),this._isOpen?null===(n=this.socket)||void 0===n||n.send(r):this._log.Error(Dv.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 s;let o=0;const i=Date.now();if(!this.IsConnected())throw new Error("Connection is not established");return"/users/user/login"!==e.Resource&&(yield null===(s=this._session)||void 0===s?void 0:s.WaitForSessionCreationAsync()),new Promise(((s,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(Dv.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(o);const g=Date.now()-i;switch((r||!0===window.packets)&&this._log.Debug(Dv.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(),s(yield this.SendAndHandleResponseAsync(e,t,n,r))),null==l?void 0:l.Status){case ce.MultiDataResponseStart:case ce.MultiDataResponse:n(l),o=c();break;case ce.MultiDataResponseStop:case ce.FatalError:case ce.Error:n(l),this._dataReceivedEvent.Unsubscribe(u),s();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),o=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,s=!0){var o,i,a;if(e.Method===ue.Get&&n&&!(yield null===(o=this._controllerConfiguration)||void 0===o?void 0:o.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(((o,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;s&&this._log.Debug(Dv.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(),o(yield this.SendAndWaitForResponseWithRepeatAsync(e,t,n,!1,s))),o(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(Dv.ServiceName,t),i(new Error(t))}),t),!this.SendData(e,s)){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 Dv.ServiceName}}Dv.ServiceName="ExalusConnectionService";class kv{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 kv.ServiceName}}kv.ServiceName="PictureInPictureService",(Cv=Av||(Av={}))[Cv.Unknown=-1]="Unknown",Cv[Cv.Web=0]="Web",Cv[Cv.Android=1]="Android",Cv[Cv.iOS=2]="iOS";class Gv{constructor(){this.ClientName="",this.LavvaUserName="",this.ClientType=Av.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"}(_v||(_v={}));var bv=function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(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 Nv{constructor(){this._connection=$v.Get(Ot.ServiceName),this._logger=$v.Get(r.ServiceName)}GetServiceName(){return Nv.ServiceName}RegisterNotificationsClientAsync(e){return bv(this,void 0,void 0,(function*(){var t;try{const n=new Ev({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 ke(_v.UnknownError,"Cannot register notifications client - unknown error!");switch(r.Status){case ce.WrongData:{const e=this.isValidErrorCode(r.Data)?r.Data:_v.UnknownError;return new ke(e,"Cannot register notifications client - wrong data!")}case ce.ResourceDoesNotExists:return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");case ce.OK:return"string"==typeof r.Data?r.Data:new ke(_v.NoData,"Cannot register notifications client - result status is OK, but no token guid presented in paylode, unknown error!");default:return new ke(_v.UnknownError,"Cannot register notifications client - unknown error!")}}catch(e){return new ke(_v.UnknownError,`Cannot register notifications client - error: ${e}`)}}))}UpdateNotificationsClientAsync(e,t){return bv(this,void 0,void 0,(function*(){var n;try{const r=new Iv({ClientName:t.ClientName,DeviceToken:t.DeviceToken,LavvaUserName:t.LavvaUserName,ClientType:this.getClientType(),NotificationsEnabledForToken:t.EnableNotifications,Guid:e}),s=yield null===(n=this._connection)||void 0===n?void 0:n.SendAndWaitForResponseAsync(r,8e3,!1);if(null==s||null==s.Status)return new ke(_v.UnknownError,"Cannot update notifications client - unknown error!");switch(s.Status){case ce.WrongData:{const e=this.isValidErrorCode(s.Data)?s.Data:_v.UnknownError;return new ke(e,"Cannot update notifications client - wrong data!")}case ce.ResourceDoesNotExists:return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");case ce.OK:return"string"==typeof s.Data?s.Data==e?ce.OK:new ke(_v.UnknownError,`Cannot update notifications client - result status is OK, but token guid is different! request guid ${e}, response guid: ${s.Data}`):new ke(_v.NoData,"Cannot update notifications client - result status is OK, but no token guid presented in paylode, unknown error!");default:return new ke(_v.UnknownError,"Cannot update notifications client - unknown error!")}}catch(e){return this._logger.Error(`Cannot update notifications client - error: ${e}`),new ke(_v.UnknownError,`Cannot update notifications client - error: ${e}`)}}))}GetRegisteredNotificationsClientsMetadataAsync(e){return bv(this,void 0,void 0,(function*(){var e;try{const t=yield null===(e=this._connection)||void 0===e?void 0:e.SendAndWaitForResponseAsync(new Rv,8e3,!1);return null==t||null==t.Status?new ke(_v.UnknownError,"Cannot get notifications clients metadata - unknown error!"):t.Status==ce.ResourceDoesNotExists?new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!"):t.Status!=ce.OK?new ke(_v.UnknownError,`Cannot get notifications clients metadata - response status: ${t.Status}}`):null==t.Data?new ke(_v.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 ke(_v.UnknownError,`Cannot get notifications clients metadata - error: ${e}`)}}))}IsNotificationsEnabledForAllUserTokensAsync(e){return bv(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 ke(_v.UnknownError,"Cannot get notifications status - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:case ce.WrongData:if(null==n.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:_v.UnknownError;return new ke(e,"Cannot get notifications status!")}case ce.OK:return"boolean"==typeof n.Data?n.Data:new ke(_v.NoData,"Cannot get notifications status - result status is OK, but no data, or data type is wrong!");default:return new ke(_v.UnknownError,`Cannot get notifications - response code ${n.Status}}!`)}}catch(e){return this._logger.Error(`Cannot get notifications status - error: ${e}`),new ke(_v.UnknownError,`Cannot get notifications status - error: ${e}`)}}))}IsNotificationsEnabledAsync(e){return bv(this,void 0,void 0,(function*(){var t;try{const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Pv(e),8e3,!1);if(null==n||null==n.Status)return new ke(_v.UnknownError,"Cannot get notifications status - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:if(null==n.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:_v.UnknownError;return new ke(e,"Cannot get notifications status - resource not exists!")}case ce.OK:return"boolean"==typeof n.Data?n.Data:new ke(_v.NoData,"Cannot get notifications status - result status is OK, but no data, or data type is wrong!");default:return new ke(_v.UnknownError,`Cannot get notifications - response code ${n.Status}}!`)}}catch(e){return this._logger.Error(`Cannot get notifications status - error: ${e}`),new ke(_v.UnknownError,`Cannot get notifications status - error: ${e}`)}}))}EnableNotificationsAsync(e){return bv(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 Ov(n),8e3,!1);if(null==r||null==r.Status)return new ke(_v.UnknownError,"Cannot enable notifications - unknown error!");switch(r.Status){case ce.ResourceDoesNotExists:if(null==r.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(r.Data)?r.Data:_v.UnknownError;return new ke(e,"Cannot enable notifications - resource not exists!")}case ce.OK:return ce.OK;default:return new ke(_v.UnknownError,`Cannot enable notifications - response code ${r.Status}}!`)}}catch(e){return this._logger.Error(`Cannot enable notifications - error: ${e}`),new ke(_v.UnknownError,`Cannot enable notifications - error: ${e}`)}}))}EnableNotificationsForAllUserTokensAsync(e){return bv(this,void 0,void 0,(function*(){var t;try{const n=yield null===(t=this._connection)||void 0===t?void 0:t.SendAndWaitForResponseAsync(new Mv(e),8e3,!1);if(null==n||null==n.Status)return new ke(_v.UnknownError,"Cannot enable notifications - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:case ce.WrongData:if(null==n.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:_v.UnknownError;return new ke(e,"Cannot enable notifications!")}case ce.OK:return ce.OK;default:return new ke(_v.UnknownError,`Cannot enable notifications - response code ${n.Status}!`)}}catch(t){return this._logger.Error(`Cannot enable notifications for lavva user ${e} - error: ${t}`),new ke(_v.UnknownError,`Cannot disable notifications for lavva user ${e} - error: ${t}`)}}))}DisableNotificationsAsync(e){return bv(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 ke(_v.UnknownError,"Cannot disable notifications - unknown error!");switch(r.Status){case ce.ResourceDoesNotExists:if(null==r.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(r.Data)?r.Data:_v.UnknownError;return new ke(e,"Cannot disable notifications - resource not exists!")}case ce.OK:return ce.OK;default:return new ke(_v.UnknownError,`Cannot disable notifications - response code ${r.Status}!`)}}catch(e){return this._logger.Error(`Cannot disable notifications - error: ${e}`),new ke(_v.UnknownError,`Cannot disable notifications - error: ${e}`)}}))}DisableNotificationsForAllUserTokensAsync(e){return bv(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 ke(_v.UnknownError,"Cannot disable notifications - unknown error!");switch(n.Status){case ce.ResourceDoesNotExists:case ce.WrongData:if(null==n.Data)return new ke(_v.FeatureUnsupported,"Notifications feature not supported in controller!");{const e=this.isValidErrorCode(n.Data)?n.Data:_v.UnknownError;return new ke(e,"Cannot disable notifications!")}case ce.OK:return ce.OK;default:return new ke(_v.UnknownError,`Cannot disable notifications - response code ${n.Status}!`)}}catch(t){return this._logger.Error(`Cannot disable notifications for lavva user ${e} - error: ${t}`),new ke(_v.UnknownError,`Cannot disable notifications for lavva user ${e} - error: ${t}`)}}))}getClientType(){return this.isIos()?Av.iOS:navigator.userAgent.endsWith("LavvaAndroidNative")?Av.Android:Av.Web}isValidErrorCode(e){return Object.values(_v).includes(e)}isIos(){return null!=window.webkit&&null!=window.webkit.messageHandlers}}Nv.ServiceName="NotificationsService";class Ev extends ae{constructor(e){super(),this.Resource="/notifications/token",this.Method=ue.Post,this.Data=e}}class Iv extends ae{constructor(e){super(),this.Resource="/notifications/token",this.Method=ue.Put,this.Data=e}}class Rv extends ae{constructor(){super(),this.Resource="/notifications/tokens/metadata",this.Method=ue.Get}}class Pv extends ae{constructor(e){super(),this.Resource="/notifications/status",this.Method=ue.Get,this.Data={TokenIdentity:e}}}class Ov extends ae{constructor(e){super(),this.Resource="/notifications/enable",this.Method=ue.Post,this.Data=e}}class Uv extends ae{constructor(e){super(),this.Resource="/notifications/disable",this.Method=ue.Post,this.Data=e}}class Mv extends ae{constructor(e){super(),this.Resource="/notifications/enable/for/lavva/user",this.Method=ue.Post,this.Data=e}}class xv extends ae{constructor(e){super(),this.Resource="/notifications/disable/for/lavva/user",this.Method=ue.Post,this.Data=e}}class Fv extends ae{constructor(e){super(),this.Resource="/notifications/status/for/lavva/user",this.Method=ue.Get,this.Data=e}}class Lv{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 Lv.ServiceName}}Lv.ServiceName="AndroidLocationService";class Bv{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 Bv.ServiceName}}Bv.ServiceName="AndroidNotificationsService",ru(Map),ru(Set),(()=>{const e=String.prototype,t=Object.getOwnPropertyNames(li.prototype);for(const n of t)e[n]=e[n]??li.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 ii(oi.NoMatch)}if(0===this.length)throw new ii(oi.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 ii(oi.NoMatch)}if(0===this.length)throw new ii(oi.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 li((function*(){for(let t=e.length-1;t>=0;t--)yield e[t]}))}})(),ig(Array),ig(Int8Array),ig(Int16Array),ig(Int32Array),ig(Uint8Array),ig(Uint8ClampedArray),ig(Uint16Array),ig(Uint32Array),ig(Float32Array),ig(Float64Array);class $v{static Init(){if(s.IsInitialized)return;let e=s.Instance;try{e.RegisterService(new mv),e.RegisterService(new o),e.RegisterService(new Wg),e.RegisterService(new be),e.RegisterService(new ze),e.RegisterService(new kv),$v.IsRunningFromLocalNetwork()?(console.log("\n\nRunning from local network!\n\n"),e.RegisterService(new Dv)):e.RegisterService(new Ot),e.RegisterService(new Lv),e.RegisterService(new Bv),e.RegisterService(new ps),e.RegisterService(new ps),e.RegisterService(new Cs),e.RegisterService(new ot),e.RegisterService(new wv),e.RegisterService(new us),e.RegisterService(new et),e.RegisterService(new Ee),e.RegisterService(new Be),e.RegisterService(new Lo),e.RegisterService(new hg),e.RegisterService(new Js),e.RegisterService(new of),e.RegisterService(new dv),e.RegisterService(new Of),e.RegisterService(new Go),e.RegisterService(new cv),e.RegisterService(new Nv)}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 s.Instance.GetServiceAsync(e,t)}static GetWithTimeoutAsync(e,t){return s.Instance.GetServiceWithTimeoutAsync(e,t)}static Get(e){return s.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"),s=window.URL.createObjectURL(n);return r.href=s,r.download=e,r}}$v.WorksInContextOf="",$v.Version=1})();
2
2
  //# sourceMappingURL=exalushome-library-bundle.js.map