@camstack/addon-admin-ui 0.1.24 → 0.1.25

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.
Files changed (28) hide show
  1. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-CV-R_rHB.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-Bo47Kbxo.js} +1 -1
  2. package/dist/assets/capability-router-map-B_3PX_qC.js +1 -0
  3. package/dist/assets/devices-Ccad-MYH.js +1 -0
  4. package/dist/assets/{hostInit-DcknmeNu.js → hostInit-Dv-mRJY_.js} +1 -1
  5. package/dist/assets/{index-k_vr1qwb.js → index-0gxFObCa.js} +123 -123
  6. package/dist/assets/{index-agmLjvC2.js → index-By7PGB6H.js} +7 -7
  7. package/dist/assets/{index-bZcruxoE.js → index-CtBSaA5o.js} +6 -6
  8. package/dist/assets/{index-F3MAsf-9.js → index-D9kg0e9y.js} +1 -1
  9. package/dist/assets/index-DJpRWTJm.js +1 -0
  10. package/dist/assets/index-DMrjJViX.js +1 -0
  11. package/dist/assets/{index-Dq_5fsAQ.js → index-Dl7YZL2P.js} +1 -1
  12. package/dist/assets/{index-CvVlJEP5.js → index-DyOyiTHa.js} +1 -1
  13. package/dist/assets/index-bCeHA7pg.js +1 -0
  14. package/dist/assets/index-ihiza8WC.js +1 -0
  15. package/dist/assets/index-vWF3glDx.js +1 -0
  16. package/dist/assets/{remoteEntry-D1zRuKvw.js → remoteEntry-eloL7nFC.js} +1 -1
  17. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-DItyrftX.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-FwiS5mbU.js} +2 -2
  18. package/dist/index.html +5 -5
  19. package/dist/mf-entry-bootstrap-0.js +2 -2
  20. package/dist/sw.js +1 -1
  21. package/package.json +1 -1
  22. package/dist/assets/auth-records-DLqosdE2.js +0 -1
  23. package/dist/assets/capability-router-map-UNVkwZU9.js +0 -1
  24. package/dist/assets/devices-BUM64diU.js +0 -1
  25. package/dist/assets/index-B95gHp6V.js +0 -1
  26. package/dist/assets/index-DVf1U7c4.js +0 -1
  27. package/dist/assets/index-De6hr8eY.js +0 -1
  28. package/dist/assets/index-DvrBfik_.js +0 -1
