@camstack/addon-admin-ui 1.1.32 → 1.1.33

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 (74) hide show
  1. package/dist/assets/{AddLocationWizard-B49NZRL3.js → AddLocationWizard-Bb1KEhbs.js} +1 -1
  2. package/dist/assets/{AddonCollectionPage-D6WEaUrV.js → AddonCollectionPage-BQeUbBVN.js} +1 -1
  3. package/dist/assets/{Addons-C7wjP72v.js → Addons-DVlfv3ie.js} +1 -1
  4. package/dist/assets/{AdminTabs-ByKyAQ9o.js → AdminTabs-jD4aT4VZ.js} +1 -1
  5. package/dist/assets/{BrokerForm-D7z9SPAh.js → BrokerForm-BKrDZ7V2.js} +1 -1
  6. package/dist/assets/{Capabilities-BBmYPVBS.js → Capabilities-BDlExloe.js} +1 -1
  7. package/dist/assets/{CapabilityBadges-DW98scbL.js → CapabilityBadges-BoHKzNdB.js} +1 -1
  8. package/dist/assets/{Cluster-CKbkQBJg.js → Cluster-DUV-CTPC.js} +1 -1
  9. package/dist/assets/{Dashboard-BIveE3fe.js → Dashboard-CpXOL9sX.js} +1 -1
  10. package/dist/assets/{Data-CG1ffVYI.js → Data-CAMBg2A9.js} +1 -1
  11. package/dist/assets/{DetectionIntelligence-m3Gblh62.js → DetectionIntelligence-BaTg_nGu.js} +1 -1
  12. package/dist/assets/{DeviceDetail-CxJp1Pzo.js → DeviceDetail-B2QGJv1o.js} +1 -1
  13. package/dist/assets/{Devices-ll8M1Ncu.js → Devices-B7BKpRMe.js} +1 -1
  14. package/dist/assets/{EmbedPlayerPage--mX_qWe2.js → EmbedPlayerPage-BHu_AjMG.js} +1 -1
  15. package/dist/assets/{FormBuilder-BOR8MwQh.js → FormBuilder-CQF_y_BI.js} +1 -1
  16. package/dist/assets/{Identity-03jTBtOY.js → Identity-MMOFWetJ.js} +1 -1
  17. package/dist/assets/{IntegrationDetail-CrMY_tqZ.js → IntegrationDetail-B-4B1ib8.js} +1 -1
  18. package/dist/assets/{Integrations-BbLuZkw-.js → Integrations-BR2MPBfF.js} +1 -1
  19. package/dist/assets/{Integrations-DTB0Q8Iq.js → Integrations-DrajAqMo.js} +1 -1
  20. package/dist/assets/{Logs-CaepNhYY.js → Logs-7eq1Ylpg.js} +1 -1
  21. package/dist/assets/{MotionZonesSettings-Ben395kc.js → MotionZonesSettings-Ci9ptw7k.js} +1 -1
  22. package/dist/assets/{MyAccess-CzSk-u6_.js → MyAccess-Bb-VOtTD.js} +1 -1
  23. package/dist/assets/{Network-D3Sgp6jH.js → Network-D4tyc2LO.js} +1 -1
  24. package/dist/assets/{NodeAddonsSettingsPanel-B6PqT-t7.js → NodeAddonsSettingsPanel-CPQDiGUL.js} +1 -1
  25. package/dist/assets/{NotificationTargets-DJG6lTeh.js → NotificationTargets-CIG2krKX.js} +1 -1
  26. package/dist/assets/{Pipeline-BDZ0jYN9.js → Pipeline-DPfrRb1r.js} +1 -1
  27. package/dist/assets/{PrivacyMaskSettings-DcbT3P11.js → PrivacyMaskSettings-RmoLio8l.js} +1 -1
  28. package/dist/assets/{ProviderIcon-BAt5zH7S.js → ProviderIcon-5UKnj0ml.js} +1 -1
  29. package/dist/assets/{ScanNetworkModal-CDsYObTW.js → ScanNetworkModal-BR1YchhY.js} +1 -1
  30. package/dist/assets/{Settings-CfIfwWWT.js → Settings-Bj6gEjUi.js} +1 -1
  31. package/dist/assets/{Showroom-Bqct8dz-.js → Showroom-CN407CxR.js} +1 -1
  32. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-C98kaHYZ.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DKf7lPrN.js} +1 -1
  33. package/dist/assets/{build-cluster-graph-rMGHm8c-.js → build-cluster-graph-BS_JXKFR.js} +1 -1
  34. package/dist/assets/circle-check-big-C4U6tvtn.js +1 -0
  35. package/dist/assets/{copy-CiComBfB.js → copy-CcPHXe-n.js} +1 -1
  36. package/dist/assets/{dist-B6KoWNcX.js → dist-DEGy5BmY.js} +1 -1
  37. package/dist/assets/{dist-BQHV09qT.js → dist-TNNImQWr.js} +1 -1
  38. package/dist/assets/{download-BuqeRkSg.js → download-CcFk5nYG.js} +1 -1
  39. package/dist/assets/{hostInit-CLd0-6Wi.js → hostInit-C8t2JXO5.js} +1 -1
  40. package/dist/assets/index-2HwvWrOH.css +2 -0
  41. package/dist/assets/{index-Cc9fD-gx.js → index-BYgWJtf5.js} +3 -3
  42. package/dist/assets/{key-round-eOR5havz.js → key-round-TQn0w_dG.js} +1 -1
  43. package/dist/assets/{mf-entry-bootstrap-0-f3c297a2.js → mf-entry-bootstrap-0-b66afa31.js} +2 -2
  44. package/dist/assets/{pencil-Ba6F99Ky.js → pencil-D1CTOg1g.js} +1 -1
  45. package/dist/assets/{player-overlays-CTSvk_LT.js → player-overlays-DEJsZ4vG.js} +1 -1
  46. package/dist/assets/plus-DrLbwu0n.js +1 -0
  47. package/dist/assets/{radio-J1OjdHB9.js → radio-CzoEePni.js} +1 -1
  48. package/dist/assets/{refresh-cw-CqOhKMTh.js → refresh-cw-DDSHPs-V.js} +1 -1
  49. package/dist/assets/remoteEntry-DNq1lvEN.js +1 -0
  50. package/dist/assets/{rotate-ccw-BCts0SIy.js → rotate-ccw-Pzaw7mWz.js} +1 -1
  51. package/dist/assets/rotate-cw-ByRfLyLz.js +1 -0
  52. package/dist/assets/search-UkoX7xbY.js +1 -0
  53. package/dist/assets/{server-C-bvt-pD.js → server-LYykgVAy.js} +1 -1
  54. package/dist/assets/{sparkles-DjNz_0u-.js → sparkles-B0a6rPfh.js} +1 -1
  55. package/dist/assets/square-BQPPB1Xy.js +1 -0
  56. package/dist/assets/{square-check-big-DwJspzeZ.js → square-check-big-C5d9oxaD.js} +1 -1
  57. package/dist/assets/{src-DdZmgXMF.js → src-BLOkTPDQ.js} +5 -5
  58. package/dist/assets/{src-DOrkbNeH.js → src-Cu3jNb29.js} +1 -1
  59. package/dist/assets/{upload-CKV8eS2H.js → upload-DVSP-lTI.js} +1 -1
  60. package/dist/assets/{useDevice-CXedlGPP.js → useDevice-zkPtbbLX.js} +1 -1
  61. package/dist/assets/{useEventInvalidation-CaNVSWxK.js → useEventInvalidation-DFTYybVh.js} +1 -1
  62. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-B1Emnhxt.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BdM04S1e.js} +2 -2
  63. package/dist/assets/{wifi-CUZMfwFz.js → wifi-BFz9o2wa.js} +1 -1
  64. package/dist/assets/{zap-aXoc7k_J.js → zap-Df269N-s.js} +1 -1
  65. package/dist/index.html +6 -6
  66. package/dist/server/addon.js +1 -1
  67. package/package.json +1 -1
  68. package/dist/assets/circle-check-big-DQ3guN_r.js +0 -1
  69. package/dist/assets/index-CdGv2Hwk.css +0 -2
  70. package/dist/assets/plus-CE0W2UFU.js +0 -1
  71. package/dist/assets/remoteEntry-DAiYaCUD.js +0 -1
  72. package/dist/assets/rotate-cw-BCnMfcJH.js +0 -1
  73. package/dist/assets/search-DKGrktz2.js +0 -1
  74. package/dist/assets/square-CUAs3tdB.js +0 -1
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/__vite-browser-external-NEUUz2mh.js","assets/rolldown-runtime-Cyuzqnbw.js"])))=>i.map(i=>d[i]);
2
- import{a as e,r as t}from"./rolldown-runtime-Cyuzqnbw.js";import{t as n}from"./vite-preload-helper-zJ_50EbN.js";import{A as r,C as i,D as a,E as o,O as s,S as c,T as l,_ as u,a as d,b as f,c as ee,d as p,f as te,g as m,h,i as ne,j as re,k as g,l as ie,m as ae,n as oe,o as se,p as _,r as ce,s as le,t as ue,u as v,v as de,w as y,x as fe,y as b}from"./schemas-CuE8EXQ7.js";var pe=v([`singleton`,`device`,`widget`]),me=y({capName:a(),kind:pe,deviceId:i().optional(),reachable:m(),latencyMs:i(),error:a().optional()}),he=y({addonId:a(),caps:h(me).readonly(),widgets:h(me).readonly()}),ge=y({nodeId:a(),addons:h(he).readonly()}),_e=y({ok:m(),degraded:m(),checkedAt:a(),nodes:h(ge).readonly(),summary:y({total:i(),reachable:i(),unreachable:i()})}),ve=y({id:a(),name:a(),category:a().optional(),description:a().optional(),icon:a().optional()}),ye=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],x=y({url:a(),sizeMB:i(),isDirectory:m().optional(),files:h(a()).readonly().optional(),runtimes:h(v([`node`,`python`])).readonly().optional()}),be=y({url:a(),filename:a(),sizeMB:i()}),xe=y({onnx:x.optional(),coreml:x.optional(),openvino:x.optional(),tflite:x.optional(),pt:x.optional()}),Se=y({id:a(),name:a(),description:a(),formats:xe,inputSize:y({width:i(),height:i()}),labels:h(ve).readonly(),inputLayout:v([`nchw`,`nhwc`]).optional(),inputNormalization:v([`zero-one`,`imagenet`,`none`]).optional(),preprocessMode:v([`letterbox`,`resize`]).optional(),faceAlignment:m().optional(),extraFiles:h(be).readonly().optional()}),Ce=b(`format`,[y({format:c(`openvino`),precisions:h(v([`fp16`,`int8`])).min(1).readonly()}),y({format:c(`coreml`)})]),we=y({id:a().regex(/^[a-zA-Z0-9._-]+$/),name:a(),labels:h(ve).readonly(),inputSize:y({width:i(),height:i()}),inputLayout:v([`nchw`,`nhwc`]).optional(),inputNormalization:v([`zero-one`,`imagenet`,`none`]).optional(),preprocessMode:v([`letterbox`,`resize`]).optional(),outputFormat:v([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:m().optional()}),Te=y({format:v(ye),precision:v([`fp16`,`int8`]).optional(),sizeMB:i(),validated:m(),files:h(a()).readonly()}),Ee=y({entry:Se,artifacts:h(Te).readonly()}),De=class{disposers=[];disposed=!1;onError;constructor(e={}){this.onError=e.onError??((e,t)=>{console.error(`[DisposerChain] disposer #${t} threw`,e)})}add(e){if(this.disposed){try{let t=e();t&&typeof t.then==`function`&&t.catch(e=>this.onError(e,-1))}catch(e){this.onError(e,-1)}return()=>void 0}return this.disposers.push(e),()=>{let 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;let e=this.disposers.slice().toReversed();this.disposers=[];for(let t=0;t<e.length;t++){let n=e[t];try{let e=n();e&&typeof e.then==`function`&&await e}catch(n){this.onError(n,e.length-1-t)}}}},Oe=`hub-only`;function ke(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function Ae(e){let t=ke(e).placement;return t===`any-node`||t===`agent-only`}function je(e){return ke(e).placement===`agent-only`}function Me(e){return ke(e).group}function Ne(e,t){return e.execution?.group??t}function Pe(e){return ke(e).placement}var Fe=function(e){return e.SystemBoot=`system.boot`,e.SystemAddonsReady=`system.addons-ready`,e.SystemRestarting=`system.restarting`,e.SystemRestartCompleted=`system.restart-completed`,e.SystemReadyState=`system.ready-state`,e.AddonStarted=`addon.started`,e.AddonStopped=`addon.stopped`,e.AddonRestarted=`addon.restarted`,e.AddonUpdated=`addon.updated`,e.AddonInstalled=`addon.installed`,e.AddonUninstalled=`addon.uninstalled`,e.AddonCrashed=`addon.crashed`,e.AddonError=`addon.error`,e.AddonPageReady=`addon.page-ready`,e.AddonWidgetReady=`addon.widget-ready`,e.AddonLoadFailed=`addon.load-failed`,e.AddonLoadRecovered=`addon.load-recovered`,e.AddonRetryScheduled=`addon.retry-scheduled`,e.AddonRetryAttempting=`addon.retry-attempting`,e.DeviceRegistered=`device.registered`,e.DeviceUnregistered=`device.unregistered`,e.DeviceEnabled=`device.enabled`,e.DeviceDisabled=`device.disabled`,e.DeviceSettingsUpdated=`device.settings-updated`,e.DeviceBindingsChanged=`device.bindings-changed`,e.DeviceMetaChanged=`device.meta-changed`,e.DeviceSourceInfoChanged=`device.source-info-changed`,e.DeviceStreamsRegistered=`device.streams-registered`,e.DeviceProvisioned=`device.provisioned`,e.DeviceReady=`device.ready`,e.IntegrationEnabled=`integration.enabled`,e.IntegrationDisabled=`integration.disabled`,e.IntegrationDeleted=`integration.deleted`,e.BrokerStatusChanged=`broker.status-changed`,e.BrokerMessage=`broker.message`,e.ProviderStarted=`provider.started`,e.ProviderStopped=`provider.stopped`,e.ProcessCrashed=`process.crashed`,e.ProcessRestartScheduled=`process.restart_scheduled`,e.ProcessRestarted=`process.restarted`,e.RecordingStarted=`recording.started`,e.RecordingStopped=`recording.stopped`,e.RecordingError=`recording.error`,e.RecordingHealthDegraded=`recording.health.degraded`,e.RecordingStorageCritical=`recording.storage.critical`,e.RecordingSegmentWritten=`recording.segment.written`,e.RecordingPolicyFallback=`recording.policy.fallback`,e.RecordingRetentionCompleted=`recording.retention.completed`,e.DetectionEvent=`detection.event`,e.SessionTrackNew=`session.track.new`,e.SessionTrackExpired=`session.track.expired`,e.BenchmarkProgress=`benchmark.progress`,e.PlatformProbePhase=`platform-probe.phase`,e.PipelineProgress=`pipeline.progress`,e.PipelineTrace=`pipeline.trace`,e.PipelineInferenceResult=`pipeline.inference-result`,e.PipelineCameraAssigned=`pipeline.camera-assigned`,e.PipelineCameraUnassigned=`pipeline.camera-unassigned`,e.PipelineCameraUpdated=`pipeline.camera-updated`,e.PipelineRunnerLoadSnapshot=`pipeline.runner-load-snapshot`,e.PipelineCameraMetricsSnapshot=`pipeline.camera-metrics-snapshot`,e.StreamBrokerMetricsSnapshot=`stream-broker.metrics-snapshot`,e.StreamBrokerOnCamStreamDemand=`stream-broker.onCamStreamDemand`,e.StreamBrokerOnCamStreamIdle=`stream-broker.onCamStreamIdle`,e.StreamBrokerOnRequestStreamSourceRefresh=`stream-broker.onRequestStreamSourceRefresh`,e.StreamParamsChanged=`stream-params.changed`,e.DeviceStateChanged=`device.state-changed`,e.BatteryOnStatusChanged=`battery.onStatusChanged`,e.BatteryOnWakeStarted=`battery.onWakeStarted`,e.DoorbellOnPressed=`doorbell.onPressed`,e.EventEmitted=`event-emitter.event`,e.PipelineEngineMetricsSnapshot=`pipeline.engine-metrics-snapshot`,e.PipelineEngineProvisioning=`pipeline.engine-provisioning`,e.ClusterTopologySnapshot=`cluster.topology-snapshot`,e.MetricsNodeResourcesSnapshot=`metrics.node-resources-snapshot`,e.MetricsNodeProcessesSnapshot=`metrics.node-processes-snapshot`,e.CapabilityBindingChanged=`capability.binding-changed`,e.ModelDownloadProgress=`model.download.progress`,e.AgentRegistered=`agent.registered`,e.AgentUnregistered=`agent.unregistered`,e.AgentOnline=`agent.online`,e.AgentOffline=`agent.offline`,e.WorkerOnline=`worker.online`,e.WorkerOffline=`worker.offline`,e.AgentTaskDispatched=`agent.task.dispatched`,e.AgentTaskAssigned=`agent.task.assigned`,e.AgentTrpcConnected=`agent.trpc.connected`,e.AgentWsConnected=`agent.ws.connected`,e.AgentWsDisconnected=`agent.ws.disconnected`,e.AgentBackupActivated=`agent.backup.activated`,e.OrchestrationSettingsUpdated=`orchestration.settings-updated`,e.PipelineAgentHwaccelChanged=`pipeline.agent-hwaccel-changed`,e.MotionAnalysis=`detection.motion-analysis`,e.MotionZonesRaw=`detection.motion-zones-raw`,e.MotionOnMotionChanged=`motion.on-motion-changed`,e.DetectionResult=`detection.result`,e.DetectionRaw=`detection.raw`,e.DetectionCameraNative=`detection.camera-native`,e.PipelineAudioInferenceResult=`pipeline.audio-inference-result`,e.DetectionPhaseTransition=`detection.phase-transition`,e.ProviderMotion=`provider.motion`,e.ProviderDetection=`provider.detection`,e.EnrichmentEmbeddingStored=`enrichment.embedding.stored`,e.EnrichmentSceneStateChanged=`enrichment.scene.state-changed`,e.EnrichmentActivitySummary=`enrichment.activity.summary`,e.PipelineAnalyticsTrackStarted=`pipeline-analytics.track-started`,e.PipelineAnalyticsTrackEnded=`pipeline-analytics.track-ended`,e.PipelineAnalyticsDetectionEvent=`pipeline-analytics.detection-event`,e.PipelineAnalyticsFrameTracked=`pipeline-analytics.frame-tracked`,e.FrigateLiveEvent=`frigate.live-event`,e.CameraStreamsProfileSlotsChanged=`camera-streams.onProfileSlotsChanged`,e.StreamOnline=`stream.online`,e.StreamOffline=`stream.offline`,e.NetworkTunnelStarted=`network.tunnel.started`,e.NetworkTunnelStopped=`network.tunnel.stopped`,e.LocalNetworkChanged=`network.local.changed`,e.MeshNetworkChanged=`network.mesh.changed`,e.BackupCompleted=`backup.completed`,e.BackupRestored=`backup.restored`,e.NotificationDispatched=`notification.dispatched`,e.NotificationFailed=`notification.failed`,e.DeviceUpdated=`device.updated`,e.DeviceOnline=`device.online`,e.DeviceOffline=`device.offline`,e.DeviceAwake=`device.awake`,e.DeviceSleeping=`device.sleeping`,e.RetentionCleanup=`retention.cleanup`,e.AddonsBulkUpdateProgress=`addons.bulk-update-progress`,e.AddonsJobProgress=`addons.job-progress`,e.AddonsJobLog=`addons.job-log`,e.AccessoriesChildVisibilityChanged=`accessories.onChildVisibilityChanged`,e.AccessoriesChanged=`accessories.onAccessoriesChanged`,e.ModelConvertProgress=`model-convert.progress`,e}({}),Ie=[{id:`overview`,label:`Overview`,icon:`layout-dashboard`,order:-10},{id:`general`,label:`General`,icon:`settings`,order:0},{id:`image`,label:`Image`,icon:`image`,order:5},{id:`light`,label:`Light`,icon:`lightbulb`,order:7},{id:`motion`,label:`Motion`,icon:`activity`,order:10},{id:`audio`,label:`Audio`,icon:`mic`,order:12},{id:`alarms`,label:`Alarms`,icon:`bell-ring`,order:13},{id:`snapshot`,label:`Snapshot`,icon:`camera`,order:15},{id:`osd`,label:`OSD`,icon:`type`,order:18},{id:`stream-broker`,label:`Stream Broker`,icon:`radio`,order:20},{id:`streaming`,label:`Streaming`,icon:`video`,order:35},{id:`ptz`,label:`PTZ`,icon:`move`,order:40},{id:`consumables`,label:`Consumables`,icon:`recycle`,order:44},{id:`pipeline`,label:`Detection Pipeline`,icon:`cpu`,order:39},{id:`detection-pipeline`,label:`Detection pipeline`,icon:`cpu`,order:39},{id:`zones`,label:`Detection`,icon:`shapes`,order:38},{id:`analytics`,label:`Analytics`,icon:`activity`,order:37},{id:`live-stats`,label:`Live Stats`,icon:`activity`,order:39},{id:`recording`,label:`Recording`,icon:`circle-dot`,order:40},{id:`engine`,label:`Inference Engine`,icon:`zap`,order:41},{id:`scheduler`,label:`Scheduler`,icon:`list-checks`,order:42},{id:`decoder`,label:`Decoder`,icon:`film`,order:43},{id:`notifications`,label:`Notifications`,icon:`bell`,order:50},{id:`network`,label:`Network`,icon:`globe`,order:60},{id:`storage`,label:`Storage`,icon:`hard-drive`,order:70},{id:`advanced`,label:`Advanced`,icon:`wrench`,order:100}],Le=Object.fromEntries(Ie.map(e=>[e.id,e]));function Re(e){return e.type===`separator`||e.type===`info`||e.type===`qr-code`||e.type===`button`||e.type===`object-array`||e.type===`widget`||e.type===`addon-action-button`||e.type===`device-action-button`}function ze(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Be(e,t))}))}}function Be(e,t){if(Re(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Be(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Be(e,t))}));return{...e,tabs:n}}let n=e.key,r=Object.prototype.hasOwnProperty.call(t,n)?t[n]:void 0,i=e.default;if(e.multiple){let t=Array.isArray(r)?r:r==null?[]:[r],n=e.multiple.itemDefault===void 0?i===void 0?Ve(e)===`string`?``:null:i:e.multiple.itemDefault,a=Math.max(e.multiple.min,t.length),o=[];for(let e=0;e<a;e++)o.push(e<t.length?t[e]:n);return{...e,value:o}}let a=r===void 0?i===void 0?null:i:r;if(e.type===`password`)return{...e,value:``};let o=e.type===`textarea`&&e.isJson&&typeof a==`object`&&a?JSON.stringify(a,null,2):a;return{...e,value:o}}function Ve(e){switch(e.type){case`text`:case`textarea`:case`password`:case`color`:case`probe`:case`timezone`:case`datetime`:return`string`;case`number`:case`slider`:return`number`;case`boolean`:return`boolean`;default:return`other`}}function He(e,t){return e.category===t}function Ue(e,t,n){return{id:typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2),timestamp:new Date,source:t,category:e,data:n}}function We(e,t){let n=t.ts??Date.now();e.emit(Ue(`system.ready-state`,{type:`capability`,id:t.capName,nodeId:t.sourceNodeId},{capName:t.capName,scope:t.scope,state:t.state,generation:t.generation,sourceNodeId:t.sourceNodeId,ts:n}))}function Ge(e){let t=async()=>{let t=(await e.read())[e.key];if(t===void 0)return e.fallback;let n=e.schema.safeParse(t);return n.success?n.data:(e.onParseError?.(e.key,n.error),e.fallback)},n=async t=>{let n=e.schema.parse(t);await e.write({[e.key]:n})};return{get:t,set:n,update:async e=>{await n(e(await t()))}}}function Ke(e){if(e==null||e===``)return`hub`;let t=e.indexOf(`/`);if(t<0)return e;let n=e.slice(0,t);return n===``?`hub`:n}function qe(e,t){return`${e}@${Ke(t)}`}function Je(e,t,n){return e[qe(t,n)]}function Ye(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?qe(i,n):i]=a;return r}function Xe(e,t,n){let r={};for(let[n,i]of Object.entries(e))n.includes(`@`)||t.has(n)||(r[n]=i);for(let i of t){let t=Je(e,i,n);t!==void 0&&(r[i]=t)}return r}var Ze=class{_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 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();let t=await this.onInitialize();this.emitLifecycle(Fe.AddonStarted);let n=$e(t),r=n&&`providers`in n&&n.providers?n.providers:[];return this._registeredCapNames=r.map(e=>e.capability.name),n}postBrokerStart(){this.autoEmitReadiness&&this._registeredCapNames.length>0&&this.emitReadinessForProviders(`ready`)}async onHubReachable(){}async shutdown(){this.emitLifecycle(Fe.AddonStopped),this.autoEmitReadiness&&this.emitReadinessForProviders(`down`),await this.onShutdown();for(let e of this._subscriptions)e();this._subscriptions=[],this._ctx=null}async onShutdown(){}async onConfigChanged(){}field(e){return e}schema(e){return e}globalSettingsSchema(e){return null}deviceSettingsSchema(){return null}async getGlobalSettings(e,t,n){let r=this.globalSettingsSchema(t);if(!r)return{sections:[]};let i=await this.resolveGlobalStore(n,t);return ze(r,e?{...i,...e}:i)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=Ke(e??this._ctx?.kernel?.localNodeId);return r.size>0?Xe(n,r,i):n}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=Ke(this._ctx?.kernel?.localNodeId),i=Ke(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?Ye(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(Fe.AddonUpdated,{level:`global`}),this.maybeAutoRestart(e,this.globalSettingsSchema()))}_perNodeKeysCache=new Map;perNodeKeys(e){let t=e??``,n=this._perNodeKeysCache.get(t);if(n)return n;let r=this.globalSettingsSchema(e),i=new Set(r?r.sections.flatMap(e=>Qe(e.fields)):[]);return this._perNodeKeysCache.set(t,i),i}maybeAutoRestart(e,t){if(!t)return;let n=new Set;for(let e of t.sections)for(let t of e.fields)t.type===`separator`||t.type===`info`||t.requiresRestart&&n.add(t.key);if(n.size===0||!Object.keys(e).some(e=>n.has(e)))return;let r=this._ctx;if(!r)return;let i=r.id;setImmediate(()=>{r.api.addons?.restartAddon?.mutate({addonId:i}).then(()=>{r.logger.info(`addon auto-restart triggered by restart-required setting change`,{meta:{changedFields:Object.keys(e).filter(e=>n.has(e))}})}).catch(e=>{r.logger.error(`addon auto-restart failed`,{meta:{error:e instanceof Error?e.message:String(e)}})})})}async getDeviceSettings(e){let t=this.deviceSettingsSchema();return t?ze(t,await this._ctx?.settings?.readDeviceStore(e)??{}):{sections:[]}}async updateDeviceSettings(e,t){await this._ctx?.settings?.writeDeviceStore(e,t)}_subscriptions=[];watchCapability(e,t){let n=new Set(Array.isArray(e)?e:[e]);this.subscribe({category:`system.ready-state`},e=>{let r=e.data;if(typeof r.capName!=`string`||!n.has(r.capName)||r.scope?.type!==`node`)return;let i=r.scope.nodeId;if(typeof i!=`string`||i.length===0)return;let a=r.capName;r.state===`down`?t.onDown?.(i,a):r.state===`ready`&&t.onReady?.(i,a)})}subscribe(e,t){let n=this.ctx.eventBus.subscribe(e,t);this._subscriptions.push(n)}emitLifecycle(e,t){try{let n=this._ctx;if(!n)return;n.eventBus.emit({id:`${n.id}-${Date.now()}`,timestamp:new Date,source:{type:`addon`,id:n.id,nodeId:n.kernel.localNodeId??`hub`},category:e,data:{addonId:n.id,...t}})}catch{}}emitReadinessForProviders(e){let t=this._ctx;if(!t||this._registeredCapNames.length===0)return;let n=t.kernel?.localNodeId??`hub`,r=n.includes(`/`)?n.split(`/`)[0]:n;for(let n of this._registeredCapNames)try{We(t.eventBus,{capName:n,scope:{type:`node`,nodeId:r},state:e,generation:this._readinessGeneration,sourceNodeId:r})}catch{}}async resolveModelsDir(){let{join:t}=await n(async()=>{let{join:t}=await import(`./__vite-browser-external-NEUUz2mh.js`).then(t=>e(t.default));return{join:t}},__vite__mapDeps([0,1])),{promises:r}=await n(async()=>{let{promises:t}=await import(`./__vite-browser-external-NEUUz2mh.js`).then(t=>e(t.default));return{promises:t}},__vite__mapDeps([0,1])),i=t(this.ctx.nodeDataDir,`models`);return await r.mkdir(i,{recursive:!0}),i}get capabilities(){return this.ctx.capabilities??null}async resolveConfig(){let e=await this.readAddonStoreWithRetry(),t=this.perNodeKeys(),n=Ke(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?Je(e,i,n):e[i];if(a!=null){let e=typeof this.defaults[i];typeof a===e&&(r[i]=a)}}this._config=r}state(e,t,n){return Ge({key:e,schema:t,fallback:n,read:()=>this.readAddonStoreWithRetry(),write:async e=>{await this._ctx?.settings?.writeAddonStore(e)},onParseError:(e,t)=>this._ctx?.logger?.warn?.(`durable-state: stored "${e}" failed validation — using fallback`,{meta:{addonId:this._ctx?.id,key:e,error:String(t)}})})}deviceState(e,t,n,r){return Ge({key:t,schema:n,fallback:r,read:async()=>await this._ctx?.settings?.readDeviceStore(e)??{},write:async t=>{await this._ctx?.settings?.writeDeviceStore(e,t)},onParseError:(t,n)=>this._ctx?.logger?.warn?.(`durable-state: stored device ${e} "${t}" failed validation — using fallback`,{meta:{addonId:this._ctx?.id,deviceId:e,key:t,error:String(n)}})})}async readAddonStoreWithRetry(){let e=this._ctx?.settings;if(!e)return{};let t=[150,350,600,900],n;for(let r=0;r<=t.length;r++)try{return await e.readAddonStore()??{}}catch(e){n=e;let i=e instanceof Error?e.message:String(e);if(!(i.includes(`SqliteSettingsBackend not initialized`)||i.includes(`provider not available`)))throw e;if(r===t.length)break;await new Promise(e=>setTimeout(e,t[r]))}return this._ctx?.logger?.warn?.(`readAddonStore: settings-store unavailable after retries — using defaults`,{meta:{error:n instanceof Error?n.message:String(n)}}),{}}};function Qe(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...Qe(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...Qe(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function $e(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function et(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=tt(t,e.method,e.path);if(!n)return{status:404,headers:{},redirectUrl:null,body:{error:`No route matches ${e.method} ${e.path}`}};let r={status:200,headers:{},redirectUrl:null},i=rt(r),a={params:{...e.params,...n.params},query:e.query,body:e.body,headers:e.headers,...e.user?{user:e.user}:{},...e.scopedToken===void 0?{}:{scopedToken:e.scopedToken}};return await n.route.handler(a,i),r}}}function tt(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=nt(t.path,n);if(e!==null)return{route:t,params:e}}return null}function nt(e,t){let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean);if(n.length!==r.length)return null;let i={};for(let e=0;e<n.length;e++){let t=n[e],a=r[e];if(t.startsWith(`:`))i[t.slice(1)]=a;else if(t!==a)return null}return i}function rt(e){let t={status(n){return e.status=n,t},code(n){return e.status=n,t},send(t){e.body=t},redirect(t){e.redirectUrl=t,e.status===200&&(e.status=302)},header(n,r){return e.headers[n.toLowerCase()]=r,t},type(n){return e.contentType=n,t}};return t}var S={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},it={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},at=[{id:`UTC`,label:`UTC (UTC+0)`,region:`Universal`,stdOffsetMinutes:0,dst:null},{id:`Europe/London`,label:`Europe/London (UTC+0 / BST)`,region:`Europe`,stdOffsetMinutes:0,dst:S},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:S},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:S},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:S},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:S},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:S},{id:`Europe/Istanbul`,label:`Europe/Istanbul (UTC+3)`,region:`Europe`,stdOffsetMinutes:180,dst:null},{id:`America/New_York`,label:`America/New York (UTC−5 / EDT)`,region:`Americas`,stdOffsetMinutes:-300,dst:it},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:it},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:it},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:it},{id:`America/Sao_Paulo`,label:`America/Sao Paulo (UTC−3)`,region:`Americas`,stdOffsetMinutes:-180,dst:null},{id:`Asia/Dubai`,label:`Asia/Dubai (UTC+4)`,region:`Asia`,stdOffsetMinutes:240,dst:null},{id:`Asia/Kolkata`,label:`Asia/Kolkata (UTC+5:30)`,region:`Asia`,stdOffsetMinutes:330,dst:null},{id:`Asia/Singapore`,label:`Asia/Singapore (UTC+8)`,region:`Asia`,stdOffsetMinutes:480,dst:null},{id:`Asia/Shanghai`,label:`Asia/Shanghai (UTC+8)`,region:`Asia`,stdOffsetMinutes:480,dst:null},{id:`Asia/Tokyo`,label:`Asia/Tokyo (UTC+9)`,region:`Asia`,stdOffsetMinutes:540,dst:null},{id:`Australia/Sydney`,label:`Australia/Sydney (UTC+10 / AEDT)`,region:`Oceania`,stdOffsetMinutes:600,dst:{offsetHours:1,startMonth:10,startWeekIndex:1,startWeekday:`Sunday`,startHour:2,endMonth:4,endWeekIndex:1,endWeekday:`Sunday`,endHour:3}}];function ot(e){return at.find(t=>t.id===e)}var C=v([`high`,`mid`,`low`]),st=[`high`,`mid`,`low`],ct=v([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),w=y({width:i().int().positive(),height:i().int().positive()}),lt=y({camStreamId:a().min(1),deviceId:i().int().nonnegative(),kind:ct,url:a().optional(),codec:a().optional(),resolution:w.optional(),fps:i().positive().optional(),label:a().optional(),deviceFeatures:h(a()).optional(),autoEligible:m().optional(),metadata:o(a(),r()).optional()}),ut=v([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),dt=y({deviceId:i().int().nonnegative(),profile:C,brokerId:a(),sourceCamStreamId:a().nullable(),status:ut,resolution:w.optional(),codec:a().optional(),preBufferSec:i().nonnegative().optional(),errorMessage:a().optional()});function ft(e,t){return`${e}/${t}`}function pt(e,t){return`${e}/${t}`}function mt(e){let t=e.indexOf(`/`);if(t<=0)return null;let n=e.slice(0,t),r=e.slice(t+1);if(!/^\d+$/.test(n))return null;let i=C.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function ht(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>st.indexOf(e.profile)-st.indexOf(t.profile)),r=new Set,i=[];for(let e of n){let t=e.sourceCamStreamId;t!==null&&(r.has(t)||(r.add(t),i.push(e)))}return i}var gt=y({id:a(),label:a(),protocol:v([`rtsp`,`rtmp`,`annexb`,`http-mjpeg`,`webrtc`,`custom`]),url:a().optional(),resolution:y({width:i(),height:i()}).readonly().optional(),fps:i().optional(),bitrate:i().optional(),codec:a().optional(),profileHint:C.optional()}),_t=y({type:a(),url:a(),videoCodec:a().optional(),audioCodec:a().optional(),metadata:o(a(),r()).readonly().optional()}),vt=y({type:v([`video`,`audio`]),data:p(Uint8Array),pts:i(),dts:i(),keyframe:m(),codec:a()}),yt=y({data:p(Uint8Array),width:i(),height:i(),format:v([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),timestamp:i()}),T=y({shmId:a(),slot:i().int().nonnegative(),seq:i().int().nonnegative(),width:i().int().positive(),height:i().int().positive(),format:v([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:i(),byteLength:i().int().nonnegative(),nodeId:a(),slotCount:i().int().positive()}),bt=v([`rgb`,`bgr`,`yuv420`,`gray`]),xt=y({brokerId:a(),format:bt,maxFps:i().positive().optional(),tag:a().optional()}),St=y({subscriptionId:a(),maxFps:i().nonnegative()}),Ct=y({data:p(Uint8Array),sampleRate:i().int().positive(),channels:i().int().positive(),timestamp:i()}),wt=y({brokerId:a(),tag:a().optional()}),Tt=y({subscriptionId:a()}),Et=v([`idle`,`connecting`,`streaming`,`error`,`stopped`]),Dt=y({status:Et,inputFps:i(),decodeFps:i(),encodedSubscribers:i(),decodedSubscribers:i(),uptimeMs:i(),bitrateKbps:i(),idrIntervalMs:i(),codec:a().optional(),totalBytes:i(),packetCount:i(),rtspClients:i(),pipeClients:i(),preBufferSec:i(),preBufferMs:i(),preBufferPackets:i(),decoderNodeId:a().nullable(),audio:y({codec:a(),sampleRate:i(),channels:i(),supported:m()}).nullable().optional()}),Ot=y({profile:C,brokerId:a(),url:a(),mutedUrl:a(),enabled:m(),codec:a().optional(),resolution:w.optional()}),kt={preMs:5e3,postMs:1e4},At=i().int().min(0).max(6),jt=/^([01]\d|2[0-3]):[0-5]\d$/,Mt=b(`kind`,[y({kind:c(`always`)}),y({kind:c(`timeOfDay`),start:a().regex(jt),end:a().regex(jt),days:h(At).optional()})]),Nt=v([`continuous`,`onMotion`,`onAudioThreshold`]),Pt=v([`off`,`events`,`continuous`]),Ft=y({motion:m().optional(),audioThresholdDbfs:i().optional()}),It=v([`continuous`,`events`]),Lt=Ft,Rt=y({days:h(At),start:a().regex(jt),end:a().regex(jt),mode:It,triggers:Lt.optional(),preBufferSec:i().min(0).optional(),postBufferSec:i().min(0).optional()}),zt=y({schedule:Mt,mode:Nt,preBufferSec:i().min(0).default(0),postBufferSec:i().min(0).default(0),resetTimeoutOnNewEvent:m().default(!0),thresholdDbfs:i().optional()}),Bt=y({maxAgeDays:i().min(0).optional(),maxSizeGb:i().min(0).optional()}),Vt=y({enabled:m(),mode:Pt.optional(),profiles:h(C).optional(),segmentSeconds:i().int().positive().optional(),schedules:h(Mt).optional(),schedule:Mt.optional(),triggers:Ft.optional(),preBufferSec:i().min(0).optional(),postBufferSec:i().min(0).optional(),rules:h(zt).optional(),bands:h(Rt).optional(),retention:Bt.optional()}),Ht=[0,1,2,3,4,5,6],Ut=`00:00`,Wt=`23:59`;function Gt(e,t,n){let r=e.kind===`timeOfDay`&&e.days?e.days:[...Ht],i=e.kind===`timeOfDay`?e.start:Ut,a=e.kind===`timeOfDay`?e.end:Wt;return t===`continuous`?{days:r,start:i,end:a,mode:t}:{days:r,start:i,end:a,mode:t,...n.triggers?{triggers:n.triggers}:{},...n.preBufferSec===void 0?{}:{preBufferSec:n.preBufferSec},...n.postBufferSec===void 0?{}:{postBufferSec:n.postBufferSec}}}function Kt(e){if(e.bands)return e.bands;if(!e.enabled||e.mode===`off`)return[];let t=e.schedules??(e.schedule?[e.schedule]:[{kind:`always`}]),n=e.mode===`continuous`?`continuous`:`events`;return t.map(t=>Gt(t,n,e))}var qt=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${E(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function Jt(e,t){return`${e}|${E(t)}`}function E(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function Yt(e,t){return e.type===t.type?e.type===`global`||t.type===`global`?!0:e.type===`node`&&t.type===`node`?e.nodeId===t.nodeId:e.type===`device`&&t.type===`device`?e.deviceId===t.deviceId:!1:!1}var Xt=class{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??Zt(),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{let e=this.bus.getRecent({category:`system.ready-state`});for(let t of e)this.ingest(t.data)}catch{}}close(){this.unsubscribeBus(),this.unsubscribeAgentOffline(),this.subscriptions.clear()}get(e,t){return this.snapshot.get(Jt(e,t))??null}getSnapshotForTransport(){return Array.from(this.snapshot.values())}hydrate(e){let t=this.now();for(let n of e){let e=Jt(n.capName,n.scope);if(this.snapshot.has(e))continue;let r={capName:n.capName,scope:n.scope,state:n.state,generation:n.generation,epoch:1,lastChange:t,sourceNodeId:n.sourceNodeId};this.snapshot.set(e,r),this.logger&&this.logger.debug(`readiness: ${n.capName} (${E(n.scope)}) → ${n.state} (hydrated, gen=${n.generation.slice(0,6)})`);let i={capName:n.capName,scope:n.scope,state:n.state,epoch:1,generation:n.generation,sourceNodeId:`hydrated`,ts:t,durationInPrevState:0};for(let e of this.subscriptions)if(e.capName===n.capName&&Yt(e.scope,n.scope))try{e.handler(i)}catch(e){this.logger?.warn(`readiness hydrate handler threw for ${n.capName}: ${e.message??String(e)}`)}}}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,n={}){let r=n.timeoutMs??1/0,i=this.now();return this.get(e,t)?.state===`ready`?Promise.resolve():n.signal?.aborted?Promise.reject(n.signal.reason??Error(`aborted`)):new Promise((a,o)=>{let s=!1,c=this.onReadyState(e,t,e=>{e.state===`ready`&&(s||(s=!0,f(),a()))}),l=Number.isFinite(r)?setTimeout(()=>{s||(s=!0,f(),o(new qt(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${E(t)}) after ${this.now()-i}ms`)},3e4);typeof u.unref==`function`&&u.unref();let d=()=>{s||(s=!0,f(),o(n.signal?.reason??Error(`aborted`)))};n.signal?.addEventListener(`abort`,d,{once:!0});function f(){c(),l!==null&&clearTimeout(l),clearInterval(u),n.signal?.removeEventListener(`abort`,d)}})}onReadyState(e,t,n){let r={capName:e,scope:t,handler:n};this.subscriptions.add(r);let i=this.get(e,t);return i!==null&&queueMicrotask(()=>{this.subscriptions.has(r)&&n({capName:e,scope:t,state:i.state,epoch:i.epoch,generation:i.generation,sourceNodeId:this.sourceNodeId,ts:i.lastChange,durationInPrevState:0})}),()=>{this.subscriptions.delete(r)}}emitTransition(e,t,n){let r=this.now();this.bus.emit(Ue(`system.ready-state`,{type:`capability`,id:e,nodeId:this.sourceNodeId},{capName:e,scope:t,state:n,generation:this.generation,sourceNodeId:this.sourceNodeId,ts:r}))}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;let t=Jt(e.capName,e.scope),n=this.snapshot.get(t)??null,r=this.now(),i;if(i=n===null?+(e.state===`ready`):n.generation!==e.generation&&e.state===`ready`?n.epoch+1:n.epoch,n!==null&&n.generation===e.generation&&n.state===e.state)return;let a=n===null?0:Math.max(0,r-n.lastChange),o={capName:e.capName,scope:e.scope,state:e.state,generation:e.generation,epoch:i,lastChange:r,sourceNodeId:e.sourceNodeId};this.snapshot.set(t,o);let s={capName:e.capName,scope:e.scope,state:e.state,epoch:i,generation:e.generation,sourceNodeId:e.sourceNodeId,ts:e.ts,durationInPrevState:a};this.logger&&this.logger.debug(`readiness: ${e.capName} (${E(e.scope)}) → ${e.state} epoch=${i} gen=${e.generation.slice(0,6)} (prev ${a}ms)`);for(let t of this.subscriptions)if(t.capName===e.capName&&Yt(t.scope,e.scope))try{t.handler(s)}catch(t){this.logger?.warn(`readiness handler threw for ${e.capName}: ${t.message??String(t)}`)}}synthesizeDownForNode(e){let t=this.now();for(let[n,r]of this.snapshot){if(r.state===`down`||!(r.scope.type===`node`&&r.scope.nodeId===e||r.scope.type===`device`&&r.sourceNodeId===e))continue;let i=Math.max(0,t-r.lastChange),a={...r,state:`down`,lastChange:t};this.snapshot.set(n,a);let o={capName:r.capName,scope:r.scope,state:`down`,epoch:r.epoch,generation:r.generation,sourceNodeId:this.sourceNodeId,ts:t,durationInPrevState:i};this.logger&&this.logger.debug(`readiness: ${r.capName} (${E(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&Yt(e.scope,r.scope))try{e.handler(o)}catch(e){this.logger?.warn(`readiness handler threw during agent.offline demux for ${r.capName}: ${e.message??String(e)}`)}}}};function Zt(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function Qt(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}var $t=`x-camstack-dataplane-secret`,en=a().regex(/^[a-z][a-zA-Z0-9-]*$/),D=y({id:a().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),type:a(),displayName:a().min(1),providerId:a().min(1),config:o(a(),r()),nodeId:a().optional(),isDefault:m().default(!1),isSystem:m().default(!1),createdAt:i(),updatedAt:i()}),O=g([en,a().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),tn=y({id:a().regex(/^[a-z][a-zA-Z0-9-]*$/,{message:`id must start with a lowercase letter and contain only letters, digits, or hyphens`}),displayName:a().min(1,{message:`displayName must not be empty`}),description:a().optional(),cardinality:v([`single`,`multi`]),defaultsTo:a().optional(),defaultRoot:v([`data`,`media`]).optional()}),nn={high:`High`,mid:`Mid`,low:`Low`};function rn(e){return nn[e]??e.charAt(0).toUpperCase()+e.slice(1)}function an(e){return(e.width??0)*(e.height??0)}function on(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:an(e.metadata??{})})).toSorted((e,t)=>t.px-e.px),n=Array.from({length:e.length});for(let e=0;e<t.length;e++){let{s:r,i}=t[e],a;a=e===0?`high`:e===t.length-1?`low`:`mid`,n[i]={...r,quality:a}}return n}function sn(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function cn(e){let t=e.protocols.find(e=>e.type===`rtsp`&&e.url)??e.protocols.find(e=>e.url),n=t?.type,r=n===`rtsp`?`rtsp`:n===`http`||n===`flv`?`http-mjpeg`:`custom`;return{id:e.id,label:e.label??e.id,protocol:r,url:t?.url,profileHint:e.quality}}function k(e){return typeof e==`string`}function ln(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function un(e){return k(e)&&e.trim()?{url:e}:ln(e)&&k(e.url)&&e.url.trim()?{url:e.url,label:k(e.label)?e.label:void 0}:null}function dn(e){let t=k(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=un(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=k(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:k(e.main_stream_name)?e.main_stream_name:void 0});let i=k(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:k(e.sub_stream_name)?e.sub_stream_name:void 0});let a=k(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:k(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function fn(e){if(e.length===0)return{};let t=on(e),n={},r=t.find(e=>e.quality===`high`),i=t.find(e=>e.quality===`mid`),a=t.find(e=>e.quality===`low`);r&&(n.high=r.id),i&&(n.mid=i.id),a&&(n.low=a.id);let o=r??i??a??t[0];return o&&(n.high||=o.id,n.mid||=o.id,n.low||=o.id),n}var pn={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},mn=[`face`,`plate`],hn=[`face`,`plate`,`clip`,`custom`],gn=y({inputFps:i(),outputFps:i(),avgDecodeTimeMs:i(),droppedFrames:i(),lagMs:i().optional(),effectiveFps:i().optional(),adaptiveFps:i().optional()}),_n=y({codec:a(),maxFps:i().default(0),outputFormat:v([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]).default(`jpeg`),scale:i().default(1),width:i().optional(),height:i().optional(),deviceId:i().int().nonnegative().optional(),tag:a().optional(),frameSink:v([`callback`,`shm`]).default(`callback`),debug:m().optional()}),vn=y({codec:v([`h264`,`h265`,`copy`]),profile:v([`baseline`,`main`,`high`]).optional(),width:i().int().positive().optional(),height:i().int().positive().optional(),fps:i().positive().optional(),bitrateKbps:i().int().positive().optional(),gopFrames:i().int().positive().optional(),bf:i().int().min(0).optional(),preset:v([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:v([`zerolatency`,`film`,`animation`]).optional()}),yn=g([c(`passthrough`),y({codec:v([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:i().int().positive().optional(),sampleRateHz:i().int().positive().optional(),channels:g([c(1),c(2)]).optional()})]),bn=y({video:vn,audio:yn,inputArgs:h(a()).optional(),outputArgs:h(a()).optional()});function xn(e){let t=e.codec?.toLowerCase().replace(/[.\s-]/g,``),n={codec:t===`h265`||t===`hevc`?`h265`:`h264`,...e.resolution?.width===void 0?{}:{width:e.resolution.width},...e.resolution?.height===void 0?{}:{height:e.resolution.height},...e.fps===void 0?{}:{fps:e.fps}};if(!(n.width===void 0&&n.height===void 0&&n.fps===void 0))return{video:n,audio:`passthrough`}}function Sn(e,t,n,r={}){if(e.length===0)return null;let i=`${n}/`,a=e=>({brokerId:e.brokerId,profileId:e.brokerId.startsWith(i)?e.brokerId.slice(i.length):e.brokerId,url:e.url,mutedUrl:e.mutedUrl,enabled:e.enabled,...e.codec===void 0?{}:{codec:e.codec},...e.resolution===void 0?{}:{resolution:e.resolution}});if(t!==`auto`){let n=e.find(e=>e.enabled&&e.url.length>0&&(e.profile===t||e.brokerId===`${i}${t}`));if(n)return a(n)}let o=e.filter(e=>e.enabled&&e.url.length>0);if(o.length===0)return null;let s=r.targetResolution;if(s){let e=o.filter(e=>e.resolution!==void 0);if(e.length>0){let t=Cn(e,s);if(t)return a(t)}}return a(o[0])}function Cn(e,t){let n=t.width*t.height,r,i;for(let t of e){if(t.resolution===void 0)continue;let e=t.resolution.width*t.resolution.height;e>=n?(!r||e<r.pixels)&&(r={entry:t,pixels:e}):(!i||e>i.pixels)&&(i={entry:t,pixels:e})}return r?.entry??i?.entry}var wn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},Tn=function(e){return e.Addon=`addon`,e.Core=`core`,e.Device=`device`,e.Provider=`provider`,e.System=`system`,e}({}),En=`camstack/camstack-models`,Dn=`https://huggingface.co/${En}/resolve/main`,On={"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:[],"ffmpeg.binaryPath":`ffmpeg`,"ffmpeg.hwAccel":`auto`,"ffmpeg.threadCount":0,"auth.tokenExpiry":`24h`},kn=`__camstackNodePin`;function An(e){return{context:{[kn]:e}}}function jn(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,kn);return typeof t==`string`?t:void 0}function Mn(e){return JSON.parse(e)}function Nn(e){return typeof e!=`object`||!e||Array.isArray(e)?null:{...e}}function Pn(e){return Array.isArray(e)?e:[]}function Fn(e,t=``){return typeof e==`string`?e:t}function In(e,t=0){return typeof e==`number`?e:t}function Ln(e,t=!1){return typeof e==`boolean`?e:t}function Rn(e){try{return Nn(Mn(e))}catch{return null}}function zn(e){try{let t=Mn(e);return Array.isArray(t)?t:null}catch{return null}}function Bn(e,t){return`https://huggingface.co/${e}/resolve/main/${t}`}function Vn(e,t){if(e.length!==t.length)return 0;let n=0,r=0,i=0;for(let a=0;a<e.length;a++)n+=e[a]*t[a],r+=e[a]*e[a],i+=t[a]*t[a];let a=Math.sqrt(r)*Math.sqrt(i);return a===0?0:n/a}var Hn=class{elementId;cache={};listeners=new Set;loaded=!1;getBackend;constructor(e,t){this.elementId=e,this.getBackend=typeof t==`function`?t:()=>t}async ensureLoaded(){if(this.loaded)return;let e=this.getBackend();if(!e)throw Error(`ElementConfigStore(${this.elementId}): settings backend not available`);let 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){let t=e.split(`.`),n=this.cache;for(let e of t){if(typeof n!=`object`||!n||Array.isArray(n))return;n=Reflect.get(n,e)}return n}async set(e,t){await this.ensureLoaded(),Un(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(){let e=this.getBackend();if(!e)throw Error(`ElementConfigStore(${this.elementId}): settings backend not available — cannot persist config`);await e.set({collection:`config`,key:this.elementId,value:this.cache})}notifyListeners(){let e=this.getAll();for(let t of this.listeners)try{t(e)}catch{}}};function Un(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e],n=i[t];if(typeof n!=`object`||!n||Array.isArray(n)){let e={};i[t]=e,i=e}else i=n}i[r[r.length-1]]=n}var Wn={cpu:`onnx`,coreml:`onnx`,cuda:`onnx`,tensorrt:`onnx`,"onnx-py":`onnx`,pytorch:`pt`,openvino:`openvino`},Gn={onnx:`onnx`,coreml:`coreml`,openvino:`openvino`,tflite:`tflite`,pytorch:`pt`},Kn={coreml:`coreml_inference.py`,pytorch:`pytorch_inference.py`,openvino:`openvino_inference.py`};function qn(e,t){return e===`node`?`onnx`:{coreml:`coreml`,openvino:`openvino`,pytorch:`pytorch`,"onnx-py":`onnx`,cpu:`onnx`}[t]??t}function Jn(e,t){return e===`node`?Wn[t]??`onnx`:{coreml:`coreml`,openvino:`openvino`,pytorch:`pt`,"onnx-py":`onnx`,cpu:`onnx`}[t]??`onnx`}function Yn(e,t){return!e||e===`auto`?`auto`:qn(e,t??`cpu`)}function Xn(e){return Wn[e]??`onnx`}function Zn(e){return Gn[e]}function Qn(e){return Kn[e]}function $n(e){return e===`coreml`||e===`pytorch`||e===`openvino`}function er(e){return e instanceof Error?e.message:typeof e==`string`?e:String(e)}async function tr(e,t){let n=performance.now();try{return{output:t===void 0?await e():await rr(e(),t),durationMs:nr(performance.now()-n),ok:!0}}catch(e){return{output:void 0,durationMs:nr(performance.now()-n),ok:!1,error:er(e)}}}function nr(e){return Math.round(e*100)/100}function rr(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`Inference timeout after ${t}ms`)),t);e.then(e=>{clearTimeout(i),n(e)}).catch(e=>{clearTimeout(i),r(e)})})}var ir=[{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`}],ar=[{id:`person`,name:`Person`},{id:`vehicle`,name:`Vehicle`},{id:`animal`,name:`Animal`}],or={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},sr=[{id:`speech`,name:`Speech`,icon:`🗣️`},{id:`scream`,name:`Scream / Shout`,icon:`😱`},{id:`crying`,name:`Crying / Baby`,icon:`😢`},{id:`laughter`,name:`Laughter`,icon:`😂`},{id:`music`,name:`Music`,icon:`🎵`},{id:`dog`,name:`Dog`,icon:`🐕`},{id:`cat`,name:`Cat`,icon:`🐈`},{id:`bird`,name:`Bird`,icon:`🐦`},{id:`animal`,name:`Animal (other)`,icon:`🐾`},{id:`alarm`,name:`Alarm / Siren`,icon:`🚨`},{id:`doorbell`,name:`Doorbell / Knock`,icon:`🔔`},{id:`glass_breaking`,name:`Glass Breaking`,icon:`💥`},{id:`gunshot`,name:`Gunshot / Explosion`,icon:`💣`},{id:`vehicle`,name:`Vehicle`,icon:`🚗`},{id:`siren`,name:`Emergency Siren`,icon:`🚑`},{id:`fire`,name:`Fire / Smoke`,icon:`🔥`},{id:`water`,name:`Water`,icon:`💧`},{id:`wind`,name:`Wind / Weather`,icon:`🌬️`},{id:`door`,name:`Door`,icon:`🚪`},{id:`footsteps`,name:`Footsteps`,icon:`👣`},{id:`crowd`,name:`Crowd / Chatter`,icon:`👥`},{id:`telephone`,name:`Telephone`,icon:`📞`},{id:`engine`,name:`Engine / Motor`,icon:`⚙️`},{id:`tools`,name:`Tools / Construction`,icon:`🔨`},{id:`silence`,name:`Silence`,icon:`🤫`}],cr={mapping:{Speech:`speech`,"Child speech, kid speaking":`speech`,Conversation:`speech`,"Narration, monologue":`speech`,Babbling:`speech`,Whispering:`speech`,"Speech synthesizer":`speech`,Humming:`speech`,Rapping:`speech`,Singing:`speech`,Choir:`speech`,"Child singing":`speech`,Shout:`scream`,Bellow:`scream`,Yell:`scream`,Screaming:`scream`,"Children shouting":`scream`,Whoop:`scream`,"Crying, sobbing":`crying`,"Baby cry, infant cry":`crying`,Whimper:`crying`,"Wail, moan":`crying`,Groan:`crying`,Laughter:`laughter`,"Baby laughter":`laughter`,Giggle:`laughter`,Snicker:`laughter`,"Belly laugh":`laughter`,"Chuckle, chortle":`laughter`,Music:`music`,"Musical instrument":`music`,Guitar:`music`,Piano:`music`,Drum:`music`,"Drum kit":`music`,"Violin, fiddle":`music`,Flute:`music`,Saxophone:`music`,Trumpet:`music`,Synthesizer:`music`,"Pop music":`music`,"Rock music":`music`,"Hip hop music":`music`,"Classical music":`music`,Jazz:`music`,"Electronic music":`music`,"Background music":`music`,Dog:`dog`,Bark:`dog`,Yip:`dog`,Howl:`dog`,"Bow-wow":`dog`,Growling:`dog`,"Whimper (dog)":`dog`,Cat:`cat`,Purr:`cat`,Meow:`cat`,Hiss:`cat`,Caterwaul:`cat`,Bird:`bird`,"Bird vocalization, bird call, bird song":`bird`,"Chirp, tweet":`bird`,Squawk:`bird`,Crow:`bird`,Owl:`bird`,"Pigeon, dove":`bird`,Animal:`animal`,"Domestic animals, pets":`animal`,"Livestock, farm animals, working animals":`animal`,Horse:`animal`,"Cattle, bovinae":`animal`,Pig:`animal`,Sheep:`animal`,Goat:`animal`,Frog:`animal`,Insect:`animal`,Cricket:`animal`,Alarm:`alarm`,"Alarm clock":`alarm`,"Smoke detector, smoke alarm":`alarm`,"Fire alarm":`alarm`,Buzzer:`alarm`,"Civil defense siren":`alarm`,"Car alarm":`alarm`,Siren:`siren`,"Police car (siren)":`siren`,"Ambulance (siren)":`siren`,"Fire engine, fire truck (siren)":`siren`,"Emergency vehicle":`siren`,Foghorn:`siren`,Doorbell:`doorbell`,"Ding-dong":`doorbell`,Knock:`doorbell`,Tap:`doorbell`,Glass:`glass_breaking`,Shatter:`glass_breaking`,"Chink, clink":`glass_breaking`,"Gunshot, gunfire":`gunshot`,"Machine gun":`gunshot`,Explosion:`gunshot`,Fireworks:`gunshot`,Firecracker:`gunshot`,"Artillery fire":`gunshot`,"Cap gun":`gunshot`,Boom:`gunshot`,Vehicle:`vehicle`,Car:`vehicle`,Truck:`vehicle`,Bus:`vehicle`,Motorcycle:`vehicle`,"Car passing by":`vehicle`,"Vehicle horn, car horn, honking":`vehicle`,"Traffic noise, roadway noise":`vehicle`,Train:`vehicle`,Aircraft:`vehicle`,Helicopter:`vehicle`,Bicycle:`vehicle`,Skateboard:`vehicle`,Fire:`fire`,Crackle:`fire`,Water:`water`,Rain:`water`,Raindrop:`water`,"Rain on surface":`water`,Stream:`water`,Waterfall:`water`,Ocean:`water`,"Waves, surf":`water`,"Splash, splatter":`water`,Wind:`wind`,Thunderstorm:`wind`,Thunder:`wind`,"Wind noise (microphone)":`wind`,"Rustling leaves":`wind`,Door:`door`,"Sliding door":`door`,Slam:`door`,"Cupboard open or close":`door`,"Walk, footsteps":`footsteps`,Run:`footsteps`,Shuffle:`footsteps`,Crowd:`crowd`,Chatter:`crowd`,Cheering:`crowd`,Applause:`crowd`,"Children playing":`crowd`,"Hubbub, speech noise, speech babble":`crowd`,Telephone:`telephone`,"Telephone bell ringing":`telephone`,Ringtone:`telephone`,"Telephone dialing, DTMF":`telephone`,"Busy signal":`telephone`,Engine:`engine`,"Engine starting":`engine`,Idling:`engine`,"Accelerating, revving, vroom":`engine`,"Light engine (high frequency)":`engine`,"Medium engine (mid frequency)":`engine`,"Heavy engine (low frequency)":`engine`,"Lawn mower":`engine`,Chainsaw:`engine`,Hammer:`tools`,Jackhammer:`tools`,Sawing:`tools`,"Power tool":`tools`,Drill:`tools`,Sanding:`tools`,Silence:`silence`},preserveOriginal:!1},lr={mapping:{speech:`speech`,child_speech:`speech`,conversation:`speech`,whispering:`speech`,singing:`speech`,humming:`speech`,shout:`scream`,yell:`scream`,screaming:`scream`,crying:`crying`,baby_crying:`crying`,sobbing:`crying`,laughter:`laughter`,baby_laughter:`laughter`,giggling:`laughter`,music:`music`,guitar:`music`,piano:`music`,drums:`music`,dog_bark:`dog`,dog_bow_wow:`dog`,dog_growling:`dog`,dog_howl:`dog`,cat_meow:`cat`,cat_purr:`cat`,cat_hiss:`cat`,bird:`bird`,bird_chirp:`bird`,bird_squawk:`bird`,animal:`animal`,horse:`animal`,cow_moo:`animal`,insect:`animal`,alarm:`alarm`,smoke_alarm:`alarm`,fire_alarm:`alarm`,car_alarm:`alarm`,siren:`siren`,police_siren:`siren`,ambulance_siren:`siren`,doorbell:`doorbell`,door_knock:`doorbell`,knocking:`doorbell`,glass_breaking:`glass_breaking`,glass_shatter:`glass_breaking`,gunshot:`gunshot`,explosion:`gunshot`,fireworks:`gunshot`,car:`vehicle`,truck:`vehicle`,motorcycle:`vehicle`,car_horn:`vehicle`,vehicle_horn:`vehicle`,traffic:`vehicle`,fire:`fire`,fire_crackle:`fire`,water:`water`,rain:`water`,ocean:`water`,splash:`water`,wind:`wind`,thunder:`wind`,thunderstorm:`wind`,door:`door`,door_slam:`door`,sliding_door:`door`,footsteps:`footsteps`,walking:`footsteps`,running:`footsteps`,crowd:`crowd`,chatter:`crowd`,cheering:`crowd`,applause:`crowd`,telephone_ring:`telephone`,ringtone:`telephone`,engine:`engine`,engine_starting:`engine`,lawn_mower:`engine`,chainsaw:`engine`,hammer:`tools`,jackhammer:`tools`,drill:`tools`,power_tool:`tools`,silence:`silence`},preserveOriginal:!1},ur=new Map;for(let[e,t]of Object.entries(cr.mapping))ur.set(e.toLowerCase(),t);for(let[e,t]of Object.entries(lr.mapping))ur.set(e.toLowerCase(),t);function dr(e){return ur.get(e.toLowerCase())??null}function fr(){return sr.map(e=>e.id)}var pr={camera:{type:`camera`,label:`Camera`,icon:`camera`}},A=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},j=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}},mr=2048,hr=4096,gr=/^[A-Za-z_][A-Za-z0-9_]*$/,_r=new Set([`now`,`true`,`false`,`null`]),vr=new Set([`true`,`false`,`null`]);function yr(e){return e>=`0`&&e<=`9`}function br(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function xr(e){return br(e)||yr(e)}function Sr(e){return e===` `||e===` `||e===`
2
+ import{a as e,r as t}from"./rolldown-runtime-Cyuzqnbw.js";import{t as n}from"./vite-preload-helper-zJ_50EbN.js";import{A as r,C as i,D as a,E as o,O as s,S as c,T as l,_ as u,a as d,b as f,c as ee,d as p,f as te,g as m,h,i as ne,j as re,k as g,l as ie,m as ae,n as oe,o as se,p as _,r as ce,s as le,t as ue,u as v,v as de,w as y,x as fe,y as b}from"./schemas-CuE8EXQ7.js";var pe=v([`singleton`,`device`,`widget`]),me=y({capName:a(),kind:pe,deviceId:i().optional(),reachable:m(),latencyMs:i(),error:a().optional()}),he=y({addonId:a(),caps:h(me).readonly(),widgets:h(me).readonly()}),ge=y({nodeId:a(),addons:h(he).readonly()}),_e=y({ok:m(),degraded:m(),checkedAt:a(),nodes:h(ge).readonly(),summary:y({total:i(),reachable:i(),unreachable:i()})}),ve=y({id:a(),name:a(),category:a().optional(),description:a().optional(),icon:a().optional()}),ye=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],x=y({url:a(),sizeMB:i(),isDirectory:m().optional(),files:h(a()).readonly().optional(),runtimes:h(v([`node`,`python`])).readonly().optional()}),be=y({url:a(),filename:a(),sizeMB:i()}),xe=y({onnx:x.optional(),coreml:x.optional(),openvino:x.optional(),tflite:x.optional(),pt:x.optional()}),Se=y({id:a(),name:a(),description:a(),formats:xe,inputSize:y({width:i(),height:i()}),labels:h(ve).readonly(),inputLayout:v([`nchw`,`nhwc`]).optional(),inputNormalization:v([`zero-one`,`imagenet`,`none`]).optional(),preprocessMode:v([`letterbox`,`resize`]).optional(),faceAlignment:m().optional(),extraFiles:h(be).readonly().optional()}),Ce=b(`format`,[y({format:c(`openvino`),precisions:h(v([`fp16`,`int8`])).min(1).readonly()}),y({format:c(`coreml`)})]),we=y({id:a().regex(/^[a-zA-Z0-9._-]+$/),name:a(),labels:h(ve).readonly(),inputSize:y({width:i(),height:i()}),inputLayout:v([`nchw`,`nhwc`]).optional(),inputNormalization:v([`zero-one`,`imagenet`,`none`]).optional(),preprocessMode:v([`letterbox`,`resize`]).optional(),outputFormat:v([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:m().optional()}),Te=y({format:v(ye),precision:v([`fp16`,`int8`]).optional(),sizeMB:i(),validated:m(),files:h(a()).readonly()}),Ee=y({entry:Se,artifacts:h(Te).readonly()}),De=class{disposers=[];disposed=!1;onError;constructor(e={}){this.onError=e.onError??((e,t)=>{console.error(`[DisposerChain] disposer #${t} threw`,e)})}add(e){if(this.disposed){try{let t=e();t&&typeof t.then==`function`&&t.catch(e=>this.onError(e,-1))}catch(e){this.onError(e,-1)}return()=>void 0}return this.disposers.push(e),()=>{let 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;let e=this.disposers.slice().toReversed();this.disposers=[];for(let t=0;t<e.length;t++){let n=e[t];try{let e=n();e&&typeof e.then==`function`&&await e}catch(n){this.onError(n,e.length-1-t)}}}},Oe=`hub-only`;function ke(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function Ae(e){let t=ke(e).placement;return t===`any-node`||t===`agent-only`}function je(e){return ke(e).placement===`agent-only`}function Me(e){return ke(e).group}function Ne(e,t){return e.execution?.group??t}function Pe(e){return ke(e).placement}var Fe=function(e){return e.SystemBoot=`system.boot`,e.SystemAddonsReady=`system.addons-ready`,e.SystemRestarting=`system.restarting`,e.SystemRestartCompleted=`system.restart-completed`,e.SystemReadyState=`system.ready-state`,e.AddonStarted=`addon.started`,e.AddonStopped=`addon.stopped`,e.AddonRestarted=`addon.restarted`,e.AddonUpdated=`addon.updated`,e.AddonInstalled=`addon.installed`,e.AddonUninstalled=`addon.uninstalled`,e.AddonCrashed=`addon.crashed`,e.AddonError=`addon.error`,e.AddonPageReady=`addon.page-ready`,e.AddonWidgetReady=`addon.widget-ready`,e.AddonLoadFailed=`addon.load-failed`,e.AddonLoadRecovered=`addon.load-recovered`,e.AddonRetryScheduled=`addon.retry-scheduled`,e.AddonRetryAttempting=`addon.retry-attempting`,e.DeviceRegistered=`device.registered`,e.DeviceUnregistered=`device.unregistered`,e.DeviceEnabled=`device.enabled`,e.DeviceDisabled=`device.disabled`,e.DeviceSettingsUpdated=`device.settings-updated`,e.DeviceBindingsChanged=`device.bindings-changed`,e.DeviceMetaChanged=`device.meta-changed`,e.DeviceSourceInfoChanged=`device.source-info-changed`,e.DeviceStreamsRegistered=`device.streams-registered`,e.DeviceProvisioned=`device.provisioned`,e.DeviceReady=`device.ready`,e.IntegrationEnabled=`integration.enabled`,e.IntegrationDisabled=`integration.disabled`,e.IntegrationDeleted=`integration.deleted`,e.BrokerStatusChanged=`broker.status-changed`,e.BrokerMessage=`broker.message`,e.ProviderStarted=`provider.started`,e.ProviderStopped=`provider.stopped`,e.ProcessCrashed=`process.crashed`,e.ProcessRestartScheduled=`process.restart_scheduled`,e.ProcessRestarted=`process.restarted`,e.RecordingStarted=`recording.started`,e.RecordingStopped=`recording.stopped`,e.RecordingError=`recording.error`,e.RecordingHealthDegraded=`recording.health.degraded`,e.RecordingStorageCritical=`recording.storage.critical`,e.RecordingSegmentWritten=`recording.segment.written`,e.RecordingPolicyFallback=`recording.policy.fallback`,e.RecordingRetentionCompleted=`recording.retention.completed`,e.DetectionEvent=`detection.event`,e.SessionTrackNew=`session.track.new`,e.SessionTrackExpired=`session.track.expired`,e.BenchmarkProgress=`benchmark.progress`,e.PlatformProbePhase=`platform-probe.phase`,e.PipelineProgress=`pipeline.progress`,e.PipelineTrace=`pipeline.trace`,e.PipelineInferenceResult=`pipeline.inference-result`,e.PipelineCameraAssigned=`pipeline.camera-assigned`,e.PipelineCameraUnassigned=`pipeline.camera-unassigned`,e.PipelineCameraUpdated=`pipeline.camera-updated`,e.PipelineRunnerLoadSnapshot=`pipeline.runner-load-snapshot`,e.PipelineCameraMetricsSnapshot=`pipeline.camera-metrics-snapshot`,e.StreamBrokerMetricsSnapshot=`stream-broker.metrics-snapshot`,e.StreamBrokerOnCamStreamDemand=`stream-broker.onCamStreamDemand`,e.StreamBrokerOnCamStreamIdle=`stream-broker.onCamStreamIdle`,e.StreamBrokerOnRequestStreamSourceRefresh=`stream-broker.onRequestStreamSourceRefresh`,e.StreamParamsChanged=`stream-params.changed`,e.DeviceStateChanged=`device.state-changed`,e.BatteryOnStatusChanged=`battery.onStatusChanged`,e.BatteryOnWakeStarted=`battery.onWakeStarted`,e.DoorbellOnPressed=`doorbell.onPressed`,e.EventEmitted=`event-emitter.event`,e.PipelineEngineMetricsSnapshot=`pipeline.engine-metrics-snapshot`,e.PipelineEngineProvisioning=`pipeline.engine-provisioning`,e.ClusterTopologySnapshot=`cluster.topology-snapshot`,e.MetricsNodeResourcesSnapshot=`metrics.node-resources-snapshot`,e.MetricsNodeProcessesSnapshot=`metrics.node-processes-snapshot`,e.CapabilityBindingChanged=`capability.binding-changed`,e.ModelDownloadProgress=`model.download.progress`,e.AgentRegistered=`agent.registered`,e.AgentUnregistered=`agent.unregistered`,e.AgentOnline=`agent.online`,e.AgentOffline=`agent.offline`,e.WorkerOnline=`worker.online`,e.WorkerOffline=`worker.offline`,e.AgentTaskDispatched=`agent.task.dispatched`,e.AgentTaskAssigned=`agent.task.assigned`,e.AgentTrpcConnected=`agent.trpc.connected`,e.AgentWsConnected=`agent.ws.connected`,e.AgentWsDisconnected=`agent.ws.disconnected`,e.AgentBackupActivated=`agent.backup.activated`,e.OrchestrationSettingsUpdated=`orchestration.settings-updated`,e.PipelineAgentHwaccelChanged=`pipeline.agent-hwaccel-changed`,e.MotionAnalysis=`detection.motion-analysis`,e.MotionZonesRaw=`detection.motion-zones-raw`,e.MotionOnMotionChanged=`motion.on-motion-changed`,e.DetectionResult=`detection.result`,e.DetectionRaw=`detection.raw`,e.DetectionCameraNative=`detection.camera-native`,e.PipelineAudioInferenceResult=`pipeline.audio-inference-result`,e.DetectionPhaseTransition=`detection.phase-transition`,e.ProviderMotion=`provider.motion`,e.ProviderDetection=`provider.detection`,e.EnrichmentEmbeddingStored=`enrichment.embedding.stored`,e.EnrichmentSceneStateChanged=`enrichment.scene.state-changed`,e.EnrichmentActivitySummary=`enrichment.activity.summary`,e.PipelineAnalyticsTrackStarted=`pipeline-analytics.track-started`,e.PipelineAnalyticsTrackEnded=`pipeline-analytics.track-ended`,e.PipelineAnalyticsDetectionEvent=`pipeline-analytics.detection-event`,e.PipelineAnalyticsFrameTracked=`pipeline-analytics.frame-tracked`,e.FrigateLiveEvent=`frigate.live-event`,e.CameraStreamsProfileSlotsChanged=`camera-streams.onProfileSlotsChanged`,e.StreamOnline=`stream.online`,e.StreamOffline=`stream.offline`,e.NetworkTunnelStarted=`network.tunnel.started`,e.NetworkTunnelStopped=`network.tunnel.stopped`,e.LocalNetworkChanged=`network.local.changed`,e.MeshNetworkChanged=`network.mesh.changed`,e.BackupCompleted=`backup.completed`,e.BackupRestored=`backup.restored`,e.NotificationDispatched=`notification.dispatched`,e.NotificationFailed=`notification.failed`,e.DeviceUpdated=`device.updated`,e.DeviceOnline=`device.online`,e.DeviceOffline=`device.offline`,e.DeviceAwake=`device.awake`,e.DeviceSleeping=`device.sleeping`,e.RetentionCleanup=`retention.cleanup`,e.AddonsBulkUpdateProgress=`addons.bulk-update-progress`,e.AddonsJobProgress=`addons.job-progress`,e.AddonsJobLog=`addons.job-log`,e.AccessoriesChildVisibilityChanged=`accessories.onChildVisibilityChanged`,e.AccessoriesChanged=`accessories.onAccessoriesChanged`,e.ModelConvertProgress=`model-convert.progress`,e}({}),Ie=[{id:`overview`,label:`Overview`,icon:`layout-dashboard`,order:-10},{id:`general`,label:`General`,icon:`settings`,order:0},{id:`image`,label:`Image`,icon:`image`,order:5},{id:`light`,label:`Light`,icon:`lightbulb`,order:7},{id:`motion`,label:`Motion`,icon:`activity`,order:10},{id:`audio`,label:`Audio`,icon:`mic`,order:12},{id:`alarms`,label:`Alarms`,icon:`bell-ring`,order:13},{id:`snapshot`,label:`Snapshot`,icon:`camera`,order:15},{id:`osd`,label:`OSD`,icon:`type`,order:18},{id:`stream-broker`,label:`Stream Broker`,icon:`radio`,order:20},{id:`streaming`,label:`Streaming`,icon:`video`,order:35},{id:`ptz`,label:`PTZ`,icon:`move`,order:40},{id:`consumables`,label:`Consumables`,icon:`recycle`,order:44},{id:`pipeline`,label:`Detection Pipeline`,icon:`cpu`,order:39},{id:`detection-pipeline`,label:`Detection pipeline`,icon:`cpu`,order:39},{id:`zones`,label:`Detection`,icon:`shapes`,order:38},{id:`analytics`,label:`Analytics`,icon:`activity`,order:37},{id:`live-stats`,label:`Live Stats`,icon:`activity`,order:39},{id:`recording`,label:`Recording`,icon:`circle-dot`,order:40},{id:`engine`,label:`Inference Engine`,icon:`zap`,order:41},{id:`scheduler`,label:`Scheduler`,icon:`list-checks`,order:42},{id:`decoder`,label:`Decoder`,icon:`film`,order:43},{id:`notifications`,label:`Notifications`,icon:`bell`,order:50},{id:`network`,label:`Network`,icon:`globe`,order:60},{id:`storage`,label:`Storage`,icon:`hard-drive`,order:70},{id:`advanced`,label:`Advanced`,icon:`wrench`,order:100}],Le=Object.fromEntries(Ie.map(e=>[e.id,e]));function Re(e){return e.type===`separator`||e.type===`info`||e.type===`qr-code`||e.type===`button`||e.type===`object-array`||e.type===`widget`||e.type===`addon-action-button`||e.type===`device-action-button`}function ze(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Be(e,t))}))}}function Be(e,t){if(Re(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Be(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Be(e,t))}));return{...e,tabs:n}}let n=e.key,r=Object.prototype.hasOwnProperty.call(t,n)?t[n]:void 0,i=e.default;if(e.multiple){let t=Array.isArray(r)?r:r==null?[]:[r],n=e.multiple.itemDefault===void 0?i===void 0?Ve(e)===`string`?``:null:i:e.multiple.itemDefault,a=Math.max(e.multiple.min,t.length),o=[];for(let e=0;e<a;e++)o.push(e<t.length?t[e]:n);return{...e,value:o}}let a=r===void 0?i===void 0?null:i:r;if(e.type===`password`)return{...e,value:``};let o=e.type===`textarea`&&e.isJson&&typeof a==`object`&&a?JSON.stringify(a,null,2):a;return{...e,value:o}}function Ve(e){switch(e.type){case`text`:case`textarea`:case`password`:case`color`:case`probe`:case`timezone`:case`datetime`:return`string`;case`number`:case`slider`:return`number`;case`boolean`:return`boolean`;default:return`other`}}function He(e,t){return e.category===t}function Ue(e,t,n){return{id:typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2),timestamp:new Date,source:t,category:e,data:n}}function We(e,t){let n=t.ts??Date.now();e.emit(Ue(`system.ready-state`,{type:`capability`,id:t.capName,nodeId:t.sourceNodeId},{capName:t.capName,scope:t.scope,state:t.state,generation:t.generation,sourceNodeId:t.sourceNodeId,ts:n}))}function Ge(e){let t=async()=>{let t=(await e.read())[e.key];if(t===void 0)return e.fallback;let n=e.schema.safeParse(t);return n.success?n.data:(e.onParseError?.(e.key,n.error),e.fallback)},n=async t=>{let n=e.schema.parse(t);await e.write({[e.key]:n})};return{get:t,set:n,update:async e=>{await n(e(await t()))}}}function Ke(e){if(e==null||e===``)return`hub`;let t=e.indexOf(`/`);if(t<0)return e;let n=e.slice(0,t);return n===``?`hub`:n}function qe(e,t){return`${e}@${Ke(t)}`}function Je(e,t,n){return e[qe(t,n)]}function Ye(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?qe(i,n):i]=a;return r}function Xe(e,t,n){let r={};for(let[n,i]of Object.entries(e))n.includes(`@`)||t.has(n)||(r[n]=i);for(let i of t){let t=Je(e,i,n);t!==void 0&&(r[i]=t)}return r}var Ze=class{_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 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();let t=await this.onInitialize();this.emitLifecycle(Fe.AddonStarted);let n=$e(t),r=n&&`providers`in n&&n.providers?n.providers:[];return this._registeredCapNames=r.map(e=>e.capability.name),n}postBrokerStart(){this.autoEmitReadiness&&this._registeredCapNames.length>0&&this.emitReadinessForProviders(`ready`)}async onHubReachable(){}async shutdown(){this.emitLifecycle(Fe.AddonStopped),this.autoEmitReadiness&&this.emitReadinessForProviders(`down`),await this.onShutdown();for(let e of this._subscriptions)e();this._subscriptions=[],this._ctx=null}async onShutdown(){}async onConfigChanged(){}field(e){return e}schema(e){return e}globalSettingsSchema(e){return null}deviceSettingsSchema(){return null}async getGlobalSettings(e,t,n){let r=this.globalSettingsSchema(t);if(!r)return{sections:[]};let i=await this.resolveGlobalStore(n,t);return ze(r,e?{...i,...e}:i)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=Ke(e??this._ctx?.kernel?.localNodeId);return r.size>0?Xe(n,r,i):n}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=Ke(this._ctx?.kernel?.localNodeId),i=Ke(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?Ye(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(Fe.AddonUpdated,{level:`global`}),this.maybeAutoRestart(e,this.globalSettingsSchema()))}_perNodeKeysCache=new Map;perNodeKeys(e){let t=e??``,n=this._perNodeKeysCache.get(t);if(n)return n;let r=this.globalSettingsSchema(e),i=new Set(r?r.sections.flatMap(e=>Qe(e.fields)):[]);return this._perNodeKeysCache.set(t,i),i}maybeAutoRestart(e,t){if(!t)return;let n=new Set;for(let e of t.sections)for(let t of e.fields)t.type===`separator`||t.type===`info`||t.requiresRestart&&n.add(t.key);if(n.size===0||!Object.keys(e).some(e=>n.has(e)))return;let r=this._ctx;if(!r)return;let i=r.id;setImmediate(()=>{r.api.addons?.restartAddon?.mutate({addonId:i}).then(()=>{r.logger.info(`addon auto-restart triggered by restart-required setting change`,{meta:{changedFields:Object.keys(e).filter(e=>n.has(e))}})}).catch(e=>{r.logger.error(`addon auto-restart failed`,{meta:{error:e instanceof Error?e.message:String(e)}})})})}async getDeviceSettings(e){let t=this.deviceSettingsSchema();return t?ze(t,await this._ctx?.settings?.readDeviceStore(e)??{}):{sections:[]}}async updateDeviceSettings(e,t){await this._ctx?.settings?.writeDeviceStore(e,t)}_subscriptions=[];watchCapability(e,t){let n=new Set(Array.isArray(e)?e:[e]);this.subscribe({category:`system.ready-state`},e=>{let r=e.data;if(typeof r.capName!=`string`||!n.has(r.capName)||r.scope?.type!==`node`)return;let i=r.scope.nodeId;if(typeof i!=`string`||i.length===0)return;let a=r.capName;r.state===`down`?t.onDown?.(i,a):r.state===`ready`&&t.onReady?.(i,a)})}subscribe(e,t){let n=this.ctx.eventBus.subscribe(e,t);this._subscriptions.push(n)}emitLifecycle(e,t){try{let n=this._ctx;if(!n)return;n.eventBus.emit({id:`${n.id}-${Date.now()}`,timestamp:new Date,source:{type:`addon`,id:n.id,nodeId:n.kernel.localNodeId??`hub`},category:e,data:{addonId:n.id,...t}})}catch{}}emitReadinessForProviders(e){let t=this._ctx;if(!t||this._registeredCapNames.length===0)return;let n=t.kernel?.localNodeId??`hub`,r=n.includes(`/`)?n.split(`/`)[0]:n;for(let n of this._registeredCapNames)try{We(t.eventBus,{capName:n,scope:{type:`node`,nodeId:r},state:e,generation:this._readinessGeneration,sourceNodeId:r})}catch{}}async resolveModelsDir(){let{join:t}=await n(async()=>{let{join:t}=await import(`./__vite-browser-external-NEUUz2mh.js`).then(t=>e(t.default));return{join:t}},__vite__mapDeps([0,1])),{promises:r}=await n(async()=>{let{promises:t}=await import(`./__vite-browser-external-NEUUz2mh.js`).then(t=>e(t.default));return{promises:t}},__vite__mapDeps([0,1])),i=t(this.ctx.nodeDataDir,`models`);return await r.mkdir(i,{recursive:!0}),i}get capabilities(){return this.ctx.capabilities??null}async resolveConfig(){let e=await this.readAddonStoreWithRetry(),t=this.perNodeKeys(),n=Ke(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?Je(e,i,n):e[i];if(a!=null){let e=typeof this.defaults[i];typeof a===e&&(r[i]=a)}}this._config=r}state(e,t,n){return Ge({key:e,schema:t,fallback:n,read:()=>this.readAddonStoreWithRetry(),write:async e=>{await this._ctx?.settings?.writeAddonStore(e)},onParseError:(e,t)=>this._ctx?.logger?.warn?.(`durable-state: stored "${e}" failed validation — using fallback`,{meta:{addonId:this._ctx?.id,key:e,error:String(t)}})})}deviceState(e,t,n,r){return Ge({key:t,schema:n,fallback:r,read:async()=>await this._ctx?.settings?.readDeviceStore(e)??{},write:async t=>{await this._ctx?.settings?.writeDeviceStore(e,t)},onParseError:(t,n)=>this._ctx?.logger?.warn?.(`durable-state: stored device ${e} "${t}" failed validation — using fallback`,{meta:{addonId:this._ctx?.id,deviceId:e,key:t,error:String(n)}})})}async readAddonStoreWithRetry(){let e=this._ctx?.settings;if(!e)return{};let t=[150,350,600,900],n;for(let r=0;r<=t.length;r++)try{return await e.readAddonStore()??{}}catch(e){n=e;let i=e instanceof Error?e.message:String(e);if(!(i.includes(`SqliteSettingsBackend not initialized`)||i.includes(`provider not available`)))throw e;if(r===t.length)break;await new Promise(e=>setTimeout(e,t[r]))}return this._ctx?.logger?.warn?.(`readAddonStore: settings-store unavailable after retries — using defaults`,{meta:{error:n instanceof Error?n.message:String(n)}}),{}}};function Qe(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...Qe(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...Qe(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function $e(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function et(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=tt(t,e.method,e.path);if(!n)return{status:404,headers:{},redirectUrl:null,body:{error:`No route matches ${e.method} ${e.path}`}};let r={status:200,headers:{},redirectUrl:null},i=rt(r),a={params:{...e.params,...n.params},query:e.query,body:e.body,headers:e.headers,...e.user?{user:e.user}:{},...e.scopedToken===void 0?{}:{scopedToken:e.scopedToken}};return await n.route.handler(a,i),r}}}function tt(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=nt(t.path,n);if(e!==null)return{route:t,params:e}}return null}function nt(e,t){let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean);if(n.length!==r.length)return null;let i={};for(let e=0;e<n.length;e++){let t=n[e],a=r[e];if(t.startsWith(`:`))i[t.slice(1)]=a;else if(t!==a)return null}return i}function rt(e){let t={status(n){return e.status=n,t},code(n){return e.status=n,t},send(t){e.body=t},redirect(t){e.redirectUrl=t,e.status===200&&(e.status=302)},header(n,r){return e.headers[n.toLowerCase()]=r,t},type(n){return e.contentType=n,t}};return t}var S={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},it={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},at=[{id:`UTC`,label:`UTC (UTC+0)`,region:`Universal`,stdOffsetMinutes:0,dst:null},{id:`Europe/London`,label:`Europe/London (UTC+0 / BST)`,region:`Europe`,stdOffsetMinutes:0,dst:S},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:S},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:S},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:S},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:S},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:S},{id:`Europe/Istanbul`,label:`Europe/Istanbul (UTC+3)`,region:`Europe`,stdOffsetMinutes:180,dst:null},{id:`America/New_York`,label:`America/New York (UTC−5 / EDT)`,region:`Americas`,stdOffsetMinutes:-300,dst:it},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:it},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:it},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:it},{id:`America/Sao_Paulo`,label:`America/Sao Paulo (UTC−3)`,region:`Americas`,stdOffsetMinutes:-180,dst:null},{id:`Asia/Dubai`,label:`Asia/Dubai (UTC+4)`,region:`Asia`,stdOffsetMinutes:240,dst:null},{id:`Asia/Kolkata`,label:`Asia/Kolkata (UTC+5:30)`,region:`Asia`,stdOffsetMinutes:330,dst:null},{id:`Asia/Singapore`,label:`Asia/Singapore (UTC+8)`,region:`Asia`,stdOffsetMinutes:480,dst:null},{id:`Asia/Shanghai`,label:`Asia/Shanghai (UTC+8)`,region:`Asia`,stdOffsetMinutes:480,dst:null},{id:`Asia/Tokyo`,label:`Asia/Tokyo (UTC+9)`,region:`Asia`,stdOffsetMinutes:540,dst:null},{id:`Australia/Sydney`,label:`Australia/Sydney (UTC+10 / AEDT)`,region:`Oceania`,stdOffsetMinutes:600,dst:{offsetHours:1,startMonth:10,startWeekIndex:1,startWeekday:`Sunday`,startHour:2,endMonth:4,endWeekIndex:1,endWeekday:`Sunday`,endHour:3}}];function ot(e){return at.find(t=>t.id===e)}var C=v([`high`,`mid`,`low`]),st=[`high`,`mid`,`low`],ct=v([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),w=y({width:i().int().positive(),height:i().int().positive()}),lt=y({camStreamId:a().min(1),deviceId:i().int().nonnegative(),kind:ct,url:a().optional(),codec:a().optional(),resolution:w.optional(),fps:i().positive().optional(),label:a().optional(),deviceFeatures:h(a()).optional(),autoEligible:m().optional(),metadata:o(a(),r()).optional()}),ut=v([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),dt=y({deviceId:i().int().nonnegative(),profile:C,brokerId:a(),sourceCamStreamId:a().nullable(),status:ut,resolution:w.optional(),codec:a().optional(),preBufferSec:i().nonnegative().optional(),errorMessage:a().optional()});function ft(e,t){return`${e}/${t}`}function pt(e,t){return`${e}/${t}`}function mt(e){let t=e.indexOf(`/`);if(t<=0)return null;let n=e.slice(0,t),r=e.slice(t+1);if(!/^\d+$/.test(n))return null;let i=C.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function ht(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>st.indexOf(e.profile)-st.indexOf(t.profile)),r=new Set,i=[];for(let e of n){let t=e.sourceCamStreamId;t!==null&&(r.has(t)||(r.add(t),i.push(e)))}return i}var gt=y({id:a(),label:a(),protocol:v([`rtsp`,`rtmp`,`annexb`,`http-mjpeg`,`webrtc`,`custom`]),url:a().optional(),resolution:y({width:i(),height:i()}).readonly().optional(),fps:i().optional(),bitrate:i().optional(),codec:a().optional(),profileHint:C.optional()}),_t=y({type:a(),url:a(),videoCodec:a().optional(),audioCodec:a().optional(),metadata:o(a(),r()).readonly().optional()}),vt=y({type:v([`video`,`audio`]),data:p(Uint8Array),pts:i(),dts:i(),keyframe:m(),codec:a()}),yt=y({data:p(Uint8Array),width:i(),height:i(),format:v([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),timestamp:i()}),T=y({shmId:a(),slot:i().int().nonnegative(),seq:i().int().nonnegative(),width:i().int().positive(),height:i().int().positive(),format:v([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:i(),byteLength:i().int().nonnegative(),nodeId:a(),slotCount:i().int().positive()}),bt=v([`rgb`,`bgr`,`yuv420`,`gray`]),xt=y({brokerId:a(),format:bt,maxFps:i().positive().optional(),tag:a().optional()}),St=y({subscriptionId:a(),maxFps:i().nonnegative()}),Ct=y({data:p(Uint8Array),sampleRate:i().int().positive(),channels:i().int().positive(),timestamp:i()}),wt=y({brokerId:a(),tag:a().optional()}),Tt=y({subscriptionId:a()}),Et=v([`idle`,`connecting`,`streaming`,`error`,`stopped`]),Dt=y({status:Et,inputFps:i(),decodeFps:i(),encodedSubscribers:i(),decodedSubscribers:i(),uptimeMs:i(),bitrateKbps:i(),idrIntervalMs:i(),codec:a().optional(),totalBytes:i(),packetCount:i(),rtspClients:i(),pipeClients:i(),preBufferSec:i(),preBufferMs:i(),preBufferPackets:i(),decoderNodeId:a().nullable(),audio:y({codec:a(),sampleRate:i(),channels:i(),supported:m()}).nullable().optional()}),Ot=y({profile:C,brokerId:a(),url:a(),mutedUrl:a(),enabled:m(),codec:a().optional(),resolution:w.optional()}),kt={preMs:5e3,postMs:1e4},At=i().int().min(0).max(6),jt=/^([01]\d|2[0-3]):[0-5]\d$/,Mt=b(`kind`,[y({kind:c(`always`)}),y({kind:c(`timeOfDay`),start:a().regex(jt),end:a().regex(jt),days:h(At).optional()})]),Nt=v([`continuous`,`onMotion`,`onAudioThreshold`]),Pt=v([`off`,`events`,`continuous`]),Ft=y({motion:m().optional(),audioThresholdDbfs:i().optional()}),It=v([`continuous`,`events`]),Lt=Ft,Rt=y({days:h(At),start:a().regex(jt),end:a().regex(jt),mode:It,triggers:Lt.optional(),preBufferSec:i().min(0).optional(),postBufferSec:i().min(0).optional()}),zt=y({schedule:Mt,mode:Nt,preBufferSec:i().min(0).default(0),postBufferSec:i().min(0).default(0),resetTimeoutOnNewEvent:m().default(!0),thresholdDbfs:i().optional()}),Bt=y({maxAgeDays:i().min(0).optional(),maxSizeGb:i().min(0).optional()}),Vt=y({enabled:m(),mode:Pt.optional(),profiles:h(C).optional(),segmentSeconds:i().int().positive().optional(),schedules:h(Mt).optional(),schedule:Mt.optional(),triggers:Ft.optional(),preBufferSec:i().min(0).optional(),postBufferSec:i().min(0).optional(),rules:h(zt).optional(),bands:h(Rt).optional(),retention:Bt.optional()}),Ht=[0,1,2,3,4,5,6],Ut=`00:00`,Wt=`23:59`;function Gt(e,t,n){let r=e.kind===`timeOfDay`&&e.days?e.days:[...Ht],i=e.kind===`timeOfDay`?e.start:Ut,a=e.kind===`timeOfDay`?e.end:Wt;return t===`continuous`?{days:r,start:i,end:a,mode:t}:{days:r,start:i,end:a,mode:t,...n.triggers?{triggers:n.triggers}:{},...n.preBufferSec===void 0?{}:{preBufferSec:n.preBufferSec},...n.postBufferSec===void 0?{}:{postBufferSec:n.postBufferSec}}}function Kt(e){if(e.bands)return e.bands;if(!e.enabled||e.mode===`off`)return[];let t=e.schedules??(e.schedule?[e.schedule]:[{kind:`always`}]),n=e.mode===`continuous`?`continuous`:`events`;return t.map(t=>Gt(t,n,e))}var qt=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${E(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function Jt(e,t){return`${e}|${E(t)}`}function E(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function Yt(e,t){return e.type===t.type?e.type===`global`||t.type===`global`?!0:e.type===`node`&&t.type===`node`?e.nodeId===t.nodeId:e.type===`device`&&t.type===`device`?e.deviceId===t.deviceId:!1:!1}var Xt=class{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??Zt(),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{let e=this.bus.getRecent({category:`system.ready-state`});for(let t of e)this.ingest(t.data)}catch{}}close(){this.unsubscribeBus(),this.unsubscribeAgentOffline(),this.subscriptions.clear()}get(e,t){return this.snapshot.get(Jt(e,t))??null}getSnapshotForTransport(){return Array.from(this.snapshot.values())}hydrate(e){let t=this.now();for(let n of e){let e=Jt(n.capName,n.scope);if(this.snapshot.has(e))continue;let r={capName:n.capName,scope:n.scope,state:n.state,generation:n.generation,epoch:1,lastChange:t,sourceNodeId:n.sourceNodeId};this.snapshot.set(e,r),this.logger&&this.logger.debug(`readiness: ${n.capName} (${E(n.scope)}) → ${n.state} (hydrated, gen=${n.generation.slice(0,6)})`);let i={capName:n.capName,scope:n.scope,state:n.state,epoch:1,generation:n.generation,sourceNodeId:`hydrated`,ts:t,durationInPrevState:0};for(let e of this.subscriptions)if(e.capName===n.capName&&Yt(e.scope,n.scope))try{e.handler(i)}catch(e){this.logger?.warn(`readiness hydrate handler threw for ${n.capName}: ${e.message??String(e)}`)}}}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,n={}){let r=n.timeoutMs??1/0,i=this.now();return this.get(e,t)?.state===`ready`?Promise.resolve():n.signal?.aborted?Promise.reject(n.signal.reason??Error(`aborted`)):new Promise((a,o)=>{let s=!1,c=this.onReadyState(e,t,e=>{e.state===`ready`&&(s||(s=!0,f(),a()))}),l=Number.isFinite(r)?setTimeout(()=>{s||(s=!0,f(),o(new qt(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${E(t)}) after ${this.now()-i}ms`)},3e4);typeof u.unref==`function`&&u.unref();let d=()=>{s||(s=!0,f(),o(n.signal?.reason??Error(`aborted`)))};n.signal?.addEventListener(`abort`,d,{once:!0});function f(){c(),l!==null&&clearTimeout(l),clearInterval(u),n.signal?.removeEventListener(`abort`,d)}})}onReadyState(e,t,n){let r={capName:e,scope:t,handler:n};this.subscriptions.add(r);let i=this.get(e,t);return i!==null&&queueMicrotask(()=>{this.subscriptions.has(r)&&n({capName:e,scope:t,state:i.state,epoch:i.epoch,generation:i.generation,sourceNodeId:this.sourceNodeId,ts:i.lastChange,durationInPrevState:0})}),()=>{this.subscriptions.delete(r)}}emitTransition(e,t,n){let r=this.now();this.bus.emit(Ue(`system.ready-state`,{type:`capability`,id:e,nodeId:this.sourceNodeId},{capName:e,scope:t,state:n,generation:this.generation,sourceNodeId:this.sourceNodeId,ts:r}))}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;let t=Jt(e.capName,e.scope),n=this.snapshot.get(t)??null,r=this.now(),i;if(i=n===null?+(e.state===`ready`):n.generation!==e.generation&&e.state===`ready`?n.epoch+1:n.epoch,n!==null&&n.generation===e.generation&&n.state===e.state)return;let a=n===null?0:Math.max(0,r-n.lastChange),o={capName:e.capName,scope:e.scope,state:e.state,generation:e.generation,epoch:i,lastChange:r,sourceNodeId:e.sourceNodeId};this.snapshot.set(t,o);let s={capName:e.capName,scope:e.scope,state:e.state,epoch:i,generation:e.generation,sourceNodeId:e.sourceNodeId,ts:e.ts,durationInPrevState:a};this.logger&&this.logger.debug(`readiness: ${e.capName} (${E(e.scope)}) → ${e.state} epoch=${i} gen=${e.generation.slice(0,6)} (prev ${a}ms)`);for(let t of this.subscriptions)if(t.capName===e.capName&&Yt(t.scope,e.scope))try{t.handler(s)}catch(t){this.logger?.warn(`readiness handler threw for ${e.capName}: ${t.message??String(t)}`)}}synthesizeDownForNode(e){let t=this.now();for(let[n,r]of this.snapshot){if(r.state===`down`||!(r.scope.type===`node`&&r.scope.nodeId===e||r.scope.type===`device`&&r.sourceNodeId===e))continue;let i=Math.max(0,t-r.lastChange),a={...r,state:`down`,lastChange:t};this.snapshot.set(n,a);let o={capName:r.capName,scope:r.scope,state:`down`,epoch:r.epoch,generation:r.generation,sourceNodeId:this.sourceNodeId,ts:t,durationInPrevState:i};this.logger&&this.logger.debug(`readiness: ${r.capName} (${E(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&Yt(e.scope,r.scope))try{e.handler(o)}catch(e){this.logger?.warn(`readiness handler threw during agent.offline demux for ${r.capName}: ${e.message??String(e)}`)}}}};function Zt(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function Qt(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}var $t=`x-camstack-dataplane-secret`,en=a().regex(/^[a-z][a-zA-Z0-9-]*$/),D=y({id:a().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),type:a(),displayName:a().min(1),providerId:a().min(1),config:o(a(),r()),nodeId:a().optional(),isDefault:m().default(!1),isSystem:m().default(!1),createdAt:i(),updatedAt:i()}),O=g([en,a().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),tn=y({id:a().regex(/^[a-z][a-zA-Z0-9-]*$/,{message:`id must start with a lowercase letter and contain only letters, digits, or hyphens`}),displayName:a().min(1,{message:`displayName must not be empty`}),description:a().optional(),cardinality:v([`single`,`multi`]),defaultsTo:a().optional(),defaultRoot:v([`data`,`media`]).optional()}),nn={high:`High`,mid:`Mid`,low:`Low`};function rn(e){return nn[e]??e.charAt(0).toUpperCase()+e.slice(1)}function an(e){return(e.width??0)*(e.height??0)}function on(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:an(e.metadata??{})})).toSorted((e,t)=>t.px-e.px),n=Array.from({length:e.length});for(let e=0;e<t.length;e++){let{s:r,i}=t[e],a;a=e===0?`high`:e===t.length-1?`low`:`mid`,n[i]={...r,quality:a}}return n}function sn(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function cn(e){let t=e.protocols.find(e=>e.type===`rtsp`&&e.url)??e.protocols.find(e=>e.url),n=t?.type,r=n===`rtsp`?`rtsp`:n===`http`||n===`flv`?`http-mjpeg`:`custom`;return{id:e.id,label:e.label??e.id,protocol:r,url:t?.url,profileHint:e.quality}}function k(e){return typeof e==`string`}function ln(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function un(e){return k(e)&&e.trim()?{url:e}:ln(e)&&k(e.url)&&e.url.trim()?{url:e.url,label:k(e.label)?e.label:void 0}:null}function dn(e){let t=k(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=un(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=k(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:k(e.main_stream_name)?e.main_stream_name:void 0});let i=k(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:k(e.sub_stream_name)?e.sub_stream_name:void 0});let a=k(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:k(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function fn(e){if(e.length===0)return{};let t=on(e),n={},r=t.find(e=>e.quality===`high`),i=t.find(e=>e.quality===`mid`),a=t.find(e=>e.quality===`low`);r&&(n.high=r.id),i&&(n.mid=i.id),a&&(n.low=a.id);let o=r??i??a??t[0];return o&&(n.high||=o.id,n.mid||=o.id,n.low||=o.id),n}var pn={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},mn=[`face`,`plate`],hn=[`face`,`plate`,`clip`,`custom`],gn=y({inputFps:i(),outputFps:i(),avgDecodeTimeMs:i(),droppedFrames:i(),lagMs:i().optional(),effectiveFps:i().optional(),adaptiveFps:i().optional()}),_n=y({codec:a(),maxFps:i().default(0),outputFormat:v([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]).default(`jpeg`),scale:i().default(1),width:i().optional(),height:i().optional(),deviceId:i().int().nonnegative().optional(),tag:a().optional(),frameSink:v([`callback`,`shm`]).default(`callback`),debug:m().optional()}),vn=y({codec:v([`h264`,`h265`,`copy`]),profile:v([`baseline`,`main`,`high`]).optional(),width:i().int().positive().optional(),height:i().int().positive().optional(),fps:i().positive().optional(),bitrateKbps:i().int().positive().optional(),gopFrames:i().int().positive().optional(),bf:i().int().min(0).optional(),preset:v([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:v([`zerolatency`,`film`,`animation`]).optional()}),yn=g([c(`passthrough`),y({codec:v([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:i().int().positive().optional(),sampleRateHz:i().int().positive().optional(),channels:g([c(1),c(2)]).optional()})]),bn=y({video:vn,audio:yn,inputArgs:h(a()).optional(),outputArgs:h(a()).optional()});function xn(e){let t=e.codec?.toLowerCase().replace(/[.\s-]/g,``),n={codec:t===`h265`||t===`hevc`?`h265`:`h264`,...e.resolution?.width===void 0?{}:{width:e.resolution.width},...e.resolution?.height===void 0?{}:{height:e.resolution.height},...e.fps===void 0?{}:{fps:e.fps}};if(!(n.width===void 0&&n.height===void 0&&n.fps===void 0))return{video:n,audio:`passthrough`}}function Sn(e,t,n,r={}){if(e.length===0)return null;let i=`${n}/`,a=e=>({brokerId:e.brokerId,profileId:e.brokerId.startsWith(i)?e.brokerId.slice(i.length):e.brokerId,url:e.url,mutedUrl:e.mutedUrl,enabled:e.enabled,...e.codec===void 0?{}:{codec:e.codec},...e.resolution===void 0?{}:{resolution:e.resolution}});if(t!==`auto`){let n=e.find(e=>e.enabled&&e.url.length>0&&(e.profile===t||e.brokerId===`${i}${t}`));if(n)return a(n)}let o=e.filter(e=>e.enabled&&e.url.length>0);if(o.length===0)return null;let s=r.targetResolution;if(s){let e=o.filter(e=>e.resolution!==void 0);if(e.length>0){let t=Cn(e,s);if(t)return a(t)}}return a(o[0])}function Cn(e,t){let n=t.width*t.height,r,i;for(let t of e){if(t.resolution===void 0)continue;let e=t.resolution.width*t.resolution.height;e>=n?(!r||e<r.pixels)&&(r={entry:t,pixels:e}):(!i||e>i.pixels)&&(i={entry:t,pixels:e})}return r?.entry??i?.entry}var wn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},Tn=function(e){return e.Addon=`addon`,e.Core=`core`,e.Device=`device`,e.Provider=`provider`,e.System=`system`,e}({}),En=`camstack/camstack-models`,Dn=`https://huggingface.co/${En}/resolve/main`,On={"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:[],"ffmpeg.binaryPath":`ffmpeg`,"ffmpeg.hwAccel":`auto`,"ffmpeg.threadCount":0,"auth.tokenExpiry":`7d`},kn=`__camstackNodePin`;function An(e){return{context:{[kn]:e}}}function jn(e){if(typeof e!=`object`||!e)return;let t=Reflect.get(e,kn);return typeof t==`string`?t:void 0}function Mn(e){return JSON.parse(e)}function Nn(e){return typeof e!=`object`||!e||Array.isArray(e)?null:{...e}}function Pn(e){return Array.isArray(e)?e:[]}function Fn(e,t=``){return typeof e==`string`?e:t}function In(e,t=0){return typeof e==`number`?e:t}function Ln(e,t=!1){return typeof e==`boolean`?e:t}function Rn(e){try{return Nn(Mn(e))}catch{return null}}function zn(e){try{let t=Mn(e);return Array.isArray(t)?t:null}catch{return null}}function Bn(e,t){return`https://huggingface.co/${e}/resolve/main/${t}`}function Vn(e,t){if(e.length!==t.length)return 0;let n=0,r=0,i=0;for(let a=0;a<e.length;a++)n+=e[a]*t[a],r+=e[a]*e[a],i+=t[a]*t[a];let a=Math.sqrt(r)*Math.sqrt(i);return a===0?0:n/a}var Hn=class{elementId;cache={};listeners=new Set;loaded=!1;getBackend;constructor(e,t){this.elementId=e,this.getBackend=typeof t==`function`?t:()=>t}async ensureLoaded(){if(this.loaded)return;let e=this.getBackend();if(!e)throw Error(`ElementConfigStore(${this.elementId}): settings backend not available`);let 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){let t=e.split(`.`),n=this.cache;for(let e of t){if(typeof n!=`object`||!n||Array.isArray(n))return;n=Reflect.get(n,e)}return n}async set(e,t){await this.ensureLoaded(),Un(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(){let e=this.getBackend();if(!e)throw Error(`ElementConfigStore(${this.elementId}): settings backend not available — cannot persist config`);await e.set({collection:`config`,key:this.elementId,value:this.cache})}notifyListeners(){let e=this.getAll();for(let t of this.listeners)try{t(e)}catch{}}};function Un(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e],n=i[t];if(typeof n!=`object`||!n||Array.isArray(n)){let e={};i[t]=e,i=e}else i=n}i[r[r.length-1]]=n}var Wn={cpu:`onnx`,coreml:`onnx`,cuda:`onnx`,tensorrt:`onnx`,"onnx-py":`onnx`,pytorch:`pt`,openvino:`openvino`},Gn={onnx:`onnx`,coreml:`coreml`,openvino:`openvino`,tflite:`tflite`,pytorch:`pt`},Kn={coreml:`coreml_inference.py`,pytorch:`pytorch_inference.py`,openvino:`openvino_inference.py`};function qn(e,t){return e===`node`?`onnx`:{coreml:`coreml`,openvino:`openvino`,pytorch:`pytorch`,"onnx-py":`onnx`,cpu:`onnx`}[t]??t}function Jn(e,t){return e===`node`?Wn[t]??`onnx`:{coreml:`coreml`,openvino:`openvino`,pytorch:`pt`,"onnx-py":`onnx`,cpu:`onnx`}[t]??`onnx`}function Yn(e,t){return!e||e===`auto`?`auto`:qn(e,t??`cpu`)}function Xn(e){return Wn[e]??`onnx`}function Zn(e){return Gn[e]}function Qn(e){return Kn[e]}function $n(e){return e===`coreml`||e===`pytorch`||e===`openvino`}function er(e){return e instanceof Error?e.message:typeof e==`string`?e:String(e)}async function tr(e,t){let n=performance.now();try{return{output:t===void 0?await e():await rr(e(),t),durationMs:nr(performance.now()-n),ok:!0}}catch(e){return{output:void 0,durationMs:nr(performance.now()-n),ok:!1,error:er(e)}}}function nr(e){return Math.round(e*100)/100}function rr(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`Inference timeout after ${t}ms`)),t);e.then(e=>{clearTimeout(i),n(e)}).catch(e=>{clearTimeout(i),r(e)})})}var ir=[{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`}],ar=[{id:`person`,name:`Person`},{id:`vehicle`,name:`Vehicle`},{id:`animal`,name:`Animal`}],or={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},sr=[{id:`speech`,name:`Speech`,icon:`🗣️`},{id:`scream`,name:`Scream / Shout`,icon:`😱`},{id:`crying`,name:`Crying / Baby`,icon:`😢`},{id:`laughter`,name:`Laughter`,icon:`😂`},{id:`music`,name:`Music`,icon:`🎵`},{id:`dog`,name:`Dog`,icon:`🐕`},{id:`cat`,name:`Cat`,icon:`🐈`},{id:`bird`,name:`Bird`,icon:`🐦`},{id:`animal`,name:`Animal (other)`,icon:`🐾`},{id:`alarm`,name:`Alarm / Siren`,icon:`🚨`},{id:`doorbell`,name:`Doorbell / Knock`,icon:`🔔`},{id:`glass_breaking`,name:`Glass Breaking`,icon:`💥`},{id:`gunshot`,name:`Gunshot / Explosion`,icon:`💣`},{id:`vehicle`,name:`Vehicle`,icon:`🚗`},{id:`siren`,name:`Emergency Siren`,icon:`🚑`},{id:`fire`,name:`Fire / Smoke`,icon:`🔥`},{id:`water`,name:`Water`,icon:`💧`},{id:`wind`,name:`Wind / Weather`,icon:`🌬️`},{id:`door`,name:`Door`,icon:`🚪`},{id:`footsteps`,name:`Footsteps`,icon:`👣`},{id:`crowd`,name:`Crowd / Chatter`,icon:`👥`},{id:`telephone`,name:`Telephone`,icon:`📞`},{id:`engine`,name:`Engine / Motor`,icon:`⚙️`},{id:`tools`,name:`Tools / Construction`,icon:`🔨`},{id:`silence`,name:`Silence`,icon:`🤫`}],cr={mapping:{Speech:`speech`,"Child speech, kid speaking":`speech`,Conversation:`speech`,"Narration, monologue":`speech`,Babbling:`speech`,Whispering:`speech`,"Speech synthesizer":`speech`,Humming:`speech`,Rapping:`speech`,Singing:`speech`,Choir:`speech`,"Child singing":`speech`,Shout:`scream`,Bellow:`scream`,Yell:`scream`,Screaming:`scream`,"Children shouting":`scream`,Whoop:`scream`,"Crying, sobbing":`crying`,"Baby cry, infant cry":`crying`,Whimper:`crying`,"Wail, moan":`crying`,Groan:`crying`,Laughter:`laughter`,"Baby laughter":`laughter`,Giggle:`laughter`,Snicker:`laughter`,"Belly laugh":`laughter`,"Chuckle, chortle":`laughter`,Music:`music`,"Musical instrument":`music`,Guitar:`music`,Piano:`music`,Drum:`music`,"Drum kit":`music`,"Violin, fiddle":`music`,Flute:`music`,Saxophone:`music`,Trumpet:`music`,Synthesizer:`music`,"Pop music":`music`,"Rock music":`music`,"Hip hop music":`music`,"Classical music":`music`,Jazz:`music`,"Electronic music":`music`,"Background music":`music`,Dog:`dog`,Bark:`dog`,Yip:`dog`,Howl:`dog`,"Bow-wow":`dog`,Growling:`dog`,"Whimper (dog)":`dog`,Cat:`cat`,Purr:`cat`,Meow:`cat`,Hiss:`cat`,Caterwaul:`cat`,Bird:`bird`,"Bird vocalization, bird call, bird song":`bird`,"Chirp, tweet":`bird`,Squawk:`bird`,Crow:`bird`,Owl:`bird`,"Pigeon, dove":`bird`,Animal:`animal`,"Domestic animals, pets":`animal`,"Livestock, farm animals, working animals":`animal`,Horse:`animal`,"Cattle, bovinae":`animal`,Pig:`animal`,Sheep:`animal`,Goat:`animal`,Frog:`animal`,Insect:`animal`,Cricket:`animal`,Alarm:`alarm`,"Alarm clock":`alarm`,"Smoke detector, smoke alarm":`alarm`,"Fire alarm":`alarm`,Buzzer:`alarm`,"Civil defense siren":`alarm`,"Car alarm":`alarm`,Siren:`siren`,"Police car (siren)":`siren`,"Ambulance (siren)":`siren`,"Fire engine, fire truck (siren)":`siren`,"Emergency vehicle":`siren`,Foghorn:`siren`,Doorbell:`doorbell`,"Ding-dong":`doorbell`,Knock:`doorbell`,Tap:`doorbell`,Glass:`glass_breaking`,Shatter:`glass_breaking`,"Chink, clink":`glass_breaking`,"Gunshot, gunfire":`gunshot`,"Machine gun":`gunshot`,Explosion:`gunshot`,Fireworks:`gunshot`,Firecracker:`gunshot`,"Artillery fire":`gunshot`,"Cap gun":`gunshot`,Boom:`gunshot`,Vehicle:`vehicle`,Car:`vehicle`,Truck:`vehicle`,Bus:`vehicle`,Motorcycle:`vehicle`,"Car passing by":`vehicle`,"Vehicle horn, car horn, honking":`vehicle`,"Traffic noise, roadway noise":`vehicle`,Train:`vehicle`,Aircraft:`vehicle`,Helicopter:`vehicle`,Bicycle:`vehicle`,Skateboard:`vehicle`,Fire:`fire`,Crackle:`fire`,Water:`water`,Rain:`water`,Raindrop:`water`,"Rain on surface":`water`,Stream:`water`,Waterfall:`water`,Ocean:`water`,"Waves, surf":`water`,"Splash, splatter":`water`,Wind:`wind`,Thunderstorm:`wind`,Thunder:`wind`,"Wind noise (microphone)":`wind`,"Rustling leaves":`wind`,Door:`door`,"Sliding door":`door`,Slam:`door`,"Cupboard open or close":`door`,"Walk, footsteps":`footsteps`,Run:`footsteps`,Shuffle:`footsteps`,Crowd:`crowd`,Chatter:`crowd`,Cheering:`crowd`,Applause:`crowd`,"Children playing":`crowd`,"Hubbub, speech noise, speech babble":`crowd`,Telephone:`telephone`,"Telephone bell ringing":`telephone`,Ringtone:`telephone`,"Telephone dialing, DTMF":`telephone`,"Busy signal":`telephone`,Engine:`engine`,"Engine starting":`engine`,Idling:`engine`,"Accelerating, revving, vroom":`engine`,"Light engine (high frequency)":`engine`,"Medium engine (mid frequency)":`engine`,"Heavy engine (low frequency)":`engine`,"Lawn mower":`engine`,Chainsaw:`engine`,Hammer:`tools`,Jackhammer:`tools`,Sawing:`tools`,"Power tool":`tools`,Drill:`tools`,Sanding:`tools`,Silence:`silence`},preserveOriginal:!1},lr={mapping:{speech:`speech`,child_speech:`speech`,conversation:`speech`,whispering:`speech`,singing:`speech`,humming:`speech`,shout:`scream`,yell:`scream`,screaming:`scream`,crying:`crying`,baby_crying:`crying`,sobbing:`crying`,laughter:`laughter`,baby_laughter:`laughter`,giggling:`laughter`,music:`music`,guitar:`music`,piano:`music`,drums:`music`,dog_bark:`dog`,dog_bow_wow:`dog`,dog_growling:`dog`,dog_howl:`dog`,cat_meow:`cat`,cat_purr:`cat`,cat_hiss:`cat`,bird:`bird`,bird_chirp:`bird`,bird_squawk:`bird`,animal:`animal`,horse:`animal`,cow_moo:`animal`,insect:`animal`,alarm:`alarm`,smoke_alarm:`alarm`,fire_alarm:`alarm`,car_alarm:`alarm`,siren:`siren`,police_siren:`siren`,ambulance_siren:`siren`,doorbell:`doorbell`,door_knock:`doorbell`,knocking:`doorbell`,glass_breaking:`glass_breaking`,glass_shatter:`glass_breaking`,gunshot:`gunshot`,explosion:`gunshot`,fireworks:`gunshot`,car:`vehicle`,truck:`vehicle`,motorcycle:`vehicle`,car_horn:`vehicle`,vehicle_horn:`vehicle`,traffic:`vehicle`,fire:`fire`,fire_crackle:`fire`,water:`water`,rain:`water`,ocean:`water`,splash:`water`,wind:`wind`,thunder:`wind`,thunderstorm:`wind`,door:`door`,door_slam:`door`,sliding_door:`door`,footsteps:`footsteps`,walking:`footsteps`,running:`footsteps`,crowd:`crowd`,chatter:`crowd`,cheering:`crowd`,applause:`crowd`,telephone_ring:`telephone`,ringtone:`telephone`,engine:`engine`,engine_starting:`engine`,lawn_mower:`engine`,chainsaw:`engine`,hammer:`tools`,jackhammer:`tools`,drill:`tools`,power_tool:`tools`,silence:`silence`},preserveOriginal:!1},ur=new Map;for(let[e,t]of Object.entries(cr.mapping))ur.set(e.toLowerCase(),t);for(let[e,t]of Object.entries(lr.mapping))ur.set(e.toLowerCase(),t);function dr(e){return ur.get(e.toLowerCase())??null}function fr(){return sr.map(e=>e.id)}var pr={camera:{type:`camera`,label:`Camera`,icon:`camera`}},A=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},j=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}},mr=2048,hr=4096,gr=/^[A-Za-z_][A-Za-z0-9_]*$/,_r=new Set([`now`,`true`,`false`,`null`]),vr=new Set([`true`,`false`,`null`]);function yr(e){return e>=`0`&&e<=`9`}function br(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function xr(e){return br(e)||yr(e)}function Sr(e){return e===` `||e===` `||e===`
3
3
  `||e===`\r`||e===`\f`||e===`\v`}function Cr(e){if(e.length>2048)throw new A(`expression too long (${e.length} > ${mr} chars)`,0);let t=[],n=0,r=e.length;for(;n<r;){let i=e[n];if(Sr(i)){n+=1;continue}if(yr(i)){let i=n;for(;n<r&&yr(e[n]);)n+=1;if(n<r&&e[n]===`.`){if(n+1>=r||!yr(e[n+1]))throw new A(`malformed number: decimal point needs a digit`,n);for(n+=1;n<r&&yr(e[n]);)n+=1}let a=e.slice(i,n),o=Number(a);if(!Number.isFinite(o))throw new A(`malformed number: '${a}'`,i);t.push({type:`number`,value:o,pos:i});continue}if(i===`'`||i===`"`){let a=i,o=n;n+=1;let s=``,c=!1;for(;n<r;){let t=e[n];if(t===`\\`){let t=n+1<r?e[n+1]:``;if(t===`\\`||t===`'`||t===`"`){s+=t,n+=2;continue}throw new A(`invalid string escape: '\\${t}'`,n)}if(t===a){c=!0,n+=1;break}s+=t,n+=1}if(!c)throw new A(`unterminated string literal`,o);t.push({type:`string`,value:s,pos:o});continue}if(br(i)){let i=n;for(;n<r&&xr(e[n]);)n+=1;let a=e.slice(i,n);vr.has(a)?t.push({type:`keyword`,keyword:wr(a),pos:i}):t.push({type:`identifier`,name:a,pos:i});continue}let a=n+1<r?e.slice(n,n+2):``;if(a===`<=`||a===`>=`||a===`==`||a===`!=`||a===`&&`||a===`||`){t.push({type:`punct`,punct:a,pos:n}),n+=2;continue}if(Tr(i)){t.push({type:`punct`,punct:i,pos:n}),n+=1;continue}throw new A(`unexpected character '${i}'`,n)}return t.push({type:`eof`,pos:r}),t}function wr(e){return e===`true`?`true`:e===`false`?`false`:`null`}function Tr(e){return e===`(`||e===`)`||e===`,`||e===`?`||e===`:`||e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`!`||e===`<`||e===`>`}function M(e,t,n){if(typeof e!=`number`||!Number.isFinite(e))throw new j(`${t}: argument ${n+1} must be a finite number`);return e}function Er(e,t,n){if(typeof e!=`string`)throw new j(`${t}: argument ${n+1} must be a string`);return e}function N(e,t){if(!Number.isFinite(e))throw new j(`${t}: produced a non-finite result`);return e}function Dr(e,t){return e.map((e,n)=>M(e,t,n))}var Or=1/0,kr={min:{minArgs:1,maxArgs:Or,apply:e=>N(Math.min(...Dr(e,`min`)),`min`)},max:{minArgs:1,maxArgs:Or,apply:e=>N(Math.max(...Dr(e,`max`)),`max`)},abs:{minArgs:1,maxArgs:1,apply:e=>N(Math.abs(M(e[0],`abs`,0)),`abs`)},floor:{minArgs:1,maxArgs:1,apply:e=>N(Math.floor(M(e[0],`floor`,0)),`floor`)},ceil:{minArgs:1,maxArgs:1,apply:e=>N(Math.ceil(M(e[0],`ceil`,0)),`ceil`)},sqrt:{minArgs:1,maxArgs:1,apply:e=>N(Math.sqrt(M(e[0],`sqrt`,0)),`sqrt`)},round:{minArgs:1,maxArgs:2,apply:e=>{let t=M(e[0],`round`,0),n=e.length>1?Math.trunc(M(e[1],`round`,1)):0;if(n<0||n>100)throw new j(`round: digits must be between 0 and 100`);let r=10**n;return N(Math.round(t*r)/r,`round`)}},pow:{minArgs:2,maxArgs:2,apply:e=>N(M(e[0],`pow`,0)**M(e[1],`pow`,1),`pow`)},clamp:{minArgs:3,maxArgs:3,apply:e=>{let t=M(e[0],`clamp`,0),n=M(e[1],`clamp`,1),r=M(e[2],`clamp`,2);if(n>r)throw new j(`clamp: lower bound is greater than upper bound`);return N(Math.min(r,Math.max(n,t)),`clamp`)}},avg:{minArgs:1,maxArgs:Or,apply:e=>{let t=Dr(e,`avg`);return N(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:Or,apply:e=>N(Dr(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:Or,apply:e=>{for(let t of e)if(t!==null)return t;return null}},age:{minArgs:2,maxArgs:2,apply:e=>N(M(e[0],`age`,0)-M(e[1],`age`,1),`age`)},convert:{minArgs:3,maxArgs:3,apply:(e,t)=>{let n=M(e[0],`convert`,0),r=Er(e[1],`convert`,1).trim(),i=Er(e[2],`convert`,2).trim();if(t.convert){let e=t.convert(n,r,i);if(e===null)throw new j(`convert: cannot convert '${r}' to '${i}'`);return N(e,`convert`)}if(r===i)return n;throw new j(`convert: unit conversion table not installed`)}}},Ar=Object.freeze(Object.assign(Object.create(null),kr)),jr=new Set(Object.keys(kr)),Mr={"||":1,"&&":2,"==":3,"!=":3,"<":4,"<=":4,">":4,">=":4,"+":5,"-":5,"*":6,"/":6,"%":6};function Nr(e){return e===`&&`||e===`||`}function Pr(e){return e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`==`||e===`!=`||e===`<`||e===`<=`||e===`>`||e===`>=`}var Fr=class{tokens;pos=0;nodeCount=0;identifiers=new Set;callees=new Set;constructor(e){this.tokens=e}parse(){let e=this.parseTernary(),t=this.peek();if(t.type!==`eof`)throw new A(`unexpected trailing input`,t.pos);return{ast:e,identifiers:this.identifiers,callees:this.callees,nodeCount:this.nodeCount}}peek(){return this.tokens[this.pos]}next(){return this.tokens[this.pos++]}expectPunct(e){let t=this.peek();if(t.type!==`punct`||t.punct!==e)throw new A(`expected '${e}'`,t.pos);this.pos+=1}matchPunct(e){let t=this.peek();return t.type===`punct`&&t.punct===e?(this.pos+=1,!0):!1}countNode(){if(this.nodeCount+=1,this.nodeCount>256)throw new A(`expression too complex`,this.peek().pos)}parseTernary(){let e=this.parseBinary(1);if(this.matchPunct(`?`)){let t=this.parseTernary();this.expectPunct(`:`);let n=this.parseTernary();return this.countNode(),{kind:`conditional`,test:e,consequent:t,alternate:n}}return e}parseBinary(e){let t=this.parseUnary();for(;;){let n=this.peek();if(n.type!==`punct`)break;let r=Mr[n.punct];if(r===void 0||r<e)break;let i=n.punct;this.pos+=1;let a=this.parseBinary(r+1);if(this.countNode(),Nr(i))t={kind:`logical`,op:i,left:t,right:a};else if(Pr(i))t={kind:`binary`,op:i,left:t,right:a};else throw new A(`unexpected operator '${i}'`,n.pos)}return t}parseUnary(){let e=this.peek();if(e.type===`punct`&&(e.punct===`!`||e.punct===`-`)){let t=e.punct;this.pos+=1;let n=this.parseUnary();return this.countNode(),{kind:`unary`,op:t,operand:n}}return this.parsePrimary()}parsePrimary(){let e=this.next();switch(e.type){case`number`:return this.countNode(),{kind:`literal`,value:e.value};case`string`:return this.countNode(),{kind:`literal`,value:e.value};case`keyword`:return this.countNode(),{kind:`literal`,value:e.keyword===`null`?null:e.keyword===`true`};case`identifier`:{let t=this.peek();return t.type===`punct`&&t.punct===`(`?this.parseCall(e.name,e.pos):(this.identifiers.add(e.name),this.countNode(),{kind:`identifier`,name:e.name})}case`punct`:if(e.punct===`(`){let e=this.parseTernary();return this.expectPunct(`)`),e}throw new A(`unexpected token '${e.punct}'`,e.pos);case`eof`:throw new A(`unexpected end of expression`,e.pos)}}parseCall(e,t){if(!jr.has(e))throw new A(`unknown function '${e}'`,t);this.expectPunct(`(`);let n=[];if(!this.matchPunct(`)`))for(;;){if(n.push(this.parseTernary()),n.length>16)throw new A(`too many arguments to '${e}'`,t);if(!this.matchPunct(`,`)){this.expectPunct(`)`);break}}return this.callees.add(e),this.countNode(),{kind:`call`,callee:e,args:n}}};function Ir(e){return new Fr(Cr(e)).parse()}var Lr=Object.freeze({});function Rr(e){let t=Object.create(null);for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}function P(e){return typeof e==`number`&&Number.isFinite(e)}function zr(e){return!!e}function Br(e,t){if(!Number.isFinite(e))throw new j(`${t} produced a non-finite result`);return e}function Vr(e){if(e.steps+=1,e.steps>e.maxSteps)throw new j(`expression evaluation step budget exceeded`)}function F(e,t){switch(Vr(t),e.kind){case`literal`:return e.value;case`identifier`:if(!(e.name in t.scope))throw new j(`unknown identifier: ${e.name}`);return t.scope[e.name];case`unary`:return Hr(e.op,F(e.operand,t));case`binary`:return Ur(e.op,F(e.left,t),F(e.right,t));case`logical`:{let n=F(e.left,t);return e.op===`&&`?zr(n)?F(e.right,t):n:zr(n)?n:F(e.right,t)}case`conditional`:return zr(F(e.test,t))?F(e.consequent,t):F(e.alternate,t);case`call`:return Wr(e.callee,e.args.map(e=>F(e,t)),t.hooks)}}function Hr(e,t){if(e===`!`)return!zr(t);if(!P(t))throw new j(`unary "-" requires a finite number`);return Br(-t,`unary "-"`)}function Ur(e,t,n){switch(e){case`==`:return t===n;case`!=`:return t!==n;case`+`:if(typeof t==`string`&&typeof n==`string`)return t+n;if(P(t)&&P(n))return Br(t+n,`"+"`);throw new j(`"+" requires two numbers or two strings`);case`-`:case`*`:case`/`:case`%`:if(!P(t)||!P(n))throw new j(`"${e}" requires two finite numbers`);return Br(e===`-`?t-n:e===`*`?t*n:e===`/`?t/n:t%n,`"${e}"`);case`<`:case`<=`:case`>`:case`>=`:if(P(t)&&P(n)||typeof t==`string`&&typeof n==`string`)return e===`<`?t<n:e===`<=`?t<=n:e===`>`?t>n:t>=n;throw new j(`"${e}" requires two numbers or two strings`)}}function Wr(e,t,n){if(!Object.prototype.hasOwnProperty.call(Ar,e))throw new j(`unknown function: ${e}`);let r=Ar[e];if(t.length<r.minArgs||t.length>r.maxArgs)throw new j(`${e}: wrong number of arguments (${t.length})`);return r.apply(t,n)}function Gr(e,t,n){return F(e,{scope:t,hooks:n?.hooks??Lr,maxSteps:n?.maxSteps??4096,steps:0})}var I=new Map;function Kr(e){let t=I.get(e);if(t!==void 0)return I.delete(e),I.set(e,t),t;let n;try{n={ok:!0,parsed:Ir(e)}}catch(e){n={ok:!1,error:e instanceof A?e.message:String(e)}}if(I.set(e,n),I.size>256){let e=I.keys().next().value;e!==void 0&&I.delete(e)}return n}function qr(e){let t=Kr(e);if(t.ok)return t.parsed;throw new A(t.error)}function Jr(e){return Kr(e)}function Yr(e){if(e===null)return null;if(typeof e==`string`||typeof e==`boolean`)return e;if(typeof e==`number`)return Number.isFinite(e)?e:void 0}function Xr(e){let t=Object.keys(e.bindings);if(t.length>32)return`too many bindings (${t.length} > 32)`;for(let e of t){if(!gr.test(e))return`invalid binding name '${e}'`;if(_r.has(e))return`binding name '${e}' is reserved`;if(jr.has(e))return`binding name '${e}' shadows a builtin function`}let n=Jr(e.expr);if(!n.ok)return n.error;let r=new Set(t);for(let e of n.parsed.identifiers)if(e!==`now`&&!r.has(e))return`expression references unbound identifier '${e}'`;return null}function Zr(e,t,n,r){let i=Jr(e);if(!i.ok)return{ok:!1,error:i.error};let a=Rr({...t,now:n});try{return{ok:!0,value:Gr(i.parsed.ast,a,r)}}catch(e){return{ok:!1,error:e instanceof j?e.message:String(e)}}}var L=function(e){return e.Camera=`camera`,e.Hub=`hub`,e.Light=`light`,e.Siren=`siren`,e.Switch=`switch`,e.Sensor=`sensor`,e.Thermostat=`thermostat`,e.Climate=`climate`,e.Button=`button`,e.EventEmitter=`event-emitter`,e.Update=`update`,e.Generic=`generic`,e.Notifier=`notifier`,e.Script=`script`,e.Automation=`automation`,e.Lock=`lock`,e.Cover=`cover`,e.Valve=`valve`,e.Humidifier=`humidifier`,e.WaterHeater=`water-heater`,e.Fan=`fan`,e.MediaPlayer=`media-player`,e.AlarmPanel=`alarm-panel`,e.Control=`control`,e.Presence=`presence`,e.Weather=`weather`,e.Vacuum=`vacuum`,e.LawnMower=`lawn-mower`,e.Container=`container`,e.Image=`image`,e.PetFeeder=`pet-feeder`,e}({}),Qr=function(e){return e.BatteryOperated=`battery-operated`,e.Rebootable=`rebootable`,e.Resyncable=`resyncable`,e.NativeSnapshot=`native-snapshot`,e.DoorbellButton=`doorbell-button`,e.TwoWayAudio=`two-way-audio`,e.PanTiltZoom=`pan-tilt-zoom`,e.PtzAutotrack=`ptz-autotrack`,e.MotionTrigger=`motion-trigger`,e.LightColorRgb=`light-color-rgb`,e.LightColorHsv=`light-color-hsv`,e.LightColorMired=`light-color-mired`,e.ClimateDualSetpoint=`climate-dual-setpoint`,e.ClimateHumidity=`climate-humidity`,e.ClimateFanMode=`climate-fan-mode`,e.ClimatePreset=`climate-preset`,e.ClimateSwingVertical=`climate-swing-vertical`,e.ClimateSwingHorizontal=`climate-swing-horizontal`,e.CoverPositionable=`cover-positionable`,e.CoverTilt=`cover-tilt`,e.ValvePositionable=`valve-positionable`,e.FanSpeed=`fan-speed`,e.FanPreset=`fan-preset`,e.FanDirection=`fan-direction`,e.FanOscillating=`fan-oscillating`,e.LockPinRequired=`lock-pin-required`,e.LockOpen=`lock-open`,e.MediaPlayerSeek=`media-player-seek`,e.MediaPlayerVolume=`media-player-volume`,e.MediaPlayerMute=`media-player-mute`,e.MediaPlayerShuffle=`media-player-shuffle`,e.MediaPlayerRepeat=`media-player-repeat`,e.MediaPlayerSelectSource=`media-player-select-source`,e.MediaPlayerPlayMedia=`media-player-play-media`,e.MediaPlayerNext=`media-player-next`,e.MediaPlayerPrevious=`media-player-previous`,e.MediaPlayerStop=`media-player-stop`,e.AlarmPinRequired=`alarm-pin-required`,e.PresenceGps=`presence-gps`,e.NotifierImage=`notifier-image`,e.NotifierPriority=`notifier-priority`,e.NotifierData=`notifier-data`,e.NotifierActions=`notifier-actions`,e.NotifierRecipients=`notifier-recipients`,e.ScriptVariables=`script-variables`,e.AutomationSkipCondition=`automation-skip-condition`,e.VacuumHasMap=`vacuum-has-map`,e.VacuumHasAi=`vacuum-has-ai`,e.MowerHasMap=`mower-has-map`,e.MowerHasTargetedMowing=`mower-has-targeted-mowing`,e}({}),$r=function(e){return e.ChargingDC=`charging-dc`,e.ChargingSolar=`charging-solar`,e.NotCharging=`not-charging`,e}({}),R=function(e){return e.Siren=`siren`,e.Floodlight=`floodlight`,e.Spotlight=`spotlight`,e.PirSensor=`pir-sensor`,e.Chime=`chime`,e.Autotrack=`autotrack`,e.Nightvision=`nightvision`,e.PrivacyMask=`privacy-mask`,e.Doorbell=`doorbell`,e.BinaryHelper=`binary-helper`,e.MotionSensor=`motion-sensor`,e.ContactSensor=`contact-sensor`,e.LeakSensor=`leak-sensor`,e.SmokeSensor=`smoke-sensor`,e.COSensor=`co-sensor`,e.GasSensor=`gas-sensor`,e.TamperSensor=`tamper-sensor`,e.VibrationSensor=`vibration-sensor`,e.ConnectivitySensor=`connectivity-sensor`,e.SoundSensor=`sound-sensor`,e.BinarySensor=`binary-sensor`,e.TemperatureSensor=`temperature-sensor`,e.HumiditySensor=`humidity-sensor`,e.AmbientLightSensor=`ambient-light-sensor`,e.PressureSensor=`pressure-sensor`,e.WindSensor=`wind-sensor`,e.RainSensor=`rain-sensor`,e.UvSensor=`uv-sensor`,e.SolarRadiationSensor=`solar-radiation-sensor`,e.SoilMoistureSensor=`soil-moisture-sensor`,e.PowerSensor=`power-sensor`,e.EnergySensor=`energy-sensor`,e.VoltageSensor=`voltage-sensor`,e.CurrentSensor=`current-sensor`,e.AirQualitySensor=`air-quality-sensor`,e.BatterySensor=`battery-sensor`,e.NumericSensor=`numeric-sensor`,e.EnumSensor=`enum-sensor`,e.DateTimeSensor=`datetime-sensor`,e.GenericSensor=`generic-sensor`,e.NumericControl=`numeric-control`,e.SelectControl=`select-control`,e.TextControl=`text-control`,e.DateTimeControl=`datetime-control`,e.MobilePushNotifier=`mobile-push-notifier`,e.MessagingNotifier=`messaging-notifier`,e.EmailNotifier=`email-notifier`,e.GenericNotifier=`generic-notifier`,e}({}),z={Siren:R.Siren,Floodlight:R.Floodlight,Spotlight:R.Spotlight,PirSensor:R.PirSensor,Chime:R.Chime,Autotrack:R.Autotrack,Nightvision:R.Nightvision,PrivacyMask:R.PrivacyMask},ei={[z.Siren]:`Siren`,[z.Floodlight]:`Floodlight`,[z.Spotlight]:`Spotlight`,[z.PirSensor]:`PIR`,[z.Chime]:`Chime`,[z.Autotrack]:`Autotracking`,[z.Nightvision]:`Night Vision`,[z.PrivacyMask]:`Privacy Mask`};function ti(e,t,n){let r=`${e}:${t}`;return typeof n==`number`?`${r}:${n}`:r}function ni(e,t){return!e||e.length===0?!1:e.includes(t.when.hasFeature)}var ri={id:`battery`,label:`Battery-operated camera`,when:{hasFeature:Qr.BatteryOperated},defaults:{audioMode:`disabled`,detectionMode:`on-motion`},settings:{"snapshot.minRefreshIntervalSec":3600,"streamBroker.preBufferEnabled":!1}},ii=[ri];function ai(e){for(let t of ii)if(ni(e,t))return t;return null}var oi=class e{schema;data;persistFn;constructor(e,t,n){this.schema=e,this.data=t,this.persistFn=n}static fromSchema(t,n,r={},i){let a=t.safeParse(r);if(a.success)return new e(t,a.data,n);let o=new Set;for(let e of a.error.issues){let t=e.path[0];typeof t==`string`&&o.add(t)}let s={...r};for(let e of o)delete s[e];let c=t.safeParse(s);return i?.({droppedKeys:[...o],issues:a.error.issues}),c.success?(n(c.data).catch(()=>{}),new e(t,c.data,n)):new e(t,t.parse({}),n)}get values(){return this.data}get(e){return this.data[e]}async set(e,t){let n=this.schema.parse({...this.data,[e]:t});this.data=n,await this.persistFn(this.data)}async setAll(e){let t=this.schema.parse({...this.data,...e});this.data=t,await this.persistFn(this.data)}async deleteKey(e){let{[e]:t,...n}=this.data,r=this.schema.parse(n);this.data=r,await this.persistFn(this.data)}entries(){let e=this.schema.shape;return Object.entries(e).map(([e,t])=>({key:e,schema:t,value:this.data[e],description:t.description}))}},si=class e{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(let[t,n]of Object.entries(e))n&&typeof n==`object`&&!Array.isArray(n)&&this.slices.set(t,{...n})}static fromInitial(t,n){return new e(t,n)}installCapSchema(e,t){let n=this.schemas.get(e);if(n){if(n!==t)throw 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);let r=this.slices.get(e);if(r){let n=t.safeParse(r);n.success?this.slices.set(e,n.data):this.slices.delete(e)}}getCapState(e){let 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,n){let r=this.schemas.get(e);if(!r)throw Error(`[DeviceRuntimeState] no schema registered for cap "${e}" — did the device register it via ctx.registerNativeCap before writing?`);let i=this.slices.get(e)??{},a=n?{...i,...t}:{...t},o=r.parse(a);if(ci(i,o))return;this.slices.set(e,o),this.fireListeners([e]);let s=this.writer(e,{...o}).catch(()=>{});this.pendingWrites.add(s),s.finally(()=>{this.pendingWrites.delete(s)})}fireListeners(e){let t=this.snapshot();for(let n of this.listeners)try{n(e,t)}catch{}for(let t of e){let e=this.capListeners.get(t);if(!e)continue;let n=this.getCapState(t);for(let t of e)try{t(n)}catch{}}}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}subscribeCap(e,t){let n=this.capListeners.get(e);n||(n=new Set,this.capListeners.set(e,n));let r=e=>{t(e)};return n.add(r),()=>{let t=this.capListeners.get(e);t&&(t.delete(r),t.size===0&&this.capListeners.delete(e))}}snapshot(){let e={};for(let[t,n]of this.slices)e[t]=Object.freeze({...n});return Object.freeze(e)}async flush(){if(this.pendingWrites.size===0)return;let e=[...this.pendingWrites];await Promise.allSettled(e)}};function ci(e,t){let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r of n)if(e[r]!==t[r])return!1;return!0}var li=`lastFetchedAt`;function ui(e){let{runtimeState:t,cap:n,ownDeviceId:r,refresh:i,staleMs:a,empty:o}=e,s=async()=>{let e=t.getCapState(n.name),r=typeof e?.[li]==`number`?e[li]:0;(!e||Date.now()-r>a)&&await i()},c=()=>{let e=t.getCapState(n.name);if(!e)return o();let{[li]:r,...i}=e;return i};return{ensureFresh:s,getStatus:async({deviceId:e})=>{if(e!==r)throw Error(`${n.name}: deviceId mismatch, expected ${r}, got ${e}`);return await s(),c()}}}function di(e){return e.replace(/!\[([^\]]*)\]\([^)]*\)/g,`$1`).replace(/\[([^\]]*)\]\([^)]*\)/g,`$1`).replace(/(\*\*|__)(.*?)\1/g,`$2`).replace(/(\*|_)(.*?)\1/g,`$2`).replace(/`([^`]*)`/g,`$1`).replace(/^\s{0,3}#{1,6}\s*/gm,``).replace(/^\s{0,3}>\s?/gm,``).replace(/^\s{0,3}[-*+]\s+/gm,``).replace(/^\s{0,3}\d+\.\s+/gm,``).trim()}var fi=[[/&nbsp;/g,` `],[/&amp;/g,`&`],[/&lt;/g,`<`],[/&gt;/g,`>`],[/&quot;/g,`"`],[/&#39;/g,`'`]];function pi(e){let t=e.replace(/<\s*br\s*\/?\s*>/gi,`
4
4
  `).replace(/<\s*\/\s*(p|div|li|h[1-6])\s*>/gi,`
5
5
  `).replace(/<[^>]+>/g,``);for(let[e,n]of fi)t=t.replace(e,n);return t.replace(/\n{3,}/g,`
@@ -1 +1 @@
1
- import{V as e}from"./index-Cc9fD-gx.js";var t=e(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]);export{t};
1
+ import{V as e}from"./index-BYgWJtf5.js";var t=e(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]);export{t};
@@ -1 +1 @@
1
- import{En as e,Sn as t,bn as n}from"./src-DdZmgXMF.js";import{K as r,Q as i}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DTufy7Ue.js";import{V as a}from"./index-Cc9fD-gx.js";var o=a(`minus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}]]);i();function s(t){return e({addonId:t})}function c(e){return t({deviceId:e},{enabled:Number.isFinite(e)})}var l=3e4,u=2e3;function d(e){let t=r(0);return t.current===0&&(t.current=Date.now()),n({parentDeviceId:e},{enabled:Number.isFinite(e),staleTime:0,refetchOnMount:`always`,refetchInterval:e=>{let n=e.state.data;return n&&n.length>0||Date.now()-t.current>=l?!1:u}})}export{o as i,d as n,s as r,c as t};
1
+ import{En as e,Sn as t,bn as n}from"./src-BLOkTPDQ.js";import{K as r,Q as i}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DTufy7Ue.js";import{V as a}from"./index-BYgWJtf5.js";var o=a(`minus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}]]);i();function s(t){return e({addonId:t})}function c(e){return t({deviceId:e},{enabled:Number.isFinite(e)})}var l=3e4,u=2e3;function d(e){let t=r(0);return t.current===0&&(t.current=Date.now()),n({parentDeviceId:e},{enabled:Number.isFinite(e),staleTime:0,refetchOnMount:`always`,refetchInterval:e=>{let n=e.state.data;return n&&n.length>0||Date.now()-t.current>=l?!1:u}})}export{o as i,d as n,s as r,c as t};
@@ -1 +1 @@
1
- import"./src-DdZmgXMF.js";import{Q as e,o as t,q as n,z as r}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DTufy7Ue.js";import{p as i}from"./player-overlays-CTSvk_LT.js";e();function a(e,a){let o=i(),s=t(),[c,l]=n(o.connectionVersion);r(()=>o.subscribeConnectionEvents((e,t)=>{e===`connected`&&l(t)}),[o]);let u=a.join(`|`),d=JSON.stringify(e);r(()=>{let e=[],t=()=>{let e=JSON.parse(d),t=e.length===1&&Array.isArray(e[0])?e:[e];s.invalidateQueries({queryKey:t})};t();for(let n of u.split(`|`))if(n)try{e.push(o.subscribeEvent(n,t))}catch{}return()=>{for(let t of e)t()}},[o,s,u,d,c])}export{a as t};
1
+ import"./src-BLOkTPDQ.js";import{Q as e,o as t,q as n,z as r}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DTufy7Ue.js";import{p as i}from"./player-overlays-DEJsZ4vG.js";e();function a(e,a){let o=i(),s=t(),[c,l]=n(o.connectionVersion);r(()=>o.subscribeConnectionEvents((e,t)=>{e===`connected`&&l(t)}),[o]);let u=a.join(`|`),d=JSON.stringify(e);r(()=>{let e=[],t=()=>{let e=JSON.parse(d),t=e.length===1&&Array.isArray(e[0])?e:[e];s.invalidateQueries({queryKey:t})};t();for(let n of u.split(`|`))if(n)try{e.push(o.subscribeEvent(n,t))}catch{}return()=>{for(let t of e)t()}},[o,s,u,d,c])}export{a as t};