@@ -1 +0,0 @@
1
- import{h as k,z as B,e as F,f as U,s as z,p as $,m as W,g as j,i as P,j as H,k as R,l as K,n as Z,o as q,q as V,r as G,t as Y,A as ge,u as Se,v as ye,w as be,x as Ce,y as ve,B as Ie,C as Ae,E as we,F as Ee,G as _e,H as De,I as ke,J as Pe,K as Re,L as Te,N as Ne,O as Oe,P as xe,Q as Me,R as Le,T as Be,U as Fe,V as Ue,X as ze,Y as $e,Z as We,_ as je,$ as He,a0 as Ke,a1 as Ze,a2 as qe,a3 as Ve,a4 as Ge,a5 as Ye,a6 as Je,a7 as Qe,a8 as Xe,a9 as et,aa as tt,ab as at,ac as st,ad as it,ae as nt,af as rt,ag as ot,ah as ct,ai as dt,aj as lt,ak as ut,al as ht,am as mt,an as pt,ao as ft,ap as gt,aq as St,ar as yt,as as bt,at as Ct,au as vt,av as It,aw as At,ax as wt,ay as Et,az as _t,aA as Dt,aB as kt,aC as Pt,aD as Rt,aE as Tt,aF as Nt,aG as Ot,aH as xt,aI as Mt,aJ as Lt,aK as Bt,aL as Ft,aM as Ut,aN as zt,aO as $t,aP as Wt,aQ as jt,aR as Ht,aS as Kt,aT as Zt,aU as qt,aV as Vt,aW as Gt,aX as Yt,D as Jt,aY as Qt,aZ as Xt,a_ as ea,a$ as ta,a as aa,b0 as sa,b1 as ia,b2 as na,b3 as ra,b4 as oa,b5 as ca,b6 as da,b7 as la,b8 as ua,b9 as ha,ba as ma,bb as pa,bc as fa,bd as ga,be as Sa,bf as ya,bg as ba,bh as Ca,bi as va,bj as Ia,bk as Aa,bl as wa,bm as Ea,bn as _a,bo as Da,bp as ka,bq as Pa,br as Ra,bs as Ta,M as Na,bt as Oa,bu as xa,bv as Ma,bw as La,bx as Ba,by as Fa,bz as Ua,bA as za,bB as $a,bC as Wa,bD as ja,bE as Ha,bF as Ka,bG as Za,bH as qa,bI as Va,bJ as Ga,bK as Ya,bL as Ja,bM as Qa,bN as Xa,bO as es,bP as ts,bQ as as,bR as ss,bS as is,bT as ns,bU as rs,bV as os,bW as cs,bX as ds,bY as ls,bZ as us,b_ as hs,b$ as ms,c0 as ps,c1 as fs,c2 as gs,c3 as Ss,c4 as ys,c5 as bs,c6 as Cs,c7 as vs,c8 as Is,c9 as As,ca as ws,cb as Es,cc as _s,cd as Ds,ce as ks,cf as Ps,cg as Rs,ch as Ts,ci as Ns,cj as Os,ck as xs,cl as Ms,cm as Ls,cn as Bs,S as Fs,co as Us,cp as zs,cq as $s,cr as Ws,cs as js,ct as Hs,cu as Ks,cv as Zs,cw as qs,cx as Vs,cy as Gs,cz as Ys,cA as Js,cB as Qs,cC as Xs,cD as ei,cE as ti,cF as ai,cG as si,cH as ii,cI as ni,cJ as ri,cK as oi,cL as ci,cM as di,cN as li,cO as ui,cP as hi,cQ as mi,cR as pi,cS as fi,d as gi,cT as Si,cU as yi,cV as bi,cW as Ci,cX as vi,cY as Ii,cZ as Ai,c_ as wi,c$ as Ei,d0 as _i,d1 as Di,d2 as ki,d3 as Pi,d4 as Ri,d5 as Ti,d6 as Ni,d7 as Oi,W as xi,d8 as Mi,d9 as Li,da as Bi,db as Fi,dc as Ui,dd as zi,de as $i,df as Wi,dg as ji,dh as Hi,di as Ki,dj as Zi,dk as qi,dl as Vi,dm as Gi,dn as Yi,dp as Ji,dq as Qi,dr as Xi,ds as en,dt as tn,du as an,dv as sn,dw as nn,dx as rn,dy as on,dz as cn,dA as dn,dB as ln,dC as un,dD as hn,dE as mn,c as pn,dF as fn,dG as gn,dH as Sn,b as yn,dI as bn,dJ as Cn,dK as vn,dL as In,dM as An,dN as wn,dO as En,dP as _n,dQ as Dn,dR as kn,dS as Pn,dT as Rn,dU as Tn,dV as Nn,dW as On,dX as xn,dY as Mn,dZ as Ln,d_ as Bn,d$ as Fn,e0 as Un,e1 as zn,e2 as $n,e3 as Wn,e4 as jn,e5 as Hn,e6 as Kn,e7 as Zn,e8 as qn,e9 as Vn,ea as Gn,eb as Yn,ec as Jn,ed as Qn,ee as Xn,ef as er,eg as tr,eh as ar,ei as sr,ej as ir,ek as nr,el as rr,em as or,en as cr,eo as dr,ep as lr,eq as ur,er as hr,es as mr,et as pr,eu as fr,ev as gr,ew as Sr,ex as yr}from"./auth-records-DLqosdE2.js";import{E as C,A as br,C as Cr,a as vr}from"./capability-router-map-UNVkwZU9.js";import{Z as Ir,m as Ar,p as wr,q as Er,v as _r,w as Dr,x as J,y as kr,z as Pr}from"./schemas-XgIEoUz3.js";class Rr{disposers=[];disposed=!1;onError;constructor(e={}){this.onError=e.onError??((t,s)=>{console.error(`[DisposerChain] disposer #${s} threw`,t)})}add(e){if(this.disposed){try{const t=e();t&&typeof t.then=="function"&&t.catch(s=>this.onError(s,-1))}catch(t){this.onError(t,-1)}return()=>{}}return this.disposers.push(e),()=>{const t=this.disposers.indexOf(e);t>=0&&this.disposers.splice(t,1)}}get isDisposed(){return this.disposed}get size(){return this.disposers.length}async dispose(){if(this.disposed)return;this.disposed=!0;const e=this.disposers.slice().reverse();this.disposers=[];for(let t=0;t<e.length;t++){const s=e[t];try{const i=s();i&&typeof i.then=="function"&&await i}catch(i){this.onError(i,e.length-1-t)}}}}const Q="main-group",X="hub-only";function b(a){return{placement:a.execution?.placement??X,group:a.execution?.group??Q}}function Tr(a){const e=b(a).placement;return e==="any-node"||e==="agent-only"}function Nr(a){return b(a).placement==="agent-only"}function Or(a){return b(a).group}function xr(a){return b(a).placement}function Mr(a,e){return a.category===e}function T(a,e,t){return{id:typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2),timestamp:new Date,source:e,category:a,data:t}}function ee(a,e){const t=e.ts??Date.now();a.emit(T("system.ready-state",{type:"capability",id:e.capName,nodeId:e.sourceNodeId},{capName:e.capName,scope:e.scope,state:e.state,generation:e.generation,sourceNodeId:e.sourceNodeId,ts:t}))}class te{_ctx=null;_config;_readinessGeneration=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14);_registeredCapNames=[];defaults;constructor(e){this.defaults=e,this._config={...e}}get autoEmitReadiness(){return!0}get ctx(){if(!this._ctx)throw new Error(`${this.constructor.name}: ctx accessed before initialize()`);return this._ctx}get ctxIfReady(){return this._ctx}get config(){return this._config}async initialize(e){this._ctx=e,await this.resolveConfig();const t=await this.onInitialize();this.emitLifecycle(C.AddonStarted);const s=ae(t),i=s&&"providers"in s&&s.providers?s.providers:[];return this._registeredCapNames=i.map(n=>n.capability.name),s}postBrokerStart(){this.autoEmitReadiness&&this._registeredCapNames.length>0&&this.emitReadinessForProviders("ready")}async onHubReachable(){}async shutdown(){this.emitLifecycle(C.AddonStopped),this.autoEmitReadiness&&this.emitReadinessForProviders("down"),await this.onShutdown();for(const e of this._subscriptions)e();this._subscriptions=[],this._ctx=null}async onShutdown(){}async onConfigChanged(){}field(e){return e}schema(e){return e}globalSettingsSchema(){return null}deviceSettingsSchema(){return null}async getGlobalSettings(e){const t=this.globalSettingsSchema();if(!t)return{sections:[]};const s=await this._ctx?.settings?.readAddonStore()??{};return k(t,e?{...s,...e}:s)}async updateGlobalSettings(e){await this._ctx?.settings?.writeAddonStore(e),await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(C.AddonUpdated,{level:"global"}),this.maybeAutoRestart(e,this.globalSettingsSchema())}maybeAutoRestart(e,t){if(!t)return;const s=new Set;for(const o of t.sections)for(const c of o.fields)c.type==="separator"||c.type==="info"||c.requiresRestart&&s.add(c.key);if(s.size===0||!Object.keys(e).some(o=>s.has(o)))return;const n=this._ctx;if(!n)return;const r=n.id;setImmediate(()=>{n.api.addons?.restartAddon?.mutate({addonId:r}).then(()=>{n.logger.info("addon auto-restart triggered by restart-required setting change",{meta:{changedFields:Object.keys(e).filter(c=>s.has(c))}})}).catch(c=>{n.logger.error("addon auto-restart failed",{meta:{error:c instanceof Error?c.message:String(c)}})})})}async getDeviceSettings(e){const t=this.deviceSettingsSchema();if(!t)return{sections:[]};const s=await this._ctx?.settings?.readDeviceStore(e)??{};return k(t,s)}async updateDeviceSettings(e,t){await this._ctx?.settings?.writeDeviceStore(e,t)}_subscriptions=[];watchCapability(e,t){const s=Array.isArray(e)?e:[e],i=new Set(s);this.subscribe({category:"system.ready-state"},n=>{const r=n.data;if(typeof r.capName!="string"||!i.has(r.capName)||r.scope?.type!=="node")return;const o=r.scope.nodeId;if(typeof o!="string"||o.length===0)return;const c=r.capName;r.state==="down"?t.onDown?.(o,c):r.state==="ready"&&t.onReady?.(o,c)})}subscribe(e,t){const s=this.ctx.eventBus.subscribe(e,t);this._subscriptions.push(s)}emitLifecycle(e,t){try{this._ctx?.eventBus.emit({id:`${this._ctx.id}-${Date.now()}`,timestamp:new Date,source:{type:"addon",id:this._ctx.id,nodeId:this._ctx.kernel.localNodeId??"hub"},category:e,data:t??{}})}catch{}}emitReadinessForProviders(e){const t=this._ctx;if(!t||this._registeredCapNames.length===0)return;const s=t.kernel?.localNodeId??"hub",i=s.includes("/")?s.split("/")[0]:s;for(const n of this._registeredCapNames)try{ee(t.eventBus,{capName:n,scope:{type:"node",nodeId:i},state:e,generation:this._readinessGeneration,sourceNodeId:i})}catch{}}async resolveModelsDir(){return this.ctx.api.storage.resolve.query({location:"models",relativePath:""}).catch(()=>"camstack-data/models")}get capabilities(){return this.ctx.capabilities??null}async resolveConfig(){const e=await this.readAddonStoreWithRetry(),t={...this.defaults};for(const s of Object.keys(this.defaults)){const i=e[s];if(i!=null){const n=typeof this.defaults[s];typeof i===n&&(t[s]=i)}}this._config=t}async readAddonStoreWithRetry(){const e=this._ctx?.settings;if(!e)return{};const t=[150,350,600,900];let s;for(let i=0;i<=t.length;i++)try{return await e.readAddonStore()??{}}catch(n){s=n;const r=n instanceof Error?n.message:String(n);if(!(r.includes("SqliteSettingsBackend not initialized")||r.includes("provider not available")))throw n;if(i===t.length)break;await new Promise(c=>setTimeout(c,t[i]))}return this._ctx?.logger?.warn?.("readAddonStore: settings-store unavailable after retries — using defaults",{meta:{error:s instanceof Error?s.message:String(s)}}),{}}}function ae(a){if(a!=null)return Array.isArray(a)?{providers:a}:a}class se extends Error{capName;scope;waitedMs;constructor(e,t,s){super(`Timed out waiting for ${e} (${f(t)}) to become ready after ${s}ms`),this.name="ReadinessTimeoutError",this.capName=e,this.scope=t,this.waitedMs=s}}function v(a,e){return`${a}|${f(e)}`}function f(a){switch(a.type){case"global":return"global";case"node":return`node:${a.nodeId}`;case"device":return`device:${a.deviceId}`}}function _(a,e){return a.type!==e.type?!1:a.type==="global"||e.type==="global"?!0:a.type==="node"&&e.type==="node"?a.nodeId===e.nodeId:a.type==="device"&&e.type==="device"?a.deviceId===e.deviceId:!1}class Lr{bus;sourceNodeId;logger;now;generation;snapshot=new Map;subscriptions=new Set;unsubscribeBus;unsubscribeAgentOffline;constructor(e){if(this.bus=e.eventBus,this.sourceNodeId=e.sourceNodeId,this.logger=e.logger,this.now=e.now??(()=>Date.now()),this.generation=e.generation??Br(),this.unsubscribeBus=this.bus.subscribe({category:"system.ready-state"},t=>this.ingest(t.data)),this.unsubscribeAgentOffline=this.bus.subscribe({category:"agent.offline"},t=>this.synthesizeDownForNode(t.data.agentId)),typeof this.bus.getRecent=="function")try{const t=this.bus.getRecent({category:"system.ready-state"});for(const s of t)this.ingest(s.data)}catch{}}close(){this.unsubscribeBus(),this.unsubscribeAgentOffline(),this.subscriptions.clear()}get(e,t){return this.snapshot.get(v(e,t))??null}getSnapshotForTransport(){return Array.from(this.snapshot.values())}hydrate(e){const t=this.now();for(const s of e){const i=v(s.capName,s.scope);if(this.snapshot.has(i))continue;const n={capName:s.capName,scope:s.scope,state:s.state,generation:s.generation,epoch:1,lastChange:t,sourceNodeId:s.sourceNodeId};this.snapshot.set(i,n),this.logger&&this.logger.debug(`readiness: ${s.capName} (${f(s.scope)}) → ${s.state} (hydrated, gen=${s.generation.slice(0,6)})`);const r={capName:s.capName,scope:s.scope,state:s.state,epoch:1,generation:s.generation,sourceNodeId:"hydrated",ts:t,durationInPrevState:0};for(const o of this.subscriptions)if(o.capName===s.capName&&_(o.scope,s.scope))try{o.handler(r)}catch(c){this.logger?.warn(`readiness hydrate handler threw for ${s.capName}: ${c.message??String(c)}`)}}}getAll(){return new Map(this.snapshot)}emitReady(e,t){this.emitTransition(e,t,"ready")}emitStarting(e,t){this.emitTransition(e,t,"starting")}emitDown(e,t){this.emitTransition(e,t,"down")}awaitReady(e,t,s={}){const i=s.timeoutMs??Number.POSITIVE_INFINITY,n=this.now();return this.get(e,t)?.state==="ready"?Promise.resolve():s.signal?.aborted?Promise.reject(s.signal.reason??new Error("aborted")):new Promise((o,c)=>{let l=!1;const d=this.onReadyState(e,t,w=>{w.state==="ready"&&(l||(l=!0,p(),o()))}),u=!Number.isFinite(i)?null:setTimeout(()=>{l||(l=!0,p(),c(new se(e,t,this.now()-n)))},i),S=()=>{l||(l=!0,p(),c(s.signal?.reason??new Error("aborted")))};s.signal?.addEventListener("abort",S,{once:!0});function p(){d(),u!==null&&clearTimeout(u),s.signal?.removeEventListener("abort",S)}})}onReadyState(e,t,s){const i={capName:e,scope:t,handler:s};this.subscriptions.add(i);const n=this.get(e,t);return n!==null&&queueMicrotask(()=>{this.subscriptions.has(i)&&s({capName:e,scope:t,state:n.state,epoch:n.epoch,generation:n.generation,sourceNodeId:this.sourceNodeId,ts:n.lastChange,durationInPrevState:0})}),()=>{this.subscriptions.delete(i)}}emitTransition(e,t,s){const i=this.now();this.bus.emit(T("system.ready-state",{type:"capability",id:e,nodeId:this.sourceNodeId},{capName:e,scope:t,state:s,generation:this.generation,sourceNodeId:this.sourceNodeId,ts:i}))}ingest(e){if(typeof e?.capName!="string"||e.state!=="ready"&&e.state!=="starting"&&e.state!=="down"||typeof e.generation!="string"||e.scope?.type!=="global"&&e.scope?.type!=="node"&&e.scope?.type!=="device")return;const t=v(e.capName,e.scope),s=this.snapshot.get(t)??null,i=this.now();let n;if(s===null?n=e.state==="ready"?1:0:s.generation!==e.generation&&e.state==="ready"?n=s.epoch+1:n=s.epoch,s!==null&&s.generation===e.generation&&s.state===e.state)return;const r=s===null?0:Math.max(0,i-s.lastChange),o={capName:e.capName,scope:e.scope,state:e.state,generation:e.generation,epoch:n,lastChange:i,sourceNodeId:e.sourceNodeId};this.snapshot.set(t,o);const c={capName:e.capName,scope:e.scope,state:e.state,epoch:n,generation:e.generation,sourceNodeId:e.sourceNodeId,ts:e.ts,durationInPrevState:r};this.logger&&this.logger.debug(`readiness: ${e.capName} (${f(e.scope)}) → ${e.state} epoch=${n} gen=${e.generation.slice(0,6)} (prev ${r}ms)`);for(const l of this.subscriptions)if(l.capName===e.capName&&_(l.scope,e.scope))try{l.handler(c)}catch(d){this.logger?.warn(`readiness handler threw for ${e.capName}: ${d.message??String(d)}`)}}synthesizeDownForNode(e){const t=this.now();for(const[s,i]of this.snapshot){if(i.state==="down"||!(i.scope.type==="node"&&i.scope.nodeId===e||i.scope.type==="device"&&i.sourceNodeId===e))continue;const r=Math.max(0,t-i.lastChange),o={...i,state:"down",lastChange:t};this.snapshot.set(s,o);const c={capName:i.capName,scope:i.scope,state:"down",epoch:i.epoch,generation:i.generation,sourceNodeId:this.sourceNodeId,ts:t,durationInPrevState:r};this.logger&&this.logger.debug(`readiness: ${i.capName} (${f(i.scope)}) → down (synthesized from agent.offline ${e})`);for(const l of this.subscriptions)if(l.capName===i.capName&&_(l.scope,i.scope))try{l.handler(c)}catch(d){this.logger?.warn(`readiness handler threw during agent.offline demux for ${i.capName}: ${d.message??String(d)}`)}}}}function Br(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function Fr(a,e){for(const{capName:t,scope:s}of e)a.emitDown(t,s)}const Ur=["data","media","recordings","recordings-high","recordings-low","recordings-clips","event-images","models","addons-data","cache","logs","backups"],zr={data:"db",media:"media",recordings:"recordings","recordings-high":"recordings-high","recordings-low":"recordings-low","recordings-clips":"recordings-clips","event-images":"event-images",models:"models","addons-data":"addons-data",cache:"/tmp/camstack-cache",logs:"logs",backups:"backups"},ie={high:"High",mid:"Mid",low:"Low"};function $r(a){return ie[a]??a.charAt(0).toUpperCase()+a.slice(1)}function ne(a){return(a.width??0)*(a.height??0)}function re(a){if(a.length===0)return[];const e=a.map((s,i)=>({s,i,px:ne(s.metadata??{})})).sort((s,i)=>i.px-s.px),t=Array.from({length:a.length});for(let s=0;s<e.length;s++){const{s:i,i:n}=e[s];let r;s===0?r="high":s===e.length-1?r="low":r="mid",t[n]={...i,quality:r}}return t}function Wr(a){const e=a.height??0,t=a.width??0;return e>=1080||t>=1920?"high":e>=480||t>=640?"mid":"low"}function jr(a){const e=a.protocols.find(i=>i.type==="rtsp"&&i.url)??a.protocols.find(i=>i.url),t=e?.type,s=t==="rtsp"?"rtsp":t==="http"||t==="flv"?"http-mjpeg":"custom";return{id:a.id,label:a.label??a.id,protocol:s,url:e?.url,profileHint:a.quality}}function m(a){return typeof a=="string"}function Hr(a){return typeof a=="object"&&a!==null&&!Array.isArray(a)}function Kr(a){return m(a)&&a.trim()?{url:a}:Hr(a)&&m(a.url)&&a.url.trim()?{url:a.url,label:m(a.label)?a.label:void 0}:null}function Zr(a){const e=m(a.snapshot_url)?a.snapshot_url:void 0;if(Array.isArray(a.streams)){const r=[];for(const o of a.streams){const c=Kr(o);c&&r.push(c)}return{streams:r,snapshot_url:e}}const t=[],s=m(a.main_stream_url)?a.main_stream_url:void 0;s&&t.push({url:s,label:m(a.main_stream_name)?a.main_stream_name:void 0});const i=m(a.sub_stream_url)?a.sub_stream_url:void 0;i&&t.push({url:i,label:m(a.sub_stream_name)?a.sub_stream_name:void 0});const n=m(a.third_stream_url)?a.third_stream_url:void 0;return n&&t.push({url:n,label:m(a.third_stream_name)?a.third_stream_name:void 0}),{streams:t,snapshot_url:e}}function qr(a){if(a.length===0)return{};const e=re(a),t={},s=e.find(o=>o.quality==="high"),i=e.find(o=>o.quality==="mid"),n=e.find(o=>o.quality==="low");s&&(t.high=s.id),i&&(t.mid=i.id),n&&(t.low=n.id);const r=s??i??n??e[0];return r&&(t.high||(t.high=r.id),t.mid||(t.mid=r.id),t.low||(t.low=r.id)),t}const Vr={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},Gr=["face","plate"],Yr=["face","plate","clip","custom"],Jr={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14};var oe=(a=>(a.Addon="addon",a.Core="core",a.Device="device",a.Provider="provider",a.System="system",a))(oe||{});const ce="camstack/camstack-models",Qr=`https://huggingface.co/${ce}/resolve/main`,Xr={"features.streaming":!0,"features.notifications":!0,"features.objectDetection":!1,"features.remoteAccess":!0,"features.agentCluster":!1,"features.smartHome":!0,"features.recordings":!0,"features.backup":!0,"features.repl":!0,"retention.detectionEventsDays":30,"retention.audioLevelsDays":7,"logging.level":"info","logging.retentionDays":30,"eventBus.ringBufferSize":1e4,"storage.provider":"sqlite-storage","storage.locations":{data:"camstack-data/data",media:"camstack-data/media",recordings:"camstack-data/recordings",cache:"/tmp/camstack-cache",logs:"camstack-data/logs",models:"camstack-data/models"},providers:[],"recording.segmentDurationSeconds":4,"recording.defaultRetentionDays":30,"ffmpeg.binaryPath":"ffmpeg","ffmpeg.hwAccel":"auto","ffmpeg.threadCount":0,"auth.tokenExpiry":"24h"};function N(a){return JSON.parse(a)}function de(a){return a===null||typeof a!="object"||Array.isArray(a)?null:{...a}}function eo(a){return Array.isArray(a)?a:[]}function to(a,e=""){return typeof a=="string"?a:e}function ao(a,e=0){return typeof a=="number"?a:e}function so(a,e=!1){return typeof a=="boolean"?a:e}function io(a){try{return de(N(a))}catch{return null}}function no(a){try{const e=N(a);return Array.isArray(e)?e:null}catch{return null}}function ro(a,e){return`https://huggingface.co/${a}/resolve/main/${e}`}function oo(a,e){if(a.length!==e.length)return 0;let t=0,s=0,i=0;for(let r=0;r<a.length;r++)t+=a[r]*e[r],s+=a[r]*a[r],i+=e[r]*e[r];const n=Math.sqrt(s)*Math.sqrt(i);return n===0?0:t/n}class co{constructor(e,t){this.elementId=e,this.getBackend=typeof t=="function"?t:()=>t}cache={};listeners=new Set;loaded=!1;getBackend;async ensureLoaded(){if(this.loaded)return;const e=this.getBackend();if(!e)throw new Error(`ElementConfigStore(${this.elementId}): settings backend not available`);const t=await e.query({collection:"config",filter:{where:{id:this.elementId},limit:1}});t.length>0&&(this.cache=t[0].data??{}),this.loaded=!0}getAll(){return{...this.cache}}get(e){const t=e.split(".");let s=this.cache;for(const i of t){if(s===null||typeof s!="object"||Array.isArray(s))return;s=Reflect.get(s,i)}return s}async set(e,t){await this.ensureLoaded(),lo(this.cache,e,t),await this.persist(),this.notifyListeners()}async setAll(e){await this.ensureLoaded(),this.cache={...e},await this.persist(),this.notifyListeners()}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async load(){await this.ensureLoaded()}async loadDefaults(e){await this.ensureLoaded(),Object.keys(this.cache).length===0&&(this.cache={...e},await this.persist())}async persist(){const e=this.getBackend();if(!e)throw new Error(`ElementConfigStore(${this.elementId}): settings backend not available — cannot persist config`);await e.set({collection:"config",key:this.elementId,value:this.cache})}notifyListeners(){const e=this.getAll();for(const t of this.listeners)try{t(e)}catch{}}}function lo(a,e,t){const s=e.split(".");let i=a;for(let n=0;n<s.length-1;n++){const r=s[n],o=i[r];if(o===null||typeof o!="object"||Array.isArray(o)){const c={};i[r]=c,i=c}else i=o}i[s[s.length-1]]=t}const O={cpu:"onnx",coreml:"onnx",cuda:"onnx",tensorrt:"onnx","onnx-py":"onnx",pytorch:"pt",openvino:"openvino"},le={onnx:"onnx",coreml:"coreml",openvino:"openvino",tflite:"tflite",pytorch:"pt"},ue={coreml:"coreml_inference.py",pytorch:"pytorch_inference.py",openvino:"openvino_inference.py"};function he(a,e){return a==="node"?"onnx":{coreml:"coreml",openvino:"openvino",pytorch:"pytorch","onnx-py":"onnx",cpu:"onnx"}[e]??e}function uo(a,e){return a==="node"?O[e]??"onnx":{coreml:"coreml",openvino:"openvino",pytorch:"pt","onnx-py":"onnx",cpu:"onnx"}[e]??"onnx"}function ho(a,e){return!a||a==="auto"?"auto":he(a,e??"cpu")}function mo(a){return O[a]??"onnx"}function po(a){return le[a]}function fo(a){return ue[a]}function go(a){return a==="coreml"||a==="pytorch"||a==="openvino"}function me(a){return a instanceof Error?a.message:typeof a=="string"?a:String(a)}async function So(a,e){const t=performance.now();try{return{output:e!==void 0?await yo(a(),e):await a(),durationMs:M(performance.now()-t),ok:!0}}catch(s){return{output:void 0,durationMs:M(performance.now()-t),ok:!1,error:me(s)}}}function M(a){return Math.round(a*100)/100}function yo(a,e){return new Promise((t,s)=>{const i=setTimeout(()=>s(new Error(`Inference timeout after ${e}ms`)),e);a.then(n=>{clearTimeout(i),t(n)}).catch(n=>{clearTimeout(i),s(n)})})}const bo=[{id:"person",name:"Person"},{id:"bicycle",name:"Bicycle"},{id:"car",name:"Car"},{id:"motorcycle",name:"Motorcycle"},{id:"airplane",name:"Airplane"},{id:"bus",name:"Bus"},{id:"train",name:"Train"},{id:"truck",name:"Truck"},{id:"boat",name:"Boat"},{id:"traffic light",name:"Traffic Light"},{id:"fire hydrant",name:"Fire Hydrant"},{id:"stop sign",name:"Stop Sign"},{id:"parking meter",name:"Parking Meter"},{id:"bench",name:"Bench"},{id:"bird",name:"Bird"},{id:"cat",name:"Cat"},{id:"dog",name:"Dog"},{id:"horse",name:"Horse"},{id:"sheep",name:"Sheep"},{id:"cow",name:"Cow"},{id:"elephant",name:"Elephant"},{id:"bear",name:"Bear"},{id:"zebra",name:"Zebra"},{id:"giraffe",name:"Giraffe"},{id:"backpack",name:"Backpack"},{id:"umbrella",name:"Umbrella"},{id:"handbag",name:"Handbag"},{id:"tie",name:"Tie"},{id:"suitcase",name:"Suitcase"},{id:"frisbee",name:"Frisbee"},{id:"skis",name:"Skis"},{id:"snowboard",name:"Snowboard"},{id:"sports ball",name:"Sports Ball"},{id:"kite",name:"Kite"},{id:"baseball bat",name:"Baseball Bat"},{id:"baseball glove",name:"Baseball Glove"},{id:"skateboard",name:"Skateboard"},{id:"surfboard",name:"Surfboard"},{id:"tennis racket",name:"Tennis Racket"},{id:"bottle",name:"Bottle"},{id:"wine glass",name:"Wine Glass"},{id:"cup",name:"Cup"},{id:"fork",name:"Fork"},{id:"knife",name:"Knife"},{id:"spoon",name:"Spoon"},{id:"bowl",name:"Bowl"},{id:"banana",name:"Banana"},{id:"apple",name:"Apple"},{id:"sandwich",name:"Sandwich"},{id:"orange",name:"Orange"},{id:"broccoli",name:"Broccoli"},{id:"carrot",name:"Carrot"},{id:"hot dog",name:"Hot Dog"},{id:"pizza",name:"Pizza"},{id:"donut",name:"Donut"},{id:"cake",name:"Cake"},{id:"chair",name:"Chair"},{id:"couch",name:"Couch"},{id:"potted plant",name:"Potted Plant"},{id:"bed",name:"Bed"},{id:"dining table",name:"Dining Table"},{id:"toilet",name:"Toilet"},{id:"tv",name:"TV"},{id:"laptop",name:"Laptop"},{id:"mouse",name:"Mouse"},{id:"remote",name:"Remote"},{id:"keyboard",name:"Keyboard"},{id:"cell phone",name:"Cell Phone"},{id:"microwave",name:"Microwave"},{id:"oven",name:"Oven"},{id:"toaster",name:"Toaster"},{id:"sink",name:"Sink"},{id:"refrigerator",name:"Refrigerator"},{id:"book",name:"Book"},{id:"clock",name:"Clock"},{id:"vase",name:"Vase"},{id:"scissors",name:"Scissors"},{id:"teddy bear",name:"Teddy Bear"},{id:"hair drier",name:"Hair Drier"},{id:"toothbrush",name:"Toothbrush"}],Co=[{id:"person",name:"Person"},{id:"vehicle",name:"Vehicle"},{id:"animal",name:"Animal"}],vo={mapping:{person:"person",bicycle:"vehicle",car:"vehicle",motorcycle:"vehicle",airplane:"vehicle",bus:"vehicle",train:"vehicle",truck:"vehicle",boat:"vehicle",bird:"animal",cat:"animal",dog:"animal",horse:"animal",sheep:"animal",cow:"animal",elephant:"animal",bear:"animal",zebra:"animal",giraffe:"animal"},preserveOriginal:!1},Io={camera:{type:"camera",label:"Camera",icon:"camera"}};class g{schema;data;persistFn;constructor(e,t,s){this.schema=e,this.data=t,this.persistFn=s}static fromSchema(e,t,s={},i){const n=e.safeParse(s);if(n.success)return new g(e,n.data,t);const r=new Set;for(const d of n.error.issues){const h=d.path[0];typeof h=="string"&&r.add(h)}const o={...s};for(const d of r)delete o[d];const c=e.safeParse(o);if(i?.({droppedKeys:[...r],issues:n.error.issues}),c.success)return t(c.data).catch(()=>{}),new g(e,c.data,t);const l=e.parse({});return new g(e,l,t)}get values(){return this.data}get(e){return this.data[e]}async set(e,t){const s=this.schema.parse({...this.data,[e]:t});this.data=s,await this.persistFn(this.data)}async setAll(e){const t=this.schema.parse({...this.data,...e});this.data=t,await this.persistFn(this.data)}async deleteKey(e){const{[e]:t,...s}=this.data,i=this.schema.parse(s);this.data=i,await this.persistFn(this.data)}entries(){const e=this.schema.shape;return Object.entries(e).map(([t,s])=>({key:t,schema:s,value:this.data[t],description:s.description}))}}class A{writer;pendingWrites=new Set;slices;schemas=new Map;listeners=new Set;capListeners=new Map;constructor(e,t){this.writer=t,this.slices=new Map;for(const[s,i]of Object.entries(e))i&&typeof i=="object"&&!Array.isArray(i)&&this.slices.set(s,{...i})}static fromInitial(e,t){return new A(e,t)}installCapSchema(e,t){const s=this.schemas.get(e);if(s){if(s!==t)throw new Error(`[DeviceRuntimeState] capability "${e}" registered a different runtime-state schema; each cap must declare ONE shape across every provider`);return}this.schemas.set(e,t);const i=this.slices.get(e);if(i){const n=t.safeParse(i);n.success?this.slices.set(e,n.data):this.slices.delete(e)}}getCapState(e){const t=this.slices.get(e);if(t)return Object.freeze({...t})}getCapField(e,t){return this.slices.get(e)?.[t]}setCapState(e,t){this.applyCapWrite(e,t,!1)}patchCapState(e,t){this.applyCapWrite(e,t,!0)}applyCapWrite(e,t,s){const i=this.schemas.get(e);if(!i)throw new Error(`[DeviceRuntimeState] no schema registered for cap "${e}" — did the device register it via ctx.registerNativeCap before writing?`);const n=this.slices.get(e)??{},r=s?{...n,...t}:{...t},o=i.parse(r);if(Ao(n,o))return;this.slices.set(e,o),this.fireListeners([e]);const c=this.writer(e,{...o}).catch(()=>{});this.pendingWrites.add(c),c.finally(()=>{this.pendingWrites.delete(c)})}fireListeners(e){const t=this.snapshot();for(const s of this.listeners)try{s(e,t)}catch{}for(const s of e){const i=this.capListeners.get(s);if(!i)continue;const n=this.getCapState(s);for(const r of i)try{r(n)}catch{}}}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}subscribeCap(e,t){let s=this.capListeners.get(e);s||(s=new Set,this.capListeners.set(e,s));const i=n=>{t(n)};return s.add(i),()=>{const n=this.capListeners.get(e);n&&(n.delete(i),n.size===0&&this.capListeners.delete(e))}}snapshot(){const e={};for(const[t,s]of this.slices)e[t]=Object.freeze({...s});return Object.freeze(e)}async flush(){if(this.pendingWrites.size===0)return;const e=[...this.pendingWrites];await Promise.allSettled(e)}}function Ao(a,e){const t=Object.keys(a),s=Object.keys(e);if(t.length!==s.length)return!1;for(const i of t)if(a[i]!==e[i])return!1;return!0}const D="lastFetchedAt";function wo(a){const{runtimeState:e,cap:t,ownDeviceId:s,refresh:i,staleMs:n,empty:r}=a,o=async()=>{const d=e.getCapState(t.name),h=typeof d?.[D]=="number"?d[D]:0;(!d||Date.now()-h>n)&&await i()},c=()=>{const d=e.getCapState(t.name);if(!d)return r();const{[D]:h,...u}=d;return u};return{ensureFresh:o,getStatus:async({deviceId:d})=>{if(d!==s)throw new Error(`${t.name}: deviceId mismatch, expected ${s}, got ${d}`);return await o(),c()}}}const Eo={audioMetrics:G,battery:V,brightness:q,cameraStreams:Z,deviceDiscovery:K,deviceStatus:R,doorbell:H,featureProbe:P,motion:j,motionTrigger:W,ptzAutotrack:$,switch:z,zoneAnalytics:U,zoneRules:F,zones:B};class _o{id;stableId;type;name;parentDeviceId;role;get online(){return this.runtimeState.getCapState("device-status")?.online??!1}set online(e){this.markOnline(e)}get state(){if(!this._stateProxyCache){const e={},t={get:(s,i)=>{const n=i;if(n in e)return e[n];const r=Eo[n];if(!r)return;const o=this.sliceProxy(r);return e[n]=o,o}};this._stateProxyCache=new Proxy(e,t)}return this._stateProxyCache}_stateProxyCache;config;runtimeState;ctx;location;disabled;constructor(e,t,s){if(this.ctx=e,this.id=e.id,this.stableId=e.stableId,this.type=s.type,!e.deviceMeta)throw new Error(`BaseDevice constructor: ctx.deviceMeta is required (id=${e.id} stableId=${e.stableId})`);this.name=e.deviceMeta.name,this.location=e.deviceMeta.location,this.disabled=e.deviceMeta.disabled,this.role=s.role,this.parentDeviceId=e.parentDeviceId;const i=e.persistedConfig??{};this.config=g.fromSchema(t,d=>e.persistConfig(d),i,({droppedKeys:d,issues:h})=>{e.logger.warn("Device config recovery: dropping invalid persisted fields",{tags:{deviceId:e.id,stableId:e.stableId},meta:{droppedKeys:[...d],firstIssue:h[0]?.message??null}})});let n=null;const r=async(d,h)=>{n||(n=e.fetchDevice(e.id)),await(await n).deviceState.setCapSlice({capName:d,slice:h})},o=e.initialRuntimeState??{};this.runtimeState=A.fromInitial(o,r),e.bindRuntimeState?.(this.runtimeState),e.registerNativeCap?.(R,{});const c={online:!1,lastChangedAt:Date.now()};this.runtimeState.setCapState("device-status",c),e.registerNativeCap?.(P,{});const l={flags:{},deviceType:null,model:null,channelCount:null,lastProbedAt:0,lastFetchedAt:0};this.runtimeState.setCapState("feature-probe",l)}async removeDevice(){}markOnline(e){if(this.online===e)return;const t={online:e,lastChangedAt:Date.now()};this.runtimeState.setCapState("device-status",t)}async refreshFeatures(){const t=this.ctx.api?.deviceManager?.registerDevice;if(t)try{await t.mutate({addonId:this.ctx.deviceMeta.addonId,stableId:this.stableId,id:this.id,type:this.type,name:this.name,parentDeviceId:this.parentDeviceId,features:[...this.features],config:{}})}catch{}}getCapSlice(e){return this.runtimeState.getCapState(e.name)??null}setCapSlice(e,t){this.runtimeState.setCapState(e.name,t)}sliceProxy(e){const t={},s={get:(i,n)=>this.runtimeState.getCapState(e.name)?.[n],set:(i,n,r)=>(this.runtimeState.patchCapState(e.name,{[n]:r}),!0),has:(i,n)=>{const r=this.runtimeState.getCapState(e.name);return r?n in r:!1},ownKeys:()=>{const i=this.runtimeState.getCapState(e.name);return i?Object.keys(i):[]},getOwnPropertyDescriptor:(i,n)=>{const r=this.runtimeState.getCapState(e.name);if(!(!r||!(n in r)))return{configurable:!0,enumerable:!0,value:r[n]}}};return new Proxy(t,s)}getSettingsUISchema(){return{sections:[]}}async applySettingsPatch(e){await this.config.setAll(e)}async onProbe(){}async onActivate(){}async reprobe(){this._kernelReprobe?await this._kernelReprobe():await this.onProbe()}_kernelReprobe;getAccessoryChildren(){return[]}getProbeFlags(){return this.runtimeState.getCapState("feature-probe")?.flags??{}}hasProbed(){return(this.runtimeState.getCapState("feature-probe")?.lastProbedAt??0)>0}}function pe(a,e){const t={};for(const s of a.config.entries())t[s.key]=s.value;return{id:a.id,stableId:a.stableId,addonId:e,type:String(a.type),name:a.name,parentDeviceId:a.parentDeviceId,online:a.online,features:[...a.features],config:t}}class Do extends te{async onInitialize(){return this.ctx.logger.info(`${this.providerName} Provider initialized`),[{capability:Y,provider:this}]}async onShutdown(){const e=await this.ctx.kernel.devices?.getAll()??[];for(const t of e)try{await this.ctx.kernel.devices?.decommission(t.id)}catch(s){this.ctx.logger.warn(`${this.providerName}: decommission failed`,{tags:{deviceId:t.id,stableId:t.stableId},meta:{error:s instanceof Error?s.message:String(s)}})}this.ctx.logger.info(`${this.providerName} Provider shut down`,{meta:{decommissionedCount:e.length}})}async start(){}async stop(){}async getStatus(){return{connected:!0,deviceCount:(await this.ctx.kernel.devices?.getAll()??[]).length}}async getDevices(){return(await this.ctx.kernel.devices?.getAll()??[]).map(t=>({id:t.stableId,name:t.name,type:String(t.type)}))}async supportsDiscovery(){return!1}async discoverDevices(){return[]}async adoptDiscoveredDevice(e){throw new Error(`${this.providerName} provider does not support discovery-based adoption`)}async supportsManualCreation(){return!0}async getChildCreationSchema(e){return this.onGetCreationSchema(e.type)}async createDevice(e){const t=await this.onCreateDevice(e.type,e.config),s=this.deviceClasses[t.meta.type];if(!s)throw new Error(`${this.providerName} provider: no device class registered for type "${t.meta.type}" — add it to the deviceClasses map`);const i=this.generateStableId(t.meta.type,t.config),n=await this.ctx.kernel.devices.create(i,s,t.config,null,t.meta);if(t.onAfterCreate)try{await t.onAfterCreate(n)}catch(r){this.ctx.logger.warn("createDevice: onAfterCreate hook threw — device is already registered",{tags:{deviceId:n.id,stableId:i},meta:{error:r instanceof Error?r.message:String(r)}})}return this.toSummary(n)}generateStableId(e,t){return`${this.addonId}-${Date.now()}`}async testCreationField(e){return{status:"ok",labels:["probe not implemented"]}}async restoreDevices(e){await this.onRestoreDevices(e),e.length>0&&this.ctx.logger.info(`Restored ${e.length} ${this.providerName} device(s)`)}async onRestoreDevices(e){const t=new Set;for(const i of e){if(i.parentDeviceId!==null)continue;const n=this.deviceClasses[i.type];if(!n){this.ctx.logger.warn("No device class registered for restored type — skipping",{tags:{stableId:i.stableId},meta:{type:i.type}});continue}try{await this.ctx.kernel.devices.create(i.stableId,n,{}),t.add(i.id)}catch(r){this.ctx.logger.warn("Failed to restore device",{tags:{stableId:i.stableId},meta:{type:i.type,error:r instanceof Error?r.message:String(r)}})}}const s=e.filter(i=>i.parentDeviceId!==null);for(const i of s){const n=this.deviceClasses[i.type];if(n&&i.parentDeviceId!==null&&t.has(i.parentDeviceId))try{await this.ctx.kernel.devices.create(i.stableId,n,{},i.parentDeviceId),t.add(i.id)}catch(r){this.ctx.logger.warn("Failed to restore hub-adopted child",{tags:{stableId:i.stableId,parentDeviceId:i.parentDeviceId},meta:{type:i.type,error:r instanceof Error?r.message:String(r)}})}}}toSummary(e){return pe(e,this.addonId)}}function y(a){return a.def}function ko(a,e="Configuration",t="main"){const s=a.map(i=>Po(i.key,i.schema,i.description));return{sections:[{id:t,title:e,fields:s}]}}function Po(a,e,t){const s=I(e),i=xo(e),n=t??fe(a),r={key:a,label:n,description:t,default:i};return s instanceof Ir?Ro(a,r):s instanceof Ar?To(s,r):s instanceof wr?{...r,type:"boolean"}:s instanceof Er?Oo(s,r):s instanceof _r||s instanceof Dr?{...r,type:"textarea",rows:6,isJson:!0}:{...r,type:"text"}}function Ro(a,e){const t=a.toLowerCase();return t.includes("password")||t.includes("secret")||t.includes("token")||t.includes("apikey")||t.includes("api_key")?{...e,type:"password",showToggle:!0}:{...e,type:"text"}}function To(a,e){const t=a,s=t.minValue,i=t.maxValue,n=s!=null&&isFinite(s)?s:void 0,r=i!=null&&isFinite(i)?i:void 0,o=No(a);return{...e,type:"number",...n!==void 0?{min:n}:{},...r!==void 0?{max:r}:{},...o!==void 0?{step:o}:{}}}function No(a){const t=y(a).checks??[];for(const s of t)if(s._zod?.def?.check==="multiple_of"&&s._zod.def.value!==void 0)return s._zod.def.value}function Oo(a,e){const t=a.options.map(i=>String(i));return{...e,type:"select",options:t.map(i=>({label:fe(i),value:i}))}}function I(a){return a instanceof J||a instanceof kr||a instanceof Pr?I(y(a).innerType):a}function xo(a){if(a instanceof J)return y(a).defaultValue}function fe(a){return a.replace(/([A-Z])/g," $1").replace(/[_-]/g," ").replace(/^\w/,e=>e.toUpperCase()).trim()}function Mo(a,e,t,s,i){if(t.length===0||e.length===0)return{passed:a,excluded:[]};const n=t.filter(u=>u.enabled!==!1),r=n.filter(u=>u.mode==="include"),o=n.filter(u=>u.mode==="exclude"),c=r.length>0,l=new Map(e.map(u=>[u.id,u])),d=[],h=[];for(const u of a){const S=s(u),p=i?.(u),w=r.some(E=>L(E,S,p,l)),x=o.some(E=>L(E,S,p,l));c?w&&!x?d.push(u):h.push(u):x?h.push(u):d.push(u)}return{passed:d,excluded:h}}function L(a,e,t,s){if(a.classFilter&&a.classFilter.length>0&&t!==void 0&&!a.classFilter.includes(t))return!1;for(const i of a.zoneIds){const n=s.get(i);if(n&&Lo(e,n.polygon))return!0}return!1}function Lo(a,e){if(e.length<3)return!1;let t=!1;const{x:s,y:i}=a;for(let n=0,r=e.length-1;n<e.length;r=n++){const o=e[n],c=e[r];o.y>i!=c.y>i&&s<(c.x-o.x)*(i-o.y)/(c.y-o.y||Number.EPSILON)+o.x&&(t=!t)}return t}function Bo(a){return a}function Fo(a,e,t){return{input:a,output:e,kind:t?.kind??"query",auth:t?.auth??"protected",scope:t?.scope??{kind:"system"}}}const Uo=["accessories","battery","brightness","camera-credentials","device-discovery","device-status","doorbell","feature-probe","intercom","motion","motion-trigger","native-object-detection","osd","ptz","ptz-autotrack","snapshot","switch"];function zo(a){try{const e=new URL(a);return!e.username&&!e.password?a:(e.username="",e.password="",e.toString())}catch{return a}}class $o{constructor(e){this.capacity=e,this.items=Array.from({length:e})}items;head=0;tail=0;count=0;get size(){return this.count}push(e){this.items[this.tail]=e,this.tail=(this.tail+1)%this.capacity,this.count<this.capacity?this.count++:this.head=(this.head+1)%this.capacity}drain(e){const t=[],s=Math.min(e,this.count);for(let i=0;i<s;i++)t.push(this.items[this.head]),this.items[this.head]=void 0,this.head=(this.head+1)%this.capacity;return this.count-=s,t}}function Wo(a,e,t){const s={};for(const i of Object.keys(t))s[i]=n=>a.addons.custom.mutate({addonId:e,action:i,input:n});return s}const Zo=Object.freeze(Object.defineProperty({__proto__:null,ACCESSORY_LABEL:ge,ALL_CAPABILITY_DEFINITIONS:br,APPLE_SA_TO_MACRO:Se,AUDIO_BACKEND_CHOICES:ye,AUDIO_MACRO_LABELS:be,AccessoriesStatusSchema:Ce,AccessoryKind:ve,AddonAutoUpdateSchema:Ie,AddonListItemSchema:Ae,AddonPageDeclarationSchema:we,AddonPageInfoSchema:Ee,AgentLoadSummarySchema:_e,AlertSchema:De,AlertSeveritySchema:ke,AlertSourceSchema:Pe,AlertStatusSchema:Re,ApiKeyRecordSchema:Te,ApiKeySummarySchema:Ne,ArchiveEntrySchema:Oe,ArchiveManifestSchema:xe,AudioAnalysisResultSchema:Me,AudioAnalysisSettingsSchema:Le,AudioChunkInputSchema:Be,AudioClassSummarySchema:Fe,AudioClassificationLabelSchema:Ue,AudioClassificationResultSchema:ze,AudioCodecInfoSchema:$e,AudioDecodeSessionConfigSchema:We,AudioEncodeSessionConfigSchema:je,AudioEncodedChunkSchema:He,AudioEventSchema:Ke,AudioLevelSchema:Ze,AudioMetricsHistoryPointSchema:qe,AudioMetricsHistorySchema:Ve,AudioMetricsSnapshotSchema:Ge,AudioPcmChunkSchema:Ye,AuthProviderInfoSchema:Je,AuthResultSchema:Qe,AutoUpdateSettingsSchema:Xe,AvailableIntegrationTypeSchema:et,BACKEND_TO_FORMAT:O,BATTERY_DEVICE_PROFILE:tt,BackupDestinationInfoSchema:at,BackupEntrySchema:st,BaseAddon:te,BaseDevice:_o,BaseDeviceProvider:Do,BatteryStatusSchema:it,BoundingBoxSchema:nt,BrightnessStatusSchema:rt,BrokerAudioClientSchema:ot,BrokerClientsSchema:ct,BrokerDecodedClientSchema:dt,BrokerRtspClientSchema:lt,BrokerStatsSchema:ut,BrokerStatusSchema:ht,CAM_PROFILE_ORDER:mt,CAPABILITY_NAMES:Cr,CAPABILITY_ROUTER_KEYS:vr,CAP_NAMES_WITH_STATUS:Uo,COCO_80_LABELS:bo,COCO_TO_MACRO:vo,CamProfileSchema:pt,CamStreamKindSchema:ft,CamStreamResolutionSchema:gt,CameraCredentialsSchema:St,CameraCredentialsStatusSchema:yt,CameraMetricsSchema:bt,CameraMetricsWithDeviceIdSchema:Ct,CameraStreamSchema:vt,CapabilityBindingsSchema:It,ChargingStatus:At,ClientNetworkStatsSchema:wt,ClusterAddonNodeDeploymentSchema:Et,ClusterAddonStatusEntrySchema:_t,CollectionColumnSchema:Dt,CollectionIndexSchema:kt,ConfigEntrySchema:Pt,ConfigSectionWithValuesSchema:Rt,ConfigTabDeclarationSchema:Tt,CreateApiKeyInputSchema:Nt,CreateApiKeyResultSchema:Ot,CreateIntegrationInputSchema:xt,CreateScopedTokenInputSchema:Mt,CreateScopedTokenResultSchema:Lt,CreateUserInputSchema:Bt,CustomActionInputSchema:Ft,DEFAULT_ADDON_GROUP:Q,DEFAULT_ADDON_PLACEMENT:X,DEFAULT_AUDIO_ANALYZER_CONFIG:Ut,DEFAULT_DECODER_HWACCEL_CONFIG:zt,DEFAULT_FEATURES:Vr,DEFAULT_LOCATION_SUBDIRS:zr,DEFAULT_RETENTION:Jr,DEVICE_PROFILES:$t,DEVICE_SETTINGS_CONTRIBUTION_METHODS:Wt,DEVICE_STATUS_METHOD:jt,DEVICE_TYPE_INFO:Io,DecodedFrameSchema:Ht,DecoderAssignmentSchema:Kt,DecoderSessionConfigSchema:Zt,DecoderStatsSchema:qt,DeleteIntegrationResultSchema:Vt,DetectorOutputSchema:Gt,DeviceConfig:g,DeviceDiscoveryStatusSchema:Yt,DeviceFeature:Jt,DeviceInfoSchema:Qt,DeviceNetworkStatsSchema:Xt,DeviceRole:ea,DeviceRuntimeState:A,DeviceStatusSchema:ta,DeviceType:aa,DiscoveredChildDeviceSchema:sa,DiscoveredChildStatusSchema:ia,DiscoveredDeviceSchema:na,DisposerChain:Rr,DoorbellPressEventSchema:ra,DoorbellStatusSchema:oa,ElementConfigStore:co,EmbeddingInfoSchema:ca,EmbeddingResultSchema:da,EncodedPacketSchema:la,EnrichedWidgetMetadataSchema:ua,EventCategory:C,EventItemSchema:ha,EventKindSchema:ma,EventSourceType:oe,ExposedResourceSchema:pa,FeatureManifestSchema:fa,FeatureProbeStatusSchema:ga,FrameInputSchema:Sa,GlobalMetricsSchema:ya,HF_BASE_URL:Qr,HF_REPO:ce,HWACCEL_OPTIONS:ba,HealthStatusSchema:Ca,HistoryPointSchema:va,HistoryResolutionEnum:Ia,InstalledPackageSchema:Aa,IntegrationLiteSchema:wa,IntegrationWithStateSchema:Ea,IntercomAbilitySchema:_a,IntercomStatusSchema:Da,LocationStatSchema:ka,LogEntrySchema:Pa,LogLevelSchema:Ra,LogStreamEntrySchema:Ta,MACRO_LABELS:Co,MODEL_FORMATS:Na,MediaFileSchema:Oa,MotionAnalysisResultSchema:xa,MotionEventSchema:Ma,MotionOnMotionChangedDataSchema:La,MotionRegionSchema:Ba,MotionSourceEnum:Fa,MotionSourcesSchema:Ua,MotionStatusSchema:za,MotionTriggerRuntimeStateSchema:$a,MotionTriggerStatusSchema:Wa,NativeDetectionSchema:ja,NativeObjectClassEnum:Ha,NativeObjectDetectionStatusSchema:Ka,NetworkAccessStatusSchema:Za,NetworkAddressSchema:qa,NetworkEndpointSchema:Va,NotificationHistoryEntrySchema:Ga,NotificationRuleSchema:Ya,NotificationSchema:Ja,ObjectEventSchema:Qa,OrchestratorMetricsSchema:Xa,OsdOverlayKindEnum:es,OsdOverlayPatchSchema:ts,OsdOverlaySchema:as,OsdPositionEnum:ss,OsdStatusSchema:is,PIPELINE_FLOW_CAPABILITY_NAMES:ns,PIPELINE_OWNER_CAPABILITY_NAMES:rs,PYTHON_SCRIPT:ue,PackageUpdateSchema:os,PackageVersionInfoSchema:cs,PcmSampleFormatSchema:ds,PerScopeBreakdownSchema:ls,PipelineAssignmentSchema:us,PipelineDefaultStepSchema:hs,PipelineEngineChoiceSchema:ms,PipelineRunResultBridge:ps,PipelineStepInputSchema:fs,PlaceholderReasonSchema:gs,PolygonPointSchema:Ss,ProfileSlotSchema:ys,ProfileSlotStatusSchema:bs,ProviderStatusSchema:Cs,PtzAutotrackRuntimeStateSchema:vs,PtzAutotrackSettingsSchema:Is,PtzAutotrackStatusSchema:As,PtzAutotrackTargetOptionSchema:ws,PtzMoveCommandSchema:Es,PtzPositionSchema:_s,PtzPresetSchema:Ds,QueryFilterSchema:ks,RECOGNITION_TYPES:Yr,RUNTIME_DEFAULTS:Xr,RUNTIME_TO_FORMAT:le,ReadinessRegistry:Lr,ReadinessTimeoutError:se,RegisteredStreamSchema:Ps,RemoteAccessEndpointSchema:Rs,RemoteAccessProviderInfoSchema:Ts,ReportMotionInputSchema:Ns,RingBuffer:$o,RtspRestreamEntrySchema:Os,RunnerCameraConfigSchema:xs,RunnerCameraDeviceUIFields:Ms,RunnerLocalLoadSchema:Ls,RunnerLocalMetricsSchema:Bs,STORAGE_LOCATION_CARDINALITY:Fs,STORAGE_LOCATION_TYPES:Ur,STREAM_QUALITY_LABELS:ie,SUB_DETECTION_TYPES:Gr,ScopedTokenSchema:Us,ScopedTokenSummarySchema:zs,SearchResultSchema:$s,SegmentSchema:Ws,SettingsPatchSchema:js,SettingsRecordSchema:Hs,SettingsSchemaWithValuesSchema:Ks,SettingsUpdateResultSchema:Zs,SnapshotImageSchema:qs,SpatialDetectionSchema:Vs,StorageAbortUploadInputSchema:Gs,StorageBeginDownloadInputSchema:Ys,StorageBeginDownloadResultSchema:Js,StorageBeginUploadInputSchema:Qs,StorageBeginUploadResultSchema:Xs,StorageEndDownloadInputSchema:ei,StorageFinalizeUploadInputSchema:ti,StorageLocationRefSchema:ai,StorageLocationSchema:si,StorageLocationTypeSchema:ii,StorageProviderInfoSchema:ni,StorageReadChunkInputSchema:ri,StorageTestLocationResultSchema:oi,StorageWriteChunkInputSchema:ci,StreamFormatSchema:di,StreamInfoSchema:li,StreamNetworkStatsSchema:ui,StreamSourceEntrySchema:hi,StreamSourceSchema:mi,SwitchStatusSchema:pi,SystemMetricsSchema:fi,SystemMirror:gi,TestConnectionResultSchema:Si,ToastSchema:yi,TokenScopeSchema:bi,TopologyNodeSchema:Ci,TopologyProcessSchema:vi,TopologyServiceSchema:Ii,TrackSchema:Ai,TrackStateSchema:wi,TrackedDetectionSchema:Ei,TurnProviderInfoSchema:_i,TurnServerSchema:Di,UpdateIntegrationInputSchema:ki,UpdateUserInputSchema:Pi,UserRecordSchema:Ri,UserRoleSchema:Ti,UserSummarySchema:Ni,WELL_KNOWN_TABS:Oi,WELL_KNOWN_TAB_MAP:xi,WebrtcStreamChoiceSchema:Mi,WebrtcStreamTargetSchema:Li,WidgetHostEnum:Bi,WidgetMetadataSchema:Fi,WidgetSizeEnum:Ui,YAMNET_TO_MACRO:zi,ZoneKindEnum:$i,ZoneRuleModeEnum:Wi,ZoneRuleSchema:ji,ZoneRuleStageEnum:Hi,ZoneRulesArraySchema:Ki,ZoneSchema:Zi,ZoneScopeBreakdownSchema:qi,accessoriesCapability:Vi,accessoryStableId:Gi,addonPagesCapability:Yi,addonPagesSourceCapability:Ji,addonRoutesCapability:Qi,addonSettingsCapability:Xi,addonWidgetsCapability:en,addonWidgetsSourceCapability:tn,addonsCapability:an,adminUiCapability:sn,advancedNotifierCapability:nn,alertsCapability:rn,asBoolean:so,asJsonArray:eo,asJsonObject:de,asNumber:ao,asString:to,audioAnalysisCapability:on,audioAnalyzerCapability:cn,audioCodecCapability:dn,audioMetricsCapability:G,authProviderCapability:ln,authenticationCapability:un,autoAssignProfiles:qr,backupCapability:hn,batteryCapability:V,bindAddonActions:Wo,brightnessCapability:q,cameraCredentialsCapability:mn,cameraStreamsCapability:Z,classifyStream:Wr,classifyStreams:re,cosineSimilarity:oo,createDeviceProxy:pn,createEvent:T,createLazyTrpcSource:fn,createMirrorSource:gn,createRuntimeStateBridge:wo,createSliceHandle:Sn,createSystemProxy:yn,customAction:Fo,decoderCapability:bn,defineCustomActions:Bo,detectionPipelineCapability:Cn,deviceDiscoveryCapability:K,deviceManagerCapability:vn,deviceMatchesProfile:In,deviceOpsCapability:An,deviceProviderCapability:Y,deviceStateCapability:wn,deviceStatusCapability:R,doorbellCapability:H,embeddingEncoderCapability:En,emitDownForOwnedCaps:Fr,emitReadiness:ee,errMsg:me,evaluateZoneRules:Mo,event:_n,eventsCapability:Dn,expandCapMethods:kn,featureProbeCapability:P,formatForBackend:mo,formatForRuntime:po,getAudioMacroClassIds:Pn,hfModelUrl:ro,hydrateSchema:k,integrationsCapability:Rn,intercomCapability:Tn,isAgentOnlyPlacement:Nr,isDeployableToAgent:Tr,isEvent:Mr,localNetworkCapability:Nn,logDestinationCapability:On,mapAudioLabelToMacro:xn,maskUrlCredentials:zo,meshNetworkCapability:Mn,meshOrchestratorCapability:Ln,method:Bn,metricsProviderCapability:Fn,motionCapability:j,motionDetectionCapability:Un,motionTriggerCapability:W,nativeObjectDetectionCapability:zn,networkAccessCapability:$n,networkQualityCapability:Wn,nodesCapability:jn,normalizeAddonInitResult:ae,notificationOutputCapability:Hn,osdCapability:Kn,parseCameraStreamConfig:Zr,parseJsonArray:no,parseJsonObject:io,parseJsonUnknown:N,pipelineAnalyticsCapability:Zn,pipelineExecutorCapability:qn,pipelineOrchestratorCapability:Vn,pipelineRunnerCapability:Gn,platformProbeCapability:Yn,ptzAutotrackCapability:$,ptzCapability:Jn,pythonScriptForBackend:fo,readinessKey:v,rebootCapability:Qn,recordingCapability:Xn,recordingEngineCapability:er,remoteAccessCapability:tr,requiresPython:go,resolveAddonExecution:b,resolveAddonGroup:Or,resolveAddonPlacement:xr,resolveAddonRuntime:ho,resolveDetectionRuntime:he,resolveDeviceProfile:ar,resolveModelFormat:uo,restreamerCapability:sr,runInferenceStep:So,scopeKey:f,settingsStoreCapability:ir,snapshotCapability:nr,snapshotProviderCapability:rr,storageCapability:or,storageProviderCapability:cr,streamBrokerCapability:dr,streamPixels:ne,streamQualityLabel:$r,streamingEngineCapability:lr,switchCapability:z,systemCapability:ur,toDeviceSummary:pe,toStreamSourceEntry:jr,toastCapability:hr,turnOrchestratorCapability:mr,turnProviderCapability:pr,userManagementCapability:fr,webrtcCapability:gr,webrtcClientHintsSchema:Sr,webrtcSessionCapability:yr,zodEntriesToConfigUI:ko,zoneAnalyticsCapability:U,zoneRulesCapability:F,zonesCapability:B},Symbol.toStringTag,{value:"Module"}));export{Ur as S,de as a,Zo as s};
@@ -1 +0,0 @@
1
- var Ge=(r,i)=>()=>(i||r((i={exports:{}}).exports,i),i.exports);var fi=Ge(n=>{Object.defineProperty(n,Symbol.toStringTag,{value:"Module"});const a=require("./auth-records-U1Xok3iP.js"),v=require("zod");class Ke{disposers=[];disposed=!1;onError;constructor(i={}){this.onError=i.onError??((e,o)=>{console.error(`[DisposerChain] disposer #${o} threw`,e)})}add(i){if(this.disposed){try{const e=i();e&&typeof e.then=="function"&&e.catch(o=>this.onError(o,-1))}catch(e){this.onError(e,-1)}return()=>{}}return this.disposers.push(i),()=>{const e=this.disposers.indexOf(i);e>=0&&this.disposers.splice(e,1)}}get isDisposed(){return this.disposed}get size(){return this.disposers.length}async dispose(){if(this.disposed)return;this.disposed=!0;const i=this.disposers.slice().reverse();this.disposers=[];for(let e=0;e<i.length;e++){const o=i[e];try{const c=o();c&&typeof c.then=="function"&&await c}catch(c){this.onError(c,i.length-1-e)}}}}const Ce="main-group",Ae="hub-only";function N(r){return{placement:r.execution?.placement??Ae,group:r.execution?.group??Ce}}function Ze(r){const i=N(r).placement;return i==="any-node"||i==="agent-only"}function Ye(r){return N(r).placement==="agent-only"}function Ve(r){return N(r).group}function Qe(r){return N(r).placement}var _=(r=>(r.SystemBoot="system.boot",r.SystemAddonsReady="system.addons-ready",r.SystemRestarting="system.restarting",r.SystemReadyState="system.ready-state",r.AddonStarted="addon.started",r.AddonStopped="addon.stopped",r.AddonRestarted="addon.restarted",r.AddonUpdated="addon.updated",r.AddonInstalled="addon.installed",r.AddonUninstalled="addon.uninstalled",r.AddonCrashed="addon.crashed",r.AddonError="addon.error",r.AddonPageReady="addon.page-ready",r.AddonWidgetReady="addon.widget-ready",r.AddonLoadFailed="addon.load-failed",r.AddonLoadRecovered="addon.load-recovered",r.AddonRetryScheduled="addon.retry-scheduled",r.AddonRetryAttempting="addon.retry-attempting",r.DeviceRegistered="device.registered",r.DeviceUnregistered="device.unregistered",r.DeviceEnabled="device.enabled",r.DeviceDisabled="device.disabled",r.DeviceSettingsUpdated="device.settings-updated",r.DeviceBindingsChanged="device.bindings-changed",r.DeviceMetaChanged="device.meta-changed",r.DeviceStreamsRegistered="device.streams-registered",r.IntegrationEnabled="integration.enabled",r.IntegrationDisabled="integration.disabled",r.IntegrationDeleted="integration.deleted",r.ProviderStarted="provider.started",r.ProviderStopped="provider.stopped",r.ProcessCrashed="process.crashed",r.ProcessRestartScheduled="process.restart_scheduled",r.ProcessRestarted="process.restarted",r.RecordingStarted="recording.started",r.RecordingStopped="recording.stopped",r.RecordingError="recording.error",r.RecordingHealthDegraded="recording.health.degraded",r.RecordingStorageCritical="recording.storage.critical",r.RecordingSegmentWritten="recording.segment.written",r.RecordingPolicyFallback="recording.policy.fallback",r.RecordingRetentionCompleted="recording.retention.completed",r.DetectionEvent="detection.event",r.SessionTrackNew="session.track.new",r.SessionTrackExpired="session.track.expired",r.BenchmarkProgress="benchmark.progress",r.PlatformProbePhase="platform-probe.phase",r.PipelineProgress="pipeline.progress",r.PipelineTrace="pipeline.trace",r.PipelineInferenceResult="pipeline.inference-result",r.PipelineCameraAssigned="pipeline.camera-assigned",r.PipelineCameraUnassigned="pipeline.camera-unassigned",r.PipelineCameraUpdated="pipeline.camera-updated",r.PipelineRunnerLoadSnapshot="pipeline.runner-load-snapshot",r.PipelineCameraMetricsSnapshot="pipeline.camera-metrics-snapshot",r.StreamBrokerMetricsSnapshot="stream-broker.metrics-snapshot",r.StreamBrokerOnCamStreamDemand="stream-broker.onCamStreamDemand",r.StreamBrokerOnCamStreamIdle="stream-broker.onCamStreamIdle",r.StreamBrokerOnRequestStreamSourceRefresh="stream-broker.onRequestStreamSourceRefresh",r.DeviceStateChanged="device.state-changed",r.BatteryOnStatusChanged="battery.onStatusChanged",r.DoorbellOnPressed="doorbell.onPressed",r.PipelineEngineMetricsSnapshot="pipeline.engine-metrics-snapshot",r.ClusterTopologySnapshot="cluster.topology-snapshot",r.MetricsNodeResourcesSnapshot="metrics.node-resources-snapshot",r.MetricsNodeProcessesSnapshot="metrics.node-processes-snapshot",r.CapabilityBindingChanged="capability.binding-changed",r.ModelDownloadProgress="model.download.progress",r.AgentRegistered="agent.registered",r.AgentUnregistered="agent.unregistered",r.AgentOnline="agent.online",r.AgentOffline="agent.offline",r.WorkerOnline="worker.online",r.WorkerOffline="worker.offline",r.AgentTaskDispatched="agent.task.dispatched",r.AgentTaskAssigned="agent.task.assigned",r.AgentTrpcConnected="agent.trpc.connected",r.AgentWsConnected="agent.ws.connected",r.AgentWsDisconnected="agent.ws.disconnected",r.AgentBackupActivated="agent.backup.activated",r.OrchestrationSettingsUpdated="orchestration.settings-updated",r.PipelineAgentHwaccelChanged="pipeline.agent-hwaccel-changed",r.MotionAnalysis="detection.motion-analysis",r.MotionZonesRaw="detection.motion-zones-raw",r.MotionOnMotionChanged="motion.on-motion-changed",r.DetectionResult="detection.result",r.DetectionRaw="detection.raw",r.DetectionCameraNative="detection.camera-native",r.PipelineAudioInferenceResult="pipeline.audio-inference-result",r.DetectionPhaseTransition="detection.phase-transition",r.ProviderMotion="provider.motion",r.ProviderDetection="provider.detection",r.EnrichmentEmbeddingStored="enrichment.embedding.stored",r.EnrichmentSceneStateChanged="enrichment.scene.state-changed",r.EnrichmentActivitySummary="enrichment.activity.summary",r.PipelineAnalyticsTrackStarted="pipeline-analytics.track-started",r.PipelineAnalyticsTrackEnded="pipeline-analytics.track-ended",r.PipelineAnalyticsDetectionEvent="pipeline-analytics.detection-event",r.PipelineAnalyticsFrameTracked="pipeline-analytics.frame-tracked",r.FrigateLiveEvent="frigate.live-event",r.CameraStreamsProfileSlotsChanged="camera-streams.onProfileSlotsChanged",r.StreamOnline="stream.online",r.StreamOffline="stream.offline",r.NetworkTunnelStarted="network.tunnel.started",r.NetworkTunnelStopped="network.tunnel.stopped",r.LocalNetworkChanged="network.local.changed",r.BackupCompleted="backup.completed",r.BackupRestored="backup.restored",r.NotificationDispatched="notification.dispatched",r.NotificationFailed="notification.failed",r.DeviceUpdated="device.updated",r.DeviceOnline="device.online",r.DeviceOffline="device.offline",r.DeviceAwake="device.awake",r.DeviceSleeping="device.sleeping",r.RetentionCleanup="retention.cleanup",r))(_||{});function Je(r,i){return r.category===i}function Y(r,i,e){return{id:typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2),timestamp:new Date,source:i,category:r,data:e}}function ke(r,i){const e=i.ts??Date.now();r.emit(Y("system.ready-state",{type:"capability",id:i.capName,nodeId:i.sourceNodeId},{capName:i.capName,scope:i.scope,state:i.state,generation:i.generation,sourceNodeId:i.sourceNodeId,ts:e}))}class Ie{_ctx=null;_config;_readinessGeneration=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14);_registeredCapNames=[];defaults;constructor(i){this.defaults=i,this._config={...i}}get autoEmitReadiness(){return!0}get ctx(){if(!this._ctx)throw new Error(`${this.constructor.name}: ctx accessed before initialize()`);return this._ctx}get ctxIfReady(){return this._ctx}get config(){return this._config}async initialize(i){this._ctx=i,await this.resolveConfig();const e=await this.onInitialize();this.emitLifecycle(_.AddonStarted);const o=Pe(e),c=o&&"providers"in o&&o.providers?o.providers:[];return this._registeredCapNames=c.map(l=>l.capability.name),o}postBrokerStart(){this.autoEmitReadiness&&this._registeredCapNames.length>0&&this.emitReadinessForProviders("ready")}async onHubReachable(){}async shutdown(){this.emitLifecycle(_.AddonStopped),this.autoEmitReadiness&&this.emitReadinessForProviders("down"),await this.onShutdown();for(const i of this._subscriptions)i();this._subscriptions=[],this._ctx=null}async onShutdown(){}async onConfigChanged(){}field(i){return i}schema(i){return i}globalSettingsSchema(){return null}deviceSettingsSchema(){return null}async getGlobalSettings(i){const e=this.globalSettingsSchema();if(!e)return{sections:[]};const o=await this._ctx?.settings?.readAddonStore()??{};return a.hydrateSchema(e,i?{...o,...i}:o)}async updateGlobalSettings(i){await this._ctx?.settings?.writeAddonStore(i),await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(_.AddonUpdated,{level:"global"}),this.maybeAutoRestart(i,this.globalSettingsSchema())}maybeAutoRestart(i,e){if(!e)return;const o=new Set;for(const d of e.sections)for(const u of d.fields)u.type==="separator"||u.type==="info"||u.requiresRestart&&o.add(u.key);if(o.size===0||!Object.keys(i).some(d=>o.has(d)))return;const l=this._ctx;if(!l)return;const m=l.id;setImmediate(()=>{l.api.addons?.restartAddon?.mutate({addonId:m}).then(()=>{l.logger.info("addon auto-restart triggered by restart-required setting change",{meta:{changedFields:Object.keys(i).filter(u=>o.has(u))}})}).catch(u=>{l.logger.error("addon auto-restart failed",{meta:{error:u instanceof Error?u.message:String(u)}})})})}async getDeviceSettings(i){const e=this.deviceSettingsSchema();if(!e)return{sections:[]};const o=await this._ctx?.settings?.readDeviceStore(i)??{};return a.hydrateSchema(e,o)}async updateDeviceSettings(i,e){await this._ctx?.settings?.writeDeviceStore(i,e)}_subscriptions=[];watchCapability(i,e){const o=Array.isArray(i)?i:[i],c=new Set(o);this.subscribe({category:"system.ready-state"},l=>{const m=l.data;if(typeof m.capName!="string"||!c.has(m.capName)||m.scope?.type!=="node")return;const d=m.scope.nodeId;if(typeof d!="string"||d.length===0)return;const u=m.capName;m.state==="down"?e.onDown?.(d,u):m.state==="ready"&&e.onReady?.(d,u)})}subscribe(i,e){const o=this.ctx.eventBus.subscribe(i,e);this._subscriptions.push(o)}emitLifecycle(i,e){try{this._ctx?.eventBus.emit({id:`${this._ctx.id}-${Date.now()}`,timestamp:new Date,source:{type:"addon",id:this._ctx.id,nodeId:this._ctx.kernel.localNodeId??"hub"},category:i,data:e??{}})}catch{}}emitReadinessForProviders(i){const e=this._ctx;if(!e||this._registeredCapNames.length===0)return;const o=e.kernel?.localNodeId??"hub",c=o.includes("/")?o.split("/")[0]:o;for(const l of this._registeredCapNames)try{ke(e.eventBus,{capName:l,scope:{type:"node",nodeId:c},state:i,generation:this._readinessGeneration,sourceNodeId:c})}catch{}}async resolveModelsDir(){return this.ctx.api.storage.resolve.query({location:"models",relativePath:""}).catch(()=>"camstack-data/models")}get capabilities(){return this.ctx.capabilities??null}async resolveConfig(){const i=await this.readAddonStoreWithRetry(),e={...this.defaults};for(const o of Object.keys(this.defaults)){const c=i[o];if(c!=null){const l=typeof this.defaults[o];typeof c===l&&(e[o]=c)}}this._config=e}async readAddonStoreWithRetry(){const i=this._ctx?.settings;if(!i)return{};const e=[150,350,600,900];let o;for(let c=0;c<=e.length;c++)try{return await i.readAddonStore()??{}}catch(l){o=l;const m=l instanceof Error?l.message:String(l);if(!(m.includes("SqliteSettingsBackend not initialized")||m.includes("provider not available")))throw l;if(c===e.length)break;await new Promise(u=>setTimeout(u,e[c]))}return this._ctx?.logger?.warn?.("readAddonStore: settings-store unavailable after retries — using defaults",{meta:{error:o instanceof Error?o.message:String(o)}}),{}}}function Pe(r){if(r!=null)return Array.isArray(r)?{providers:r}:r}class De extends Error{capName;scope;waitedMs;constructor(i,e,o){super(`Timed out waiting for ${i} (${E(e)}) to become ready after ${o}ms`),this.name="ReadinessTimeoutError",this.capName=i,this.scope=e,this.waitedMs=o}}function W(r,i){return`${r}|${E(i)}`}function E(r){switch(r.type){case"global":return"global";case"node":return`node:${r.nodeId}`;case"device":return`device:${r.deviceId}`}}function G(r,i){return r.type!==i.type?!1:r.type==="global"||i.type==="global"?!0:r.type==="node"&&i.type==="node"?r.nodeId===i.nodeId:r.type==="device"&&i.type==="device"?r.deviceId===i.deviceId:!1}class Xe{bus;sourceNodeId;logger;now;generation;snapshot=new Map;subscriptions=new Set;unsubscribeBus;unsubscribeAgentOffline;constructor(i){if(this.bus=i.eventBus,this.sourceNodeId=i.sourceNodeId,this.logger=i.logger,this.now=i.now??(()=>Date.now()),this.generation=i.generation??et(),this.unsubscribeBus=this.bus.subscribe({category:"system.ready-state"},e=>this.ingest(e.data)),this.unsubscribeAgentOffline=this.bus.subscribe({category:"agent.offline"},e=>this.synthesizeDownForNode(e.data.agentId)),typeof this.bus.getRecent=="function")try{const e=this.bus.getRecent({category:"system.ready-state"});for(const o of e)this.ingest(o.data)}catch{}}close(){this.unsubscribeBus(),this.unsubscribeAgentOffline(),this.subscriptions.clear()}get(i,e){return this.snapshot.get(W(i,e))??null}getSnapshotForTransport(){return Array.from(this.snapshot.values())}hydrate(i){const e=this.now();for(const o of i){const c=W(o.capName,o.scope);if(this.snapshot.has(c))continue;const l={capName:o.capName,scope:o.scope,state:o.state,generation:o.generation,epoch:1,lastChange:e,sourceNodeId:o.sourceNodeId};this.snapshot.set(c,l),this.logger&&this.logger.debug(`readiness: ${o.capName} (${E(o.scope)}) → ${o.state} (hydrated, gen=${o.generation.slice(0,6)})`);const m={capName:o.capName,scope:o.scope,state:o.state,epoch:1,generation:o.generation,sourceNodeId:"hydrated",ts:e,durationInPrevState:0};for(const d of this.subscriptions)if(d.capName===o.capName&&G(d.scope,o.scope))try{d.handler(m)}catch(u){this.logger?.warn(`readiness hydrate handler threw for ${o.capName}: ${u.message??String(u)}`)}}}getAll(){return new Map(this.snapshot)}emitReady(i,e){this.emitTransition(i,e,"ready")}emitStarting(i,e){this.emitTransition(i,e,"starting")}emitDown(i,e){this.emitTransition(i,e,"down")}awaitReady(i,e,o={}){const c=o.timeoutMs??Number.POSITIVE_INFINITY,l=this.now();return this.get(i,e)?.state==="ready"?Promise.resolve():o.signal?.aborted?Promise.reject(o.signal.reason??new Error("aborted")):new Promise((d,u)=>{let p=!1;const h=this.onReadyState(i,e,D=>{D.state==="ready"&&(p||(p=!0,C(),d()))}),S=!Number.isFinite(c)?null:setTimeout(()=>{p||(p=!0,C(),u(new De(i,e,this.now()-l)))},c),y=()=>{p||(p=!0,C(),u(o.signal?.reason??new Error("aborted")))};o.signal?.addEventListener("abort",y,{once:!0});function C(){h(),S!==null&&clearTimeout(S),o.signal?.removeEventListener("abort",y)}})}onReadyState(i,e,o){const c={capName:i,scope:e,handler:o};this.subscriptions.add(c);const l=this.get(i,e);return l!==null&&queueMicrotask(()=>{this.subscriptions.has(c)&&o({capName:i,scope:e,state:l.state,epoch:l.epoch,generation:l.generation,sourceNodeId:this.sourceNodeId,ts:l.lastChange,durationInPrevState:0})}),()=>{this.subscriptions.delete(c)}}emitTransition(i,e,o){const c=this.now();this.bus.emit(Y("system.ready-state",{type:"capability",id:i,nodeId:this.sourceNodeId},{capName:i,scope:e,state:o,generation:this.generation,sourceNodeId:this.sourceNodeId,ts:c}))}ingest(i){if(typeof i?.capName!="string"||i.state!=="ready"&&i.state!=="starting"&&i.state!=="down"||typeof i.generation!="string"||i.scope?.type!=="global"&&i.scope?.type!=="node"&&i.scope?.type!=="device")return;const e=W(i.capName,i.scope),o=this.snapshot.get(e)??null,c=this.now();let l;if(o===null?l=i.state==="ready"?1:0:o.generation!==i.generation&&i.state==="ready"?l=o.epoch+1:l=o.epoch,o!==null&&o.generation===i.generation&&o.state===i.state)return;const m=o===null?0:Math.max(0,c-o.lastChange),d={capName:i.capName,scope:i.scope,state:i.state,generation:i.generation,epoch:l,lastChange:c,sourceNodeId:i.sourceNodeId};this.snapshot.set(e,d);const u={capName:i.capName,scope:i.scope,state:i.state,epoch:l,generation:i.generation,sourceNodeId:i.sourceNodeId,ts:i.ts,durationInPrevState:m};this.logger&&this.logger.debug(`readiness: ${i.capName} (${E(i.scope)}) → ${i.state} epoch=${l} gen=${i.generation.slice(0,6)} (prev ${m}ms)`);for(const p of this.subscriptions)if(p.capName===i.capName&&G(p.scope,i.scope))try{p.handler(u)}catch(h){this.logger?.warn(`readiness handler threw for ${i.capName}: ${h.message??String(h)}`)}}synthesizeDownForNode(i){const e=this.now();for(const[o,c]of this.snapshot){if(c.state==="down"||!(c.scope.type==="node"&&c.scope.nodeId===i||c.scope.type==="device"&&c.sourceNodeId===i))continue;const m=Math.max(0,e-c.lastChange),d={...c,state:"down",lastChange:e};this.snapshot.set(o,d);const u={capName:c.capName,scope:c.scope,state:"down",epoch:c.epoch,generation:c.generation,sourceNodeId:this.sourceNodeId,ts:e,durationInPrevState:m};this.logger&&this.logger.debug(`readiness: ${c.capName} (${E(c.scope)}) → down (synthesized from agent.offline ${i})`);for(const p of this.subscriptions)if(p.capName===c.capName&&G(p.scope,c.scope))try{p.handler(u)}catch(h){this.logger?.warn(`readiness handler threw during agent.offline demux for ${c.capName}: ${h.message??String(h)}`)}}}}function et(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function tt(r,i){for(const{capName:e,scope:o}of i)r.emitDown(e,o)}const it=["data","media","recordings","recordings-high","recordings-low","recordings-clips","event-images","models","addons-data","cache","logs","backups"],at={data:"db",media:"media",recordings:"recordings","recordings-high":"recordings-high","recordings-low":"recordings-low","recordings-clips":"recordings-clips","event-images":"event-images",models:"models","addons-data":"addons-data",cache:"/tmp/camstack-cache",logs:"logs",backups:"backups"},we={high:"High",mid:"Mid",low:"Low"};function nt(r){return we[r]??r.charAt(0).toUpperCase()+r.slice(1)}function Ee(r){return(r.width??0)*(r.height??0)}function Re(r){if(r.length===0)return[];const i=r.map((o,c)=>({s:o,i:c,px:Ee(o.metadata??{})})).sort((o,c)=>c.px-o.px),e=Array.from({length:r.length});for(let o=0;o<i.length;o++){const{s:c,i:l}=i[o];let m;o===0?m="high":o===i.length-1?m="low":m="mid",e[l]={...c,quality:m}}return e}function rt(r){const i=r.height??0,e=r.width??0;return i>=1080||e>=1920?"high":i>=480||e>=640?"mid":"low"}function st(r){const i=r.protocols.find(c=>c.type==="rtsp"&&c.url)??r.protocols.find(c=>c.url),e=i?.type,o=e==="rtsp"?"rtsp":e==="http"||e==="flv"?"http-mjpeg":"custom";return{id:r.id,label:r.label??r.id,protocol:o,url:i?.url,profileHint:r.quality}}function b(r){return typeof r=="string"}function ot(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function ct(r){return b(r)&&r.trim()?{url:r}:ot(r)&&b(r.url)&&r.url.trim()?{url:r.url,label:b(r.label)?r.label:void 0}:null}function dt(r){const i=b(r.snapshot_url)?r.snapshot_url:void 0;if(Array.isArray(r.streams)){const m=[];for(const d of r.streams){const u=ct(d);u&&m.push(u)}return{streams:m,snapshot_url:i}}const e=[],o=b(r.main_stream_url)?r.main_stream_url:void 0;o&&e.push({url:o,label:b(r.main_stream_name)?r.main_stream_name:void 0});const c=b(r.sub_stream_url)?r.sub_stream_url:void 0;c&&e.push({url:c,label:b(r.sub_stream_name)?r.sub_stream_name:void 0});const l=b(r.third_stream_url)?r.third_stream_url:void 0;return l&&e.push({url:l,label:b(r.third_stream_name)?r.third_stream_name:void 0}),{streams:e,snapshot_url:i}}function lt(r){if(r.length===0)return{};const i=Re(r),e={},o=i.find(d=>d.quality==="high"),c=i.find(d=>d.quality==="mid"),l=i.find(d=>d.quality==="low");o&&(e.high=o.id),c&&(e.mid=c.id),l&&(e.low=l.id);const m=o??c??l??i[0];return m&&(e.high||(e.high=m.id),e.mid||(e.mid=m.id),e.low||(e.low=m.id)),e}const ut={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},mt=["face","plate"],pt=["face","plate","clip","custom"],ht={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14};var Me=(r=>(r.Addon="addon",r.Core="core",r.Device="device",r.Provider="provider",r.System="system",r))(Me||{});const Te="camstack/camstack-models",gt=`https://huggingface.co/${Te}/resolve/main`,St={"features.streaming":!0,"features.notifications":!0,"features.objectDetection":!1,"features.remoteAccess":!0,"features.agentCluster":!1,"features.smartHome":!0,"features.recordings":!0,"features.backup":!0,"features.repl":!0,"retention.detectionEventsDays":30,"retention.audioLevelsDays":7,"logging.level":"info","logging.retentionDays":30,"eventBus.ringBufferSize":1e4,"storage.provider":"sqlite-storage","storage.locations":{data:"camstack-data/data",media:"camstack-data/media",recordings:"camstack-data/recordings",cache:"/tmp/camstack-cache",logs:"camstack-data/logs",models:"camstack-data/models"},providers:[],"recording.segmentDurationSeconds":4,"recording.defaultRetentionDays":30,"ffmpeg.binaryPath":"ffmpeg","ffmpeg.hwAccel":"auto","ffmpeg.threadCount":0,"auth.tokenExpiry":"24h"};function V(r){return JSON.parse(r)}function Oe(r){return r===null||typeof r!="object"||Array.isArray(r)?null:{...r}}function yt(r){return Array.isArray(r)?r:[]}function ft(r,i=""){return typeof r=="string"?r:i}function bt(r,i=0){return typeof r=="number"?r:i}function vt(r,i=!1){return typeof r=="boolean"?r:i}function Ct(r){try{return Oe(V(r))}catch{return null}}function At(r){try{const i=V(r);return Array.isArray(i)?i:null}catch{return null}}function kt(r,i){return`https://huggingface.co/${r}/resolve/main/${i}`}function It(r,i){if(r.length!==i.length)return 0;let e=0,o=0,c=0;for(let m=0;m<r.length;m++)e+=r[m]*i[m],o+=r[m]*r[m],c+=i[m]*i[m];const l=Math.sqrt(o)*Math.sqrt(c);return l===0?0:e/l}class Pt{constructor(i,e){this.elementId=i,this.getBackend=typeof e=="function"?e:()=>e}cache={};listeners=new Set;loaded=!1;getBackend;async ensureLoaded(){if(this.loaded)return;const i=this.getBackend();if(!i)throw new Error(`ElementConfigStore(${this.elementId}): settings backend not available`);const e=await i.query({collection:"config",filter:{where:{id:this.elementId},limit:1}});e.length>0&&(this.cache=e[0].data??{}),this.loaded=!0}getAll(){return{...this.cache}}get(i){const e=i.split(".");let o=this.cache;for(const c of e){if(o===null||typeof o!="object"||Array.isArray(o))return;o=Reflect.get(o,c)}return o}async set(i,e){await this.ensureLoaded(),Dt(this.cache,i,e),await this.persist(),this.notifyListeners()}async setAll(i){await this.ensureLoaded(),this.cache={...i},await this.persist(),this.notifyListeners()}onChange(i){return this.listeners.add(i),()=>{this.listeners.delete(i)}}async load(){await this.ensureLoaded()}async loadDefaults(i){await this.ensureLoaded(),Object.keys(this.cache).length===0&&(this.cache={...i},await this.persist())}async persist(){const i=this.getBackend();if(!i)throw new Error(`ElementConfigStore(${this.elementId}): settings backend not available — cannot persist config`);await i.set({collection:"config",key:this.elementId,value:this.cache})}notifyListeners(){const i=this.getAll();for(const e of this.listeners)try{e(i)}catch{}}}function Dt(r,i,e){const o=i.split(".");let c=r;for(let l=0;l<o.length-1;l++){const m=o[l],d=c[m];if(d===null||typeof d!="object"||Array.isArray(d)){const u={};c[m]=u,c=u}else c=d}c[o[o.length-1]]=e}const Q={cpu:"onnx",coreml:"onnx",cuda:"onnx",tensorrt:"onnx","onnx-py":"onnx",pytorch:"pt",openvino:"openvino"},qe={onnx:"onnx",coreml:"coreml",openvino:"openvino",tflite:"tflite",pytorch:"pt"},Le={coreml:"coreml_inference.py",pytorch:"pytorch_inference.py",openvino:"openvino_inference.py"};function _e(r,i){return r==="node"?"onnx":{coreml:"coreml",openvino:"openvino",pytorch:"pytorch","onnx-py":"onnx",cpu:"onnx"}[i]??i}function wt(r,i){return r==="node"?Q[i]??"onnx":{coreml:"coreml",openvino:"openvino",pytorch:"pt","onnx-py":"onnx",cpu:"onnx"}[i]??"onnx"}function Et(r,i){return!r||r==="auto"?"auto":_e(r,i??"cpu")}function Rt(r){return Q[r]??"onnx"}function Mt(r){return qe[r]}function Tt(r){return Le[r]}function Ot(r){return r==="coreml"||r==="pytorch"||r==="openvino"}async function qt(r,i){const e=performance.now();try{return{output:i!==void 0?await Lt(r(),i):await r(),durationMs:be(performance.now()-e),ok:!0}}catch(o){return{output:void 0,durationMs:be(performance.now()-e),ok:!1,error:a.errMsg(o)}}}function be(r){return Math.round(r*100)/100}function Lt(r,i){return new Promise((e,o)=>{const c=setTimeout(()=>o(new Error(`Inference timeout after ${i}ms`)),i);r.then(l=>{clearTimeout(c),e(l)}).catch(l=>{clearTimeout(c),o(l)})})}const _t=[{id:"person",name:"Person"},{id:"bicycle",name:"Bicycle"},{id:"car",name:"Car"},{id:"motorcycle",name:"Motorcycle"},{id:"airplane",name:"Airplane"},{id:"bus",name:"Bus"},{id:"train",name:"Train"},{id:"truck",name:"Truck"},{id:"boat",name:"Boat"},{id:"traffic light",name:"Traffic Light"},{id:"fire hydrant",name:"Fire Hydrant"},{id:"stop sign",name:"Stop Sign"},{id:"parking meter",name:"Parking Meter"},{id:"bench",name:"Bench"},{id:"bird",name:"Bird"},{id:"cat",name:"Cat"},{id:"dog",name:"Dog"},{id:"horse",name:"Horse"},{id:"sheep",name:"Sheep"},{id:"cow",name:"Cow"},{id:"elephant",name:"Elephant"},{id:"bear",name:"Bear"},{id:"zebra",name:"Zebra"},{id:"giraffe",name:"Giraffe"},{id:"backpack",name:"Backpack"},{id:"umbrella",name:"Umbrella"},{id:"handbag",name:"Handbag"},{id:"tie",name:"Tie"},{id:"suitcase",name:"Suitcase"},{id:"frisbee",name:"Frisbee"},{id:"skis",name:"Skis"},{id:"snowboard",name:"Snowboard"},{id:"sports ball",name:"Sports Ball"},{id:"kite",name:"Kite"},{id:"baseball bat",name:"Baseball Bat"},{id:"baseball glove",name:"Baseball Glove"},{id:"skateboard",name:"Skateboard"},{id:"surfboard",name:"Surfboard"},{id:"tennis racket",name:"Tennis Racket"},{id:"bottle",name:"Bottle"},{id:"wine glass",name:"Wine Glass"},{id:"cup",name:"Cup"},{id:"fork",name:"Fork"},{id:"knife",name:"Knife"},{id:"spoon",name:"Spoon"},{id:"bowl",name:"Bowl"},{id:"banana",name:"Banana"},{id:"apple",name:"Apple"},{id:"sandwich",name:"Sandwich"},{id:"orange",name:"Orange"},{id:"broccoli",name:"Broccoli"},{id:"carrot",name:"Carrot"},{id:"hot dog",name:"Hot Dog"},{id:"pizza",name:"Pizza"},{id:"donut",name:"Donut"},{id:"cake",name:"Cake"},{id:"chair",name:"Chair"},{id:"couch",name:"Couch"},{id:"potted plant",name:"Potted Plant"},{id:"bed",name:"Bed"},{id:"dining table",name:"Dining Table"},{id:"toilet",name:"Toilet"},{id:"tv",name:"TV"},{id:"laptop",name:"Laptop"},{id:"mouse",name:"Mouse"},{id:"remote",name:"Remote"},{id:"keyboard",name:"Keyboard"},{id:"cell phone",name:"Cell Phone"},{id:"microwave",name:"Microwave"},{id:"oven",name:"Oven"},{id:"toaster",name:"Toaster"},{id:"sink",name:"Sink"},{id:"refrigerator",name:"Refrigerator"},{id:"book",name:"Book"},{id:"clock",name:"Clock"},{id:"vase",name:"Vase"},{id:"scissors",name:"Scissors"},{id:"teddy bear",name:"Teddy Bear"},{id:"hair drier",name:"Hair Drier"},{id:"toothbrush",name:"Toothbrush"}],Bt=[{id:"person",name:"Person"},{id:"vehicle",name:"Vehicle"},{id:"animal",name:"Animal"}],Nt={mapping:{person:"person",bicycle:"vehicle",car:"vehicle",motorcycle:"vehicle",airplane:"vehicle",bus:"vehicle",train:"vehicle",truck:"vehicle",boat:"vehicle",bird:"animal",cat:"animal",dog:"animal",horse:"animal",sheep:"animal",cow:"animal",elephant:"animal",bear:"animal",zebra:"animal",giraffe:"animal"},preserveOriginal:!1},zt={camera:{type:"camera",label:"Camera",icon:"camera"}};class R{schema;data;persistFn;constructor(i,e,o){this.schema=i,this.data=e,this.persistFn=o}static fromSchema(i,e,o={},c){const l=i.safeParse(o);if(l.success)return new R(i,l.data,e);const m=new Set;for(const h of l.error.issues){const g=h.path[0];typeof g=="string"&&m.add(g)}const d={...o};for(const h of m)delete d[h];const u=i.safeParse(d);if(c?.({droppedKeys:[...m],issues:l.error.issues}),u.success)return e(u.data).catch(()=>{}),new R(i,u.data,e);const p=i.parse({});return new R(i,p,e)}get values(){return this.data}get(i){return this.data[i]}async set(i,e){const o=this.schema.parse({...this.data,[i]:e});this.data=o,await this.persistFn(this.data)}async setAll(i){const e=this.schema.parse({...this.data,...i});this.data=e,await this.persistFn(this.data)}async deleteKey(i){const{[i]:e,...o}=this.data,c=this.schema.parse(o);this.data=c,await this.persistFn(this.data)}entries(){const i=this.schema.shape;return Object.entries(i).map(([e,o])=>({key:e,schema:o,value:this.data[e],description:o.description}))}}class H{writer;pendingWrites=new Set;slices;schemas=new Map;listeners=new Set;capListeners=new Map;constructor(i,e){this.writer=e,this.slices=new Map;for(const[o,c]of Object.entries(i))c&&typeof c=="object"&&!Array.isArray(c)&&this.slices.set(o,{...c})}static fromInitial(i,e){return new H(i,e)}installCapSchema(i,e){const o=this.schemas.get(i);if(o){if(o!==e)throw new Error(`[DeviceRuntimeState] capability "${i}" registered a different runtime-state schema; each cap must declare ONE shape across every provider`);return}this.schemas.set(i,e);const c=this.slices.get(i);if(c){const l=e.safeParse(c);l.success?this.slices.set(i,l.data):this.slices.delete(i)}}getCapState(i){const e=this.slices.get(i);if(e)return Object.freeze({...e})}getCapField(i,e){return this.slices.get(i)?.[e]}setCapState(i,e){this.applyCapWrite(i,e,!1)}patchCapState(i,e){this.applyCapWrite(i,e,!0)}applyCapWrite(i,e,o){const c=this.schemas.get(i);if(!c)throw new Error(`[DeviceRuntimeState] no schema registered for cap "${i}" — did the device register it via ctx.registerNativeCap before writing?`);const l=this.slices.get(i)??{},m=o?{...l,...e}:{...e},d=c.parse(m);if(xt(l,d))return;this.slices.set(i,d),this.fireListeners([i]);const u=this.writer(i,{...d}).catch(()=>{});this.pendingWrites.add(u),u.finally(()=>{this.pendingWrites.delete(u)})}fireListeners(i){const e=this.snapshot();for(const o of this.listeners)try{o(i,e)}catch{}for(const o of i){const c=this.capListeners.get(o);if(!c)continue;const l=this.getCapState(o);for(const m of c)try{m(l)}catch{}}}subscribe(i){return this.listeners.add(i),()=>{this.listeners.delete(i)}}subscribeCap(i,e){let o=this.capListeners.get(i);o||(o=new Set,this.capListeners.set(i,o));const c=l=>{e(l)};return o.add(c),()=>{const l=this.capListeners.get(i);l&&(l.delete(c),l.size===0&&this.capListeners.delete(i))}}snapshot(){const i={};for(const[e,o]of this.slices)i[e]=Object.freeze({...o});return Object.freeze(i)}async flush(){if(this.pendingWrites.size===0)return;const i=[...this.pendingWrites];await Promise.allSettled(i)}}function xt(r,i){const e=Object.keys(r),o=Object.keys(i);if(e.length!==o.length)return!1;for(const c of e)if(r[c]!==i[c])return!1;return!0}const K="lastFetchedAt";function Ut(r){const{runtimeState:i,cap:e,ownDeviceId:o,refresh:c,staleMs:l,empty:m}=r,d=async()=>{const h=i.getCapState(e.name),g=typeof h?.[K]=="number"?h[K]:0;(!h||Date.now()-g>l)&&await c()},u=()=>{const h=i.getCapState(e.name);if(!h)return m();const{[K]:g,...S}=h;return S};return{ensureFresh:d,getStatus:async({deviceId:h})=>{if(h!==o)throw new Error(`${e.name}: deviceId mismatch, expected ${o}, got ${h}`);return await d(),u()}}}const Ft={audioMetrics:a.audioMetricsCapability,battery:a.batteryCapability,brightness:a.brightnessCapability,cameraStreams:a.cameraStreamsCapability,deviceDiscovery:a.deviceDiscoveryCapability,deviceStatus:a.deviceStatusCapability,doorbell:a.doorbellCapability,featureProbe:a.featureProbeCapability,motion:a.motionCapability,motionTrigger:a.motionTriggerCapability,ptzAutotrack:a.ptzAutotrackCapability,switch:a.switchCapability,zoneAnalytics:a.zoneAnalyticsCapability,zoneRules:a.zoneRulesCapability,zones:a.zonesCapability};class Wt{id;stableId;type;name;parentDeviceId;role;get online(){return this.runtimeState.getCapState("device-status")?.online??!1}set online(i){this.markOnline(i)}get state(){if(!this._stateProxyCache){const i={},e={get:(o,c)=>{const l=c;if(l in i)return i[l];const m=Ft[l];if(!m)return;const d=this.sliceProxy(m);return i[l]=d,d}};this._stateProxyCache=new Proxy(i,e)}return this._stateProxyCache}_stateProxyCache;config;runtimeState;ctx;location;disabled;constructor(i,e,o){if(this.ctx=i,this.id=i.id,this.stableId=i.stableId,this.type=o.type,!i.deviceMeta)throw new Error(`BaseDevice constructor: ctx.deviceMeta is required (id=${i.id} stableId=${i.stableId})`);this.name=i.deviceMeta.name,this.location=i.deviceMeta.location,this.disabled=i.deviceMeta.disabled,this.role=o.role,this.parentDeviceId=i.parentDeviceId;const c=i.persistedConfig??{};this.config=R.fromSchema(e,h=>i.persistConfig(h),c,({droppedKeys:h,issues:g})=>{i.logger.warn("Device config recovery: dropping invalid persisted fields",{tags:{deviceId:i.id,stableId:i.stableId},meta:{droppedKeys:[...h],firstIssue:g[0]?.message??null}})});let l=null;const m=async(h,g)=>{l||(l=i.fetchDevice(i.id)),await(await l).deviceState.setCapSlice({capName:h,slice:g})},d=i.initialRuntimeState??{};this.runtimeState=H.fromInitial(d,m),i.bindRuntimeState?.(this.runtimeState),i.registerNativeCap?.(a.deviceStatusCapability,{});const u={online:!1,lastChangedAt:Date.now()};this.runtimeState.setCapState("device-status",u),i.registerNativeCap?.(a.featureProbeCapability,{});const p={flags:{},deviceType:null,model:null,channelCount:null,lastProbedAt:0,lastFetchedAt:0};this.runtimeState.setCapState("feature-probe",p)}async removeDevice(){}markOnline(i){if(this.online===i)return;const e={online:i,lastChangedAt:Date.now()};this.runtimeState.setCapState("device-status",e)}async refreshFeatures(){const e=this.ctx.api?.deviceManager?.registerDevice;if(e)try{await e.mutate({addonId:this.ctx.deviceMeta.addonId,stableId:this.stableId,id:this.id,type:this.type,name:this.name,parentDeviceId:this.parentDeviceId,features:[...this.features],config:{}})}catch{}}getCapSlice(i){return this.runtimeState.getCapState(i.name)??null}setCapSlice(i,e){this.runtimeState.setCapState(i.name,e)}sliceProxy(i){const e={},o={get:(c,l)=>this.runtimeState.getCapState(i.name)?.[l],set:(c,l,m)=>(this.runtimeState.patchCapState(i.name,{[l]:m}),!0),has:(c,l)=>{const m=this.runtimeState.getCapState(i.name);return m?l in m:!1},ownKeys:()=>{const c=this.runtimeState.getCapState(i.name);return c?Object.keys(c):[]},getOwnPropertyDescriptor:(c,l)=>{const m=this.runtimeState.getCapState(i.name);if(!(!m||!(l in m)))return{configurable:!0,enumerable:!0,value:m[l]}}};return new Proxy(e,o)}getSettingsUISchema(){return{sections:[]}}async applySettingsPatch(i){await this.config.setAll(i)}async onProbe(){}async onActivate(){}async reprobe(){this._kernelReprobe?await this._kernelReprobe():await this.onProbe()}_kernelReprobe;getAccessoryChildren(){return[]}getProbeFlags(){return this.runtimeState.getCapState("feature-probe")?.flags??{}}hasProbed(){return(this.runtimeState.getCapState("feature-probe")?.lastProbedAt??0)>0}}function Be(r,i){const e={};for(const o of r.config.entries())e[o.key]=o.value;return{id:r.id,stableId:r.stableId,addonId:i,type:String(r.type),name:r.name,parentDeviceId:r.parentDeviceId,online:r.online,features:[...r.features],config:e}}class $t extends Ie{async onInitialize(){return this.ctx.logger.info(`${this.providerName} Provider initialized`),[{capability:a.deviceProviderCapability,provider:this}]}async onShutdown(){const i=await this.ctx.kernel.devices?.getAll()??[];for(const e of i)try{await this.ctx.kernel.devices?.decommission(e.id)}catch(o){this.ctx.logger.warn(`${this.providerName}: decommission failed`,{tags:{deviceId:e.id,stableId:e.stableId},meta:{error:o instanceof Error?o.message:String(o)}})}this.ctx.logger.info(`${this.providerName} Provider shut down`,{meta:{decommissionedCount:i.length}})}async start(){}async stop(){}async getStatus(){return{connected:!0,deviceCount:(await this.ctx.kernel.devices?.getAll()??[]).length}}async getDevices(){return(await this.ctx.kernel.devices?.getAll()??[]).map(e=>({id:e.stableId,name:e.name,type:String(e.type)}))}async supportsDiscovery(){return!1}async discoverDevices(){return[]}async adoptDiscoveredDevice(i){throw new Error(`${this.providerName} provider does not support discovery-based adoption`)}async supportsManualCreation(){return!0}async getChildCreationSchema(i){return this.onGetCreationSchema(i.type)}async createDevice(i){const e=await this.onCreateDevice(i.type,i.config),o=this.deviceClasses[e.meta.type];if(!o)throw new Error(`${this.providerName} provider: no device class registered for type "${e.meta.type}" — add it to the deviceClasses map`);const c=this.generateStableId(e.meta.type,e.config),l=await this.ctx.kernel.devices.create(c,o,e.config,null,e.meta);if(e.onAfterCreate)try{await e.onAfterCreate(l)}catch(m){this.ctx.logger.warn("createDevice: onAfterCreate hook threw — device is already registered",{tags:{deviceId:l.id,stableId:c},meta:{error:m instanceof Error?m.message:String(m)}})}return this.toSummary(l)}generateStableId(i,e){return`${this.addonId}-${Date.now()}`}async testCreationField(i){return{status:"ok",labels:["probe not implemented"]}}async restoreDevices(i){await this.onRestoreDevices(i),i.length>0&&this.ctx.logger.info(`Restored ${i.length} ${this.providerName} device(s)`)}async onRestoreDevices(i){const e=new Set;for(const c of i){if(c.parentDeviceId!==null)continue;const l=this.deviceClasses[c.type];if(!l){this.ctx.logger.warn("No device class registered for restored type — skipping",{tags:{stableId:c.stableId},meta:{type:c.type}});continue}try{await this.ctx.kernel.devices.create(c.stableId,l,{}),e.add(c.id)}catch(m){this.ctx.logger.warn("Failed to restore device",{tags:{stableId:c.stableId},meta:{type:c.type,error:m instanceof Error?m.message:String(m)}})}}const o=i.filter(c=>c.parentDeviceId!==null);for(const c of o){const l=this.deviceClasses[c.type];if(l&&c.parentDeviceId!==null&&e.has(c.parentDeviceId))try{await this.ctx.kernel.devices.create(c.stableId,l,{},c.parentDeviceId),e.add(c.id)}catch(m){this.ctx.logger.warn("Failed to restore hub-adopted child",{tags:{stableId:c.stableId,parentDeviceId:c.parentDeviceId},meta:{type:c.type,error:m instanceof Error?m.message:String(m)}})}}}toSummary(i){return Be(i,this.addonId)}}function B(r){return r.def}function Ht(r,i="Configuration",e="main"){const o=r.map(c=>jt(c.key,c.schema,c.description));return{sections:[{id:e,title:i,fields:o}]}}function jt(r,i,e){const o=$(i),c=Vt(i),l=e??Ne(r),m={key:r,label:l,description:e,default:c};return o instanceof v.z.ZodString?Gt(r,m):o instanceof v.z.ZodNumber?Kt(o,m):o instanceof v.z.ZodBoolean?{...m,type:"boolean"}:o instanceof v.z.ZodEnum?Yt(o,m):o instanceof v.z.ZodArray||o instanceof v.z.ZodObject?{...m,type:"textarea",rows:6,isJson:!0}:{...m,type:"text"}}function Gt(r,i){const e=r.toLowerCase();return e.includes("password")||e.includes("secret")||e.includes("token")||e.includes("apikey")||e.includes("api_key")?{...i,type:"password",showToggle:!0}:{...i,type:"text"}}function Kt(r,i){const e=r,o=e.minValue,c=e.maxValue,l=o!=null&&isFinite(o)?o:void 0,m=c!=null&&isFinite(c)?c:void 0,d=Zt(r);return{...i,type:"number",...l!==void 0?{min:l}:{},...m!==void 0?{max:m}:{},...d!==void 0?{step:d}:{}}}function Zt(r){const e=B(r).checks??[];for(const o of e)if(o._zod?.def?.check==="multiple_of"&&o._zod.def.value!==void 0)return o._zod.def.value}function Yt(r,i){const e=r.options.map(c=>String(c));return{...i,type:"select",options:e.map(c=>({label:Ne(c),value:c}))}}function $(r){return r instanceof v.z.ZodDefault||r instanceof v.z.ZodOptional||r instanceof v.z.ZodNullable?$(B(r).innerType):r}function Vt(r){if(r instanceof v.z.ZodDefault)return B(r).defaultValue}function Ne(r){return r.replace(/([A-Z])/g," $1").replace(/[_-]/g," ").replace(/^\w/,i=>i.toUpperCase()).trim()}const Qt="device.state-changed";function J(r){const i=new Map,e=new Map;let o=null;const c=(d,u)=>`${d}:${u}`,l=()=>{o||r.live?.onEvent&&(o=r.live.onEvent.subscribe({category:Qt},{onData:d=>{const u=d.data;if(!u||typeof u.deviceId!="number"||typeof u.capName!="string")return;const p=c(u.deviceId,u.capName);i.set(p,u.slice);const h=e.get(p);if(h)for(const g of h)try{g(u.slice)}catch{}}}))},m=()=>{o&&(e.size>0||(o.unsubscribe(),o=null))};return{read(d,u){return i.get(c(d,u))},async refresh(d,u){const p=await r.deviceState.getCapSlice.query({deviceId:d,capName:u}),h=c(d,u);i.set(h,p??void 0);const g=e.get(h);if(g)for(const S of g)try{S(p??void 0)}catch{}},watch(d,u,p){const h=c(d,u);let g=e.get(h);return g||(g=new Set,e.set(h,g)),g.add(p),l(),()=>{g.delete(p),g.size===0&&e.delete(h),m()}},async write(d,u,p){await r.deviceState.setCapSlice.mutate({deviceId:d,capName:u,slice:p})}}}function ze(r,i,e){const o=(c,l)=>`${c}:${l}`;return{read(c,l){return r.get(c)?.get(l)},async refresh(){},watch(c,l,m){const d=o(c,l);let u=i.get(d);return u||(u=new Set,i.set(d,u)),u.add(m),()=>{u.delete(m),u.size===0&&i.delete(d)}},async write(c,l,m){if(!e)throw new Error("createMirrorSource: write requires an api reference — pass it as the third argument when constructing the source");await e.deviceState.setCapSlice.mutate({deviceId:c,capName:l,slice:m})}}}function f(r,i,e){const o=Jt(r)?r:J(r);return{get value(){return o.read(i,e)},refresh(){return o.refresh(i,e)},subscribe(c){const l=o.watch(i,e,m=>{try{c(m)}catch{}});try{c(o.read(i,e))}catch{}return o.read(i,e)===void 0&&o.refresh(i,e).catch(()=>{}),l},async set(c){await o.write(i,e,c)},async patch(c){const m={...o.read(i,e)??{},...c};await o.write(i,e,m)}}}function Jt(r){return typeof r.read=="function"&&typeof r.watch=="function"}function xe(r,i,e){const o=r,c=e?.stateSource??J(r);function l(s,A){const k=typeof s=="object"&&s!==null?s:{};return A!==void 0?{...k,deviceId:i.deviceId,nodeId:A}:{...k,deviceId:i.deviceId}}function m(s,A,k,P,q){const U=o[s]?.[A];if(!U)throw new Error(`DeviceProxy: api has no '${s}.${A}'`);const L=U;return k==="mutation"?L.mutate(P):k==="subscription"?L.subscribe(P,q):L.query(P)}function d(s,A,k,P,q,U){const L=i.entries.find(je=>je.capName===s);return m(A,k,P,l(q,L?.providerNodeId),U)}function u(s,A,k,P,q){return m(s,A,k,l(P,void 0),q)}const p={getStatus:s=>d("accessories","accessories","getStatus","query",s)},h={resolveDeviceSettings:s=>d("audio-analysis","audioAnalysis","resolveDeviceSettings","query",s),getDeviceSettingsContribution:s=>d("audio-analysis","audioAnalysis","getDeviceSettingsContribution","query",s),getDeviceLiveContribution:s=>d("audio-analysis","audioAnalysis","getDeviceLiveContribution","query",s),applyDeviceSettingsPatch:s=>d("audio-analysis","audioAnalysis","applyDeviceSettingsPatch","mutation",s)},g={getCurrentSnapshot:s=>d("audio-metrics","audioMetrics","getCurrentSnapshot","query",s),getHistory:s=>d("audio-metrics","audioMetrics","getHistory","query",s)},S={getStatus:s=>d("battery","battery","getStatus","query",s)},y={setBrightness:s=>d("brightness","brightness","setBrightness","mutation",s),getStatus:s=>d("brightness","brightness","getStatus","query",s)},C={getCredentials:s=>d("camera-credentials","cameraCredentials","getCredentials","query",s),getStatus:s=>d("camera-credentials","cameraCredentials","getStatus","query",s)},D={getCameraStreams:s=>d("camera-streams","cameraStreams","getCameraStreams","query",s),getBrokerStreams:s=>d("camera-streams","cameraStreams","getBrokerStreams","query",s),getRtspEntries:s=>d("camera-streams","cameraStreams","getRtspEntries","query",s)},M={getDeviceSettingsContribution:s=>d("detection-pipeline","detectionPipeline","getDeviceSettingsContribution","query",s),getDeviceLiveContribution:s=>d("detection-pipeline","detectionPipeline","getDeviceLiveContribution","query",s),applyDeviceSettingsPatch:s=>d("detection-pipeline","detectionPipeline","applyDeviceSettingsPatch","mutation",s)},w={listDiscovered:s=>d("device-discovery","deviceDiscovery","listDiscovered","query",s),refreshDiscovery:s=>d("device-discovery","deviceDiscovery","refreshDiscovery","mutation",s),adoptDevice:s=>d("device-discovery","deviceDiscovery","adoptDevice","mutation",s),releaseDevice:s=>d("device-discovery","deviceDiscovery","releaseDevice","mutation",s),getStatus:s=>d("device-discovery","deviceDiscovery","getStatus","query",s)},X={getStreamSources:s=>d("device-ops","deviceOps","getStreamSources","query",s),getConfigEntries:s=>d("device-ops","deviceOps","getConfigEntries","query",s),setConfig:s=>d("device-ops","deviceOps","setConfig","mutation",s),removeDevice:s=>d("device-ops","deviceOps","removeDevice","mutation",s),getSettingsSchema:s=>d("device-ops","deviceOps","getSettingsSchema","query",s)},ee={getStatus:s=>d("device-status","deviceStatus","getStatus","query",s)},te={getStatus:s=>d("doorbell","doorbell","getStatus","query",s)},ie={getEvents:s=>d("events","events","getEvents","query",s),getEventThumbnail:s=>d("events","events","getEventThumbnail","query",s),getEventClipUrl:s=>d("events","events","getEventClipUrl","query",s)},ae={getStatus:s=>d("feature-probe","featureProbe","getStatus","query",s)},ne={startSession:s=>d("intercom","intercom","startSession","mutation",s),handleAnswer:s=>d("intercom","intercom","handleAnswer","mutation",s),stopSession:s=>d("intercom","intercom","stopSession","mutation",s),getStatus:s=>d("intercom","intercom","getStatus","query",s)},re={isDetected:s=>d("motion","motion","isDetected","query",s),getStatus:s=>d("motion","motion","getStatus","query",s)},se={analyze:s=>d("motion-detection","motionDetection","analyze","mutation",s),removeCamera:s=>d("motion-detection","motionDetection","removeCamera","mutation",s),reset:s=>d("motion-detection","motionDetection","reset","mutation",s),getDeviceSettingsContribution:s=>d("motion-detection","motionDetection","getDeviceSettingsContribution","query",s),getDeviceLiveContribution:s=>d("motion-detection","motionDetection","getDeviceLiveContribution","query",s),applyDeviceSettingsPatch:s=>d("motion-detection","motionDetection","applyDeviceSettingsPatch","mutation",s)},oe={setMotionTrigger:s=>d("motion-trigger","motionTrigger","setMotionTrigger","mutation",s),getStatus:s=>d("motion-trigger","motionTrigger","getStatus","query",s)},ce={getStatus:s=>d("native-object-detection","nativeObjectDetection","getStatus","query",s)},de={setOverlay:s=>d("osd","osd","setOverlay","mutation",s),getStatus:s=>d("osd","osd","getStatus","query",s)},le={getActiveTracks:s=>d("pipeline-analytics","pipelineAnalytics","getActiveTracks","query",s),getTrack:s=>d("pipeline-analytics","pipelineAnalytics","getTrack","query",s),listTracks:s=>d("pipeline-analytics","pipelineAnalytics","listTracks","query",s),clearTracks:s=>d("pipeline-analytics","pipelineAnalytics","clearTracks","mutation",s),getMotionEvents:s=>d("pipeline-analytics","pipelineAnalytics","getMotionEvents","query",s),getObjectEvents:s=>d("pipeline-analytics","pipelineAnalytics","getObjectEvents","query",s),getAudioEvents:s=>d("pipeline-analytics","pipelineAnalytics","getAudioEvents","query",s),getEventMedia:s=>d("pipeline-analytics","pipelineAnalytics","getEventMedia","query",s),getTrackMedia:s=>d("pipeline-analytics","pipelineAnalytics","getTrackMedia","query",s),getDeviceSettingsContribution:s=>d("pipeline-analytics","pipelineAnalytics","getDeviceSettingsContribution","query",s),getDeviceLiveContribution:s=>d("pipeline-analytics","pipelineAnalytics","getDeviceLiveContribution","query",s),applyDeviceSettingsPatch:s=>d("pipeline-analytics","pipelineAnalytics","applyDeviceSettingsPatch","mutation",s)},ue={move:s=>d("ptz","ptz","move","mutation",s),continuousMove:s=>d("ptz","ptz","continuousMove","mutation",s),stop:s=>d("ptz","ptz","stop","mutation",s),getPresets:s=>d("ptz","ptz","getPresets","query",s),goToPreset:s=>d("ptz","ptz","goToPreset","mutation",s),goHome:s=>d("ptz","ptz","goHome","mutation",s),getPosition:s=>d("ptz","ptz","getPosition","query",s),getStatus:s=>d("ptz","ptz","getStatus","query",s)},me={getStatus:s=>d("ptz-autotrack","ptzAutotrack","getStatus","query",s),setEnabled:s=>d("ptz-autotrack","ptzAutotrack","setEnabled","mutation",s),getSettings:s=>d("ptz-autotrack","ptzAutotrack","getSettings","query",s),setSettings:s=>d("ptz-autotrack","ptzAutotrack","setSettings","mutation",s)},pe={reboot:s=>d("reboot","reboot","reboot","mutation",s)},he={getSegments:s=>d("recording","recording","getSegments","query",s),getPlaybackUrl:s=>d("recording","recording","getPlaybackUrl","query",s),getThumbnailAt:s=>d("recording","recording","getThumbnailAt","query",s)},ge={getSnapshot:s=>d("snapshot","snapshot","getSnapshot","query",s),invalidateCache:s=>d("snapshot","snapshot","invalidateCache","mutation",s),getStatus:s=>d("snapshot","snapshot","getStatus","query",s),getDeviceSettingsContribution:s=>d("snapshot","snapshot","getDeviceSettingsContribution","query",s),getDeviceLiveContribution:s=>d("snapshot","snapshot","getDeviceLiveContribution","query",s),applyDeviceSettingsPatch:s=>d("snapshot","snapshot","applyDeviceSettingsPatch","mutation",s)},Se={setState:s=>d("switch","switch","setState","mutation",s),getStatus:s=>d("switch","switch","getStatus","query",s)},ye={listStreams:s=>d("webrtc-session","webrtcSession","listStreams","query",s),createSession:s=>d("webrtc-session","webrtcSession","createSession","mutation",s),handleAnswer:s=>d("webrtc-session","webrtcSession","handleAnswer","mutation",s),closeSession:s=>d("webrtc-session","webrtcSession","closeSession","mutation",s),hasAdaptiveBitrate:s=>d("webrtc-session","webrtcSession","hasAdaptiveBitrate","query",s)},fe={getCurrentSnapshot:s=>d("zone-analytics","zoneAnalytics","getCurrentSnapshot","query",s),getZoneHistory:s=>d("zone-analytics","zoneAnalytics","getZoneHistory","query",s),getCameraHistory:s=>d("zone-analytics","zoneAnalytics","getCameraHistory","query",s),getUnzonedHistory:s=>d("zone-analytics","zoneAnalytics","getUnzonedHistory","query",s)},t={listRules:s=>d("zone-rules","zoneRules","listRules","query",s),setRules:s=>d("zone-rules","zoneRules","setRules","mutation",s)},I={listZones:s=>d("zones","zones","listZones","query",s),addZone:s=>d("zones","zones","addZone","mutation",s),removeZone:s=>d("zones","zones","removeZone","mutation",s),updateZone:s=>d("zones","zones","updateZone","mutation",s)},z={getDeviceSettings:s=>u("addonSettings","getDeviceSettings","query",s),updateDeviceSettings:s=>u("addonSettings","updateDeviceSettings","mutation",s)},T={loadConfig:s=>u("deviceManager","loadConfig","query",s),loadRuntimeState:s=>u("deviceManager","loadRuntimeState","query",s),loadMeta:s=>u("deviceManager","loadMeta","query",s),setName:s=>u("deviceManager","setName","mutation",s),setLocation:s=>u("deviceManager","setLocation","mutation",s),setMetadata:s=>u("deviceManager","setMetadata","mutation",s),setDisabled:s=>u("deviceManager","setDisabled","mutation",s),getDevice:s=>u("deviceManager","getDevice","query",s),getStreamSources:s=>u("deviceManager","getStreamSources","query",s),getConfigSchema:s=>u("deviceManager","getConfigSchema","query",s),getSettingsSchema:s=>u("deviceManager","getSettingsSchema","query",s),updateConfig:s=>u("deviceManager","updateConfig","mutation",s),enable:s=>u("deviceManager","enable","mutation",s),disable:s=>u("deviceManager","disable","mutation",s),remove:s=>u("deviceManager","remove","mutation",s),getStreamProfileMap:s=>u("deviceManager","getStreamProfileMap","query",s),setStreamProfileMap:s=>u("deviceManager","setStreamProfileMap","mutation",s),probeStreams:s=>u("deviceManager","probeStreams","mutation",s),getBindings:s=>u("deviceManager","getBindings","query",s),getAllBindings:s=>u("deviceManager","getAllBindings","query",s),setWrapperActive:s=>u("deviceManager","setWrapperActive","mutation",s),getDeviceSettingsAggregate:s=>u("deviceManager","getDeviceSettingsAggregate","query",s),getDeviceLiveInfoAggregate:s=>u("deviceManager","getDeviceLiveInfoAggregate","query",s),getDeviceAggregate:s=>u("deviceManager","getDeviceAggregate","query",s),updateDeviceField:s=>u("deviceManager","updateDeviceField","mutation",s),updateDeviceFieldsBatch:s=>u("deviceManager","updateDeviceFieldsBatch","mutation",s),testField:s=>u("deviceManager","testField","mutation",s),getDeviceStatusAggregate:s=>u("deviceManager","getDeviceStatusAggregate","query",s)},j={getSnapshot:s=>u("deviceState","getSnapshot","query",s),getCapSlice:s=>u("deviceState","getCapSlice","query",s),setCapSlice:s=>u("deviceState","setCapSlice","mutation",s)},x={getDeviceStats:s=>u("networkQuality","getDeviceStats","query",s),reportClientStats:s=>u("networkQuality","reportClientStats","mutation",s)},O={runPipeline:s=>u("pipelineExecutor","runPipeline","mutation",s),runPipelineBatch:s=>u("pipelineExecutor","runPipelineBatch","mutation",s)},Ue={assignPipeline:s=>u("pipelineOrchestrator","assignPipeline","mutation",s),unassignPipeline:s=>u("pipelineOrchestrator","unassignPipeline","mutation",s),getPipelineAssignment:s=>u("pipelineOrchestrator","getPipelineAssignment","query",s),getCameraMetrics:s=>u("pipelineOrchestrator","getCameraMetrics","query",s),assignDecoder:s=>u("pipelineOrchestrator","assignDecoder","mutation",s),unassignDecoder:s=>u("pipelineOrchestrator","unassignDecoder","mutation",s),assignAudio:s=>u("pipelineOrchestrator","assignAudio","mutation",s),unassignAudio:s=>u("pipelineOrchestrator","unassignAudio","mutation",s),getAudioAssignment:s=>u("pipelineOrchestrator","getAudioAssignment","query",s),getAudioAssignments:s=>u("pipelineOrchestrator","getAudioAssignments","query",s),getDecoderAssignment:s=>u("pipelineOrchestrator","getDecoderAssignment","query",s),getCameraSettings:s=>u("pipelineOrchestrator","getCameraSettings","query",s),setCameraStepToggle:s=>u("pipelineOrchestrator","setCameraStepToggle","mutation",s),getCameraStepOverrides:s=>u("pipelineOrchestrator","getCameraStepOverrides","query",s),setCameraStepOverride:s=>u("pipelineOrchestrator","setCameraStepOverride","mutation",s),setCameraPipelineForAgent:s=>u("pipelineOrchestrator","setCameraPipelineForAgent","mutation",s),resolvePipeline:s=>u("pipelineOrchestrator","resolvePipeline","query",s),getDeviceSettingsContribution:s=>u("pipelineOrchestrator","getDeviceSettingsContribution","query",s),getDeviceLiveContribution:s=>u("pipelineOrchestrator","getDeviceLiveContribution","query",s),applyDeviceSettingsPatch:s=>u("pipelineOrchestrator","applyDeviceSettingsPatch","mutation",s)},Fe={detachCamera:s=>u("pipelineRunner","detachCamera","mutation",s),getCameraMetrics:s=>u("pipelineRunner","getCameraMetrics","query",s)},We={getPolicyStatus:s=>u("recordingEngine","getPolicyStatus","query",s)},$e={supportsDevice:s=>u("snapshotProvider","supportsDevice","query",s),getSnapshot:s=>u("snapshotProvider","getSnapshot","query",s)},He={publishCameraStream:s=>u("streamBroker","publishCameraStream","mutation",s),retractCameraStream:s=>u("streamBroker","retractCameraStream","mutation",s),assignProfile:s=>u("streamBroker","assignProfile","mutation",s),unassignProfile:s=>u("streamBroker","unassignProfile","mutation",s),restartProfile:s=>u("streamBroker","restartProfile","mutation",s),getDeviceSettingsContribution:s=>u("streamBroker","getDeviceSettingsContribution","query",s),getDeviceLiveContribution:s=>u("streamBroker","getDeviceLiveContribution","query",s),applyDeviceSettingsPatch:s=>u("streamBroker","applyDeviceSettingsPatch","mutation",s)};return{deviceId:i.deviceId,binding:i,state:{audioMetrics:f(c,i.deviceId,"audio-metrics"),battery:f(c,i.deviceId,"battery"),brightness:f(c,i.deviceId,"brightness"),cameraStreams:f(c,i.deviceId,"camera-streams"),deviceDiscovery:f(c,i.deviceId,"device-discovery"),deviceStatus:f(c,i.deviceId,"device-status"),doorbell:f(c,i.deviceId,"doorbell"),featureProbe:f(c,i.deviceId,"feature-probe"),motion:f(c,i.deviceId,"motion"),motionTrigger:f(c,i.deviceId,"motion-trigger"),ptzAutotrack:f(c,i.deviceId,"ptz-autotrack"),switch:f(c,i.deviceId,"switch"),zoneAnalytics:f(c,i.deviceId,"zone-analytics"),zoneRules:f(c,i.deviceId,"zone-rules"),zones:f(c,i.deviceId,"zones")},accessories:p,audioAnalysis:h,audioMetrics:g,battery:S,brightness:y,cameraCredentials:C,cameraStreams:D,detectionPipeline:M,deviceDiscovery:w,deviceOps:X,deviceStatus:ee,doorbell:te,events:ie,featureProbe:ae,intercom:ne,motion:re,motionDetection:se,motionTrigger:oe,nativeObjectDetection:ce,osd:de,pipelineAnalytics:le,ptz:ue,ptzAutotrack:me,reboot:pe,recording:he,snapshot:ge,switch:Se,webrtcSession:ye,zoneAnalytics:fe,zoneRules:t,zones:I,addonSettings:z,deviceManager:T,deviceState:j,networkQuality:x,pipelineExecutor:O,pipelineOrchestrator:Ue,pipelineRunner:Fe,recordingEngine:We,snapshotProvider:$e,streamBroker:He}}function Xt(r,i,e,o,c){if(e.length===0||i.length===0)return{passed:r,excluded:[]};const l=e.filter(S=>S.enabled!==!1),m=l.filter(S=>S.mode==="include"),d=l.filter(S=>S.mode==="exclude"),u=m.length>0,p=new Map(i.map(S=>[S.id,S])),h=[],g=[];for(const S of r){const y=o(S),C=c?.(S),D=m.some(w=>ve(w,y,C,p)),M=d.some(w=>ve(w,y,C,p));u?D&&!M?h.push(S):g.push(S):M?g.push(S):h.push(S)}return{passed:h,excluded:g}}function ve(r,i,e,o){if(r.classFilter&&r.classFilter.length>0&&e!==void 0&&!r.classFilter.includes(e))return!1;for(const c of r.zoneIds){const l=o.get(c);if(l&&ei(i,l.polygon))return!0}return!1}function ei(r,i){if(i.length<3)return!1;let e=!1;const{x:o,y:c}=r;for(let l=0,m=i.length-1;l<i.length;m=l++){const d=i[l],u=i[m];d.y>c!=u.y>c&&o<(u.x-d.x)*(c-d.y)/(u.y-d.y||Number.EPSILON)+d.x&&(e=!e)}return e}function ti(r){const i=r;function e(t,I,z,T,j){const x=i[t]?.[I];if(!x)throw new Error(`SystemProxy: api has no '${t}.${I}'`);const O=x;return z==="mutation"?O.mutate(T):z==="subscription"?O.subscribe(T,j):O.query(T)}return{addonPages:{listPages:t=>e("addonPages","listPages","query",t)},addons:{list:t=>e("addons","list","query",t),getLogs:t=>e("addons","getLogs","query",t),listPackages:t=>e("addons","listPackages","query",t),installPackage:t=>e("addons","installPackage","mutation",t),installFromWorkspace:t=>e("addons","installFromWorkspace","mutation",t),isWorkspaceAvailable:t=>e("addons","isWorkspaceAvailable","query",t),listWorkspacePackages:t=>e("addons","listWorkspacePackages","query",t),uninstallPackage:t=>e("addons","uninstallPackage","mutation",t),reloadPackages:t=>e("addons","reloadPackages","mutation",t),searchAvailable:t=>e("addons","searchAvailable","query",t),listUpdates:t=>e("addons","listUpdates","query",t),updatePackage:t=>e("addons","updatePackage","mutation",t),rollbackPackage:t=>e("addons","rollbackPackage","mutation",t),forceRefresh:t=>e("addons","forceRefresh","mutation",t),restartServer:t=>e("addons","restartServer","mutation",t),getVersions:t=>e("addons","getVersions","query",t),restartAddon:t=>e("addons","restartAddon","mutation",t),retryLoad:t=>e("addons","retryLoad","mutation",t),getAutoUpdateSettings:t=>e("addons","getAutoUpdateSettings","query",t),setAutoUpdateSettings:t=>e("addons","setAutoUpdateSettings","mutation",t),getAddonAutoUpdate:t=>e("addons","getAddonAutoUpdate","query",t),setAddonAutoUpdate:t=>e("addons","setAddonAutoUpdate","mutation",t),applyAutoUpdateToAll:t=>e("addons","applyAutoUpdateToAll","mutation",t),custom:t=>e("addons","custom","mutation",t),onAddonLogs:(t,I)=>e("addons","onAddonLogs","subscription",t,I)},addonSettings:{getGlobalSettings:t=>e("addonSettings","getGlobalSettings","query",t),updateGlobalSettings:t=>e("addonSettings","updateGlobalSettings","mutation",t)},addonWidgets:{listWidgets:t=>e("addonWidgets","listWidgets","query",t)},alerts:{emit:t=>e("alerts","emit","mutation",t),update:t=>e("alerts","update","mutation",t),list:t=>e("alerts","list","query",t),getUnreadCount:t=>e("alerts","getUnreadCount","query",t),markRead:t=>e("alerts","markRead","mutation",t),markAllRead:t=>e("alerts","markAllRead","mutation",t),dismiss:t=>e("alerts","dismiss","mutation",t)},audioAnalyzer:{analyseChunk:t=>e("audioAnalyzer","analyseChunk","mutation",t),classify:t=>e("audioAnalyzer","classify","query",t),isReady:t=>e("audioAnalyzer","isReady","query",t),dispose:t=>e("audioAnalyzer","dispose","mutation",t),reprobeAudioEngine:t=>e("audioAnalyzer","reprobeAudioEngine","mutation",t)},audioCodec:{listSupportedCodecs:t=>e("audioCodec","listSupportedCodecs","query",t),canHandle:t=>e("audioCodec","canHandle","query",t),createDecodeSession:t=>e("audioCodec","createDecodeSession","mutation",t),createEncodeSession:t=>e("audioCodec","createEncodeSession","mutation",t),closeSession:t=>e("audioCodec","closeSession","mutation",t),pushEncodedFrame:t=>e("audioCodec","pushEncodedFrame","mutation",t),pullPcm:t=>e("audioCodec","pullPcm","query",t),pushPcm:t=>e("audioCodec","pushPcm","mutation",t),pullEncoded:t=>e("audioCodec","pullEncoded","query",t),flushEncode:t=>e("audioCodec","flushEncode","mutation",t),listActiveSessions:t=>e("audioCodec","listActiveSessions","query",t)},authentication:{listProviders:t=>e("authentication","listProviders","query",t),setProviderEnabled:t=>e("authentication","setProviderEnabled","mutation",t)},backup:{listDestinations:t=>e("backup","listDestinations","query",t),trigger:t=>e("backup","trigger","mutation",t),list:t=>e("backup","list","query",t),listLocations:t=>e("backup","listLocations","query",t),getEntries:t=>e("backup","getEntries","query",t),restore:t=>e("backup","restore","mutation",t),delete:t=>e("backup","delete","mutation",t),listArchives:t=>e("backup","listArchives","query",t),upsertDestinationPolicy:t=>e("backup","upsertDestinationPolicy","mutation",t),previewSchedule:t=>e("backup","previewSchedule","query",t)},decoder:{supportsCodec:t=>e("decoder","supportsCodec","query",t),getInfo:t=>e("decoder","getInfo","query",t),createSession:t=>e("decoder","createSession","query",t),destroySession:t=>e("decoder","destroySession","query",t),pushPacket:t=>e("decoder","pushPacket","query",t),openStream:t=>e("decoder","openStream","query",t),pullFrames:t=>e("decoder","pullFrames","query",t),updateConfig:t=>e("decoder","updateConfig","query",t),getStats:t=>e("decoder","getStats","query",t),listActiveSessions:t=>e("decoder","listActiveSessions","query",t),reprobeHwaccel:t=>e("decoder","reprobeHwaccel","mutation",t)},deviceManager:{allocateDeviceId:t=>e("deviceManager","allocateDeviceId","mutation",t),registerDevice:t=>e("deviceManager","registerDevice","mutation",t),removeDevice:t=>e("deviceManager","removeDevice","mutation",t),persistConfig:t=>e("deviceManager","persistConfig","mutation",t),listLocations:t=>e("deviceManager","listLocations","query",t),addLocation:t=>e("deviceManager","addLocation","mutation",t),removeLocation:t=>e("deviceManager","removeLocation","mutation",t),listPersistedByAddon:t=>e("deviceManager","listPersistedByAddon","query",t),listAll:t=>e("deviceManager","listAll","query",t),getChildren:t=>e("deviceManager","getChildren","query",t),listWrappersForCap:t=>e("deviceManager","listWrappersForCap","query",t),listBindableCapsForDeviceType:t=>e("deviceManager","listBindableCapsForDeviceType","query",t),discoverDevices:t=>e("deviceManager","discoverDevices","mutation",t),adoptDevice:t=>e("deviceManager","adoptDevice","mutation",t),getCreationSchema:t=>e("deviceManager","getCreationSchema","query",t),createDevice:t=>e("deviceManager","createDevice","mutation",t),testCreationField:t=>e("deviceManager","testCreationField","mutation",t)},deviceProvider:{start:t=>e("deviceProvider","start","mutation",t),stop:t=>e("deviceProvider","stop","mutation",t),getStatus:t=>e("deviceProvider","getStatus","query",t),getDevices:t=>e("deviceProvider","getDevices","query",t),supportsDiscovery:t=>e("deviceProvider","supportsDiscovery","query",t),discoverDevices:t=>e("deviceProvider","discoverDevices","mutation",t),adoptDiscoveredDevice:t=>e("deviceProvider","adoptDiscoveredDevice","mutation",t),supportsManualCreation:t=>e("deviceProvider","supportsManualCreation","query",t),getChildCreationSchema:t=>e("deviceProvider","getChildCreationSchema","query",t),createDevice:t=>e("deviceProvider","createDevice","mutation",t),testCreationField:t=>e("deviceProvider","testCreationField","mutation",t)},deviceState:{getAllSnapshots:t=>e("deviceState","getAllSnapshots","query",t)},integrations:{list:t=>e("integrations","list","query",t),get:t=>e("integrations","get","query",t),getByAddonId:t=>e("integrations","getByAddonId","query",t),create:t=>e("integrations","create","mutation",t),update:t=>e("integrations","update","mutation",t),delete:t=>e("integrations","delete","mutation",t),getSettings:t=>e("integrations","getSettings","query",t),setSettings:t=>e("integrations","setSettings","mutation",t),getAvailableTypes:t=>e("integrations","getAvailableTypes","query",t),testConnection:t=>e("integrations","testConnection","mutation",t)},localNetwork:{list:t=>e("localNetwork","list","query",t),getPreferred:t=>e("localNetwork","getPreferred","query",t),getConnectionEndpoints:t=>e("localNetwork","getConnectionEndpoints","query",t),getAllowedAddresses:t=>e("localNetwork","getAllowedAddresses","query",t),setAllowedAddresses:t=>e("localNetwork","setAllowedAddresses","mutation",t),resetAllowlistToBestMatch:t=>e("localNetwork","resetAllowlistToBestMatch","mutation",t)},meshNetwork:{getStatus:t=>e("meshNetwork","getStatus","query",t),join:t=>e("meshNetwork","join","mutation",t),leave:t=>e("meshNetwork","leave","mutation",t),listPeers:t=>e("meshNetwork","listPeers","query",t),setPublicIngress:t=>e("meshNetwork","setPublicIngress","mutation",t),setMeshIngress:t=>e("meshNetwork","setMeshIngress","mutation",t)},meshOrchestrator:{listProviders:t=>e("meshOrchestrator","listProviders","query",t),joinProvider:t=>e("meshOrchestrator","joinProvider","mutation",t),leaveProvider:t=>e("meshOrchestrator","leaveProvider","mutation",t)},metricsProvider:{collectSnapshot:t=>e("metricsProvider","collectSnapshot","query",t),getCached:t=>e("metricsProvider","getCached","query",t),getCurrent:t=>e("metricsProvider","getCurrent","query",t),getDiskSpace:t=>e("metricsProvider","getDiskSpace","query",t),getGpuInfo:t=>e("metricsProvider","getGpuInfo","query",t),getCpuTemperature:t=>e("metricsProvider","getCpuTemperature","query",t),getProcessStats:t=>e("metricsProvider","getProcessStats","query",t),listAddonInstances:t=>e("metricsProvider","listAddonInstances","query",t),getAddonStats:t=>e("metricsProvider","getAddonStats","query",t),listNodeProcesses:t=>e("metricsProvider","listNodeProcesses","query",t),killProcess:t=>e("metricsProvider","killProcess","mutation",t)},networkQuality:{getAllStats:t=>e("networkQuality","getAllStats","query",t)},nodes:{topology:t=>e("nodes","topology","query",t),deployAddon:t=>e("nodes","deployAddon","mutation",t),undeployAddon:t=>e("nodes","undeployAddon","mutation",t),restartAddon:t=>e("nodes","restartAddon","mutation",t),restartProcess:t=>e("nodes","restartProcess","mutation",t),restartNode:t=>e("nodes","restartNode","mutation",t),shutdownNode:t=>e("nodes","shutdownNode","mutation",t),renameNode:t=>e("nodes","renameNode","mutation",t),clusterAddonStatus:t=>e("nodes","clusterAddonStatus","query",t),setProcessLogLevel:t=>e("nodes","setProcessLogLevel","mutation",t),executeQuery:t=>e("nodes","executeQuery","mutation",t)},notificationOutput:{send:t=>e("notificationOutput","send","mutation",t),sendTest:t=>e("notificationOutput","sendTest","mutation",t)},pipelineExecutor:{getAvailableEngines:t=>e("pipelineExecutor","getAvailableEngines","query",t),getSelectedEngine:t=>e("pipelineExecutor","getSelectedEngine","query",t),getDefaultSteps:t=>e("pipelineExecutor","getDefaultSteps","query",t),reprobeEngine:t=>e("pipelineExecutor","reprobeEngine","mutation",t),getVideoPipelineSteps:t=>e("pipelineExecutor","getVideoPipelineSteps","query",t),setVideoPipelineSteps:t=>e("pipelineExecutor","setVideoPipelineSteps","mutation",t),getSchema:t=>e("pipelineExecutor","getSchema","query",t),getGlobalSteps:t=>e("pipelineExecutor","getGlobalSteps","query",t),getGlobalPipelineConfig:t=>e("pipelineExecutor","getGlobalPipelineConfig","query",t),getOrchestratorConfigSchema:t=>e("pipelineExecutor","getOrchestratorConfigSchema","query",t),listTemplates:t=>e("pipelineExecutor","listTemplates","query",t),saveTemplate:t=>e("pipelineExecutor","saveTemplate","mutation",t),updateTemplate:t=>e("pipelineExecutor","updateTemplate","mutation",t),deleteTemplate:t=>e("pipelineExecutor","deleteTemplate","mutation",t),getCapabilities:t=>e("pipelineExecutor","getCapabilities","query",t),getAddonModels:t=>e("pipelineExecutor","getAddonModels","query",t),downloadModel:t=>e("pipelineExecutor","downloadModel","mutation",t),deleteModel:t=>e("pipelineExecutor","deleteModel","mutation",t),detect:t=>e("pipelineExecutor","detect","query",t),cacheFrameInPool:t=>e("pipelineExecutor","cacheFrameInPool","mutation",t),inferCached:t=>e("pipelineExecutor","inferCached","mutation",t),uncacheFrame:t=>e("pipelineExecutor","uncacheFrame","mutation",t),getEffectiveTuning:t=>e("pipelineExecutor","getEffectiveTuning","query",t),listLoadedEngines:t=>e("pipelineExecutor","listLoadedEngines","query",t),spinEngine:t=>e("pipelineExecutor","spinEngine","mutation",t),killEngine:t=>e("pipelineExecutor","killEngine","mutation",t),listReferenceImages:t=>e("pipelineExecutor","listReferenceImages","query",t),getReferenceImage:t=>e("pipelineExecutor","getReferenceImage","query",t),getReferenceAudioFiles:t=>e("pipelineExecutor","getReferenceAudioFiles","query",t),getReferenceAudio:t=>e("pipelineExecutor","getReferenceAudio","query",t),getAudioCapabilities:t=>e("pipelineExecutor","getAudioCapabilities","query",t),runAudioTest:t=>e("pipelineExecutor","runAudioTest","mutation",t),getDetectionConfigSchema:t=>e("pipelineExecutor","getDetectionConfigSchema","query",t)},pipelineOrchestrator:{rebalance:t=>e("pipelineOrchestrator","rebalance","mutation",t),getPipelineAssignments:t=>e("pipelineOrchestrator","getPipelineAssignments","query",t),getAgentLoad:t=>e("pipelineOrchestrator","getAgentLoad","query",t),getGlobalMetrics:t=>e("pipelineOrchestrator","getGlobalMetrics","query",t),getCapabilityBindings:t=>e("pipelineOrchestrator","getCapabilityBindings","query",t),setCapabilityBinding:t=>e("pipelineOrchestrator","setCapabilityBinding","mutation",t),getDecoderAssignments:t=>e("pipelineOrchestrator","getDecoderAssignments","query",t),getAudioNodeLoad:t=>e("pipelineOrchestrator","getAudioNodeLoad","query",t),getAgentSettings:t=>e("pipelineOrchestrator","getAgentSettings","query",t),listAgentSettings:t=>e("pipelineOrchestrator","listAgentSettings","query",t),setAgentAddonDefaults:t=>e("pipelineOrchestrator","setAgentAddonDefaults","mutation",t),removeAgentSettings:t=>e("pipelineOrchestrator","removeAgentSettings","mutation",t),listTemplates:t=>e("pipelineOrchestrator","listTemplates","query",t),saveTemplate:t=>e("pipelineOrchestrator","saveTemplate","mutation",t),updateTemplate:t=>e("pipelineOrchestrator","updateTemplate","mutation",t),deleteTemplate:t=>e("pipelineOrchestrator","deleteTemplate","mutation",t)},pipelineRunner:{attachCamera:t=>e("pipelineRunner","attachCamera","mutation",t),reportMotion:t=>e("pipelineRunner","reportMotion","mutation",t),getLocalLoad:t=>e("pipelineRunner","getLocalLoad","query",t),getLocalMetrics:t=>e("pipelineRunner","getLocalMetrics","query",t),getAllCameraMetrics:t=>e("pipelineRunner","getAllCameraMetrics","query",t),getLocalCameras:t=>e("pipelineRunner","getLocalCameras","query",t)},platformProbe:{getCapabilities:t=>e("platformProbe","getCapabilities","query",t),getHardware:t=>e("platformProbe","getHardware","query",t),resolveInferenceConfig:t=>e("platformProbe","resolveInferenceConfig","query",t),resolveHwAccel:t=>e("platformProbe","resolveHwAccel","query",t)},recordingEngine:{getStatus:t=>e("recordingEngine","getStatus","query",t),enable:t=>e("recordingEngine","enable","mutation",t),disable:t=>e("recordingEngine","disable","mutation",t),getConfig:t=>e("recordingEngine","getConfig","query",t),updateConfig:t=>e("recordingEngine","updateConfig","mutation",t),getPlaylist:t=>e("recordingEngine","getPlaylist","query",t),getThumbnail:t=>e("recordingEngine","getThumbnail","query",t),getSegments:t=>e("recordingEngine","getSegments","query",t),getAvailability:t=>e("recordingEngine","getAvailability","query",t),estimateStorage:t=>e("recordingEngine","estimateStorage","query",t),estimateGlobalStorage:t=>e("recordingEngine","estimateGlobalStorage","query",t),getStorageUsage:t=>e("recordingEngine","getStorageUsage","query",t),setPolicy:t=>e("recordingEngine","setPolicy","mutation",t),getPolicy:t=>e("recordingEngine","getPolicy","query",t),getRetentionConfig:t=>e("recordingEngine","getRetentionConfig","query",t),updateRetentionConfig:t=>e("recordingEngine","updateRetentionConfig","mutation",t),getMotionStats:t=>e("recordingEngine","getMotionStats","query",t)},remoteAccess:{listProviders:t=>e("remoteAccess","listProviders","query",t),startProvider:t=>e("remoteAccess","startProvider","mutation",t),stopProvider:t=>e("remoteAccess","stopProvider","mutation",t)},settingsStore:{get:t=>e("settingsStore","get","query",t),set:t=>e("settingsStore","set","mutation",t),query:t=>e("settingsStore","query","query",t),insert:t=>e("settingsStore","insert","mutation",t),update:t=>e("settingsStore","update","mutation",t),delete:t=>e("settingsStore","delete","mutation",t),count:t=>e("settingsStore","count","query",t),isEmpty:t=>e("settingsStore","isEmpty","query",t),declareCollection:t=>e("settingsStore","declareCollection","mutation",t)},storage:{resolve:t=>e("storage","resolve","query",t),write:t=>e("storage","write","mutation",t),read:t=>e("storage","read","query",t),exists:t=>e("storage","exists","query",t),list:t=>e("storage","list","query",t),delete:t=>e("storage","delete","mutation",t),getAvailableSpace:t=>e("storage","getAvailableSpace","query",t),beginUpload:t=>e("storage","beginUpload","mutation",t),writeChunk:t=>e("storage","writeChunk","mutation",t),finalizeUpload:t=>e("storage","finalizeUpload","mutation",t),abortUpload:t=>e("storage","abortUpload","mutation",t),beginDownload:t=>e("storage","beginDownload","mutation",t),readChunk:t=>e("storage","readChunk","query",t),endDownload:t=>e("storage","endDownload","mutation",t),listLocations:t=>e("storage","listLocations","query",t),getDefaultLocation:t=>e("storage","getDefaultLocation","query",t),upsertLocation:t=>e("storage","upsertLocation","mutation",t),deleteLocation:t=>e("storage","deleteLocation","mutation",t),testLocation:t=>e("storage","testLocation","query",t),listProviders:t=>e("storage","listProviders","query",t),testConfig:t=>e("storage","testConfig","query",t)},streamBroker:{listAllCameraStreams:t=>e("streamBroker","listAllCameraStreams","query",t),listAllProfileSlots:t=>e("streamBroker","listAllProfileSlots","query",t),getBrokerStats:t=>e("streamBroker","getBrokerStats","query",t),listClients:t=>e("streamBroker","listClients","query",t),killClient:t=>e("streamBroker","killClient","mutation",t),getStreamUrl:t=>e("streamBroker","getStreamUrl","query",t),getBroker:t=>e("streamBroker","getBroker","query",t),setPreBufferDuration:t=>e("streamBroker","setPreBufferDuration","mutation",t),getPreBufferInfo:t=>e("streamBroker","getPreBufferInfo","query",t),getRtspPort:t=>e("streamBroker","getRtspPort","query",t),getAllRtspEntries:t=>e("streamBroker","getAllRtspEntries","query",t),getRtspEntry:t=>e("streamBroker","getRtspEntry","query",t),regenerateRtspToken:t=>e("streamBroker","regenerateRtspToken","mutation",t),setRtspEnabled:t=>e("streamBroker","setRtspEnabled","mutation",t),isRtspEnabled:t=>e("streamBroker","isRtspEnabled","query",t)},system:{info:t=>e("system","info","query",t),health:t=>e("system","health","query",t),featureFlags:t=>e("system","featureFlags","query",t),networkAddresses:t=>e("system","networkAddresses","query",t),getRetentionConfig:t=>e("system","getRetentionConfig","query",t),setRetentionConfig:t=>e("system","setRetentionConfig","mutation",t),forceRetentionCleanup:t=>e("system","forceRetentionCleanup","mutation",t)},toast:{onToast:(t,I)=>e("toast","onToast","subscription",t,I)},turnOrchestrator:{listProviders:t=>e("turnOrchestrator","listProviders","query",t),getAllServers:t=>e("turnOrchestrator","getAllServers","query",t),setProviderEnabled:t=>e("turnOrchestrator","setProviderEnabled","mutation",t)},turnProvider:{getTurnServers:t=>e("turnProvider","getTurnServers","query",t)},userManagement:{listUsers:t=>e("userManagement","listUsers","query",t),createUser:t=>e("userManagement","createUser","mutation",t),updateUser:t=>e("userManagement","updateUser","mutation",t),deleteUser:t=>e("userManagement","deleteUser","mutation",t),resetPassword:t=>e("userManagement","resetPassword","mutation",t),validateCredentials:t=>e("userManagement","validateCredentials","mutation",t),listApiKeys:t=>e("userManagement","listApiKeys","query",t),createApiKey:t=>e("userManagement","createApiKey","mutation",t),revokeApiKey:t=>e("userManagement","revokeApiKey","mutation",t),validateApiKey:t=>e("userManagement","validateApiKey","mutation",t),createScopedToken:t=>e("userManagement","createScopedToken","mutation",t),revokeScopedToken:t=>e("userManagement","revokeScopedToken","mutation",t),validateScopedToken:t=>e("userManagement","validateScopedToken","query",t),listScopedTokens:t=>e("userManagement","listScopedTokens","query",t)}}}const ii="device.state-changed",ai="capability.binding-changed",ni="device.registered",ri="device.unregistered",si="device.updated";class oi{constructor(i){this.api=i,this.stateSource=ze(this.stateMirror,this.handleListeners,this.api)}stateMirror=new Map;bindings=new Map;devices=new Map;handleListeners=new Map;globalStateListeners=new Set;capListeners=new Map;deviceListeners=new Map;addedListeners=new Set;removedListeners=new Set;pendingWaits=new Set;stateSource;bridges=[];initialized=!1;initPromise=null;async init(i=15e3){if(!this.initialized){if(this.initPromise)return this.initPromise;this.initPromise=(async()=>{const e=(m,d)=>Number.isFinite(i)?new Promise((u,p)=>{const h=setTimeout(()=>p(new Error(`SystemMirror.init: '${d}' timed out after ${i}ms`)),i);m.then(g=>{clearTimeout(h),u(g)},g=>{clearTimeout(h),p(g)})}):m,[o,c,l]=await Promise.all([e(this.api.deviceManager.getAllBindings.query({}),"deviceManager.getAllBindings"),e(this.api.deviceState.getAllSnapshots.query({}),"deviceState.getAllSnapshots"),e(this.api.deviceManager.listAll.query({}),"deviceManager.listAll")]);for(const m of o)this.bindings.set(m.deviceId,m);for(const[m,d]of Object.entries(c)){const u=Number(m);if(!Number.isFinite(u))continue;const p=new Map;for(const[h,g]of Object.entries(d))p.set(h,g);this.stateMirror.set(u,p)}for(const m of l)this.devices.set(m.id,m);try{this.subscribeBus()}catch{}this.initialized=!0})();try{await this.initPromise}finally{this.initPromise=null}}}isReady(){return this.initialized}async awaitReady(){if(!this.initialized)return this.initPromise?this.initPromise:this.init()}dispose(){for(const i of this.bridges)try{i.unsubscribe()}catch{}this.bridges=[],this.handleListeners.clear(),this.globalStateListeners.clear(),this.capListeners.clear(),this.deviceListeners.clear(),this.addedListeners.clear(),this.removedListeners.clear(),this.pendingWaits.clear(),this.initialized=!1}getDeviceById(i){const e=this.bindings.get(i);return e?xe(this.api,e,{stateSource:this.stateSource}):null}getDeviceByName(i){for(const e of this.devices.values())if(e.name===i)return this.getDeviceById(e.id);return null}getDeviceByStableId(i){for(const e of this.devices.values())if(e.stableId===i)return this.getDeviceById(e.id);return null}getDevicesByAddon(i){return this.query({addonId:i})}getDevicesByType(i){return this.query({type:i})}getDeviceInfo(i){return this.devices.get(i)??null}getAllDevices(){const i=[];for(const e of this.bindings.keys()){const o=this.getDeviceById(e);o&&i.push(o)}return i}filterByCap(i){return this.query({caps:i})}query(i={}){const e=[];for(const[o,c]of this.bindings){const l=this.devices.get(o);if(i.id!==void 0&&!F(o,i.id)||i.stableId!==void 0&&(!l||!F(l.stableId,i.stableId))||i.addonId!==void 0&&(!l||!F(l.addonId,i.addonId))||i.type!==void 0&&(!l||!F(l.type,i.type)))continue;if(i.caps!==void 0){const d=Z(i.caps),u=new Set(c.entries.map(p=>p.capName));if(!d.every(p=>u.has(p)))continue}if(i.anyCap!==void 0){const d=Z(i.anyCap),u=new Set(c.entries.map(p=>p.capName));if(!d.some(p=>u.has(p)))continue}if(i.name!==void 0&&(!l||!ci(l.name,i.name))||i.online!==void 0&&(!l||l.online!==i.online))continue;if(i.parentDeviceId!==void 0){if(!l)continue;const d=i.parentDeviceId;if((l.parentDeviceId??null)!==d)continue}if(i.feature!==void 0&&(!l||!Z(i.feature).every(u=>l.features.includes(u)))||i.isCamera!==void 0&&(!l||l.isCamera!==i.isCamera))continue;const m=this.getDeviceById(o);if(m){if(i.where&&l){if(!i.where(l,m))continue}else if(i.where&&!l)continue;e.push(m)}}return e}whereState(i,e){const o=[];for(const[c,l]of this.stateMirror){const m=l.get(i);if(!m||!e(m,c))continue;const d=this.getDeviceById(c);d&&o.push(d)}return o}mapState(i,e){const o=[];for(const[c,l]of this.stateMirror){const m=l.get(i);m&&o.push(e(m,c))}return o}findState(i,e){for(const[o,c]of this.stateMirror){const l=c.get(i);if(l&&e(l,o))return this.getDeviceById(o)}return null}countByCap(i){let e=0;for(const o of this.bindings.values())o.entries.some(c=>c.capName===i)&&e++;return e}countByState(i,e){let o=0;for(const[c,l]of this.stateMirror){const m=l.get(i);m&&e(m,c)&&o++}return o}listen(i){return this.globalStateListeners.add(i),()=>{this.globalStateListeners.delete(i)}}listenCap(i,e){let o=this.capListeners.get(i);return o||(o=new Set,this.capListeners.set(i,o)),o.add(e),()=>{o.delete(e),o.size===0&&this.capListeners.delete(i)}}listenDevice(i,e){let o=this.deviceListeners.get(i);return o||(o=new Set,this.deviceListeners.set(i,o)),o.add(e),()=>{o.delete(e),o.size===0&&this.deviceListeners.delete(i)}}onDeviceAdded(i){return this.addedListeners.add(i),()=>{this.addedListeners.delete(i)}}onDeviceRemoved(i){return this.removedListeners.add(i),()=>{this.removedListeners.delete(i)}}waitForState(i,e,o,c=3e4){return new Promise((l,m)=>{const u=(()=>{const g=this.stateMirror.get(i)?.get(e);return g&&o(g)?g:null})();if(u){l(u);return}let p=null;const h=this.listenDevice(i,(g,S,y)=>{S===e&&y&&o(y)&&(p&&clearTimeout(p),h(),l(y))});Number.isFinite(c)&&(p=setTimeout(()=>{h(),m(new Error(`waitForState timed out after ${c}ms (deviceId=${i}, capName=${e})`))},c))})}waitForDevice(i,e=3e4){return new Promise((o,c)=>{const l=this.getDeviceById(i);if(l){o(l);return}let m=null;const d=this.onDeviceAdded(u=>{if(u!==i)return;const p=this.getDeviceById(u);p&&(m&&clearTimeout(m),d(),o(p))});Number.isFinite(e)&&(m=setTimeout(()=>{d(),c(new Error(`waitForDevice timed out after ${e}ms (deviceId=${i})`))},e))})}async forEachCap(i,e){for(const o of this.filterByCap(i))await e(o)}async invokeCap(i,e,o,c={}){const l=this.filterByCap(i),m=Math.max(1,c.parallelism??l.length),d=[];for(let u=0;u<l.length;u+=m){const p=l.slice(u,u+m),h=await Promise.allSettled(p.map(async g=>{const S=g[i];if(!S||typeof S[e]!="function")throw new Error(`device '${g.deviceId}' does not expose '${i}.${e}'`);return await S[e](o)}));for(let g=0;g<h.length;g++){const S=p[g],y=h[g];y.status==="fulfilled"?d.push({deviceId:S.deviceId,ok:!0,result:y.value}):d.push({deviceId:S.deviceId,ok:!1,error:y.reason})}}return d}summary(){const i={},e={},o={};let c=0,l=0;for(const m of this.bindings.values())for(const d of m.entries)i[d.capName]=(i[d.capName]??0)+1;for(const m of this.devices.values())e[m.addonId]=(e[m.addonId]??0)+1,o[m.type]=(o[m.type]??0)+1,m.online?c++:l++;return{totalDevices:this.bindings.size,online:c,offline:l,byCap:i,byAddon:e,byType:o,statedDevices:this.stateMirror.size}}dump(i){const e=c=>{const l=this.devices.get(c)??null,m=this.bindings.get(c)??null,d={},u=this.stateMirror.get(c);if(u)for(const[p,h]of u)d[p]={...h};return{deviceId:c,info:l,binding:m?{...m,entries:m.entries.map(p=>({...p}))}:null,state:d}};if(i!==void 0)return e(i);const o=[];for(const c of this.bindings.keys())o.push(e(c));return o}getRawMirror(){return this.stateMirror}getSystemState(){const i=new Map;for(const[e,o]of this.stateMirror){const c=new Map;for(const[l,m]of o)c.set(l,{...m});i.set(e,c)}return i}subscribeBus(){if(!this.api.live?.onEvent)return;const i=this.api.live.onEvent;this.bridges.push(i.subscribe({category:ii},{onData:e=>{const o=e.data;!o||typeof o.deviceId!="number"||typeof o.capName!="string"||this.applyStateUpdate(o.deviceId,o.capName,o.slice)}})),this.bridges.push(i.subscribe({category:ai},{onData:e=>{const o=e.data,c=typeof o?.deviceId=="number"?o.deviceId:o?.source?.type==="device"&&typeof o.source.id=="number"?o.source.id:null;c!==null&&this.refreshBinding(c)}})),this.bridges.push(i.subscribe({category:ni},{onData:e=>{const o=e.data;typeof o?.deviceId=="number"&&this.refreshDeviceMetadata(o.deviceId,"added")}})),this.bridges.push(i.subscribe({category:ri},{onData:e=>{const o=e.data;typeof o?.deviceId=="number"&&this.applyDeviceRemoval(o.deviceId)}})),this.bridges.push(i.subscribe({category:si},{onData:e=>{const o=e.data;typeof o?.deviceId=="number"&&this.refreshDeviceMetadata(o.deviceId,"updated")}}))}applyStateUpdate(i,e,o){let c=this.stateMirror.get(i);c||(c=new Map,this.stateMirror.set(i,c)),o===void 0?c.delete(e):c.set(e,o);const l=`${i}:${e}`,m=this.handleListeners.get(l);if(m)for(const p of m)try{p(o)}catch{}for(const p of this.globalStateListeners)try{p(i,e,o)}catch{}const d=this.capListeners.get(e);if(d)for(const p of d)try{p(i,o)}catch{}const u=this.deviceListeners.get(i);if(u)for(const p of u)try{p(i,e,o)}catch{}}applyDeviceRemoval(i){const e=this.devices.get(i)??null;this.bindings.delete(i),this.devices.delete(i),this.stateMirror.delete(i);for(const o of this.removedListeners)try{o(i,e)}catch{}}async refreshBinding(i){try{const o=(await this.api.deviceManager.getAllBindings.query({})).find(c=>c.deviceId===i);o?this.bindings.set(i,o):this.applyDeviceRemoval(i)}catch{}}async refreshDeviceMetadata(i,e){try{const c=(await this.api.deviceManager.listAll.query({})).find(m=>m.id===i);if(!c)return;const l=!this.devices.has(i);if(this.devices.set(i,c),e==="added"&&l){await this.refreshBinding(i);for(const m of this.addedListeners)try{m(i,c)}catch{}}}catch{}}}function F(r,i){return Array.isArray(i)?i.includes(r):r===i}function Z(r){return Array.isArray(r)?r:[r]}function ci(r,i){return typeof i=="string"?r===i:i instanceof RegExp?i.test(r):"exact"in i?r===i.exact:"contains"in i?r.toLowerCase().includes(i.contains.toLowerCase()):!1}function di(r){return r}function li(r,i,e){return{input:r,output:i,kind:e?.kind??"query",auth:e?.auth??"protected",scope:e?.scope??{kind:"system"}}}const ui={accessories:"accessories",addonPages:"addon-pages",addonPagesSource:"addon-pages-source",addonRoutes:"addon-routes",addonSettings:"addon-settings",addonWidgets:"addon-widgets",addonWidgetsSource:"addon-widgets-source",addons:"addons",adminUi:"admin-ui",advancedNotifier:"advanced-notifier",alerts:"alerts",audioAnalysis:"audio-analysis",audioAnalyzer:"audio-analyzer",audioCodec:"audio-codec",audioMetrics:"audio-metrics",authProvider:"auth-provider",authentication:"authentication",backup:"backup",battery:"battery",brightness:"brightness",cameraCredentials:"camera-credentials",cameraStreams:"camera-streams",decoder:"decoder",detectionPipeline:"detection-pipeline",deviceDiscovery:"device-discovery",deviceManager:"device-manager",deviceOps:"device-ops",deviceProvider:"device-provider",deviceState:"device-state",deviceStatus:"device-status",doorbell:"doorbell",embeddingEncoder:"embedding-encoder",events:"events",featureProbe:"feature-probe",integrations:"integrations",intercom:"intercom",localNetwork:"local-network",logDestination:"log-destination",meshNetwork:"mesh-network",meshOrchestrator:"mesh-orchestrator",metricsProvider:"metrics-provider",motion:"motion",motionDetection:"motion-detection",motionTrigger:"motion-trigger",nativeObjectDetection:"native-object-detection",networkAccess:"network-access",networkQuality:"network-quality",nodes:"nodes",notificationOutput:"notification-output",osd:"osd",pipelineAnalytics:"pipeline-analytics",pipelineExecutor:"pipeline-executor",pipelineOrchestrator:"pipeline-orchestrator",pipelineRunner:"pipeline-runner",platformProbe:"platform-probe",ptz:"ptz",ptzAutotrack:"ptz-autotrack",reboot:"reboot",recording:"recording",recordingEngine:"recording-engine",remoteAccess:"remote-access",restreamer:"restreamer",settingsStore:"settings-store",snapshot:"snapshot",snapshotProvider:"snapshot-provider",storage:"storage",storageProvider:"storage-provider",streamBroker:"stream-broker",streamingEngine:"streaming-engine",switch:"switch",system:"system",toast:"toast",turnOrchestrator:"turn-orchestrator",turnProvider:"turn-provider",userManagement:"user-management",webrtc:"webrtc",webrtcSession:"webrtc-session",zoneAnalytics:"zone-analytics",zoneRules:"zone-rules",zones:"zones"},mi=[{key:"accessories",name:"accessories"},{key:"addonPages",name:"addon-pages"},{key:"addonPagesSource",name:"addon-pages-source"},{key:"addonRoutes",name:"addon-routes"},{key:"addonSettings",name:"addon-settings"},{key:"addonWidgets",name:"addon-widgets"},{key:"addonWidgetsSource",name:"addon-widgets-source"},{key:"addons",name:"addons"},{key:"adminUi",name:"admin-ui"},{key:"advancedNotifier",name:"advanced-notifier"},{key:"alerts",name:"alerts"},{key:"audioAnalysis",name:"audio-analysis"},{key:"audioAnalyzer",name:"audio-analyzer"},{key:"audioCodec",name:"audio-codec"},{key:"audioMetrics",name:"audio-metrics"},{key:"authProvider",name:"auth-provider"},{key:"authentication",name:"authentication"},{key:"backup",name:"backup"},{key:"battery",name:"battery"},{key:"brightness",name:"brightness"},{key:"cameraCredentials",name:"camera-credentials"},{key:"cameraStreams",name:"camera-streams"},{key:"decoder",name:"decoder"},{key:"detectionPipeline",name:"detection-pipeline"},{key:"deviceDiscovery",name:"device-discovery"},{key:"deviceManager",name:"device-manager"},{key:"deviceOps",name:"device-ops"},{key:"deviceProvider",name:"device-provider"},{key:"deviceState",name:"device-state"},{key:"deviceStatus",name:"device-status"},{key:"doorbell",name:"doorbell"},{key:"embeddingEncoder",name:"embedding-encoder"},{key:"events",name:"events"},{key:"featureProbe",name:"feature-probe"},{key:"integrations",name:"integrations"},{key:"intercom",name:"intercom"},{key:"localNetwork",name:"local-network"},{key:"logDestination",name:"log-destination"},{key:"meshNetwork",name:"mesh-network"},{key:"meshOrchestrator",name:"mesh-orchestrator"},{key:"metricsProvider",name:"metrics-provider"},{key:"motion",name:"motion"},{key:"motionDetection",name:"motion-detection"},{key:"motionTrigger",name:"motion-trigger"},{key:"nativeObjectDetection",name:"native-object-detection"},{key:"networkAccess",name:"network-access"},{key:"networkQuality",name:"network-quality"},{key:"nodes",name:"nodes"},{key:"notificationOutput",name:"notification-output"},{key:"osd",name:"osd"},{key:"pipelineAnalytics",name:"pipeline-analytics"},{key:"pipelineExecutor",name:"pipeline-executor"},{key:"pipelineOrchestrator",name:"pipeline-orchestrator"},{key:"pipelineRunner",name:"pipeline-runner"},{key:"platformProbe",name:"platform-probe"},{key:"ptz",name:"ptz"},{key:"ptzAutotrack",name:"ptz-autotrack"},{key:"reboot",name:"reboot"},{key:"recording",name:"recording"},{key:"recordingEngine",name:"recording-engine"},{key:"remoteAccess",name:"remote-access"},{key:"restreamer",name:"restreamer"},{key:"settingsStore",name:"settings-store"},{key:"snapshot",name:"snapshot"},{key:"snapshotProvider",name:"snapshot-provider"},{key:"storage",name:"storage"},{key:"storageProvider",name:"storage-provider"},{key:"streamBroker",name:"stream-broker"},{key:"streamingEngine",name:"streaming-engine"},{key:"switch",name:"switch"},{key:"system",name:"system"},{key:"toast",name:"toast"},{key:"turnOrchestrator",name:"turn-orchestrator"},{key:"turnProvider",name:"turn-provider"},{key:"userManagement",name:"user-management"},{key:"webrtc",name:"webrtc"},{key:"webrtcSession",name:"webrtc-session"},{key:"zoneAnalytics",name:"zone-analytics"},{key:"zoneRules",name:"zone-rules"},{key:"zones",name:"zones"}],pi=[a.accessoriesCapability,a.addonPagesCapability,a.addonPagesSourceCapability,a.addonRoutesCapability,a.addonSettingsCapability,a.addonWidgetsCapability,a.addonWidgetsSourceCapability,a.addonsCapability,a.adminUiCapability,a.advancedNotifierCapability,a.alertsCapability,a.audioAnalysisCapability,a.audioAnalyzerCapability,a.audioCodecCapability,a.audioMetricsCapability,a.authProviderCapability,a.authenticationCapability,a.backupCapability,a.batteryCapability,a.brightnessCapability,a.cameraCredentialsCapability,a.cameraStreamsCapability,a.decoderCapability,a.detectionPipelineCapability,a.deviceDiscoveryCapability,a.deviceManagerCapability,a.deviceOpsCapability,a.deviceProviderCapability,a.deviceStateCapability,a.deviceStatusCapability,a.doorbellCapability,a.embeddingEncoderCapability,a.eventsCapability,a.featureProbeCapability,a.integrationsCapability,a.intercomCapability,a.localNetworkCapability,a.logDestinationCapability,a.meshNetworkCapability,a.meshOrchestratorCapability,a.metricsProviderCapability,a.motionCapability,a.motionDetectionCapability,a.motionTriggerCapability,a.nativeObjectDetectionCapability,a.networkAccessCapability,a.networkQualityCapability,a.nodesCapability,a.notificationOutputCapability,a.osdCapability,a.pipelineAnalyticsCapability,a.pipelineExecutorCapability,a.pipelineOrchestratorCapability,a.pipelineRunnerCapability,a.platformProbeCapability,a.ptzCapability,a.ptzAutotrackCapability,a.rebootCapability,a.recordingCapability,a.recordingEngineCapability,a.remoteAccessCapability,a.restreamerCapability,a.settingsStoreCapability,a.snapshotCapability,a.snapshotProviderCapability,a.storageCapability,a.storageProviderCapability,a.streamBrokerCapability,a.streamingEngineCapability,a.switchCapability,a.systemCapability,a.toastCapability,a.turnOrchestratorCapability,a.turnProviderCapability,a.userManagementCapability,a.webrtcCapability,a.webrtcSessionCapability,a.zoneAnalyticsCapability,a.zoneRulesCapability,a.zonesCapability],hi=["accessories","battery","brightness","camera-credentials","device-discovery","device-status","doorbell","feature-probe","intercom","motion","motion-trigger","native-object-detection","osd","ptz","ptz-autotrack","snapshot","switch"];function gi(r){try{const i=new URL(r);return!i.username&&!i.password?r:(i.username="",i.password="",i.toString())}catch{return r}}class Si{constructor(i){this.capacity=i,this.items=Array.from({length:i})}items;head=0;tail=0;count=0;get size(){return this.count}push(i){this.items[this.tail]=i,this.tail=(this.tail+1)%this.capacity,this.count<this.capacity?this.count++:this.head=(this.head+1)%this.capacity}drain(i){const e=[],o=Math.min(i,this.count);for(let c=0;c<o;c++)e.push(this.items[this.head]),this.items[this.head]=void 0,this.head=(this.head+1)%this.capacity;return this.count-=o,e}}function yi(r,i,e){const o={};for(const c of Object.keys(e))o[c]=l=>r.addons.custom.mutate({addonId:i,action:c,input:l});return o}n.ACCESSORY_LABEL=a.ACCESSORY_LABEL;n.APPLE_SA_TO_MACRO=a.APPLE_SA_TO_MACRO;n.AUDIO_BACKEND_CHOICES=a.AUDIO_BACKEND_CHOICES;n.AUDIO_MACRO_LABELS=a.AUDIO_MACRO_LABELS;n.AccessoriesStatusSchema=a.AccessoriesStatusSchema;n.AccessoryKind=a.AccessoryKind;n.AddonAutoUpdateSchema=a.AddonAutoUpdateSchema;n.AddonListItemSchema=a.AddonListItemSchema;n.AddonPageDeclarationSchema=a.AddonPageDeclarationSchema;n.AddonPageInfoSchema=a.AddonPageInfoSchema;n.AgentLoadSummarySchema=a.AgentLoadSummarySchema;n.AlertSchema=a.AlertSchema;n.AlertSeveritySchema=a.AlertSeveritySchema;n.AlertSourceSchema=a.AlertSourceSchema;n.AlertStatusSchema=a.AlertStatusSchema;n.ApiKeyRecordSchema=a.ApiKeyRecordSchema;n.ApiKeySummarySchema=a.ApiKeySummarySchema;n.ArchiveEntrySchema=a.ArchiveEntrySchema;n.ArchiveManifestSchema=a.ArchiveManifestSchema;n.AudioAnalysisResultSchema=a.AudioAnalysisResultSchema;n.AudioAnalysisSettingsSchema=a.AudioAnalysisSettingsSchema;n.AudioChunkInputSchema=a.AudioChunkInputSchema;n.AudioClassSummarySchema=a.AudioClassSummarySchema;n.AudioClassificationLabelSchema=a.AudioClassificationLabelSchema;n.AudioClassificationResultSchema=a.AudioClassificationResultSchema;n.AudioCodecInfoSchema=a.AudioCodecInfoSchema;n.AudioDecodeSessionConfigSchema=a.AudioDecodeSessionConfigSchema;n.AudioEncodeSessionConfigSchema=a.AudioEncodeSessionConfigSchema;n.AudioEncodedChunkSchema=a.AudioEncodedChunkSchema;n.AudioEventSchema=a.AudioEventSchema;n.AudioLevelSchema=a.AudioLevelSchema;n.AudioMetricsHistoryPointSchema=a.AudioMetricsHistoryPointSchema;n.AudioMetricsHistorySchema=a.AudioMetricsHistorySchema;n.AudioMetricsSnapshotSchema=a.AudioMetricsSnapshotSchema;n.AudioPcmChunkSchema=a.AudioPcmChunkSchema;n.AuthProviderInfoSchema=a.AuthProviderInfoSchema;n.AuthResultSchema=a.AuthResultSchema;n.AutoUpdateSettingsSchema=a.AutoUpdateSettingsSchema;n.AvailableIntegrationTypeSchema=a.AvailableIntegrationTypeSchema;n.BATTERY_DEVICE_PROFILE=a.BATTERY_DEVICE_PROFILE;n.BackupDestinationInfoSchema=a.BackupDestinationInfoSchema;n.BackupEntrySchema=a.BackupEntrySchema;n.BatteryStatusSchema=a.BatteryStatusSchema;n.BoundingBoxSchema=a.BoundingBoxSchema;n.BrightnessStatusSchema=a.BrightnessStatusSchema;n.BrokerAudioClientSchema=a.BrokerAudioClientSchema;n.BrokerClientsSchema=a.BrokerClientsSchema;n.BrokerDecodedClientSchema=a.BrokerDecodedClientSchema;n.BrokerRtspClientSchema=a.BrokerRtspClientSchema;n.BrokerStatsSchema=a.BrokerStatsSchema;n.BrokerStatusSchema=a.BrokerStatusSchema;n.CAM_PROFILE_ORDER=a.CAM_PROFILE_ORDER;n.CamProfileSchema=a.CamProfileSchema;n.CamStreamKindSchema=a.CamStreamKindSchema;n.CamStreamResolutionSchema=a.CamStreamResolutionSchema;n.CameraCredentialsSchema=a.CameraCredentialsSchema;n.CameraCredentialsStatusSchema=a.CameraCredentialsStatusSchema;n.CameraMetricsSchema=a.CameraMetricsSchema;n.CameraMetricsWithDeviceIdSchema=a.CameraMetricsWithDeviceIdSchema;n.CameraStreamSchema=a.CameraStreamSchema;n.CapabilityBindingsSchema=a.CapabilityBindingsSchema;n.ChargingStatus=a.ChargingStatus;n.ClientNetworkStatsSchema=a.ClientNetworkStatsSchema;n.ClusterAddonNodeDeploymentSchema=a.ClusterAddonNodeDeploymentSchema;n.ClusterAddonStatusEntrySchema=a.ClusterAddonStatusEntrySchema;n.CollectionColumnSchema=a.CollectionColumnSchema;n.CollectionIndexSchema=a.CollectionIndexSchema;n.ConfigEntrySchema=a.ConfigEntrySchema;n.ConfigSectionWithValuesSchema=a.ConfigSectionWithValuesSchema;n.ConfigTabDeclarationSchema=a.ConfigTabDeclarationSchema;n.CreateApiKeyInputSchema=a.CreateApiKeyInputSchema;n.CreateApiKeyResultSchema=a.CreateApiKeyResultSchema;n.CreateIntegrationInputSchema=a.CreateIntegrationInputSchema;n.CreateScopedTokenInputSchema=a.CreateScopedTokenInputSchema;n.CreateScopedTokenResultSchema=a.CreateScopedTokenResultSchema;n.CreateUserInputSchema=a.CreateUserInputSchema;n.CustomActionInputSchema=a.CustomActionInputSchema;n.DEFAULT_AUDIO_ANALYZER_CONFIG=a.DEFAULT_AUDIO_ANALYZER_CONFIG;n.DEFAULT_DECODER_HWACCEL_CONFIG=a.DEFAULT_DECODER_HWACCEL_CONFIG;n.DEVICE_PROFILES=a.DEVICE_PROFILES;n.DEVICE_SETTINGS_CONTRIBUTION_METHODS=a.DEVICE_SETTINGS_CONTRIBUTION_METHODS;n.DEVICE_STATUS_METHOD=a.DEVICE_STATUS_METHOD;n.DecodedFrameSchema=a.DecodedFrameSchema;n.DecoderAssignmentSchema=a.DecoderAssignmentSchema;n.DecoderSessionConfigSchema=a.DecoderSessionConfigSchema;n.DecoderStatsSchema=a.DecoderStatsSchema;n.DeleteIntegrationResultSchema=a.DeleteIntegrationResultSchema;n.DetectorOutputSchema=a.DetectorOutputSchema;n.DeviceDiscoveryStatusSchema=a.DeviceDiscoveryStatusSchema;n.DeviceFeature=a.DeviceFeature;n.DeviceInfoSchema=a.DeviceInfoSchema;n.DeviceNetworkStatsSchema=a.DeviceNetworkStatsSchema;n.DeviceRole=a.DeviceRole;n.DeviceStatusSchema=a.DeviceStatusSchema;n.DeviceType=a.DeviceType;n.DiscoveredChildDeviceSchema=a.DiscoveredChildDeviceSchema;n.DiscoveredChildStatusSchema=a.DiscoveredChildStatusSchema;n.DiscoveredDeviceSchema=a.DiscoveredDeviceSchema;n.DoorbellPressEventSchema=a.DoorbellPressEventSchema;n.DoorbellStatusSchema=a.DoorbellStatusSchema;n.EmbeddingInfoSchema=a.EmbeddingInfoSchema;n.EmbeddingResultSchema=a.EmbeddingResultSchema;n.EncodedPacketSchema=a.EncodedPacketSchema;n.EnrichedWidgetMetadataSchema=a.EnrichedWidgetMetadataSchema;n.EventItemSchema=a.EventItemSchema;n.EventKindSchema=a.EventKindSchema;n.ExposedResourceSchema=a.ExposedResourceSchema;n.FeatureManifestSchema=a.FeatureManifestSchema;n.FeatureProbeStatusSchema=a.FeatureProbeStatusSchema;n.FrameInputSchema=a.FrameInputSchema;n.GlobalMetricsSchema=a.GlobalMetricsSchema;n.HWACCEL_OPTIONS=a.HWACCEL_OPTIONS;n.HealthStatusSchema=a.HealthStatusSchema;n.HistoryPointSchema=a.HistoryPointSchema;n.HistoryResolutionEnum=a.HistoryResolutionEnum;n.InstalledPackageSchema=a.InstalledPackageSchema;n.IntegrationLiteSchema=a.IntegrationLiteSchema;n.IntegrationWithStateSchema=a.IntegrationWithStateSchema;n.IntercomAbilitySchema=a.IntercomAbilitySchema;n.IntercomStatusSchema=a.IntercomStatusSchema;n.LocationStatSchema=a.LocationStatSchema;n.LogEntrySchema=a.LogEntrySchema;n.LogLevelSchema=a.LogLevelSchema;n.LogStreamEntrySchema=a.LogStreamEntrySchema;n.MODEL_FORMATS=a.MODEL_FORMATS;n.MediaFileSchema=a.MediaFileSchema;n.MotionAnalysisResultSchema=a.MotionAnalysisResultSchema;n.MotionEventSchema=a.MotionEventSchema;n.MotionOnMotionChangedDataSchema=a.MotionOnMotionChangedDataSchema;n.MotionRegionSchema=a.MotionRegionSchema;n.MotionSourceEnum=a.MotionSourceEnum;n.MotionSourcesSchema=a.MotionSourcesSchema;n.MotionStatusSchema=a.MotionStatusSchema;n.MotionTriggerRuntimeStateSchema=a.MotionTriggerRuntimeStateSchema;n.MotionTriggerStatusSchema=a.MotionTriggerStatusSchema;n.NativeDetectionSchema=a.NativeDetectionSchema;n.NativeObjectClassEnum=a.NativeObjectClassEnum;n.NativeObjectDetectionStatusSchema=a.NativeObjectDetectionStatusSchema;n.NetworkAccessStatusSchema=a.NetworkAccessStatusSchema;n.NetworkAddressSchema=a.NetworkAddressSchema;n.NetworkEndpointSchema=a.NetworkEndpointSchema;n.NotificationHistoryEntrySchema=a.NotificationHistoryEntrySchema;n.NotificationRuleSchema=a.NotificationRuleSchema;n.NotificationSchema=a.NotificationSchema;n.ObjectEventSchema=a.ObjectEventSchema;n.OrchestratorMetricsSchema=a.OrchestratorMetricsSchema;n.OsdOverlayKindEnum=a.OsdOverlayKindEnum;n.OsdOverlayPatchSchema=a.OsdOverlayPatchSchema;n.OsdOverlaySchema=a.OsdOverlaySchema;n.OsdPositionEnum=a.OsdPositionEnum;n.OsdStatusSchema=a.OsdStatusSchema;n.PIPELINE_FLOW_CAPABILITY_NAMES=a.PIPELINE_FLOW_CAPABILITY_NAMES;n.PIPELINE_OWNER_CAPABILITY_NAMES=a.PIPELINE_OWNER_CAPABILITY_NAMES;n.PackageUpdateSchema=a.PackageUpdateSchema;n.PackageVersionInfoSchema=a.PackageVersionInfoSchema;n.PcmSampleFormatSchema=a.PcmSampleFormatSchema;n.PerScopeBreakdownSchema=a.PerScopeBreakdownSchema;n.PipelineAssignmentSchema=a.PipelineAssignmentSchema;n.PipelineDefaultStepSchema=a.PipelineDefaultStepSchema;n.PipelineEngineChoiceSchema=a.PipelineEngineChoiceSchema;n.PipelineRunResultBridge=a.PipelineRunResultBridge;n.PipelineStepInputSchema=a.PipelineStepInputSchema;n.PlaceholderReasonSchema=a.PlaceholderReasonSchema;n.PolygonPointSchema=a.PolygonPointSchema;n.ProfileSlotSchema=a.ProfileSlotSchema;n.ProfileSlotStatusSchema=a.ProfileSlotStatusSchema;n.ProviderStatusSchema=a.ProviderStatusSchema;n.PtzAutotrackRuntimeStateSchema=a.PtzAutotrackRuntimeStateSchema;n.PtzAutotrackSettingsSchema=a.PtzAutotrackSettingsSchema;n.PtzAutotrackStatusSchema=a.PtzAutotrackStatusSchema;n.PtzAutotrackTargetOptionSchema=a.PtzAutotrackTargetOptionSchema;n.PtzMoveCommandSchema=a.PtzMoveCommandSchema;n.PtzPositionSchema=a.PtzPositionSchema;n.PtzPresetSchema=a.PtzPresetSchema;n.QueryFilterSchema=a.QueryFilterSchema;n.RegisteredStreamSchema=a.RegisteredStreamSchema;n.RemoteAccessEndpointSchema=a.RemoteAccessEndpointSchema;n.RemoteAccessProviderInfoSchema=a.RemoteAccessProviderInfoSchema;n.ReportMotionInputSchema=a.ReportMotionInputSchema;n.RtspRestreamEntrySchema=a.RtspRestreamEntrySchema;n.RunnerCameraConfigSchema=a.RunnerCameraConfigSchema;n.RunnerCameraDeviceUIFields=a.RunnerCameraDeviceUIFields;n.RunnerLocalLoadSchema=a.RunnerLocalLoadSchema;n.RunnerLocalMetricsSchema=a.RunnerLocalMetricsSchema;n.STORAGE_LOCATION_CARDINALITY=a.STORAGE_LOCATION_CARDINALITY;n.ScopedTokenSchema=a.ScopedTokenSchema;n.ScopedTokenSummarySchema=a.ScopedTokenSummarySchema;n.SearchResultSchema=a.SearchResultSchema;n.SegmentSchema=a.SegmentSchema;n.SettingsPatchSchema=a.SettingsPatchSchema;n.SettingsRecordSchema=a.SettingsRecordSchema;n.SettingsSchemaWithValuesSchema=a.SettingsSchemaWithValuesSchema;n.SettingsUpdateResultSchema=a.SettingsUpdateResultSchema;n.SnapshotImageSchema=a.SnapshotImageSchema;n.SpatialDetectionSchema=a.SpatialDetectionSchema;n.StorageAbortUploadInputSchema=a.AbortUploadInputSchema;n.StorageBeginDownloadInputSchema=a.BeginDownloadInputSchema;n.StorageBeginDownloadResultSchema=a.BeginDownloadResultSchema;n.StorageBeginUploadInputSchema=a.BeginUploadInputSchema;n.StorageBeginUploadResultSchema=a.BeginUploadResultSchema;n.StorageEndDownloadInputSchema=a.EndDownloadInputSchema;n.StorageFinalizeUploadInputSchema=a.FinalizeUploadInputSchema;n.StorageLocationRefSchema=a.StorageLocationRefSchema;n.StorageLocationSchema=a.StorageLocationSchema;n.StorageLocationTypeSchema=a.StorageLocationTypeSchema;n.StorageProviderInfoSchema=a.ProviderInfoSchema;n.StorageReadChunkInputSchema=a.ReadChunkInputSchema;n.StorageTestLocationResultSchema=a.TestLocationResultSchema;n.StorageWriteChunkInputSchema=a.WriteChunkInputSchema;n.StreamFormatSchema=a.StreamFormatSchema;n.StreamInfoSchema=a.StreamInfoSchema;n.StreamNetworkStatsSchema=a.StreamNetworkStatsSchema;n.StreamSourceEntrySchema=a.StreamSourceEntrySchema;n.StreamSourceSchema=a.StreamSourceSchema;n.SwitchStatusSchema=a.SwitchStatusSchema;n.SystemMetricsSchema=a.SystemMetricsSchema;n.TestConnectionResultSchema=a.TestConnectionResultSchema;n.ToastSchema=a.ToastSchema;n.TokenScopeSchema=a.TokenScopeSchema;n.TopologyNodeSchema=a.TopologyNodeSchema;n.TopologyProcessSchema=a.TopologyProcessSchema;n.TopologyServiceSchema=a.TopologyServiceSchema;n.TrackSchema=a.TrackSchema;n.TrackStateSchema=a.TrackStateSchema;n.TrackedDetectionSchema=a.TrackedDetectionSchema;n.TurnProviderInfoSchema=a.TurnProviderInfoSchema;n.TurnServerSchema=a.TurnServerSchema;n.UpdateIntegrationInputSchema=a.UpdateIntegrationInputSchema;n.UpdateUserInputSchema=a.UpdateUserInputSchema;n.UserRecordSchema=a.UserRecordSchema;n.UserRoleSchema=a.UserRoleSchema;n.UserSummarySchema=a.UserSummarySchema;n.WELL_KNOWN_TABS=a.WELL_KNOWN_TABS;n.WELL_KNOWN_TAB_MAP=a.WELL_KNOWN_TAB_MAP;n.WebrtcStreamChoiceSchema=a.WebrtcStreamChoiceSchema;n.WebrtcStreamTargetSchema=a.WebrtcStreamTargetSchema;n.WidgetHostEnum=a.WidgetHostEnum;n.WidgetMetadataSchema=a.WidgetMetadataSchema;n.WidgetSizeEnum=a.WidgetSizeEnum;n.YAMNET_TO_MACRO=a.YAMNET_TO_MACRO;n.ZoneKindEnum=a.ZoneKindEnum;n.ZoneRuleModeEnum=a.ZoneRuleModeEnum;n.ZoneRuleSchema=a.ZoneRuleSchema;n.ZoneRuleStageEnum=a.ZoneRuleStageEnum;n.ZoneRulesArraySchema=a.ZoneRulesArraySchema;n.ZoneSchema=a.ZoneSchema;n.ZoneScopeBreakdownSchema=a.ZoneScopeBreakdownSchema;n.accessoriesCapability=a.accessoriesCapability;n.accessoryStableId=a.accessoryStableId;n.addonPagesCapability=a.addonPagesCapability;n.addonPagesSourceCapability=a.addonPagesSourceCapability;n.addonRoutesCapability=a.addonRoutesCapability;n.addonSettingsCapability=a.addonSettingsCapability;n.addonWidgetsCapability=a.addonWidgetsCapability;n.addonWidgetsSourceCapability=a.addonWidgetsSourceCapability;n.addonsCapability=a.addonsCapability;n.adminUiCapability=a.adminUiCapability;n.advancedNotifierCapability=a.advancedNotifierCapability;n.alertsCapability=a.alertsCapability;n.audioAnalysisCapability=a.audioAnalysisCapability;n.audioAnalyzerCapability=a.audioAnalyzerCapability;n.audioCodecCapability=a.audioCodecCapability;n.audioMetricsCapability=a.audioMetricsCapability;n.authProviderCapability=a.authProviderCapability;n.authenticationCapability=a.authenticationCapability;n.backupCapability=a.backupCapability;n.batteryCapability=a.batteryCapability;n.brightnessCapability=a.brightnessCapability;n.cameraCredentialsCapability=a.cameraCredentialsCapability;n.cameraStreamsCapability=a.cameraStreamsCapability;n.decoderCapability=a.decoderCapability;n.detectionPipelineCapability=a.detectionPipelineCapability;n.deviceDiscoveryCapability=a.deviceDiscoveryCapability;n.deviceManagerCapability=a.deviceManagerCapability;n.deviceMatchesProfile=a.deviceMatchesProfile;n.deviceOpsCapability=a.deviceOpsCapability;n.deviceProviderCapability=a.deviceProviderCapability;n.deviceStateCapability=a.deviceStateCapability;n.deviceStatusCapability=a.deviceStatusCapability;n.doorbellCapability=a.doorbellCapability;n.embeddingEncoderCapability=a.embeddingEncoderCapability;n.errMsg=a.errMsg;n.event=a.event;n.eventsCapability=a.eventsCapability;n.expandCapMethods=a.expandCapMethods;n.featureProbeCapability=a.featureProbeCapability;n.getAudioMacroClassIds=a.getAudioMacroClassIds;n.hydrateSchema=a.hydrateSchema;n.integrationsCapability=a.integrationsCapability;n.intercomCapability=a.intercomCapability;n.localNetworkCapability=a.localNetworkCapability;n.logDestinationCapability=a.logDestinationCapability;n.mapAudioLabelToMacro=a.mapAudioLabelToMacro;n.meshNetworkCapability=a.meshNetworkCapability;n.meshOrchestratorCapability=a.meshOrchestratorCapability;n.method=a.method;n.metricsProviderCapability=a.metricsProviderCapability;n.motionCapability=a.motionCapability;n.motionDetectionCapability=a.motionDetectionCapability;n.motionTriggerCapability=a.motionTriggerCapability;n.nativeObjectDetectionCapability=a.nativeObjectDetectionCapability;n.networkAccessCapability=a.networkAccessCapability;n.networkQualityCapability=a.networkQualityCapability;n.nodesCapability=a.nodesCapability;n.notificationOutputCapability=a.notificationOutputCapability;n.osdCapability=a.osdCapability;n.pipelineAnalyticsCapability=a.pipelineAnalyticsCapability;n.pipelineExecutorCapability=a.pipelineExecutorCapability;n.pipelineOrchestratorCapability=a.pipelineOrchestratorCapability;n.pipelineRunnerCapability=a.pipelineRunnerCapability;n.platformProbeCapability=a.platformProbeCapability;n.ptzAutotrackCapability=a.ptzAutotrackCapability;n.ptzCapability=a.ptzCapability;n.rebootCapability=a.rebootCapability;n.recordingCapability=a.recordingCapability;n.recordingEngineCapability=a.recordingEngineCapability;n.remoteAccessCapability=a.remoteAccessCapability;n.resolveDeviceProfile=a.resolveDeviceProfile;n.restreamerCapability=a.restreamerCapability;n.settingsStoreCapability=a.settingsStoreCapability;n.snapshotCapability=a.snapshotCapability;n.snapshotProviderCapability=a.snapshotProviderCapability;n.storageCapability=a.storageCapability;n.storageProviderCapability=a.storageProviderCapability;n.streamBrokerCapability=a.streamBrokerCapability;n.streamingEngineCapability=a.streamingEngineCapability;n.switchCapability=a.switchCapability;n.systemCapability=a.systemCapability;n.toastCapability=a.toastCapability;n.turnOrchestratorCapability=a.turnOrchestratorCapability;n.turnProviderCapability=a.turnProviderCapability;n.userManagementCapability=a.userManagementCapability;n.webrtcCapability=a.webrtcCapability;n.webrtcClientHintsSchema=a.webrtcClientHintsSchema;n.webrtcSessionCapability=a.webrtcSessionCapability;n.zoneAnalyticsCapability=a.zoneAnalyticsCapability;n.zoneRulesCapability=a.zoneRulesCapability;n.zonesCapability=a.zonesCapability;n.ALL_CAPABILITY_DEFINITIONS=pi;n.BACKEND_TO_FORMAT=Q;n.BaseAddon=Ie;n.BaseDevice=Wt;n.BaseDeviceProvider=$t;n.CAPABILITY_NAMES=ui;n.CAPABILITY_ROUTER_KEYS=mi;n.CAP_NAMES_WITH_STATUS=hi;n.COCO_80_LABELS=_t;n.COCO_TO_MACRO=Nt;n.DEFAULT_ADDON_GROUP=Ce;n.DEFAULT_ADDON_PLACEMENT=Ae;n.DEFAULT_FEATURES=ut;n.DEFAULT_LOCATION_SUBDIRS=at;n.DEFAULT_RETENTION=ht;n.DEVICE_TYPE_INFO=zt;n.DeviceConfig=R;n.DeviceRuntimeState=H;n.DisposerChain=Ke;n.ElementConfigStore=Pt;n.EventCategory=_;n.EventSourceType=Me;n.HF_BASE_URL=gt;n.HF_REPO=Te;n.MACRO_LABELS=Bt;n.PYTHON_SCRIPT=Le;n.RECOGNITION_TYPES=pt;n.RUNTIME_DEFAULTS=St;n.RUNTIME_TO_FORMAT=qe;n.ReadinessRegistry=Xe;n.ReadinessTimeoutError=De;n.RingBuffer=Si;n.STORAGE_LOCATION_TYPES=it;n.STREAM_QUALITY_LABELS=we;n.SUB_DETECTION_TYPES=mt;n.SystemMirror=oi;n.asBoolean=vt;n.asJsonArray=yt;n.asJsonObject=Oe;n.asNumber=bt;n.asString=ft;n.autoAssignProfiles=lt;n.bindAddonActions=yi;n.classifyStream=rt;n.classifyStreams=Re;n.cosineSimilarity=It;n.createDeviceProxy=xe;n.createEvent=Y;n.createLazyTrpcSource=J;n.createMirrorSource=ze;n.createRuntimeStateBridge=Ut;n.createSliceHandle=f;n.createSystemProxy=ti;n.customAction=li;n.defineCustomActions=di;n.emitDownForOwnedCaps=tt;n.emitReadiness=ke;n.evaluateZoneRules=Xt;n.formatForBackend=Rt;n.formatForRuntime=Mt;n.hfModelUrl=kt;n.isAgentOnlyPlacement=Ye;n.isDeployableToAgent=Ze;n.isEvent=Je;n.maskUrlCredentials=gi;n.normalizeAddonInitResult=Pe;n.parseCameraStreamConfig=dt;n.parseJsonArray=At;n.parseJsonObject=Ct;n.parseJsonUnknown=V;n.pythonScriptForBackend=Tt;n.readinessKey=W;n.requiresPython=Ot;n.resolveAddonExecution=N;n.resolveAddonGroup=Ve;n.resolveAddonPlacement=Qe;n.resolveAddonRuntime=Et;n.resolveDetectionRuntime=_e;n.resolveModelFormat=wt;n.runInferenceStep=qt;n.scopeKey=E;n.streamPixels=Ee;n.streamQualityLabel=nt;n.toDeviceSummary=Be;n.toStreamSourceEntry=st;n.zodEntriesToConfigUI=Ht});export default fi();