@camstack/addon-admin-ui 1.2.269 → 1.2.270

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 (77) hide show
  1. package/dist/assets/{AddonCollectionPage-D-gYSGkW.js → AddonCollectionPage-B6Y9A4N6.js} +1 -1
  2. package/dist/assets/{Addons-C-vPILkP.js → Addons-DKsfeLYq.js} +1 -1
  3. package/dist/assets/{AdminTabs-BTGn6tEG.js → AdminTabs-Dja8Mk-W.js} +1 -1
  4. package/dist/assets/{AiProfiles-B0A4baBM.js → AiProfiles-DTlmdt6r.js} +1 -1
  5. package/dist/assets/{BrokerForm-CqAQZoqg.js → BrokerForm-CfgRH6tY.js} +1 -1
  6. package/dist/assets/{Build-DIvLgeZ-.js → Build-DpV-cPL8.js} +1 -1
  7. package/dist/assets/{Capabilities-KIQ63MO9.js → Capabilities-BXUesCYR.js} +1 -1
  8. package/dist/assets/{CapabilityBadges-DKrha3CG.js → CapabilityBadges-BZvkOTYZ.js} +1 -1
  9. package/dist/assets/{Cluster-j8EXDQDu.js → Cluster-CeHjzcdf.js} +1 -1
  10. package/dist/assets/{Data-CGONwfXu.js → Data-BrXED5lV.js} +1 -1
  11. package/dist/assets/{DetectionIntelligence-Djo1KwDz.js → DetectionIntelligence-Vv7Tt8E9.js} +1 -1
  12. package/dist/assets/{DeviceAggregateSection-FVXPGL0L.js → DeviceAggregateSection-DPGr5GdW.js} +1 -1
  13. package/dist/assets/{DeviceDetail-CmgubXA9.js → DeviceDetail-C1iH5aa7.js} +1 -1
  14. package/dist/assets/{Devices-5De1IznW.js → Devices-Csoa2iXv.js} +1 -1
  15. package/dist/assets/{EmbedPlayerPage-ByhGpbVT.js → EmbedPlayerPage-ClmVSRaH.js} +1 -1
  16. package/dist/assets/{Events-Y3OVukWQ.js → Events-CCyJIOrV.js} +1 -1
  17. package/dist/assets/{FormBuilder-DiXV8BUC.js → FormBuilder-xcf2zSPO.js} +1 -1
  18. package/dist/assets/{Identity-DhZoFy8Y.js → Identity-BBYRbHQy.js} +1 -1
  19. package/dist/assets/{IntegrationDetail-2hO9NnB4.js → IntegrationDetail-BPRFG_x7.js} +1 -1
  20. package/dist/assets/{Integrations-BMRoaJBZ.js → Integrations-BLiNhwOc.js} +1 -1
  21. package/dist/assets/{Integrations-CrpwkBzs.js → Integrations-TvUDY480.js} +1 -1
  22. package/dist/assets/{Locations-Dyu_MjDb.js → Locations-DVLRdub1.js} +1 -1
  23. package/dist/assets/{Logs-BYY68bWg.js → Logs-CsA6OluL.js} +1 -1
  24. package/dist/assets/{MotionZonesSettings-B7R3uaIs.js → MotionZonesSettings-Bb8Cm9Bc.js} +1 -1
  25. package/dist/assets/{MyAccess-DA6TCKFM.js → MyAccess-B1LK0w2i.js} +1 -1
  26. package/dist/assets/{Network-DnWSXtE1.js → Network-Damirh81.js} +1 -1
  27. package/dist/assets/{NodeAddonsSettingsPanel-BoybMDMM.js → NodeAddonsSettingsPanel-Bxfkk4PN.js} +1 -1
  28. package/dist/assets/{NodeInferenceDevices-D_I4AO6e.js → NodeInferenceDevices-BqrhKAV8.js} +1 -1
  29. package/dist/assets/{Notifications-j8rMhe2B.js → Notifications-CbMHkusP.js} +1 -1
  30. package/dist/assets/{Pipeline-CN75uSQb.js → Pipeline-D11oz9uM.js} +1 -1
  31. package/dist/assets/{Plates-DagiGO4b.js → Plates--8DdSua6.js} +1 -1
  32. package/dist/assets/{PrivacyMaskSettings-CQYzmC99.js → PrivacyMaskSettings-BV83k182.js} +1 -1
  33. package/dist/assets/{ProviderIcon-XK7JkRiz.js → ProviderIcon-CWNMbs3U.js} +1 -1
  34. package/dist/assets/{Recordings-DeSrQvVu.js → Recordings-tsT7ZoWd.js} +1 -1
  35. package/dist/assets/{ScanNetworkModal-B7BPfyqQ.js → ScanNetworkModal-D3naTRQ3.js} +1 -1
  36. package/dist/assets/{SceneMonitorEditor-CFRbMsj-.js → SceneMonitorEditor-BuqQ30uy.js} +1 -1
  37. package/dist/assets/{Scenes-jEozoC5J.js → Scenes-B7QGDpEK.js} +1 -1
  38. package/dist/assets/{Settings-C4vFCpZg.js → Settings-BlG7mCfA.js} +1 -1
  39. package/dist/assets/{Showroom-CdFOYXww.js → Showroom-T_5DsEVl.js} +1 -1
  40. package/dist/assets/{StorageLocationsPanel-DP9rO7W9.js → StorageLocationsPanel-BOZm_gD6.js} +1 -1
  41. package/dist/assets/{Terminal-SmHRVcI9.js → Terminal-Dob1RVmO.js} +1 -1
  42. package/dist/assets/{Viewer-9xIHwCzN.js → Viewer-CSyausau.js} +1 -1
  43. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-aBHmNPgW.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DzkxahtX.js} +1 -1
  44. package/dist/assets/{archive-Dsj5Yn7T.js → archive-BOh2m678.js} +1 -1
  45. package/dist/assets/{authed-media-7apZd91b.js → authed-media-BVflovlM.js} +1 -1
  46. package/dist/assets/{boxes-Bo8Eo7Eo.js → boxes-BKD7ctjv.js} +1 -1
  47. package/dist/assets/circle-slash-LwJaRs4o.js +1 -0
  48. package/dist/assets/{debounced-invalidate-CzLxXRyZ.js → debounced-invalidate-CMQlPGE8.js} +1 -1
  49. package/dist/assets/{dist-BnI34jwy.js → dist-BIL8T-y8.js} +1 -1
  50. package/dist/assets/{dist-s-m3gvQn.js → dist-BJS_Szr8.js} +1 -1
  51. package/dist/assets/{face-bbox-CQAHU2sS.js → face-bbox-1CwrB3Hs.js} +1 -1
  52. package/dist/assets/{hard-drive-download-DfDGbPXo.js → hard-drive-download-Kzh5K7rR.js} +1 -1
  53. package/dist/assets/{hostInit-gW89JebF.js → hostInit-CwLFw7vK.js} +1 -1
  54. package/dist/assets/{index-CHPT-81A.js → index-DNU21ztY.js} +3 -3
  55. package/dist/assets/{layers-C9A4C8lf.js → layers-C9GOKidf.js} +1 -1
  56. package/dist/assets/{location-owned-usage-Da_UJwfV.js → location-owned-usage-DveepH5t.js} +1 -1
  57. package/dist/assets/{mf-entry-bootstrap-0-5a995df0.js → mf-entry-bootstrap-0-46ea76f9.js} +2 -2
  58. package/dist/assets/{player-overlays--BOkL6mz.js → player-overlays-EeJrynNb.js} +1 -1
  59. package/dist/assets/remoteEntry-Ow3355ft.js +1 -0
  60. package/dist/assets/{send-DZKRTbf_.js → send-N7ccgjhP.js} +1 -1
  61. package/dist/assets/{settings-2--5_3LkW6.js → settings-2-CHKxEaPE.js} +1 -1
  62. package/dist/assets/{square-check-big-B5AtTb7Y.js → square-check-big-XOX8oOer.js} +1 -1
  63. package/dist/assets/{src-BoFa7hhW.js → src-B-lfEnzH.js} +3 -3
  64. package/dist/assets/{src-Di313rQf.js → src-BEtfCXVH.js} +1 -1
  65. package/dist/assets/{use-scenes-feed-CZhAv0u4.js → use-scenes-feed-BIrOB2ti.js} +1 -1
  66. package/dist/assets/{use-stationary-objects-Cdir5Pea.js → use-stationary-objects-C00pz2bM.js} +1 -1
  67. package/dist/assets/useEventInvalidation-DdzMajse.js +1 -0
  68. package/dist/assets/{useNodeUrlSelection-CbkBS3rA.js → useNodeUrlSelection-taqMJccO.js} +1 -1
  69. package/dist/assets/user-round-ggNS5VOL.js +1 -0
  70. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-CTdJOO8z.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BEogBfBZ.js} +2 -2
  71. package/dist/index.html +5 -5
  72. package/dist/server/addon.js +11 -3
  73. package/package.json +1 -1
  74. package/dist/assets/circle-slash-DjTa1Zvs.js +0 -1
  75. package/dist/assets/remoteEntry-BrwpwqGC.js +0 -1
  76. package/dist/assets/useEventInvalidation-C0Ht3Sui.js +0 -1
  77. package/dist/assets/user-round-C6L5OyWq.js +0 -1
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./__vite-browser-external-B6qJ4svC.js","./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-kNaey6uv.js";import{A as r,C as i,D as a,E as o,F as s,M as c,N as l,O as u,P as d,S as f,T as ee,_ as p,a as te,b as ne,c as re,d as ie,f as m,g as ae,h,i as oe,j as g,k as se,l as ce,m as le,n as ue,o as de,p as _,r as fe,s as pe,t as me,u as he,v,w as y,x as b,y as x}from"./__vite-browser-external-B6qJ4svC.js";var ge=[`f32le`,`pcmu`,`pcma`];function _e(e){return typeof e==`string`&&ge.includes(e)}function ve(e){return e===`f32le`?4:1}function ye(e,t){if(t===`f32le`){let t=new Uint8Array(e.byteLength);return t.set(e),t}let n=t===`pcmu`?Se:Ce,r=new Float32Array(e.length);for(let t=0;t<e.length;t++)r[t]=n[e[t]];return new Uint8Array(r.buffer)}function be(){let e=new Float32Array(256);for(let t=0;t<256;t++){let n=~t&255,r=n&128?-1:1,i=n>>4&7;e[t]=r*((8*(n&15)+132<<i)-132)/32768}return e}function xe(){let e=new Float32Array(256);for(let t=0;t<256;t++){let n=t^85,r=n&128?1:-1,i=n>>4&7,a=n&15;e[t]=r*(i===0?16*a+8:16*a+264<<i-1)/32768}return e}var Se=be(),Ce=xe(),we=[`track`,`summary`,`face`,`identity`,`plate`,`vehicle`,`scene`,`motion`,`object`,`audio`,`mosaic`],Te=new Set(we),Ee=/^\d+$/;function De(e){return Te.has(e)}function Oe(e){let t=e.split(`:`);if(t.length!==3&&t.length!==4)return null;let[n,r,i,a]=t;return n===void 0||!De(n)||r===void 0||r.length===0||i===void 0||i.length===0?null:a===void 0?{ownerType:n,ownerId:r,fileKind:i}:Ee.test(a)?{ownerType:n,ownerId:r,fileKind:i,timestampMs:Number(a)}:null}function ke(e){let t=`${e.ownerType}:${e.ownerId}:${e.fileKind}`;return e.timestampMs===void 0?t:`${t}:${e.timestampMs}`}var Ae=[`motion`,`object`,`audio`],je=m(Ae),Me=[...Ae,`track`],Ne=m(Me),Pe=new Set(Ae);function Fe(e){return Pe.has(e)}var Ie=function(e){return e.SystemBoot=`system.boot`,e.SystemAddonsReady=`system.addons-ready`,e.SystemRestarting=`system.restarting`,e.SystemRestartCompleted=`system.restart-completed`,e.SystemTlsCertChanged=`system.tls-cert-changed`,e.UpdateAvailable=`update.available`,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.AddonRunnerFailed=`addon.runner-failed`,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.SystemLivenessFailed=`system.liveness-failed`,e.SystemLivenessRecovered=`system.liveness-recovered`,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.StorageLocationsChanged=`storage.locations-changed`,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.RecordingExportProgress=`recording.export.progress`,e.RecordingExportCompleted=`recording.export.completed`,e.RecordingExportFailed=`recording.export.failed`,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.PipelineNodeInferenceUnavailable=`pipeline.node-inference-unavailable`,e.PipelineDetectionBlind=`pipeline.detection-blind`,e.PipelineCameraUpdated=`pipeline.camera-updated`,e.PipelineIngestOwnerChanged=`pipeline.ingest-owner-changed`,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.ZoneAnalyticsOccupancyChanged=`zone-analytics.occupancy-changed`,e.BatteryOnStatusChanged=`battery.onStatusChanged`,e.NetworkLinkOnStatusChanged=`network-link.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.PipelineAnalyticsTrackLifecycle=`pipeline-analytics.track-lifecycle`,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.PipelineAnalyticsStationaryChanged=`pipeline-analytics.stationary-changed`,e.PipelineAnalyticsPackageDelivered=`pipeline-analytics.package-delivered`,e.PipelineAnalyticsPackagePickedUp=`pipeline-analytics.package-picked-up`,e.PipelineAnalyticsFaceGalleryChanged=`pipeline-analytics.face-gallery-changed`,e.PipelineAnalyticsPlateGalleryChanged=`pipeline-analytics.plate-gallery-changed`,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.BackupRunCompleted=`backup.run-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}({}),Le=[{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:`navigation`,label:`Navigation`,icon:`compass`,order:41},{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}],Re=Object.fromEntries(Le.map(e=>[e.id,e]));function ze(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 Be(e){let t=new Map;if(typeof e!=`object`||!e)return t;let n=e.sections;if(!Array.isArray(n))return t;for(let e of n)typeof e==`object`&&e&&Ve(e.fields,t);return t}function Ve(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){Ve(n.fields,t);continue}if(e===`sub-tabs`){let e=n.tabs;if(Array.isArray(e))for(let n of e)typeof n==`object`&&n&&Ve(n.fields,t);continue}let r=n.key;typeof r!=`string`||r.length===0||`value`in n&&t.set(r,{value:n.value,default:n.default})}}function He(e){let t=new Map;for(let[n,r]of Be(e))t.set(n,r.value??r.default);return t}function Ue(e,t){let n=Be(e).get(t);return n===void 0?void 0:n.value??n.default}function We(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Ge(e,t))}))}}function Ge(e,t){if(ze(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Ge(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Ge(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?Ke(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,o=e.type===`textarea`&&e.isJson&&typeof a==`object`&&a?JSON.stringify(a,null,2):a;return{...e,value:o}}function Ke(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 qe(e,t){return e.category===t}function Je(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 Ye(e,t){let n=t.ts??Date.now();e.emit(Je(`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 Xe(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 Ze(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}@${Ze(t)}`}function $e(e,t,n){return e[Qe(t,n)]}function et(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 tt(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=$e(e,i,n);t!==void 0&&(r[i]=t)}return r}var nt=class{_ctx=null;_config;_readinessGeneration=typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14);_registeredCapNames=[];settingsStoreReady=!1;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(Ie.AddonStarted);let n=at(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(Ie.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}integrationSettingSections(){return[]}async getGlobalSettings(e,t,n){let r=this.globalSettingsSchema(t);if(!r)return{sections:[]};let i=await this.resolveGlobalStore(n,t);return We(r,e?{...i,...e}:i)}async getIntegrationSettings(e){let t=this.integrationSettingSections();if(t.length===0)return null;let n=this.globalSettingsSchema();if(!n)throw Error(`${this.constructor.name}: integrationSettingSections() names [${t.join(`, `)}] but globalSettingsSchema() returns null.`);let r=new Map(n.sections.map(e=>[e.id,e])),i=[];for(let e of t){let t=r.get(e);if(!t)throw Error(`${this.constructor.name}: integrationSettingSections() names unknown section "${e}". Known sections: [${[...r.keys()].join(`, `)}].`);let n=rt(t.fields);n.length!==0&&i.push({...t,fields:n})}if(i.length===0)return null;let a=await this.resolveGlobalStore(e);return We({...n,sections:i},a)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=Ze(e??this._ctx?.kernel?.localNodeId);return r.size>0?tt(n,r,i):n}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=Ze(this._ctx?.kernel?.localNodeId),i=Ze(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?et(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(Ie.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=>it(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?We(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{Ye(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-B6qJ4svC.js`).then(t=>e(t.t()));return{join:t}},__vite__mapDeps([0,1]),import.meta.url),{promises:r}=await n(async()=>{let{promises:t}=await import(`./__vite-browser-external-B6qJ4svC.js`).then(t=>e(t.t()));return{promises:t}},__vite__mapDeps([0,1]),import.meta.url),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=Ze(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?$e(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 Xe({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 Xe({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{let t=await e.readAddonStore()??{};return this.settingsStoreReady=!0,t}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.settingsStoreReady=!1,this._ctx?.logger?.warn?.(`readAddonStore: settings-store unavailable after retries — using defaults`,{meta:{error:n instanceof Error?n.message:String(n)}}),{}}};function rt(e){let t=[];for(let n of e){if(n.type===`group`){let e=rt(n.fields);e.length>0&&t.push({...n,fields:e});continue}if(n.type===`sub-tabs`){let e=n.tabs.map(e=>({...e,fields:rt(e.fields)})).filter(e=>e.fields.length>0);e.length>0&&t.push({...n,tabs:e});continue}`perNode`in n&&n.perNode===!0||t.push(n)}return t}function it(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...it(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...it(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function at(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function ot(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=st(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=lt(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 st(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=ct(t.path,n);if(e!==null)return{route:t,params:e}}return null}function ct(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 lt(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 ut=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)}}}},dt=a({codec:m([`h264`,`h265`,`copy`]),profile:m([`baseline`,`main`,`high`]).optional(),level:g().optional(),width:o().int().positive().optional(),height:o().int().positive().optional(),fps:o().positive().optional(),bitrateKbps:o().int().positive().optional(),gopFrames:o().int().positive().optional(),bf:o().int().min(0).optional(),preset:m([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:m([`zerolatency`,`film`,`animation`]).optional(),singleSlicePerFrame:v().optional()}),ft=l([y(`passthrough`),a({codec:m([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:o().int().positive().optional(),sampleRateHz:o().int().positive().optional(),channels:l([y(1),y(2)]).optional()})]),pt=a({video:dt,audio:ft,inputArgs:p(g()).optional(),outputArgs:p(g()).optional()});function mt(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 ht(e,t,n){let r=e>=n;return r===t>=n?r?e-t:t-e:r?-1:1}function gt(e){let t=e.toLowerCase().replace(/[.\s-]/g,``);return t===`hevc`||t===`hvc1`||t===`hev1`?`h265`:t===`avc`||t===`avc1`?`h264`:t}function _t(e,t){if(t.length===0)return!0;if(e===void 0)return!1;let n=gt(e);return t.some(e=>gt(e)===n)}function vt(e,t){for(let n=0;n<t.length;n+=1)if(e.startsWith(t[n]))return n;return t.length}function yt(e,t){let n=e.filter(e=>t.allowTranscode||_t(e.codec,t.acceptCodecs));if(n.length===0)return null;let r=t.targetHeight,i=n.map(e=>({candidate:e,transcodes:!_t(e.codec,t.acceptCodecs),provider:vt(e.camStreamId,t.preferredProviders),height:e.height??0}));i.sort((e,n)=>e.transcodes===n.transcodes?e.provider===n.provider?r===void 0?t.resolutionPreference===`highest`?n.height-e.height:e.height-n.height:ht(e.height,n.height,r):e.provider-n.provider:e.transcodes?1:-1);let a=i[0];return a===void 0?null:{candidate:a.candidate,transcodes:a.transcodes}}var bt={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},xt={aac:{kind:`encode`,codec:`aac`,bitrateKbps:128,sampleRateHz:48e3,channels:1},opus:{kind:`encode`,codec:`opus`,bitrateKbps:64,sampleRateHz:48e3,channels:1},pcmu:{kind:`encode`,codec:`pcmu`,sampleRateHz:8e3,channels:1}};function St(e){return[`-hide_banner`,`-loglevel`,e]}function Ct(e){return!e||e===`none`||e===`copy`}function wt(e,t){let n=[];if(Ct(t)||n.push(`-hwaccel`,String(t)),e.extraArgs?.length&&n.push(...e.extraArgs),e.decodeThreadCount!==void 0&&e.decodeThreadCount>0&&n.push(`-threads`,String(e.decodeThreadCount)),e.analyzeDurationUs!==void 0&&n.push(`-analyzeduration`,String(e.analyzeDurationUs)),e.probeSizeBytes!==void 0&&n.push(`-probesize`,String(e.probeSizeBytes)),e.lowDelay===!0&&n.push(`-flags`,`low_delay`),e.useWallclockTimestamps===!0&&n.push(`-use_wallclock_as_timestamps`,`1`),e.fflags?.length)for(let t of e.fflags)n.push(`-fflags`,t);if(e.rtspTransport&&n.push(`-rtsp_transport`,e.rtspTransport),e.rawVideo!==void 0){let t=e.rawVideo;n.push(`-f`,`rawvideo`,`-pix_fmt`,t.pixelFormat,`-video_size`,`${String(t.width)}x${String(t.height)}`,`-framerate`,String(t.framerate))}return n.push(`-i`,e.url),n}function Tt(e){let t=e.filterGraph;return t?{video:`[${t.videoOutLabel}]`,audio:t.audioOutLabel?`[${t.audioOutLabel}]`:`0:a:0?`}:e.extraInputs?.length?{video:`0:v:0`,audio:`0:a:0?`}:{video:null,audio:null}}function Et(e,t,n,r){if(n){if(e)throw Error(`FfmpegInvocation: video.scale cannot be combined with a filter graph — scale inside the graph instead (the -vf would feed an output the graph already feeds)`);if(t.some(e=>e===`-vf`))throw Error(`FfmpegInvocation: outputArgs carries a -vf while a filter graph feeds the same output — fold the filter into the graph`);return[]}if(t.some(e=>e===`-vf`))return[];if(!e)return r.length>0?[`-vf`,r]:[];let i=r.length>0?`,${r}`:``;return e.mode===`exact`?[`-vf`,`scale=${e.width}:${e.height}${i}`]:[`-vf`,`scale='min(${e.width},iw)':'min(${e.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2${i}`]}function Dt(e,t){return e===void 0||!Ct(t)?``:`format=nv12,hwupload`}function Ot(e){let t=e.bitrateKbps;if(t===void 0)return[];let n=e.rateControl??{kind:`cap`,vbvSeconds:2},r=Math.max(1,Math.round(t*n.vbvSeconds));return[...n.kind===`cbr`?[`-b:v`,`${t}k`]:[],`-maxrate`,`${t}k`,`-bufsize`,`${r}k`]}function kt(e,t,n,r){if(e.kind===`raw`){if(n&&e.filter!==void 0)throw Error(`FfmpegInvocation: video.filter cannot be combined with a filter graph — fold the filter into the graph`);return[...e.filter===void 0?[]:[`-vf`,e.filter],`-c:v`,`rawvideo`,`-pix_fmt`,e.pixelFormat,...e.fps===void 0?[]:[`-r`,String(e.fps)]]}if(e.kind===`copy`){if(n)throw Error("FfmpegInvocation: a filter graph produces a NEW picture, so video.kind must be `encode`");return[`-c:v`,`copy`,...e.bitstreamFilter?[`-bsf:v`,e.bitstreamFilter]:[]]}let i=r===void 0?``:Dt(r.device,r.decodeHwAccel);if(r!==void 0&&n)throw Error(`FfmpegInvocation: a hardware encode fed by a filter graph must upload INSIDE the graph — hwEncodeDevice cannot be combined with filterGraph`);let a=[...Et(e.scale,t,n,i),`-c:v`,e.encoder];return e.preset!==void 0&&a.push(`-preset`,e.preset),e.tune!==void 0&&a.push(`-tune`,e.tune),e.singleSlicePerFrame===!0&&e.encoder===`libx264`&&a.push(`-x264-params`,`sliced-threads=0`),e.profile!==void 0&&a.push(`-profile:v`,e.profile),e.level!==void 0&&a.push(`-level`,e.level),e.pixelFormat!==void 0&&a.push(`-pix_fmt`,e.pixelFormat),e.fps!==void 0&&a.push(`-r`,String(e.fps)),e.gopFrames!==void 0&&a.push(`-g`,String(e.gopFrames)),e.forceKeyFramesSeconds!==void 0&&a.push(`-force_key_frames`,`expr:gte(t,n_forced*${e.forceKeyFramesSeconds})`),e.bf!==void 0&&a.push(`-bf`,String(e.bf)),a.push(...Ot(e)),e.bitstreamFilter!==void 0&&a.push(`-bsf:v`,e.bitstreamFilter),a}function At(e){if(e.kind===`none`)return[`-an`];if(e.kind===`copy`)return[`-c:a`,`copy`];let t=[];return e.filter!==void 0&&t.push(`-af`,e.filter),t.push(`-c:a`,bt[e.codec]),e.application!==void 0&&t.push(`-application`,e.application),e.frameDurationMs!==void 0&&t.push(`-frame_duration`,String(e.frameDurationMs)),e.globalHeader===!0&&t.push(`-flags`,`+global_header`),e.sampleRateHz!==void 0&&t.push(`-ar`,String(e.sampleRateHz)),e.bitrateKbps!==void 0&&t.push(`-b:a`,`${e.bitrateKbps}k`),e.vbvBufferKbits!==void 0&&t.push(`-bufsize`,`${e.vbvBufferKbits}k`),e.channels!==void 0&&t.push(`-ac`,String(e.channels)),t}function jt(e){let t=[];return e.payloadType!==void 0&&t.push(`-payload_type`,String(e.payloadType)),e.ssrc!==void 0&&t.push(`-ssrc`,String(e.ssrc)),e.sdpFile!==void 0&&t.push(`-sdp_file`,e.sdpFile),t.push(`-f`,`rtp`,e.url),t}function Mt(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var Nt=`+frag_keyframe+empty_moov+default_base_moof`;function Pt(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?It(e):[`-f`,e.container,`pipe:1`]}var Ft=.9;function It(e){return[`-movflags`,Nt,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*Ft*1e3))),`-f`,`mp4`,`pipe:1`]}function Lt(e){return[`-map`,`0:a:0?`,...At(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:xt[e.codec]),...jt({url:e.rtpUrl,sdpFile:e.sdpFile})]}function Rt(e){return e.hwEncodeDevice===void 0?void 0:{device:e.hwEncodeDevice,decodeHwAccel:e.decodeHwAccel}}function zt(e){let t=e.filterGraph??null,n=[...St(e.logLevel),...e.hwEncodeDevice===void 0?[]:[`-vaapi_device`,e.hwEncodeDevice.renderNode],...wt(e.input,e.decodeHwAccel),...(e.extraInputs??[]).flatMap(t=>wt(t,e.decodeHwAccel)),...t?[`-filter_complex`,t.graph]:[]],r=[...e.threadCount>0?[`-threads`,String(e.threadCount)]:[],...e.filterThreadCount!==void 0&&e.filterThreadCount>0?[`-filter_threads`,String(e.filterThreadCount)]:[]],i=Tt(e),a=i.video?[`-map`,i.video]:[],o=i.audio?[`-map`,i.audio]:[];if(e.sink.kind===`rtp-outputs`){let a=e.sink.video?[`-an`,`-map`,i.video??`0:v:0`,...kt(e.video,e.outputArgs,t,Rt(e)),...r,...e.outputArgs,...jt(e.sink.video)]:[],o=e.sink.audio?[`-vn`,`-map`,i.audio??`0:a:0?`,...At(e.audio),...jt(e.sink.audio)]:[];return[...n,...a,...o]}let s=Mt(e.sink)||e.audio.kind===`none`,c=Mt(e.sink)?[`-an`]:At(e.audio);return[...n,...a,...kt(e.video,e.outputArgs,t,Rt(e)),...r,...s?[]:o,...c,...e.outputArgs,...Pt(e.sink),...e.audioSidecar?Lt(e.audioSidecar):[]]}var Bt={videotoolbox:{h264:`h264_videotoolbox`,h265:`hevc_videotoolbox`},vaapi:{h264:`h264_vaapi`,h265:`hevc_vaapi`},qsv:{h264:`h264_qsv`,h265:`hevc_qsv`},cuda:{h264:`h264_nvenc`,h265:`hevc_nvenc`},nvdec:{h264:`h264_nvenc`,h265:`hevc_nvenc`},amf:{h264:`h264_amf`,h265:`hevc_amf`}};function Vt(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||Ct(t)||t===`auto`)return r;let i=Bt[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function Ht(e){return e===`passthrough`?{kind:`none`}:e.codec===`copy`?{kind:`copy`}:{kind:`encode`,codec:e.codec,...e.bitrateKbps===void 0?{}:{bitrateKbps:e.bitrateKbps},...e.sampleRateHz===void 0?{}:{sampleRateHz:e.sampleRateHz},...e.channels===void 0?{}:{channels:e.channels}}}function Ut(e){let t=e.profile.video,n=t.codec===`copy`||e.forceReencode!==!0&&t.codec===e.sourceCodec,r=t.width!==void 0&&t.height!==void 0?{mode:`fit`,width:t.width,height:t.height}:null,i=t.codec===`h265`?`h265`:`h264`,a=n?{kind:`copy`,...e.bitstreamFilter===void 0?{}:{bitstreamFilter:e.bitstreamFilter}}:{kind:`encode`,encoder:Vt(i,e.decodeHwAccel,e.hardwareEncoders===!0),scale:r,...t.preset===void 0?{}:{preset:t.preset},...t.tune===void 0?{}:{tune:t.tune},...t.singleSlicePerFrame===void 0?{}:{singleSlicePerFrame:t.singleSlicePerFrame},...t.profile===void 0?{}:{profile:t.profile},...t.level===void 0?{}:{level:t.level},...e.pixelFormat===void 0?{}:{pixelFormat:e.pixelFormat},...t.fps===void 0?{}:{fps:t.fps},...t.gopFrames===void 0?{}:{gopFrames:t.gopFrames},...e.forceKeyFramesSeconds===void 0?{}:{forceKeyFramesSeconds:e.forceKeyFramesSeconds},...t.bf===void 0?{}:{bf:t.bf},...t.bitrateKbps===void 0?{}:{bitrateKbps:t.bitrateKbps},...e.rateControl===void 0?{}:{rateControl:e.rateControl},...e.bitstreamFilter===void 0?{}:{bitstreamFilter:e.bitstreamFilter}};return{logLevel:e.logLevel??`error`,decodeHwAccel:e.decodeHwAccel,input:{url:e.sourceUrl,rtspTransport:`tcp`,fflags:[`+discardcorrupt`],...e.profile.inputArgs?.length?{extraArgs:e.profile.inputArgs}:{}},video:a,audio:Ht(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var Wt={video:{codec:`h264`,profile:`baseline`,level:`3.1`,width:1280,height:720,fps:25,bitrateKbps:2500,gopFrames:25,bf:0,preset:`veryfast`,tune:`zerolatency`},audio:`passthrough`},Gt={...Wt,video:{...Wt.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},Kt={...Wt,audio:{codec:`opus`},video:{...Wt.video,singleSlicePerFrame:!0}},qt={kind:`cbr`,vbvSeconds:1},Jt={kind:`cap`,vbvSeconds:2},Yt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},Xt=16*1024*1024,Zt=8,Qt=16,$t=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??Xt}get fault(){return this.faultReason}get pendingBytes(){return this.buffer.length-this.unitStart}get discardedInterstitialTypes(){return[...this.interstitial]}push(e){return this.faultReason!==null||e.length===0?[]:(this.append(e),this.pendingBytes>this.maxUnitBytes?this.fail(`a single fMP4 unit exceeded ${this.maxUnitBytes} bytes — this stream is not fragmented`):this.drainBoxes())}append(e){if(this.buffer.length===0){this.buffer=e.slice();return}let t=new Uint8Array(this.buffer.length+e.length);t.set(this.buffer,0),t.set(e,this.buffer.length),this.buffer=t}drainBoxes(){let e=[];for(;;){let t=this.readHeader();if(this.faultReason!==null)return e;if(t===null||this.cursor+t.totalBytes>this.buffer.length)break;let n=this.cursor,r=n+t.totalBytes;this.cursor=r;let i=this.consumeBox(t.type,n,r);if(this.faultReason!==null)return e;i!==null&&e.push(i)}return this.compact(),e}consumeBox(e,t,n){if(this.state===`init`){if(e!==`moof`)return null;if(t===this.unitStart)return this.fail(`a moof arrived before any initialisation box — there is no ftyp/moov to send`),null;let n=this.emit(`init`,this.unitStart,t);return this.unitStart=t,this.state=`fragment`,n}if(this.state===`idle`)return e===`moof`?(this.unitStart=t,this.state=`fragment`,null):(this.interstitial.add(e),this.unitStart=n,null);if(e!==`mdat`)return null;let r=this.emit(`fragment`,this.unitStart,n);return this.unitStart=n,this.state=`idle`,r}readHeader(){let e=this.buffer.length-this.cursor;if(e<Zt)return null;let t=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),n=t.getUint32(this.cursor),r=String.fromCharCode(this.buffer[this.cursor+4]??0,this.buffer[this.cursor+5]??0,this.buffer[this.cursor+6]??0,this.buffer[this.cursor+7]??0);if(n===0)return this.fail(`box "${r}" declares size 0 (to EOF) — an unbounded box cannot be fragmented`),null;if(n===1){if(e<Qt)return null;let n=t.getBigUint64(this.cursor+Zt);return n>BigInt(this.maxUnitBytes)?(this.fail(`box "${r}" declares ${n} bytes, over the ${this.maxUnitBytes} byte bound`),null):{type:r,totalBytes:Number(n)}}return n<Zt?(this.fail(`box "${r}" declares an impossible size of ${n} bytes`),null):{type:r,totalBytes:n}}emit(e,t,n){let r=this.nextSequence;return this.nextSequence+=1,{kind:e,data:this.buffer.slice(t,n),sequence:r}}compact(){this.unitStart!==0&&(this.buffer=this.buffer.slice(this.unitStart),this.cursor-=this.unitStart,this.unitStart=0)}fail(e){return this.faultReason=e,this.buffer=new Uint8Array,this.unitStart=0,this.cursor=0,[]}};function en(e){let t=e.now??(()=>Date.now()),n=null,r=-1/0;return{read(){return t()-r<e.ttlMs?n:void 0},write(e){n=e,r=t()}}}function tn(e){return!e||e===`none`||e===`copy`}async function nn(e){let t=e.override;if(t!=null&&t!==``)return tn(t)?null:t;let n=e.cache?.read();if(n!==void 0)return n;let r;try{r=await e.readDecoderBackend()}catch(t){let n=await e.readKernelPreferred().catch(()=>[]);return e.onFallback({reason:`decoder-unreadable`,kernelPreferred:n,error:t instanceof Error?t.message:String(t)}),e.cache?.write(null),null}if(r===``){let t=await e.readKernelPreferred().catch(()=>[]);return e.onFallback({reason:`decoder-unprobed`,kernelPreferred:t}),e.cache?.write(null),null}let i=tn(r)?null:r;return e.cache?.write(i),i}var rn=me();function an(e){let t=JSON.stringify(e,on);return(0,rn.createHash)(`sha256`).update(t??``).digest(`hex`)}function on(e,t){if(t&&typeof t==`object`&&!Array.isArray(t)){let e=t,n={};for(let t of Object.keys(e).toSorted())n[t]=e[t];return n}return t}function sn(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var S=`\0unset`;function cn(e){return{codec:e.codec,profile:e.profile??S,level:e.level??S,width:e.width??-1,height:e.height??-1,fps:e.fps??-1,bitrateKbps:e.bitrateKbps??-1,gopFrames:e.gopFrames??-1,bf:e.bf??-1,preset:e.preset??S,tune:e.tune??S,singleSlicePerFrame:e.singleSlicePerFrame===void 0?S:String(e.singleSlicePerFrame)}}function ln(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function un(e,t=sn(e)){return{deviceId:e.deviceId,source:e.source.kind===`profile`?`profile:${e.source.profile}`:`cam-stream:${e.source.camStreamId}`,transport:t.transport,fragmentMs:t.fragmentMs??-1,video:cn(e.encode.video),audio:ln(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??S,pixelFormat:e.pixelFormat??S,decodeHwAccel:e.decodeHwAccel??S}}function dn(e,t=sn(e)){return`egress:${an(un(e,t))}`}var fn=m([`singleton`,`device`,`widget`]),pn=a({capName:g(),kind:fn,deviceId:o().optional(),reachable:v(),latencyMs:o(),error:g().optional()}),mn=a({addonId:g(),caps:p(pn).readonly(),widgets:p(pn).readonly()}),hn=a({nodeId:g(),addons:p(mn).readonly()}),gn=a({ok:v(),degraded:v(),checkedAt:g(),nodes:p(hn).readonly(),summary:a({total:o(),reachable:o(),unreachable:o()})}),_n=`hub-only`;function vn(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function yn(e){let t=vn(e).placement;return t===`any-node`||t===`agent-only`}function bn(e){return vn(e).placement===`agent-only`}function xn(e){return vn(e).group}function Sn(e,t){return e.execution?.group??t}function Cn(e){return vn(e).placement}function wn(e){return e.execution?.isolate===!0}var Tn=`x-camstack-dataplane-secret`,En=[`grid-view`,`events-view`],Dn=3e4,On=15e3,kn=256*1024,An=a({url:g().min(1),hostNodeId:g().min(1),expiresAtMs:o().int().nonnegative(),declaredBytes:o().int().nonnegative().nullable()}),jn=m([`running`,`done`,`failed`,`cancelled`]),Mn=m([`adopted`,`already-adopted`,`failed`,`cancelled`]),Nn=a({childNativeId:g(),outcome:Mn,parentDeviceId:o().int().nonnegative().nullable(),accessoryCount:o().int().nonnegative(),error:g().nullable()}),Pn=a({jobId:g(),addonId:g(),integrationId:g(),state:jn,total:o().int().nonnegative(),processed:o().int().nonnegative(),adopted:o().int().nonnegative(),alreadyAdopted:o().int().nonnegative(),failed:o().int().nonnegative(),accessoriesCreated:o().int().nonnegative(),currentChildNativeId:g().nullable(),results:p(Nn).readonly(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Fn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},In=m([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`]),Ln=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`],Rn=b(`kind`,[a({kind:y(`device-disabled`)}),a({kind:y(`wrapper-binding`),capName:g()}),a({kind:y(`recording-config`)}),a({kind:y(`notification-mute`)}),a({kind:y(`camera-audio`),capName:g()}),a({kind:y(`camera-mask`),capName:g()}),a({kind:y(`broker-audio-mute`)})]),zn=m([`no-provider`,`source-unreachable`,`device-disabled`]),Bn=m([`no-privacy-zones`]),Vn=a({id:In,label:g(),costWhenOff:g(),available:v(),unavailableReason:zn.optional(),warning:Bn.optional(),enabled:v(),authority:Rn}),Hn=a({deviceId:o().int(),switches:p(Vn).readonly(),fetchedAt:o()}),Un=`detection-pipeline`,Wn=`audio-analysis`,Gn=`privacy-mask`,Kn=`pipeline-analytics`,qn=[`motion-detection`,Un,Wn,Kn,`scene-monitor`],Jn={"stream-broker":{id:`stream-broker`,label:`Camera`,costWhenOff:`Off: the whole camera stops. No live view, no recording, no detection and no notifications — its streams are released and nothing dials it again until you turn it back on.`,authority:{kind:`device-disabled`},countsAsSwitchedOff:!0},"object-detection":{id:`object-detection`,label:`Object detection & tracking`,costWhenOff:`Off: nothing is detected or tracked on this camera, so it produces no events — and with no events there are no object notifications and no event-triggered recording. Live view and continuous recording are unaffected.`,authority:{kind:`wrapper-binding`,capName:Un},countsAsSwitchedOff:!0},"privacy-mask":{id:`privacy-mask`,label:`Privacy mask`,costWhenOff:`On: the zones you drew on this camera are blacked out by the camera itself — live view, playback, exports and detection all see the black boxes, and nothing behind them was ever recorded. Off: the camera captures the whole frame, and your zones are kept for when you turn it back on.`,authority:{kind:`camera-mask`,capName:Gn},countsAsSwitchedOff:!1},"device-audio":{id:`device-audio`,label:`Camera microphone`,costWhenOff:`Off: the camera captures no sound at all. Live view and recordings become silent video, and audio detection and classification have nothing left to analyse — turning them back on will not recover it. The picture, motion and object detection are unaffected, and two-way talk still works. Applies at the camera, so every consumer sees the same silence.`,authority:{kind:`camera-audio`,capName:Gn},countsAsSwitchedOff:!0},"broker-audio":{id:`broker-audio`,label:`Audio distribution`,costWhenOff:`Off: this server distributes no sound for this camera — live view is silent and everything recorded while it is off is silent FOREVER, even after you turn it back on. Audio detection and classification also have nothing to analyse. The camera keeps capturing sound, so nothing about the camera changes and turning this back on is instant, with no interruption to the picture.`,authority:{kind:`broker-audio-mute`},countsAsSwitchedOff:!0},"audio-analysis":{id:`audio-analysis`,label:`Audio detection & classification`,costWhenOff:`Off: no audio is decoded or classified for this camera. Tracks carry no audio labels and no audio-triggered rule can fire. Audio recorded alongside video is unaffected.`,authority:{kind:`wrapper-binding`,capName:Wn},countsAsSwitchedOff:!0},"event-saving":{id:`event-saving`,label:`Event saving`,costWhenOff:`Off: nothing about this camera is written to its history — no tracks, no events and no event snapshots or clips. Detection keeps running and live boxes still appear, so the camera looks busy while its timeline stays empty, and anything that fires ON an event (notification rules, event-triggered recording) has nothing to fire on. Continuous recording is unaffected, and history already written is kept.`,authority:{kind:`wrapper-binding`,capName:Kn},countsAsSwitchedOff:!0},recording:{id:`recording`,label:`Recording`,costWhenOff:`Off: nothing new is written to disk. Footage already recorded stays, but retention keeps deleting it — so this camera’s history shrinks and is not replaced. Your recording schedule is kept and resumes when you turn it back on.`,authority:{kind:`recording-config`},countsAsSwitchedOff:!0},notifications:{id:`notifications`,label:`Notifications`,costWhenOff:`Off: this camera never notifies anyone, on any rule, with no expiry. Detection, events and recording carry on exactly as before — you simply stop being told about them.`,authority:{kind:`notification-mute`},countsAsSwitchedOff:!0}};function Yn(e,t){switch(e.authority.kind){case`device-disabled`:return{available:!0,enabled:!t.deviceDisabled};case`wrapper-binding`:{let n=e.authority.capName;return t.bindableCapNames===null||t.activeWrapperCapNames===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:t.bindableCapNames.includes(n)?{available:!0,enabled:t.activeWrapperCapNames.includes(n)}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`recording-config`:return t.recordingEnabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:t.recordingEnabled};case`notification-mute`:return t.notificationsMuted===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!t.notificationsMuted};case`camera-audio`:{let e=t.deviceAudio;return e===null?{available:!1,enabled:!0,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.enabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`camera-mask`:{let e=t.privacyMask;return e===null?{available:!1,enabled:!1,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.configuredRegions===null||e.enabled===null?{available:!1,enabled:!1,unavailableReason:`source-unreachable`}:e.configuredRegions===0?{available:!0,enabled:e.enabled,warning:`no-privacy-zones`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!1,unavailableReason:`no-provider`}}case`broker-audio-mute`:{let e=t.brokerAudio;return e===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!e.muted}}}}function Xn(e){return Ln.map(t=>{let n=Jn[t],r=Yn(n,e);return{id:n.id,label:n.label,costWhenOff:n.costWhenOff,available:r.available,...r.unavailableReason===void 0?{}:{unavailableReason:r.unavailableReason},...r.warning===void 0?{}:{warning:r.warning},enabled:r.enabled,authority:n.authority}})}function Zn(e){return e.filter(e=>Jn[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function Qn(e){let t=[],n=[];for(let r of Ln){let i=Jn[r];if(!i.countsAsSwitchedOff)continue;let a=Yn(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var $n=`__camstack_redacted__`;function er(e){return e.type===`password`?!0:`secret`in e&&e.secret===!0}function tr(e){let t=new Set;for(let n of ir(e))for(let e of ar(n))or(e,t);return t}function nr(e){for(let t of ir(e))if(ar(t).length>0)return!0;return!1}function rr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ir(e){if(!rr(e))return[];let t=e.sections;return Array.isArray(t)?t:[]}function ar(e){if(!rr(e))return[];let t=e.fields;return Array.isArray(t)?t:[]}function or(e,t){if(!rr(e))return;let n=e.type,r=e.key;if((n===`password`||e.secret===!0)&&typeof r==`string`&&r.length>0&&t.add(r),n===`group`){for(let n of ar(e))or(n,t);return}if(n===`sub-tabs`){let n=e.tabs;if(!Array.isArray(n))return;for(let e of n)for(let n of ar(e))or(n,t)}}var sr=3e4,cr=6e4,lr=m([`confirmed`,`suppressed`,`exhausted-fallback`]),ur=a({id:g(),at:o().int(),deviceId:o().int(),sourceTrackId:g(),className:g(),verdict:lr,reason:g().nullable(),attempts:o().int(),deferredForMs:o().int(),decidedOnCoastedFrame:v(),birthEvidenceAvailable:v(),decidedByBirthEvidence:v(),bestScore:o().nullable(),appliedMinConfidence:o().nullable(),firstSeen:o().int().nullable(),motionOnsetAt:o().int().nullable(),birthLatencyMs:o().int().nullable(),birthIndexInBurst:o().int().nullable()}),dr=a({deviceId:o().int().optional(),since:o().int().optional(),verdict:lr.optional(),limit:o().int().min(1).max(5e3).optional()}),fr=5e3,pr=a({id:g(),note:g(),deviceId:o().int(),sourceTrackId:g(),archivedAt:o().int(),trackStartedAt:o().int().nullable(),trackClass:g().nullable(),trackLabel:g().nullable()}),mr=a({deviceId:o().int().optional(),limit:o().int().min(1).max(1e3).optional()}),hr={high:`High`,mid:`Mid`,low:`Low`};function gr(e){return hr[e]??e.charAt(0).toUpperCase()+e.slice(1)}function _r(e){return(e.width??0)*(e.height??0)}function vr(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:_r(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 yr(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function br(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 C(e){return typeof e==`string`}function xr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Sr(e){return C(e)&&e.trim()?{url:e}:xr(e)&&C(e.url)&&e.url.trim()?{url:e.url,label:C(e.label)?e.label:void 0}:null}function Cr(e){let t=C(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=Sr(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=C(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:C(e.main_stream_name)?e.main_stream_name:void 0});let i=C(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:C(e.sub_stream_name)?e.sub_stream_name:void 0});let a=C(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:C(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function wr(e){if(e.length===0)return{};let t=vr(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 Tr={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},Er={debug:0,info:1,warn:2,error:3};function Dr(e,t){return Er[e]<=Er[t]}var Or=m([`recording`,`events`]),kr=m([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),Ar=m([`retention`,`quota`,`manual`,`operator`,`maintenance`,`orphaned-device`]),jr=a({id:g(),at:o(),domain:Or,op:kr,reason:Ar,deviceId:o().nullable(),nodeId:g(),itemsAffected:o(),bytesReclaimed:o(),detail:g().nullable(),actor:g()}),Mr=a({deviceId:o().optional(),limit:o().int().min(1).max(1e3).optional()}),w=m([`high`,`mid`,`low`]),Nr=[`high`,`mid`,`low`],Pr=l([w,y(`auto`)]),Fr=m([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),Ir=a({width:o().int().positive(),height:o().int().positive()}),Lr=a({camStreamId:g().min(1),deviceId:o().int().nonnegative(),kind:Fr,url:g().optional(),codec:g().optional(),resolution:Ir.optional(),fps:o().positive().optional(),label:g().optional(),deviceFeatures:p(g()).optional(),autoEligible:v().optional(),profileHint:w.optional(),metadata:r(g(),d()).optional()}),Rr=m([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),zr=a({deviceId:o().int().nonnegative(),profile:w,brokerId:g(),sourceCamStreamId:g().nullable(),status:Rr,resolution:Ir.optional(),codec:g().optional(),preBufferSec:o().nonnegative().optional(),errorMessage:g().optional()});function Br(e,t){return`${e}/${t}`}function Vr(e,t){return`${e}/${t}`}function Hr(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=w.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function Ur(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>Nr.indexOf(e.profile)-Nr.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 Wr=a({id:g(),label:g(),protocol:m([`rtsp`,`rtmp`,`annexb`,`http-mjpeg`,`webrtc`,`custom`]),url:g().optional(),resolution:a({width:o(),height:o()}).readonly().optional(),fps:o().optional(),bitrate:o().optional(),codec:g().optional(),profileHint:w.optional()}),Gr=a({type:g(),url:g(),videoCodec:g().optional(),audioCodec:g().optional(),metadata:r(g(),d()).readonly().optional()}),Kr=a({type:m([`video`,`audio`]),data:_(Uint8Array),pts:o(),dts:o(),keyframe:v(),codec:g()}),qr=a({data:_(Uint8Array),width:o(),height:o(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),timestamp:o()}),T=a({shmId:g(),slot:o().int().nonnegative(),seq:o().int().nonnegative(),width:o().int().positive(),height:o().int().positive(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:o(),byteLength:o().int().nonnegative(),nodeId:g(),slotCount:o().int().positive()}),Jr=m([`rgb`,`bgr`,`yuv420`,`gray`]),Yr=a({brokerId:g(),format:Jr,maxFps:o().positive().optional(),tag:g().optional()}),Xr=a({subscriptionId:g(),maxFps:o().nonnegative()}),Zr=m(ge),Qr=a({data:_(Uint8Array),sampleRate:o().int().positive(),channels:o().int().positive(),timestamp:o(),format:Zr.optional()}),$r=a({brokerId:g(),tag:g().optional(),accept:p(Zr).readonly().optional()}),ei=a({subscriptionId:g()}),ti=m([`idle`,`connecting`,`streaming`,`error`,`stopped`]),ni=a({status:ti,inputFps:o(),decodeFps:o(),encodedSubscribers:o(),decodedSubscribers:o(),uptimeMs:o(),bitrateKbps:o(),idrIntervalMs:o(),codec:g().optional(),totalBytes:o(),packetCount:o(),rtspClients:o(),pipeClients:o(),preBufferSec:o(),preBufferMs:o(),preBufferPackets:o(),decoderNodeId:g().nullable(),audio:a({codec:g(),sampleRate:o(),channels:o(),supported:v()}).nullable().optional(),audioMuted:v().optional(),audioMutedDropped:o().optional()}),ri=a({profile:w,brokerId:g(),url:g(),mutedUrl:g(),enabled:v(),codec:g().optional(),resolution:Ir.optional()}),ii=a({id:g(),name:g(),category:g().optional(),description:g().optional(),icon:g().optional()}),ai=[`person`,`vehicle`,`animal`,`package`],oi=[`person`,`vehicle`,`animal`];function si(e){return oi.some(t=>t===e)}var ci=a({mapping:r(g(),m(ai)),preserveOriginal:v()}),li={preMs:5e3,postMs:1e4},ui=o().int().min(0).max(6),di=/^([01]\d|2[0-3]):[0-5]\d$/,fi=m([`off`,`events`,`continuous`,`on-device-decision`]),pi=m(oi),mi=e=>new Set(e).size===e.length,hi=a({motion:v().optional(),audioThresholdDbfs:o().optional(),objectClasses:p(pi).min(1).refine(mi,{message:`objectClasses must not repeat a class`}).optional(),sensorDeviceIds:p(o().int().positive()).min(1).max(16).refine(mi,{message:`sensorDeviceIds must not repeat a device`}).optional()}),gi=m([`continuous`,`events`]),_i=hi,vi=m([`on`,`muted`]),yi=a({days:p(ui),start:g().regex(di),end:g().regex(di),mode:gi,audio:vi.optional(),triggers:_i.optional(),preBufferSec:o().min(0).optional(),postBufferSec:o().min(0).optional()}),bi={postBufferSec:30};function xi(e){let t=[],n=e.bands.map((e,n)=>{if(e.preBufferSec===void 0)return e;t.push(n);let{preBufferSec:r,...i}=e;return i});return t.length===0?{config:e,strippedBands:t}:{config:{...e,bands:n},strippedBands:t}}var Si=bi.postBufferSec*1e3,Ci=a({maxAgeDays:o().min(0).optional(),maxSizeGb:o().min(0).optional()}),wi=a({enabled:v(),mode:fi.optional(),profiles:p(w).optional(),segmentSeconds:o().int().positive().optional(),bands:p(yi).default([]),deviceDecision:v().optional(),retention:Ci.optional()}).strict().refine(e=>e.deviceDecision!==!0||e.bands.length===0,{message:`deviceDecision is a whole-config mode and carries no schedule: it cannot be combined with bands`,path:[`bands`]});function Ti(e){return e.enabled?e.deviceDecision===!0?`on-device-decision`:e.bands.length===0?`off`:e.bands.some(e=>e.mode===`continuous`)?`continuous`:`events`:`off`}var Ei=[`high`,`low`];function Di(e,t){if(t!==void 0&&t.length>0){let n=e.filter(e=>t.includes(e));return n.length>0?n:[...e]}let n=e.filter(e=>Ei.includes(e));return n.length>0?n:[...e]}var Oi=[`motion`,`audioThresholdDbfs`,`objectClasses`,`sensorDeviceIds`];function ki(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ai(e){return ki(e)&&ki(e.triggers)&&e.triggers.deviceSignal===!0}function ji(e){let t=e.triggers;return ki(t)?Oi.some(e=>t[e]!==void 0):!1}function Mi(e){let t=e.triggers;if(!ki(t))return e;let{deviceSignal:n,...r}=t;return{...e,triggers:r}}function Ni(e){let t={value:e,migrated:!1,strippedOnly:!1};if(!ki(e)||!Array.isArray(e.bands)||!e.bands.some(Ai))return t;let n=[];for(let t of e.bands){if(!Ai(t)||!ki(t)){n.push(t);continue}ji(t)&&n.push(Mi(t))}if(n.length>0)return{value:{...e,bands:n},migrated:!1,strippedOnly:!0};let{mode:r,...i}=e;return{value:{...i,bands:[],deviceDecision:!0},migrated:!0,strippedOnly:!1}}var Pi=m([`queued`,`running`,`done`,`failed`,`cancelled`]),Fi=a({jobId:g(),state:Pi,fromLocationId:g(),toLocationId:g(),deviceId:o().nullable(),entities:p(g()),filesMoved:o().int(),bytesMoved:o().int(),filesTotal:o().int().nullable(),rowsReconciled:o().int().nonnegative().optional(),rowsForgotten:o().int().nonnegative().optional(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Ii=m([`recordings`,`recordingsLow`]),Li=a({fromLocationId:g(),toLocationId:g(),entities:p(m([`segments`])).optional(),footageClass:Ii.optional(),deviceId:o().int().optional(),profiles:p(g()).optional(),throttleMbps:o().min(1).max(1e3).optional(),sinceMs:o().int().optional()}),E=a({leaseId:g().min(1)}),Ri=Li.extend({leaseId:g().min(1)}),zi=m([`move`,`seal`,`gallery`]),Bi=a({toLocationId:g(),fromLocationId:g().optional(),throttleMbps:o().min(1).max(1e3).optional(),mode:zi.optional()}),Vi=a({present:v(),rows:o().int().nonnegative().nullable()}),Hi=a({media:Vi,retrainFrames:Vi,anyPresent:v(),total:o().int().nonnegative().nullable()}).nullable(),Ui=Bi.extend({leaseId:g().min(1)}),Wi=m([`recordings`,`recordingsLow`,`eventMedia`,`backups`,`galleryMedia`]),Gi=a({recordings:g().min(1).optional(),recordingsLow:g().min(1).optional(),eventMedia:g().min(1).optional(),backups:g().min(1).optional(),galleryMedia:g().min(1).optional()}).refine(e=>Object.keys(e).length>0,{message:`select at least one storage class`}),Ki=a({recordings:g().min(1).optional(),recordingsLow:g().min(1).optional(),eventMedia:g().min(1).optional(),backups:g().min(1).optional(),galleryMedia:g().min(1).optional()}).optional(),qi=m([`blocking`,`nonBlocking`]),Ji=a({destinations:Gi,sources:Ki,throttleMbps:o().min(1).max(1e3).optional(),mode:qi.optional()}),Yi=m([`planning`,`sealing`,`pausing`,`moving`,`draining`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),Xi=m([`pipeline`,`recorder`,`analytics`]),Zi=a({filesMoved:o().int().nonnegative(),filesTotal:o().int().nonnegative().nullable(),bytesMoved:o().int().nonnegative(),rowsReconciled:o().int().nonnegative().optional(),startedAt:o(),observedAt:o()}),Qi=a({storageClass:Wi,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional(),moverJobId:g().nullable(),state:Pi.nullable(),error:g().nullable(),progress:Zi.nullable()}),$i=a({jobId:g(),phase:Yi,mode:qi,destinations:Gi,sources:Ki,throttleMbps:o(),moves:p(Qi),pauseLeaseId:g().nullable(),pausedParticipants:p(Xi),repointed:v(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),ea=m([`sharesDeviceWithSource`,`deviceIdentityUnknown`,`unstampedEventMediaRows`,`blockingOnly`,`noMover`]),ta=a({code:ea,storageClass:Wi,message:g()}),na=a({destinations:Gi,sources:Ki,mode:qi,moves:p(a({storageClass:Wi,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional()})),findings:p(ta)}),ra=m([`footage`,`media`]),ia=a({lane:ra,job:Fi,migrationJobId:g().nullable(),observedAt:o()}),aa=a({storageClass:Wi,fromLocationId:g(),toLocationId:g(),items:o().int().nonnegative().nullable(),bytes:o().int().nonnegative().nullable()}),oa=a({classes:p(Wi).min(1),throttleMbps:o().min(1).max(1e3).optional()}),sa=a({fromLocationId:g().min(1),footageClass:Ii.optional()}),ca=a({segments:o().int().nonnegative(),bytes:o().int().nonnegative()}).nullable(),la=a({locationId:g().min(1),apply:v().optional(),deviceId:o().int().positive().optional(),profiles:p(g().min(1)).optional()}),ua=m([`location-unknown`,`source-writable`,`no-ledger`,`archive-unreadable`,`anchor-absent`,`anchor-unreadable`,`anchor-moved`]),da=m([`live-tail`,`listing-error`,`path-mismatch`,`durable-refused`]),fa=a({"live-tail":o().int().nonnegative(),"listing-error":o().int().nonnegative(),"path-mismatch":o().int().nonnegative(),"durable-refused":o().int().nonnegative()}),pa=a({deviceId:o().int(),hoursWalked:o().int().nonnegative(),hoursMissing:o().int().nonnegative(),ghostSegments:o().int().nonnegative(),ghostBytes:o().int().nonnegative(),forgottenSegments:o().int().nonnegative(),orphanFiles:o().int().nonnegative()}),ma=a({locationId:g(),applied:v(),refused:ua.nullable(),archiveSegments:o().int().nonnegative().nullable(),archiveBytes:o().int().nonnegative().nullable(),hoursClaimed:o().int().nonnegative(),hoursWalked:o().int().nonnegative(),hoursMissing:o().int().nonnegative(),listings:o().int().nonnegative(),segmentsClaimed:o().int().nonnegative(),ghostSegments:o().int().nonnegative(),ghostBytes:o().int().nonnegative(),ghostHoursWhole:o().int().nonnegative(),forgottenSegments:o().int().nonnegative(),forgottenBytes:o().int().nonnegative(),orphanFiles:o().int().nonnegative(),orphanSample:p(g()).readonly(),hoursSkipped:o().int().nonnegative(),skippedByReason:fa,bounded:v(),byDevice:p(pa).readonly()}),ha=a({rows:o().int().nonnegative()}).nullable(),ga=a({toLocationId:g().min(1),fromLocationId:g().optional(),mode:zi.optional()}),_a=m([`orphans`,`debug-media`,`ghost-ledger`,`done`,`failed`,`cancelled`]),va=a({includeDebugMedia:v().optional()}),ya=a({jobId:g(),phase:_a,includeDebugMedia:v(),orphansReclaimed:o().int().nonnegative(),orphanBytesReclaimed:o().int().nonnegative(),debugMediaReclaimed:o().int().nonnegative(),debugMediaBytesReclaimed:o().int().nonnegative(),ghostsForgotten:o().int().nonnegative(),ghostBytesForgotten:o().int().nonnegative(),detail:g().nullable(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),ba=a({jobId:g().optional()}),xa=[`face`,`plate`],Sa=[`face`,`plate`,`clip`,`custom`],Ca=[`active`,`readonly`,`drain`,`disabled`],wa=m(Ca),Ta=m([`normal`,`never`,`drain`]),Ea=`readOnly`;function Da(e){return e===`active`}function Oa(e){return e!==`disabled`}function ka(e){switch(e){case`active`:return`normal`;case`drain`:return`drain`;case`readonly`:case`disabled`:return`never`}}function Aa(e){return e.mode===void 0&&(e.config.readOnly===!0||e.enabled===!1)?`readonly`:null}function ja(e){return(Ma(e.mode)?e.mode:void 0)??Aa(e)??`active`}function Ma(e){return Ca.some(t=>t===e)}function Na(e){return Da(ja(e))}function Pa(e){return Oa(ja(e))}function Fa(e){return ka(ja(e))}function Ia(e){if(!(`readOnly`in e))return e;let t={...e};return delete t[Ea],t}function La(e,t){return{...e,mode:t,enabled:Da(t),config:Ia(e.config)}}var Ra=g().regex(/^[a-z][a-zA-Z0-9-]*$/),D=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),type:g(),displayName:g().min(1),providerId:g().min(1),config:r(g(),d()),nodeId:g().optional(),isSystem:v().default(!1),enabled:v().optional(),mode:wa.optional(),capacity:a({totalBytes:o(),availableBytes:o()}).nullable().optional(),owned:a({bytes:o().int().nonnegative(),measuredAtMs:o().int().nonnegative()}).optional(),createdAt:o(),updatedAt:o()}),za=a({isDefault:v().optional()});function Ba(e){return Na({...e,config:e.config??{}})}var Va=1024**3;function Ha(e){return Math.floor(e*Va)}var Ua=a({locationId:g(),startedAtMs:o(),startBytes:o(),bytesRemaining:o(),drained:v(),estimatedEmptyAtMs:o().nullable()}),O=l([Ra,g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),Wa=m([`local-path`,`cap-mediated`]),Ga=`local-path`,Ka=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*$/,{message:`id must start with a lowercase letter and contain only letters, digits, or hyphens`}),displayName:g().min(1,{message:`displayName must not be empty`}),description:g().optional(),cardinality:m([`single`,`multi`]),access:Wa.optional(),defaultsTo:g().optional(),defaultRoot:m([`data`,`media`,`backup`]).optional()}),qa=a({inputFps:o(),outputFps:o(),avgDecodeTimeMs:o(),droppedFrames:o(),lagMs:o().optional(),effectiveFps:o().optional(),adaptiveFps:o().optional()}),Ja=a({codec:g(),maxFps:o().default(0),outputFormat:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]).default(`jpeg`),scale:o().default(1),width:o().optional(),height:o().optional(),deviceId:o().int().nonnegative().optional(),tag:g().optional(),frameSink:m([`callback`,`shm`]).default(`callback`),debug:v().optional()}),Ya={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},Xa={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},Za=[{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:Ya},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ya},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ya},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ya},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ya},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ya},{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:Xa},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:Xa},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:Xa},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:Xa},{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 Qa(e){return Za.find(t=>t.id===e)}var $a=m([`info`,`warn`,`error`]),eo=a({name:g().min(3).regex(/^[a-z0-9-]+(\.[a-z0-9-]+)+$/,`a channel name is dotted lower-kebab, e.g. area.thing`),description:g().min(1),defaultLevel:$a,perDevice:v()}),to=a({channel:g().min(1),armedUntilMs:o(),deviceIds:p(o().int()).readonly().nullable()}),no=class{descriptor;on=!1;devices=null;level;closesAtMs=0;constructor(e){this.descriptor=e,this.level=e.defaultLevel}get armedUntilMs(){return this.on?this.closesAtMs:0}wants(e){return this.on?this.devices===null||this.devices.has(e):!1}log(e,t,n){if(!this.on)return;let r={...n.tags,logChannel:this.descriptor.name},i={...n,tags:r};this.level===`error`?e.error(t,i):this.level===`warn`?e.warn(t,i):e.info(t,i)}arm(e){let t=e.deviceIds;this.devices=t===null||t.length===0?null:new Set(t),this.closesAtMs=e.armedUntilMs,this.on=!0}disarm(){this.on=!1,this.devices=null,this.closesAtMs=0}},ro=class{gates=new Map;declare(e){let t=eo.parse(e);if(this.gates.get(t.name)!==void 0)throw Error(`log channel "${t.name}" is already declared in this process — two declarations of one name is a programming error, not a merge`);let n=new no(t);return this.gates.set(t.name,n),n}list(){return[...this.gates.values()].map(e=>e.descriptor).sort((e,t)=>e.name.localeCompare(t.name))}gate(e){return this.gates.get(e)}apply(e,t){let n=new Map,r=[];for(let i of e)if(!(i.armedUntilMs<=t)){if(!this.gates.has(i.channel)){r.push(i.channel);continue}n.set(i.channel,i)}for(let[e,t]of this.gates){let r=n.get(e);r===void 0?t.disarm():t.arm(r)}return r}tick(e){let t=[];for(let[n,r]of this.gates)r.on&&r.armedUntilMs<=e&&(r.disarm(),t.push(n));return t}armed(){let e=[];for(let[t,n]of this.gates)n.on&&e.push({channel:t,armedUntilMs:n.armedUntilMs,deviceIds:null});return e}},io=null;function ao(){return io??=new ro,io}function oo(e){return ao().declare(e)}function so(){io=null}var co=5e3;function lo(e,t={}){let n=ao(),r=t.now??Date.now,i=t.tickMs??5e3,a=setInterval(()=>{let t=n.tick(r());for(let n of t)e.info(`log channel window closed`,{tags:{logChannel:n},meta:{channel:n}})},i);return a.unref?.(),{list:()=>n.list(),apply:t=>{let i=n.apply(t.windows,r()),a=n.armed();return e.info(`log channels applied`,{meta:{armed:a.map(e=>e.channel),unknown:i,declared:n.list().length}}),{armed:a.length,unknown:i}},stop:()=>{clearInterval(a)}}}var uo=1024,fo=`other`;function po(e,t,n){return n===void 0?`${e}${t}`:`${e}${t}${n}`}var mo=class{maxKeys;maxReasons;counters=new Map;refused=0;constructor(e=uo,t=16){this.maxKeys=e,this.maxReasons=t}get keysRefused(){return this.refused}get size(){return this.counters.size}note(e,t){if(!Number.isInteger(e.deviceId)||e.deviceId<=0)return;let n=po(e.deviceId,e.family,e.variant),r=this.counters.get(n);if(r===void 0){if(this.counters.size>=this.maxKeys){this.refused+=1;return}r={deviceId:e.deviceId,family:e.family,variant:e.variant,sinceMs:t,attempts:0,succeeded:0,reasons:new Map},this.counters.set(n,r)}if(r.attempts+=1,e.reason===void 0){r.succeeded+=1;return}let i=r.reasons.has(e.reason)||r.reasons.size<this.maxReasons?e.reason:fo;r.reasons.set(i,(r.reasons.get(i)??0)+1)}snapshot(e){let t=[];for(let n of this.counters.values())t.push({deviceId:n.deviceId,family:n.family,...n.variant===void 0?{}:{variant:n.variant},sinceMs:n.sinceMs,atMs:e,attempts:n.attempts,succeeded:n.succeeded,reasons:[...n.reasons.entries()].map(([e,t])=>({reason:e,count:t})).toSorted((e,t)=>t.count-e.count)});return t}clear(){this.counters.clear()}};function ho(e){return e.attempts<=0?null:(e.attempts-e.succeeded)/e.attempts}var go=`__unattributed__`,_o=`__root__`;function vo(e){return e.addonId===null?e.classification===`root`?{key:_o,kind:`root`}:{key:go,kind:`unattributed`}:{key:e.addonId,kind:`addon`}}function yo(e){return Math.round(e*10)/10}function bo(e,t){let n=new Map;for(let t of e){let{key:e,kind:r}=vo(t),i=n.get(e)??{kind:r,main:0,gc:0,lifetime:0,memory:0,count:0,splitKnown:!0},a=t.cpuMainPercent!==null&&t.cpuGcPercent!==null;n.set(e,{kind:i.kind,main:i.main+(t.cpuMainPercent??0),gc:i.gc+(t.cpuGcPercent??0),lifetime:i.lifetime+t.cpuPercent,memory:i.memory+t.memoryRssBytes,count:i.count+1,splitKnown:i.splitKnown&&a})}return[...n.entries()].map(([e,n])=>{let r=n.splitKnown?yo(n.main):null,i=n.splitKnown?yo(n.gc):null,a=yo(n.lifetime);return{key:e,kind:n.kind,point:{atMs:t,samples:1,cpuMainPercent:r,cpuMainPercentMin:r,cpuGcPercent:i,cpuGcPercentMin:i,cpuLifetimePercent:a,cpuLifetimePercentMin:a,memoryRssBytes:n.memory,memoryRssBytesMin:n.memory,processCount:n.count,processCountMin:n.count}}})}function xo(e,t){return e===null||t===null?null:e<t?e:t}function So(e,t){return e===null||t===null?null:e>t?e:t}function Co(e,t,n){return{atMs:n,samples:e.samples+t.samples,cpuMainPercent:So(e.cpuMainPercent,t.cpuMainPercent),cpuMainPercentMin:xo(e.cpuMainPercentMin,t.cpuMainPercentMin),cpuGcPercent:So(e.cpuGcPercent,t.cpuGcPercent),cpuGcPercentMin:xo(e.cpuGcPercentMin,t.cpuGcPercentMin),cpuLifetimePercent:Math.max(e.cpuLifetimePercent,t.cpuLifetimePercent),cpuLifetimePercentMin:Math.min(e.cpuLifetimePercentMin,t.cpuLifetimePercentMin),memoryRssBytes:Math.max(e.memoryRssBytes,t.memoryRssBytes),memoryRssBytesMin:Math.min(e.memoryRssBytesMin,t.memoryRssBytesMin),processCount:Math.max(e.processCount,t.processCount),processCountMin:Math.min(e.processCountMin,t.processCountMin)}}function wo(e,t,n){if(n<=0||t<=0||e<=0)return Math.max(t,1);let r=e/n;return r<=t?t:Math.ceil(r/t)*t}function To(e,t,n){if(t<=0||e.length===0)return e;let r=new Map;for(let i of e){let e=n+Math.floor((i.atMs-n)/t)*t,a=r.get(e);r.set(e,a===void 0?{...i,atMs:e}:Co(a,i,e))}return[...r.values()].toSorted((e,t)=>e.atMs-t.atMs)}var Eo=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${Oo(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function Do(e,t){return`${e}|${Oo(t)}`}function Oo(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function ko(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function Ao(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 jo=class{bus;sourceNodeId;logger;now;generation;verboseDeviceScopeLogs;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??Mo(),this.verboseDeviceScopeLogs=e.verboseDeviceScopeLogs??!1,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(Do(e,t))??null}getSnapshotForTransport(){return Array.from(this.snapshot.values())}hydrate(e){let t=this.now(),n=0;for(let r of e){let e=Do(r.capName,r.scope),i=this.snapshot.get(e)??null,a,o;if(i!==null){if(this.isLocallyAuthoritative(i))continue;let e=i.generation===r.generation;if(e&&ko(r.state)<=ko(i.state))continue;a=!e&&r.state===`ready`?i.epoch+1:i.epoch,o=Math.max(0,t-i.lastChange)}else a=1,o=0;let s={capName:r.capName,scope:r.scope,state:r.state,generation:r.generation,epoch:a,lastChange:t,sourceNodeId:r.sourceNodeId};this.snapshot.set(e,s),n++,this.logPerRecord(r.scope,`readiness: ${r.capName} (${Oo(r.scope)}) → ${r.state} (hydrated${i===null?``:` update`}, gen=${r.generation.slice(0,6)})`);let c={capName:r.capName,scope:r.scope,state:r.state,epoch:a,generation:r.generation,sourceNodeId:`hydrated`,ts:t,durationInPrevState:o};for(let e of this.subscriptions)if(e.capName===r.capName&&Ao(e.scope,r.scope))try{e.handler(c)}catch(e){this.logger?.warn(`readiness hydrate handler threw for ${r.capName}: ${e.message??String(e)}`)}}return n}logPerRecord(e,t){if(this.logger){if(e.type===`device`){if(!this.verboseDeviceScopeLogs)return;this.logger.debug(t,{tags:{deviceId:e.deviceId}});return}this.logger.debug(t)}}isLocallyAuthoritative(e){return e.scope.type===`node`?e.scope.nodeId===this.sourceNodeId:e.sourceNodeId===this.sourceNodeId}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 Eo(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${Oo(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(Je(`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=Do(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.logPerRecord(e.scope,`readiness: ${e.capName} (${Oo(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&&Ao(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.logPerRecord(r.scope,`readiness: ${r.capName} (${Oo(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&Ao(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 Mo(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function No(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function Po(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=Fo(e,s);if(t)return a(t)}}return a(o[0])}function Fo(e,t){let n=t.width*t.height;return[...e.flatMap(e=>e.resolution===void 0?[]:[{entry:e,pixels:e.resolution.width*e.resolution.height}])].sort((e,t)=>ht(e.pixels,t.pixels,n))[0]?.entry}var Io=[`motion`,`objects`,`discarded`,`stationary`],Lo=[`motion`,`objects`,`stationary`],Ro={borderWidth:2,dashed:!0,dashPattern:[6,4],opacity:1,borderRadius:2};function zo(e){return!Number.isFinite(e)||e<=0?`0 s`:e<6e4?`${String(Math.round(e/1e3))} s`:e<36e5?`${String(Math.round(e/6e4))} min`:`${String(Math.round(e/36e5))} h`}var Bo=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],Vo={yolo26:`YOLO26`,yolov9:`YOLOv9`};function Ho(e){return Vo[e]??e.toUpperCase()}var Uo=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function Wo(e,t){let n=Ho(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(Uo,``).trim();return r.length>0?r:t}function Go(e,t){let n=[];return t===`fast`&&n.push(`Fast`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function Ko(e){return Bo.filter(t=>e.formats[t]!==void 0)}function qo(e){let t=Bo.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var Jo=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],Yo=[`fp32`,`int8`];function Xo(e){let t=new Map;for(let n of e){if(n.legacy===!0||n.group===void 0)continue;let{family:e,tier:r}=n.group,i=t.get(e)??new Map,a=i.get(r)??[];a.push(n),i.set(r,a),t.set(e,i)}let n=[];for(let[e,r]of t){let t=[];for(let[n,i]of r){let r=i.map(e=>{let t=e.group?.precision??`fp32`,n=e.group?.optimization??`standard`;return{modelId:e.id,precision:t,optimization:n,resolution:e.group?.resolution,label:Go(t,n),formats:Ko(e),sizeMB:qo(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?Yo.indexOf(e.precision)-Yo.indexOf(t.precision):e.optimization===`fast`?1:-1:(t.resolution??1/0)-(e.resolution??1/0)),a=r.find(e=>e.precision===`fp32`&&e.optimization===`standard`)??r[0];if(a===void 0)continue;let o=i.find(e=>e.id===a.modelId);t.push({tier:n,label:o?Wo(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=Jo.indexOf(e.tier),r=Jo.indexOf(t.tier);return n!==-1&&r!==-1?n-r:n===-1?r===-1?e.tier.localeCompare(t.tier):1:-1}),n.push({family:e,label:Ho(e),tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function Zo(e,t){let n=t.precision??`fp32`,r=t.optimization??`standard`,i=e.filter(e=>e.group!==void 0&&e.group.family===t.family&&e.group.tier===t.tier&&(e.group.precision??`fp32`)===n&&(e.group.optimization??`standard`)===r);return t.resolution===void 0?i.toSorted((e,t)=>(t.group?.resolution??1/0)-(e.group?.resolution??1/0))[0]?.id??null:i.find(e=>e.group?.resolution===t.resolution)?.id??null}function Qo(e,t){let n=e.find(e=>e.id===t);return n?.group===void 0?null:{family:n.group.family,tier:n.group.tier,precision:n.group.precision??`fp32`,optimization:n.group.optimization??`standard`,resolution:n.group.resolution}}var $o=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],es=a({url:g(),sizeMB:o(),isDirectory:v().optional(),files:p(g()).readonly().optional(),runtimes:p(m([`node`,`python`])).readonly().optional()}),ts=a({url:g(),filename:g(),sizeMB:o()}),ns=a({onnx:es.optional(),coreml:es.optional(),openvino:es.optional(),tflite:es.optional(),pt:es.optional(),gguf:es.optional()}),rs=a({family:g(),tier:g(),precision:m([`fp32`,`int8`]).optional(),optimization:m([`standard`,`fast`]).optional(),resolution:o().int().positive().optional()}),is=[`camstack`,`frigate`,`scrypted`,`custom`],as=m(is);function os(e){if(e.provider!==void 0)return e.provider;let t=`${e.id} ${e.description??``}`;return/scrypted/i.test(t)?`scrypted`:/frigate/i.test(t)?`frigate`:`custom`}var ss=a({id:g(),name:g(),description:g(),formats:ns,inputSize:a({width:o(),height:o()}),inputChannels:o().int().positive().optional(),labels:p(ii).readonly(),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`]).optional(),outputProbabilities:v().optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),postprocessor:x().optional(),faceAlignment:v().optional(),extraFiles:p(ts).readonly().optional(),legacy:v().optional(),metrics:a({map50:o().optional(),p95LatencyMs:r(g(),o()).optional()}).optional(),license:g().optional(),group:rs.optional(),provider:as.optional(),classMap:ci.optional()}),cs=b(`format`,[a({format:y(`openvino`),precisions:p(m([`fp16`,`int8`])).min(1).readonly()}),a({format:y(`coreml`)})]),ls=a({id:g().regex(/^[a-zA-Z0-9._-]+$/),name:g(),labels:p(ii).readonly(),inputSize:a({width:o(),height:o()}),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`]).optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),outputFormat:m([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:v().optional(),classMap:ci.optional()}),us=a({format:m($o),precision:m([`fp16`,`int8`]).optional(),sizeMB:o(),validated:v(),files:p(g()).readonly()}),ds=a({entry:ss,artifacts:p(us).readonly()});function fs(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function ps(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function ms(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function hs(e){let t=e.kind;if(t===void 0)return{kind:`session`};if(t!==`sso-bridge`)return{kind:`not-a-credential`,reason:`bridge token kind=${String(t)}`};let n=e.provider;return n===`oauth-access`?{kind:`integration`,provider:`oauth-access`}:{kind:`not-a-credential`,reason:`bridge token provider=${String(n)}`}}function gs(e){let{principal:t}=e;if(t.kind===`not-a-credential`)return{allowed:!1,reason:t.reason};if(t.kind===`session`)return{allowed:!0};let n=fs(e.method);return ms(e.scopes,e.addonId,n)?{allowed:!0}:{allowed:!1,reason:`integration token holds no addon:${e.addonId}[${n}] grant`}}var k=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},A=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}};function j(e,t,n){if(typeof e!=`number`||!Number.isFinite(e))throw new A(`${t}: argument ${n+1} must be a finite number`);return e}function _s(e,t,n){if(typeof e!=`string`)throw new A(`${t}: argument ${n+1} must be a string`);return e}function M(e,t){if(!Number.isFinite(e))throw new A(`${t}: produced a non-finite result`);return e}function vs(e,t){return e.map((e,n)=>j(e,t,n))}var ys=1/0,bs={min:{minArgs:1,maxArgs:ys,apply:e=>M(Math.min(...vs(e,`min`)),`min`)},max:{minArgs:1,maxArgs:ys,apply:e=>M(Math.max(...vs(e,`max`)),`max`)},abs:{minArgs:1,maxArgs:1,apply:e=>M(Math.abs(j(e[0],`abs`,0)),`abs`)},floor:{minArgs:1,maxArgs:1,apply:e=>M(Math.floor(j(e[0],`floor`,0)),`floor`)},ceil:{minArgs:1,maxArgs:1,apply:e=>M(Math.ceil(j(e[0],`ceil`,0)),`ceil`)},sqrt:{minArgs:1,maxArgs:1,apply:e=>M(Math.sqrt(j(e[0],`sqrt`,0)),`sqrt`)},round:{minArgs:1,maxArgs:2,apply:e=>{let t=j(e[0],`round`,0),n=e.length>1?Math.trunc(j(e[1],`round`,1)):0;if(n<0||n>100)throw new A(`round: digits must be between 0 and 100`);let r=10**n;return M(Math.round(t*r)/r,`round`)}},pow:{minArgs:2,maxArgs:2,apply:e=>M(j(e[0],`pow`,0)**j(e[1],`pow`,1),`pow`)},clamp:{minArgs:3,maxArgs:3,apply:e=>{let t=j(e[0],`clamp`,0),n=j(e[1],`clamp`,1),r=j(e[2],`clamp`,2);if(n>r)throw new A(`clamp: lower bound is greater than upper bound`);return M(Math.min(r,Math.max(n,t)),`clamp`)}},avg:{minArgs:1,maxArgs:ys,apply:e=>{let t=vs(e,`avg`);return M(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:ys,apply:e=>M(vs(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:ys,apply:e=>{for(let t of e)if(t!==null)return t;return null}},age:{minArgs:2,maxArgs:2,apply:e=>M(j(e[0],`age`,0)-j(e[1],`age`,1),`age`)},convert:{minArgs:3,maxArgs:3,apply:(e,t)=>{let n=j(e[0],`convert`,0),r=_s(e[1],`convert`,1).trim(),i=_s(e[2],`convert`,2).trim();if(t.convert){let e=t.convert(n,r,i);if(e===null)throw new A(`convert: cannot convert '${r}' to '${i}'`);return M(e,`convert`)}if(r===i)return n;throw new A(`convert: unit conversion table not installed`)}}},xs=Object.freeze(Object.assign(Object.create(null),bs)),Ss=new Set(Object.keys(bs)),Cs=2048,ws=4096,Ts=/^[A-Za-z_][A-Za-z0-9_]*$/,Es=new Set([`now`,`true`,`false`,`null`]),Ds=new Set([`true`,`false`,`null`]);function Os(e){return e>=`0`&&e<=`9`}function ks(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function As(e){return ks(e)||Os(e)}function js(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-kNaey6uv.js";import{A as r,C as i,D as a,E as o,F as s,M as c,N as l,O as u,P as d,S as f,T as ee,_ as p,a as te,b as ne,c as re,d as ie,f as m,g as ae,h,i as oe,j as g,k as se,l as ce,m as le,n as ue,o as de,p as _,r as fe,s as pe,t as me,u as he,v,w as y,x as b,y as x}from"./__vite-browser-external-B6qJ4svC.js";var ge=[`f32le`,`pcmu`,`pcma`];function _e(e){return typeof e==`string`&&ge.includes(e)}function ve(e){return e===`f32le`?4:1}function ye(e,t){if(t===`f32le`){let t=new Uint8Array(e.byteLength);return t.set(e),t}let n=t===`pcmu`?Se:Ce,r=new Float32Array(e.length);for(let t=0;t<e.length;t++)r[t]=n[e[t]];return new Uint8Array(r.buffer)}function be(){let e=new Float32Array(256);for(let t=0;t<256;t++){let n=~t&255,r=n&128?-1:1,i=n>>4&7;e[t]=r*((8*(n&15)+132<<i)-132)/32768}return e}function xe(){let e=new Float32Array(256);for(let t=0;t<256;t++){let n=t^85,r=n&128?1:-1,i=n>>4&7,a=n&15;e[t]=r*(i===0?16*a+8:16*a+264<<i-1)/32768}return e}var Se=be(),Ce=xe(),we=[`track`,`summary`,`face`,`identity`,`plate`,`vehicle`,`scene`,`motion`,`object`,`audio`,`mosaic`],Te=new Set(we),Ee=/^\d+$/;function De(e){return Te.has(e)}function Oe(e){let t=e.split(`:`);if(t.length!==3&&t.length!==4)return null;let[n,r,i,a]=t;return n===void 0||!De(n)||r===void 0||r.length===0||i===void 0||i.length===0?null:a===void 0?{ownerType:n,ownerId:r,fileKind:i}:Ee.test(a)?{ownerType:n,ownerId:r,fileKind:i,timestampMs:Number(a)}:null}function ke(e){let t=`${e.ownerType}:${e.ownerId}:${e.fileKind}`;return e.timestampMs===void 0?t:`${t}:${e.timestampMs}`}var Ae=[`motion`,`object`,`audio`],je=m(Ae),Me=[...Ae,`track`],Ne=m(Me),Pe=new Set(Ae);function Fe(e){return Pe.has(e)}var Ie=function(e){return e.SystemBoot=`system.boot`,e.SystemAddonsReady=`system.addons-ready`,e.SystemRestarting=`system.restarting`,e.SystemRestartCompleted=`system.restart-completed`,e.SystemTlsCertChanged=`system.tls-cert-changed`,e.UpdateAvailable=`update.available`,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.AddonRunnerFailed=`addon.runner-failed`,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.SystemLivenessFailed=`system.liveness-failed`,e.SystemLivenessRecovered=`system.liveness-recovered`,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.StorageLocationsChanged=`storage.locations-changed`,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.RecordingExportProgress=`recording.export.progress`,e.RecordingExportCompleted=`recording.export.completed`,e.RecordingExportFailed=`recording.export.failed`,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.PipelineNodeInferenceUnavailable=`pipeline.node-inference-unavailable`,e.PipelineDetectionBlind=`pipeline.detection-blind`,e.PipelineCameraUpdated=`pipeline.camera-updated`,e.PipelineIngestOwnerChanged=`pipeline.ingest-owner-changed`,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.ZoneAnalyticsOccupancyChanged=`zone-analytics.occupancy-changed`,e.BatteryOnStatusChanged=`battery.onStatusChanged`,e.NetworkLinkOnStatusChanged=`network-link.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.PipelineAnalyticsTrackLifecycle=`pipeline-analytics.track-lifecycle`,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.PipelineAnalyticsStationaryChanged=`pipeline-analytics.stationary-changed`,e.PipelineAnalyticsPackageDelivered=`pipeline-analytics.package-delivered`,e.PipelineAnalyticsPackagePickedUp=`pipeline-analytics.package-picked-up`,e.PipelineAnalyticsFaceGalleryChanged=`pipeline-analytics.face-gallery-changed`,e.PipelineAnalyticsPlateGalleryChanged=`pipeline-analytics.plate-gallery-changed`,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.BackupRunCompleted=`backup.run-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}({}),Le=[{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:`navigation`,label:`Navigation`,icon:`compass`,order:41},{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}],Re=Object.fromEntries(Le.map(e=>[e.id,e]));function ze(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 Be(e){let t=new Map;if(typeof e!=`object`||!e)return t;let n=e.sections;if(!Array.isArray(n))return t;for(let e of n)typeof e==`object`&&e&&Ve(e.fields,t);return t}function Ve(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){Ve(n.fields,t);continue}if(e===`sub-tabs`){let e=n.tabs;if(Array.isArray(e))for(let n of e)typeof n==`object`&&n&&Ve(n.fields,t);continue}let r=n.key;typeof r!=`string`||r.length===0||`value`in n&&t.set(r,{value:n.value,default:n.default})}}function He(e){let t=new Map;for(let[n,r]of Be(e))t.set(n,r.value??r.default);return t}function Ue(e,t){let n=Be(e).get(t);return n===void 0?void 0:n.value??n.default}function We(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Ge(e,t))}))}}function Ge(e,t){if(ze(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Ge(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Ge(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?Ke(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,o=e.type===`textarea`&&e.isJson&&typeof a==`object`&&a?JSON.stringify(a,null,2):a;return{...e,value:o}}function Ke(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 qe(e,t){return e.category===t}function Je(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 Ye(e,t){let n=t.ts??Date.now();e.emit(Je(`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 Xe(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 Ze(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}@${Ze(t)}`}function $e(e,t,n){return e[Qe(t,n)]}function et(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 tt(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=$e(e,i,n);t!==void 0&&(r[i]=t)}return r}var nt=class{_ctx=null;_config;_readinessGeneration=typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14);_registeredCapNames=[];settingsStoreReady=!1;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(Ie.AddonStarted);let n=at(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(Ie.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}integrationSettingSections(){return[]}async getGlobalSettings(e,t,n){let r=this.globalSettingsSchema(t);if(!r)return{sections:[]};let i=await this.resolveGlobalStore(n,t);return We(r,e?{...i,...e}:i)}async getIntegrationSettings(e){let t=this.integrationSettingSections();if(t.length===0)return null;let n=this.globalSettingsSchema();if(!n)throw Error(`${this.constructor.name}: integrationSettingSections() names [${t.join(`, `)}] but globalSettingsSchema() returns null.`);let r=new Map(n.sections.map(e=>[e.id,e])),i=[];for(let e of t){let t=r.get(e);if(!t)throw Error(`${this.constructor.name}: integrationSettingSections() names unknown section "${e}". Known sections: [${[...r.keys()].join(`, `)}].`);let n=rt(t.fields);n.length!==0&&i.push({...t,fields:n})}if(i.length===0)return null;let a=await this.resolveGlobalStore(e);return We({...n,sections:i},a)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=Ze(e??this._ctx?.kernel?.localNodeId);return r.size>0?tt(n,r,i):n}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=Ze(this._ctx?.kernel?.localNodeId),i=Ze(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?et(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(Ie.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=>it(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?We(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{Ye(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-B6qJ4svC.js`).then(t=>e(t.t()));return{join:t}},__vite__mapDeps([0,1]),import.meta.url),{promises:r}=await n(async()=>{let{promises:t}=await import(`./__vite-browser-external-B6qJ4svC.js`).then(t=>e(t.t()));return{promises:t}},__vite__mapDeps([0,1]),import.meta.url),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=Ze(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?$e(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 Xe({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 Xe({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{let t=await e.readAddonStore()??{};return this.settingsStoreReady=!0,t}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.settingsStoreReady=!1,this._ctx?.logger?.warn?.(`readAddonStore: settings-store unavailable after retries — using defaults`,{meta:{error:n instanceof Error?n.message:String(n)}}),{}}};function rt(e){let t=[];for(let n of e){if(n.type===`group`){let e=rt(n.fields);e.length>0&&t.push({...n,fields:e});continue}if(n.type===`sub-tabs`){let e=n.tabs.map(e=>({...e,fields:rt(e.fields)})).filter(e=>e.fields.length>0);e.length>0&&t.push({...n,tabs:e});continue}`perNode`in n&&n.perNode===!0||t.push(n)}return t}function it(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...it(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...it(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function at(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function ot(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=st(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=lt(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 st(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=ct(t.path,n);if(e!==null)return{route:t,params:e}}return null}function ct(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 lt(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 ut=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)}}}},dt=a({codec:m([`h264`,`h265`,`copy`]),profile:m([`baseline`,`main`,`high`]).optional(),level:g().optional(),width:o().int().positive().optional(),height:o().int().positive().optional(),fps:o().positive().optional(),bitrateKbps:o().int().positive().optional(),gopFrames:o().int().positive().optional(),bf:o().int().min(0).optional(),preset:m([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:m([`zerolatency`,`film`,`animation`]).optional(),singleSlicePerFrame:v().optional()}),ft=l([y(`passthrough`),a({codec:m([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:o().int().positive().optional(),sampleRateHz:o().int().positive().optional(),channels:l([y(1),y(2)]).optional()})]),pt=a({video:dt,audio:ft,inputArgs:p(g()).optional(),outputArgs:p(g()).optional()});function mt(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 ht(e,t,n){let r=e>=n;return r===t>=n?r?e-t:t-e:r?-1:1}function gt(e){let t=e.toLowerCase().replace(/[.\s-]/g,``);return t===`hevc`||t===`hvc1`||t===`hev1`?`h265`:t===`avc`||t===`avc1`?`h264`:t}function _t(e,t){if(t.length===0)return!0;if(e===void 0)return!1;let n=gt(e);return t.some(e=>gt(e)===n)}function vt(e,t){for(let n=0;n<t.length;n+=1)if(e.startsWith(t[n]))return n;return t.length}function yt(e,t){let n=e.filter(e=>t.allowTranscode||_t(e.codec,t.acceptCodecs));if(n.length===0)return null;let r=t.targetHeight,i=n.map(e=>({candidate:e,transcodes:!_t(e.codec,t.acceptCodecs),provider:vt(e.camStreamId,t.preferredProviders),height:e.height??0}));i.sort((e,n)=>e.transcodes===n.transcodes?e.provider===n.provider?r===void 0?t.resolutionPreference===`highest`?n.height-e.height:e.height-n.height:ht(e.height,n.height,r):e.provider-n.provider:e.transcodes?1:-1);let a=i[0];return a===void 0?null:{candidate:a.candidate,transcodes:a.transcodes}}var bt={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},xt={aac:{kind:`encode`,codec:`aac`,bitrateKbps:128,sampleRateHz:48e3,channels:1},opus:{kind:`encode`,codec:`opus`,bitrateKbps:64,sampleRateHz:48e3,channels:1},pcmu:{kind:`encode`,codec:`pcmu`,sampleRateHz:8e3,channels:1}};function St(e){return[`-hide_banner`,`-loglevel`,e]}function Ct(e){return!e||e===`none`||e===`copy`}function wt(e,t){let n=[];if(Ct(t)||n.push(`-hwaccel`,String(t)),e.extraArgs?.length&&n.push(...e.extraArgs),e.decodeThreadCount!==void 0&&e.decodeThreadCount>0&&n.push(`-threads`,String(e.decodeThreadCount)),e.analyzeDurationUs!==void 0&&n.push(`-analyzeduration`,String(e.analyzeDurationUs)),e.probeSizeBytes!==void 0&&n.push(`-probesize`,String(e.probeSizeBytes)),e.lowDelay===!0&&n.push(`-flags`,`low_delay`),e.useWallclockTimestamps===!0&&n.push(`-use_wallclock_as_timestamps`,`1`),e.fflags?.length)for(let t of e.fflags)n.push(`-fflags`,t);if(e.rtspTransport&&n.push(`-rtsp_transport`,e.rtspTransport),e.rawVideo!==void 0){let t=e.rawVideo;n.push(`-f`,`rawvideo`,`-pix_fmt`,t.pixelFormat,`-video_size`,`${String(t.width)}x${String(t.height)}`,`-framerate`,String(t.framerate))}return n.push(`-i`,e.url),n}function Tt(e){let t=e.filterGraph;return t?{video:`[${t.videoOutLabel}]`,audio:t.audioOutLabel?`[${t.audioOutLabel}]`:`0:a:0?`}:e.extraInputs?.length?{video:`0:v:0`,audio:`0:a:0?`}:{video:null,audio:null}}function Et(e,t,n,r){if(n){if(e)throw Error(`FfmpegInvocation: video.scale cannot be combined with a filter graph — scale inside the graph instead (the -vf would feed an output the graph already feeds)`);if(t.some(e=>e===`-vf`))throw Error(`FfmpegInvocation: outputArgs carries a -vf while a filter graph feeds the same output — fold the filter into the graph`);return[]}if(t.some(e=>e===`-vf`))return[];if(!e)return r.length>0?[`-vf`,r]:[];let i=r.length>0?`,${r}`:``;return e.mode===`exact`?[`-vf`,`scale=${e.width}:${e.height}${i}`]:[`-vf`,`scale='min(${e.width},iw)':'min(${e.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2${i}`]}function Dt(e,t){return e===void 0||!Ct(t)?``:`format=nv12,hwupload`}function Ot(e){let t=e.bitrateKbps;if(t===void 0)return[];let n=e.rateControl??{kind:`cap`,vbvSeconds:2},r=Math.max(1,Math.round(t*n.vbvSeconds));return[...n.kind===`cbr`?[`-b:v`,`${t}k`]:[],`-maxrate`,`${t}k`,`-bufsize`,`${r}k`]}function kt(e,t,n,r){if(e.kind===`raw`){if(n&&e.filter!==void 0)throw Error(`FfmpegInvocation: video.filter cannot be combined with a filter graph — fold the filter into the graph`);return[...e.filter===void 0?[]:[`-vf`,e.filter],`-c:v`,`rawvideo`,`-pix_fmt`,e.pixelFormat,...e.fps===void 0?[]:[`-r`,String(e.fps)]]}if(e.kind===`copy`){if(n)throw Error("FfmpegInvocation: a filter graph produces a NEW picture, so video.kind must be `encode`");return[`-c:v`,`copy`,...e.bitstreamFilter?[`-bsf:v`,e.bitstreamFilter]:[]]}let i=r===void 0?``:Dt(r.device,r.decodeHwAccel);if(r!==void 0&&n)throw Error(`FfmpegInvocation: a hardware encode fed by a filter graph must upload INSIDE the graph — hwEncodeDevice cannot be combined with filterGraph`);let a=[...Et(e.scale,t,n,i),`-c:v`,e.encoder];return e.preset!==void 0&&a.push(`-preset`,e.preset),e.tune!==void 0&&a.push(`-tune`,e.tune),e.singleSlicePerFrame===!0&&e.encoder===`libx264`&&a.push(`-x264-params`,`sliced-threads=0`),e.profile!==void 0&&a.push(`-profile:v`,e.profile),e.level!==void 0&&a.push(`-level`,e.level),e.pixelFormat!==void 0&&a.push(`-pix_fmt`,e.pixelFormat),e.fps!==void 0&&a.push(`-r`,String(e.fps)),e.gopFrames!==void 0&&a.push(`-g`,String(e.gopFrames)),e.forceKeyFramesSeconds!==void 0&&a.push(`-force_key_frames`,`expr:gte(t,n_forced*${e.forceKeyFramesSeconds})`),e.bf!==void 0&&a.push(`-bf`,String(e.bf)),a.push(...Ot(e)),e.bitstreamFilter!==void 0&&a.push(`-bsf:v`,e.bitstreamFilter),a}function At(e){if(e.kind===`none`)return[`-an`];if(e.kind===`copy`)return[`-c:a`,`copy`];let t=[];return e.filter!==void 0&&t.push(`-af`,e.filter),t.push(`-c:a`,bt[e.codec]),e.application!==void 0&&t.push(`-application`,e.application),e.frameDurationMs!==void 0&&t.push(`-frame_duration`,String(e.frameDurationMs)),e.globalHeader===!0&&t.push(`-flags`,`+global_header`),e.sampleRateHz!==void 0&&t.push(`-ar`,String(e.sampleRateHz)),e.bitrateKbps!==void 0&&t.push(`-b:a`,`${e.bitrateKbps}k`),e.vbvBufferKbits!==void 0&&t.push(`-bufsize`,`${e.vbvBufferKbits}k`),e.channels!==void 0&&t.push(`-ac`,String(e.channels)),t}function jt(e){let t=[];return e.payloadType!==void 0&&t.push(`-payload_type`,String(e.payloadType)),e.ssrc!==void 0&&t.push(`-ssrc`,String(e.ssrc)),e.sdpFile!==void 0&&t.push(`-sdp_file`,e.sdpFile),t.push(`-f`,`rtp`,e.url),t}function Mt(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var Nt=`+frag_keyframe+empty_moov+default_base_moof`;function Pt(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?It(e):[`-f`,e.container,`pipe:1`]}var Ft=.9;function It(e){return[`-movflags`,Nt,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*Ft*1e3))),`-f`,`mp4`,`pipe:1`]}function Lt(e){return[`-map`,`0:a:0?`,...At(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:xt[e.codec]),...jt({url:e.rtpUrl,sdpFile:e.sdpFile})]}function Rt(e){return e.hwEncodeDevice===void 0?void 0:{device:e.hwEncodeDevice,decodeHwAccel:e.decodeHwAccel}}function zt(e){let t=e.filterGraph??null,n=[...St(e.logLevel),...e.hwEncodeDevice===void 0?[]:[`-vaapi_device`,e.hwEncodeDevice.renderNode],...wt(e.input,e.decodeHwAccel),...(e.extraInputs??[]).flatMap(t=>wt(t,e.decodeHwAccel)),...t?[`-filter_complex`,t.graph]:[]],r=[...e.threadCount>0?[`-threads`,String(e.threadCount)]:[],...e.filterThreadCount!==void 0&&e.filterThreadCount>0?[`-filter_threads`,String(e.filterThreadCount)]:[]],i=Tt(e),a=i.video?[`-map`,i.video]:[],o=i.audio?[`-map`,i.audio]:[];if(e.sink.kind===`rtp-outputs`){let a=e.sink.video?[`-an`,`-map`,i.video??`0:v:0`,...kt(e.video,e.outputArgs,t,Rt(e)),...r,...e.outputArgs,...jt(e.sink.video)]:[],o=e.sink.audio?[`-vn`,`-map`,i.audio??`0:a:0?`,...At(e.audio),...jt(e.sink.audio)]:[];return[...n,...a,...o]}let s=Mt(e.sink)||e.audio.kind===`none`,c=Mt(e.sink)?[`-an`]:At(e.audio);return[...n,...a,...kt(e.video,e.outputArgs,t,Rt(e)),...r,...s?[]:o,...c,...e.outputArgs,...Pt(e.sink),...e.audioSidecar?Lt(e.audioSidecar):[]]}var Bt={videotoolbox:{h264:`h264_videotoolbox`,h265:`hevc_videotoolbox`},vaapi:{h264:`h264_vaapi`,h265:`hevc_vaapi`},qsv:{h264:`h264_qsv`,h265:`hevc_qsv`},cuda:{h264:`h264_nvenc`,h265:`hevc_nvenc`},nvdec:{h264:`h264_nvenc`,h265:`hevc_nvenc`},amf:{h264:`h264_amf`,h265:`hevc_amf`}};function Vt(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||Ct(t)||t===`auto`)return r;let i=Bt[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function Ht(e){return e===`passthrough`?{kind:`none`}:e.codec===`copy`?{kind:`copy`}:{kind:`encode`,codec:e.codec,...e.bitrateKbps===void 0?{}:{bitrateKbps:e.bitrateKbps},...e.sampleRateHz===void 0?{}:{sampleRateHz:e.sampleRateHz},...e.channels===void 0?{}:{channels:e.channels}}}function Ut(e){let t=e.profile.video,n=t.codec===`copy`||e.forceReencode!==!0&&t.codec===e.sourceCodec,r=t.width!==void 0&&t.height!==void 0?{mode:`fit`,width:t.width,height:t.height}:null,i=t.codec===`h265`?`h265`:`h264`,a=n?{kind:`copy`,...e.bitstreamFilter===void 0?{}:{bitstreamFilter:e.bitstreamFilter}}:{kind:`encode`,encoder:Vt(i,e.decodeHwAccel,e.hardwareEncoders===!0),scale:r,...t.preset===void 0?{}:{preset:t.preset},...t.tune===void 0?{}:{tune:t.tune},...t.singleSlicePerFrame===void 0?{}:{singleSlicePerFrame:t.singleSlicePerFrame},...t.profile===void 0?{}:{profile:t.profile},...t.level===void 0?{}:{level:t.level},...e.pixelFormat===void 0?{}:{pixelFormat:e.pixelFormat},...t.fps===void 0?{}:{fps:t.fps},...t.gopFrames===void 0?{}:{gopFrames:t.gopFrames},...e.forceKeyFramesSeconds===void 0?{}:{forceKeyFramesSeconds:e.forceKeyFramesSeconds},...t.bf===void 0?{}:{bf:t.bf},...t.bitrateKbps===void 0?{}:{bitrateKbps:t.bitrateKbps},...e.rateControl===void 0?{}:{rateControl:e.rateControl},...e.bitstreamFilter===void 0?{}:{bitstreamFilter:e.bitstreamFilter}};return{logLevel:e.logLevel??`error`,decodeHwAccel:e.decodeHwAccel,input:{url:e.sourceUrl,rtspTransport:`tcp`,fflags:[`+discardcorrupt`],...e.profile.inputArgs?.length?{extraArgs:e.profile.inputArgs}:{}},video:a,audio:Ht(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var Wt={video:{codec:`h264`,profile:`baseline`,level:`3.1`,width:1280,height:720,fps:25,bitrateKbps:2500,gopFrames:25,bf:0,preset:`veryfast`,tune:`zerolatency`},audio:`passthrough`},Gt={...Wt,video:{...Wt.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},Kt={...Wt,audio:{codec:`opus`},video:{...Wt.video,singleSlicePerFrame:!0}},qt={kind:`cbr`,vbvSeconds:1},Jt={kind:`cap`,vbvSeconds:2},Yt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},Xt=16*1024*1024,Zt=8,Qt=16,$t=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??Xt}get fault(){return this.faultReason}get pendingBytes(){return this.buffer.length-this.unitStart}get discardedInterstitialTypes(){return[...this.interstitial]}push(e){return this.faultReason!==null||e.length===0?[]:(this.append(e),this.pendingBytes>this.maxUnitBytes?this.fail(`a single fMP4 unit exceeded ${this.maxUnitBytes} bytes — this stream is not fragmented`):this.drainBoxes())}append(e){if(this.buffer.length===0){this.buffer=e.slice();return}let t=new Uint8Array(this.buffer.length+e.length);t.set(this.buffer,0),t.set(e,this.buffer.length),this.buffer=t}drainBoxes(){let e=[];for(;;){let t=this.readHeader();if(this.faultReason!==null)return e;if(t===null||this.cursor+t.totalBytes>this.buffer.length)break;let n=this.cursor,r=n+t.totalBytes;this.cursor=r;let i=this.consumeBox(t.type,n,r);if(this.faultReason!==null)return e;i!==null&&e.push(i)}return this.compact(),e}consumeBox(e,t,n){if(this.state===`init`){if(e!==`moof`)return null;if(t===this.unitStart)return this.fail(`a moof arrived before any initialisation box — there is no ftyp/moov to send`),null;let n=this.emit(`init`,this.unitStart,t);return this.unitStart=t,this.state=`fragment`,n}if(this.state===`idle`)return e===`moof`?(this.unitStart=t,this.state=`fragment`,null):(this.interstitial.add(e),this.unitStart=n,null);if(e!==`mdat`)return null;let r=this.emit(`fragment`,this.unitStart,n);return this.unitStart=n,this.state=`idle`,r}readHeader(){let e=this.buffer.length-this.cursor;if(e<Zt)return null;let t=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),n=t.getUint32(this.cursor),r=String.fromCharCode(this.buffer[this.cursor+4]??0,this.buffer[this.cursor+5]??0,this.buffer[this.cursor+6]??0,this.buffer[this.cursor+7]??0);if(n===0)return this.fail(`box "${r}" declares size 0 (to EOF) — an unbounded box cannot be fragmented`),null;if(n===1){if(e<Qt)return null;let n=t.getBigUint64(this.cursor+Zt);return n>BigInt(this.maxUnitBytes)?(this.fail(`box "${r}" declares ${n} bytes, over the ${this.maxUnitBytes} byte bound`),null):{type:r,totalBytes:Number(n)}}return n<Zt?(this.fail(`box "${r}" declares an impossible size of ${n} bytes`),null):{type:r,totalBytes:n}}emit(e,t,n){let r=this.nextSequence;return this.nextSequence+=1,{kind:e,data:this.buffer.slice(t,n),sequence:r}}compact(){this.unitStart!==0&&(this.buffer=this.buffer.slice(this.unitStart),this.cursor-=this.unitStart,this.unitStart=0)}fail(e){return this.faultReason=e,this.buffer=new Uint8Array,this.unitStart=0,this.cursor=0,[]}};function en(e){let t=e.now??(()=>Date.now()),n=null,r=-1/0;return{read(){return t()-r<e.ttlMs?n:void 0},write(e){n=e,r=t()}}}function tn(e){return!e||e===`none`||e===`copy`}async function nn(e){let t=e.override;if(t!=null&&t!==``)return tn(t)?null:t;let n=e.cache?.read();if(n!==void 0)return n;let r;try{r=await e.readDecoderBackend()}catch(t){let n=await e.readKernelPreferred().catch(()=>[]);return e.onFallback({reason:`decoder-unreadable`,kernelPreferred:n,error:t instanceof Error?t.message:String(t)}),e.cache?.write(null),null}if(r===``){let t=await e.readKernelPreferred().catch(()=>[]);return e.onFallback({reason:`decoder-unprobed`,kernelPreferred:t}),e.cache?.write(null),null}let i=tn(r)?null:r;return e.cache?.write(i),i}var rn=me();function an(e){let t=JSON.stringify(e,on);return(0,rn.createHash)(`sha256`).update(t??``).digest(`hex`)}function on(e,t){if(t&&typeof t==`object`&&!Array.isArray(t)){let e=t,n={};for(let t of Object.keys(e).toSorted())n[t]=e[t];return n}return t}function sn(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var S=`\0unset`;function cn(e){return{codec:e.codec,profile:e.profile??S,level:e.level??S,width:e.width??-1,height:e.height??-1,fps:e.fps??-1,bitrateKbps:e.bitrateKbps??-1,gopFrames:e.gopFrames??-1,bf:e.bf??-1,preset:e.preset??S,tune:e.tune??S,singleSlicePerFrame:e.singleSlicePerFrame===void 0?S:String(e.singleSlicePerFrame)}}function ln(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function un(e,t=sn(e)){return{deviceId:e.deviceId,source:e.source.kind===`profile`?`profile:${e.source.profile}`:`cam-stream:${e.source.camStreamId}`,transport:t.transport,fragmentMs:t.fragmentMs??-1,video:cn(e.encode.video),audio:ln(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??S,pixelFormat:e.pixelFormat??S,decodeHwAccel:e.decodeHwAccel??S}}function dn(e,t=sn(e)){return`egress:${an(un(e,t))}`}var fn=m([`singleton`,`device`,`widget`]),pn=a({capName:g(),kind:fn,deviceId:o().optional(),reachable:v(),latencyMs:o(),error:g().optional()}),mn=a({addonId:g(),caps:p(pn).readonly(),widgets:p(pn).readonly()}),hn=a({nodeId:g(),addons:p(mn).readonly()}),gn=a({ok:v(),degraded:v(),checkedAt:g(),nodes:p(hn).readonly(),summary:a({total:o(),reachable:o(),unreachable:o()})}),_n=`hub-only`;function vn(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function yn(e){let t=vn(e).placement;return t===`any-node`||t===`agent-only`}function bn(e){return vn(e).placement===`agent-only`}function xn(e){return vn(e).group}function Sn(e,t){return e.execution?.group??t}function Cn(e){return vn(e).placement}function wn(e){return e.execution?.isolate===!0}var Tn=`x-camstack-dataplane-secret`,En=[`grid-view`,`events-view`],Dn=3e4,On=15e3,kn=256*1024,An=a({url:g().min(1),hostNodeId:g().min(1),expiresAtMs:o().int().nonnegative(),declaredBytes:o().int().nonnegative().nullable()}),jn=m([`running`,`done`,`failed`,`cancelled`]),Mn=m([`adopted`,`already-adopted`,`failed`,`cancelled`]),Nn=a({childNativeId:g(),outcome:Mn,parentDeviceId:o().int().nonnegative().nullable(),accessoryCount:o().int().nonnegative(),error:g().nullable()}),Pn=a({jobId:g(),addonId:g(),integrationId:g(),state:jn,total:o().int().nonnegative(),processed:o().int().nonnegative(),adopted:o().int().nonnegative(),alreadyAdopted:o().int().nonnegative(),failed:o().int().nonnegative(),accessoriesCreated:o().int().nonnegative(),currentChildNativeId:g().nullable(),results:p(Nn).readonly(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Fn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},In=m([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`]),Ln=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`],Rn=b(`kind`,[a({kind:y(`device-disabled`)}),a({kind:y(`wrapper-binding`),capName:g()}),a({kind:y(`recording-config`)}),a({kind:y(`notification-mute`)}),a({kind:y(`camera-audio`),capName:g()}),a({kind:y(`camera-mask`),capName:g()}),a({kind:y(`broker-audio-mute`)})]),zn=m([`no-provider`,`source-unreachable`,`device-disabled`]),Bn=m([`no-privacy-zones`]),Vn=a({id:In,label:g(),costWhenOff:g(),available:v(),unavailableReason:zn.optional(),warning:Bn.optional(),enabled:v(),authority:Rn}),Hn=a({deviceId:o().int(),switches:p(Vn).readonly(),fetchedAt:o()}),Un=`detection-pipeline`,Wn=`audio-analysis`,Gn=`privacy-mask`,Kn=`pipeline-analytics`,qn=[`motion-detection`,Un,Wn,Kn,`scene-monitor`],Jn={"stream-broker":{id:`stream-broker`,label:`Camera`,costWhenOff:`Off: the whole camera stops. No live view, no recording, no detection and no notifications — its streams are released and nothing dials it again until you turn it back on.`,authority:{kind:`device-disabled`},countsAsSwitchedOff:!0},"object-detection":{id:`object-detection`,label:`Object detection & tracking`,costWhenOff:`Off: nothing is detected or tracked on this camera, so it produces no events — and with no events there are no object notifications and no event-triggered recording. Live view and continuous recording are unaffected.`,authority:{kind:`wrapper-binding`,capName:Un},countsAsSwitchedOff:!0},"privacy-mask":{id:`privacy-mask`,label:`Privacy mask`,costWhenOff:`On: the zones you drew on this camera are blacked out by the camera itself — live view, playback, exports and detection all see the black boxes, and nothing behind them was ever recorded. Off: the camera captures the whole frame, and your zones are kept for when you turn it back on.`,authority:{kind:`camera-mask`,capName:Gn},countsAsSwitchedOff:!1},"device-audio":{id:`device-audio`,label:`Camera microphone`,costWhenOff:`Off: the camera captures no sound at all. Live view and recordings become silent video, and audio detection and classification have nothing left to analyse — turning them back on will not recover it. The picture, motion and object detection are unaffected, and two-way talk still works. Applies at the camera, so every consumer sees the same silence.`,authority:{kind:`camera-audio`,capName:Gn},countsAsSwitchedOff:!0},"broker-audio":{id:`broker-audio`,label:`Audio distribution`,costWhenOff:`Off: this server distributes no sound for this camera — live view is silent and everything recorded while it is off is silent FOREVER, even after you turn it back on. Audio detection and classification also have nothing to analyse. The camera keeps capturing sound, so nothing about the camera changes and turning this back on is instant, with no interruption to the picture.`,authority:{kind:`broker-audio-mute`},countsAsSwitchedOff:!0},"audio-analysis":{id:`audio-analysis`,label:`Audio detection & classification`,costWhenOff:`Off: no audio is decoded or classified for this camera. Tracks carry no audio labels and no audio-triggered rule can fire. Audio recorded alongside video is unaffected.`,authority:{kind:`wrapper-binding`,capName:Wn},countsAsSwitchedOff:!0},"event-saving":{id:`event-saving`,label:`Event saving`,costWhenOff:`Off: nothing about this camera is written to its history — no tracks, no events and no event snapshots or clips. Detection keeps running and live boxes still appear, so the camera looks busy while its timeline stays empty, and anything that fires ON an event (notification rules, event-triggered recording) has nothing to fire on. Continuous recording is unaffected, and history already written is kept.`,authority:{kind:`wrapper-binding`,capName:Kn},countsAsSwitchedOff:!0},recording:{id:`recording`,label:`Recording`,costWhenOff:`Off: nothing new is written to disk. Footage already recorded stays, but retention keeps deleting it — so this camera’s history shrinks and is not replaced. Your recording schedule is kept and resumes when you turn it back on.`,authority:{kind:`recording-config`},countsAsSwitchedOff:!0},notifications:{id:`notifications`,label:`Notifications`,costWhenOff:`Off: this camera never notifies anyone, on any rule, with no expiry. Detection, events and recording carry on exactly as before — you simply stop being told about them.`,authority:{kind:`notification-mute`},countsAsSwitchedOff:!0}};function Yn(e,t){switch(e.authority.kind){case`device-disabled`:return{available:!0,enabled:!t.deviceDisabled};case`wrapper-binding`:{let n=e.authority.capName;return t.bindableCapNames===null||t.activeWrapperCapNames===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:t.bindableCapNames.includes(n)?{available:!0,enabled:t.activeWrapperCapNames.includes(n)}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`recording-config`:return t.recordingEnabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:t.recordingEnabled};case`notification-mute`:return t.notificationsMuted===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!t.notificationsMuted};case`camera-audio`:{let e=t.deviceAudio;return e===null?{available:!1,enabled:!0,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.enabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`camera-mask`:{let e=t.privacyMask;return e===null?{available:!1,enabled:!1,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.configuredRegions===null||e.enabled===null?{available:!1,enabled:!1,unavailableReason:`source-unreachable`}:e.configuredRegions===0?{available:!0,enabled:e.enabled,warning:`no-privacy-zones`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!1,unavailableReason:`no-provider`}}case`broker-audio-mute`:{let e=t.brokerAudio;return e===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!e.muted}}}}function Xn(e){return Ln.map(t=>{let n=Jn[t],r=Yn(n,e);return{id:n.id,label:n.label,costWhenOff:n.costWhenOff,available:r.available,...r.unavailableReason===void 0?{}:{unavailableReason:r.unavailableReason},...r.warning===void 0?{}:{warning:r.warning},enabled:r.enabled,authority:n.authority}})}function Zn(e){return e.filter(e=>Jn[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function Qn(e){let t=[],n=[];for(let r of Ln){let i=Jn[r];if(!i.countsAsSwitchedOff)continue;let a=Yn(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var $n=`__camstack_redacted__`;function er(e){return e.type===`password`?!0:`secret`in e&&e.secret===!0}function tr(e){let t=new Set;for(let n of ir(e))for(let e of ar(n))or(e,t);return t}function nr(e){for(let t of ir(e))if(ar(t).length>0)return!0;return!1}function rr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ir(e){if(!rr(e))return[];let t=e.sections;return Array.isArray(t)?t:[]}function ar(e){if(!rr(e))return[];let t=e.fields;return Array.isArray(t)?t:[]}function or(e,t){if(!rr(e))return;let n=e.type,r=e.key;if((n===`password`||e.secret===!0)&&typeof r==`string`&&r.length>0&&t.add(r),n===`group`){for(let n of ar(e))or(n,t);return}if(n===`sub-tabs`){let n=e.tabs;if(!Array.isArray(n))return;for(let e of n)for(let n of ar(e))or(n,t)}}var sr=3e4,cr=6e4,lr=m([`confirmed`,`suppressed`,`exhausted-fallback`]),ur=a({id:g(),at:o().int(),deviceId:o().int(),sourceTrackId:g(),className:g(),verdict:lr,reason:g().nullable(),attempts:o().int(),deferredForMs:o().int(),decidedOnCoastedFrame:v(),birthEvidenceAvailable:v(),decidedByBirthEvidence:v(),bestScore:o().nullable(),appliedMinConfidence:o().nullable(),firstSeen:o().int().nullable(),motionOnsetAt:o().int().nullable(),birthLatencyMs:o().int().nullable(),birthIndexInBurst:o().int().nullable()}),dr=a({deviceId:o().int().optional(),since:o().int().optional(),verdict:lr.optional(),limit:o().int().min(1).max(5e3).optional()}),fr=5e3,pr=a({id:g(),note:g(),deviceId:o().int(),sourceTrackId:g(),archivedAt:o().int(),trackStartedAt:o().int().nullable(),trackClass:g().nullable(),trackLabel:g().nullable()}),mr=a({deviceId:o().int().optional(),limit:o().int().min(1).max(1e3).optional()}),hr={high:`High`,mid:`Mid`,low:`Low`};function gr(e){return hr[e]??e.charAt(0).toUpperCase()+e.slice(1)}function _r(e){return(e.width??0)*(e.height??0)}function vr(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:_r(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 yr(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function br(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 C(e){return typeof e==`string`}function xr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Sr(e){return C(e)&&e.trim()?{url:e}:xr(e)&&C(e.url)&&e.url.trim()?{url:e.url,label:C(e.label)?e.label:void 0}:null}function Cr(e){let t=C(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=Sr(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=C(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:C(e.main_stream_name)?e.main_stream_name:void 0});let i=C(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:C(e.sub_stream_name)?e.sub_stream_name:void 0});let a=C(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:C(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function wr(e){if(e.length===0)return{};let t=vr(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 Tr={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},Er={debug:0,info:1,warn:2,error:3};function Dr(e,t){return Er[e]<=Er[t]}var Or=m([`recording`,`events`]),kr=m([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),Ar=m([`retention`,`quota`,`manual`,`operator`,`maintenance`,`orphaned-device`]),jr=a({id:g(),at:o(),domain:Or,op:kr,reason:Ar,deviceId:o().nullable(),nodeId:g(),itemsAffected:o(),bytesReclaimed:o(),detail:g().nullable(),actor:g()}),Mr=a({deviceId:o().optional(),limit:o().int().min(1).max(1e3).optional()}),w=m([`high`,`mid`,`low`]),Nr=[`high`,`mid`,`low`],Pr=l([w,y(`auto`)]),Fr=m([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),Ir=a({width:o().int().positive(),height:o().int().positive()}),Lr=a({camStreamId:g().min(1),deviceId:o().int().nonnegative(),kind:Fr,url:g().optional(),codec:g().optional(),resolution:Ir.optional(),fps:o().positive().optional(),label:g().optional(),deviceFeatures:p(g()).optional(),autoEligible:v().optional(),profileHint:w.optional(),metadata:r(g(),d()).optional()}),Rr=m([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),zr=a({deviceId:o().int().nonnegative(),profile:w,brokerId:g(),sourceCamStreamId:g().nullable(),status:Rr,resolution:Ir.optional(),codec:g().optional(),preBufferSec:o().nonnegative().optional(),errorMessage:g().optional()});function Br(e,t){return`${e}/${t}`}function Vr(e,t){return`${e}/${t}`}function Hr(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=w.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function Ur(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>Nr.indexOf(e.profile)-Nr.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 Wr=a({id:g(),label:g(),protocol:m([`rtsp`,`rtmp`,`annexb`,`http-mjpeg`,`webrtc`,`custom`]),url:g().optional(),resolution:a({width:o(),height:o()}).readonly().optional(),fps:o().optional(),bitrate:o().optional(),codec:g().optional(),profileHint:w.optional()}),Gr=a({type:g(),url:g(),videoCodec:g().optional(),audioCodec:g().optional(),metadata:r(g(),d()).readonly().optional()}),Kr=a({type:m([`video`,`audio`]),data:_(Uint8Array),pts:o(),dts:o(),keyframe:v(),codec:g()}),qr=a({data:_(Uint8Array),width:o(),height:o(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),timestamp:o()}),T=a({shmId:g(),slot:o().int().nonnegative(),seq:o().int().nonnegative(),width:o().int().positive(),height:o().int().positive(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:o(),byteLength:o().int().nonnegative(),nodeId:g(),slotCount:o().int().positive()}),Jr=m([`rgb`,`bgr`,`yuv420`,`gray`]),Yr=a({brokerId:g(),format:Jr,maxFps:o().positive().optional(),tag:g().optional()}),Xr=a({subscriptionId:g(),maxFps:o().nonnegative()}),Zr=m(ge),Qr=a({data:_(Uint8Array),sampleRate:o().int().positive(),channels:o().int().positive(),timestamp:o(),format:Zr.optional()}),$r=a({brokerId:g(),tag:g().optional(),accept:p(Zr).readonly().optional()}),ei=a({subscriptionId:g()}),ti=m([`idle`,`connecting`,`streaming`,`error`,`stopped`]),ni=a({status:ti,inputFps:o(),decodeFps:o(),encodedSubscribers:o(),decodedSubscribers:o(),uptimeMs:o(),bitrateKbps:o(),idrIntervalMs:o(),codec:g().optional(),totalBytes:o(),packetCount:o(),rtspClients:o(),pipeClients:o(),preBufferSec:o(),preBufferMs:o(),preBufferPackets:o(),decoderNodeId:g().nullable(),audio:a({codec:g(),sampleRate:o(),channels:o(),supported:v()}).nullable().optional(),audioMuted:v().optional(),audioMutedDropped:o().optional()}),ri=a({profile:w,brokerId:g(),url:g(),mutedUrl:g(),enabled:v(),codec:g().optional(),resolution:Ir.optional()}),ii=a({id:g(),name:g(),category:g().optional(),description:g().optional(),icon:g().optional()}),ai=[`person`,`vehicle`,`animal`,`package`],oi=[`person`,`vehicle`,`animal`];function si(e){return oi.some(t=>t===e)}var ci=a({mapping:r(g(),m(ai)),preserveOriginal:v()}),li={preMs:5e3,postMs:1e4},ui=o().int().min(0).max(6),di=/^([01]\d|2[0-3]):[0-5]\d$/,fi=m([`off`,`events`,`continuous`,`on-device-decision`]),pi=m(oi),mi=e=>new Set(e).size===e.length,hi=a({motion:v().optional(),audioThresholdDbfs:o().optional(),objectClasses:p(pi).min(1).refine(mi,{message:`objectClasses must not repeat a class`}).optional(),sensorDeviceIds:p(o().int().positive()).min(1).max(16).refine(mi,{message:`sensorDeviceIds must not repeat a device`}).optional()}),gi=m([`continuous`,`events`]),_i=hi,vi=m([`on`,`muted`]),yi=a({days:p(ui),start:g().regex(di),end:g().regex(di),mode:gi,audio:vi.optional(),triggers:_i.optional(),preBufferSec:o().min(0).optional(),postBufferSec:o().min(0).optional()}),bi={postBufferSec:30};function xi(e){let t=[],n=e.bands.map((e,n)=>{if(e.preBufferSec===void 0)return e;t.push(n);let{preBufferSec:r,...i}=e;return i});return t.length===0?{config:e,strippedBands:t}:{config:{...e,bands:n},strippedBands:t}}var Si=bi.postBufferSec*1e3,Ci=a({maxAgeDays:o().min(0).optional(),maxSizeGb:o().min(0).optional()}),wi=a({enabled:v(),mode:fi.optional(),profiles:p(w).optional(),segmentSeconds:o().int().positive().optional(),bands:p(yi).default([]),deviceDecision:v().optional(),retention:Ci.optional()}).strict().refine(e=>e.deviceDecision!==!0||e.bands.length===0,{message:`deviceDecision is a whole-config mode and carries no schedule: it cannot be combined with bands`,path:[`bands`]});function Ti(e){return e.enabled?e.deviceDecision===!0?`on-device-decision`:e.bands.length===0?`off`:e.bands.some(e=>e.mode===`continuous`)?`continuous`:`events`:`off`}var Ei=[`high`,`low`];function Di(e,t){if(t!==void 0&&t.length>0){let n=e.filter(e=>t.includes(e));return n.length>0?n:[...e]}let n=e.filter(e=>Ei.includes(e));return n.length>0?n:[...e]}var Oi=[`motion`,`audioThresholdDbfs`,`objectClasses`,`sensorDeviceIds`];function ki(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ai(e){return ki(e)&&ki(e.triggers)&&e.triggers.deviceSignal===!0}function ji(e){let t=e.triggers;return ki(t)?Oi.some(e=>t[e]!==void 0):!1}function Mi(e){let t=e.triggers;if(!ki(t))return e;let{deviceSignal:n,...r}=t;return{...e,triggers:r}}function Ni(e){let t={value:e,migrated:!1,strippedOnly:!1};if(!ki(e)||!Array.isArray(e.bands)||!e.bands.some(Ai))return t;let n=[];for(let t of e.bands){if(!Ai(t)||!ki(t)){n.push(t);continue}ji(t)&&n.push(Mi(t))}if(n.length>0)return{value:{...e,bands:n},migrated:!1,strippedOnly:!0};let{mode:r,...i}=e;return{value:{...i,bands:[],deviceDecision:!0},migrated:!0,strippedOnly:!1}}var Pi=m([`queued`,`running`,`done`,`failed`,`cancelled`]),Fi=a({jobId:g(),state:Pi,fromLocationId:g(),toLocationId:g(),deviceId:o().nullable(),entities:p(g()),filesMoved:o().int(),bytesMoved:o().int(),filesTotal:o().int().nullable(),rowsReconciled:o().int().nonnegative().optional(),rowsForgotten:o().int().nonnegative().optional(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Ii=m([`recordings`,`recordingsLow`]),Li=a({fromLocationId:g(),toLocationId:g(),entities:p(m([`segments`])).optional(),footageClass:Ii.optional(),deviceId:o().int().optional(),profiles:p(g()).optional(),throttleMbps:o().min(1).max(1e3).optional(),sinceMs:o().int().optional()}),E=a({leaseId:g().min(1)}),Ri=Li.extend({leaseId:g().min(1)}),zi=m([`move`,`seal`,`gallery`]),Bi=a({toLocationId:g(),fromLocationId:g().optional(),throttleMbps:o().min(1).max(1e3).optional(),mode:zi.optional()}),Vi=a({present:v(),rows:o().int().nonnegative().nullable()}),Hi=a({media:Vi,retrainFrames:Vi,anyPresent:v(),total:o().int().nonnegative().nullable()}).nullable(),Ui=Bi.extend({leaseId:g().min(1)}),Wi=m([`recordings`,`recordingsLow`,`eventMedia`,`backups`,`galleryMedia`]),Gi=a({recordings:g().min(1).optional(),recordingsLow:g().min(1).optional(),eventMedia:g().min(1).optional(),backups:g().min(1).optional(),galleryMedia:g().min(1).optional()}).refine(e=>Object.keys(e).length>0,{message:`select at least one storage class`}),Ki=a({recordings:g().min(1).optional(),recordingsLow:g().min(1).optional(),eventMedia:g().min(1).optional(),backups:g().min(1).optional(),galleryMedia:g().min(1).optional()}).optional(),qi=m([`blocking`,`nonBlocking`]),Ji=a({destinations:Gi,sources:Ki,throttleMbps:o().min(1).max(1e3).optional(),mode:qi.optional()}),Yi=m([`planning`,`sealing`,`pausing`,`moving`,`draining`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),Xi=m([`pipeline`,`recorder`,`analytics`]),Zi=a({filesMoved:o().int().nonnegative(),filesTotal:o().int().nonnegative().nullable(),bytesMoved:o().int().nonnegative(),rowsReconciled:o().int().nonnegative().optional(),startedAt:o(),observedAt:o()}),Qi=a({storageClass:Wi,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional(),moverJobId:g().nullable(),state:Pi.nullable(),error:g().nullable(),progress:Zi.nullable()}),$i=a({jobId:g(),phase:Yi,mode:qi,destinations:Gi,sources:Ki,throttleMbps:o(),moves:p(Qi),pauseLeaseId:g().nullable(),pausedParticipants:p(Xi),repointed:v(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),ea=m([`sharesDeviceWithSource`,`deviceIdentityUnknown`,`unstampedEventMediaRows`,`blockingOnly`,`noMover`]),ta=a({code:ea,storageClass:Wi,message:g()}),na=a({destinations:Gi,sources:Ki,mode:qi,moves:p(a({storageClass:Wi,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional()})),findings:p(ta)}),ra=m([`footage`,`media`]),ia=a({lane:ra,job:Fi,migrationJobId:g().nullable(),observedAt:o()}),aa=a({storageClass:Wi,fromLocationId:g(),toLocationId:g(),items:o().int().nonnegative().nullable(),bytes:o().int().nonnegative().nullable()}),oa=a({classes:p(Wi).min(1),throttleMbps:o().min(1).max(1e3).optional()}),sa=a({fromLocationId:g().min(1),footageClass:Ii.optional()}),ca=a({segments:o().int().nonnegative(),bytes:o().int().nonnegative()}).nullable(),la=a({locationId:g().min(1),apply:v().optional(),deviceId:o().int().positive().optional(),profiles:p(g().min(1)).optional()}),ua=m([`location-unknown`,`source-writable`,`no-ledger`,`archive-unreadable`,`anchor-absent`,`anchor-unreadable`,`anchor-moved`]),da=m([`live-tail`,`listing-error`,`path-mismatch`,`durable-refused`]),fa=a({"live-tail":o().int().nonnegative(),"listing-error":o().int().nonnegative(),"path-mismatch":o().int().nonnegative(),"durable-refused":o().int().nonnegative()}),pa=a({deviceId:o().int(),hoursWalked:o().int().nonnegative(),hoursMissing:o().int().nonnegative(),ghostSegments:o().int().nonnegative(),ghostBytes:o().int().nonnegative(),forgottenSegments:o().int().nonnegative(),orphanFiles:o().int().nonnegative()}),ma=a({locationId:g(),applied:v(),refused:ua.nullable(),archiveSegments:o().int().nonnegative().nullable(),archiveBytes:o().int().nonnegative().nullable(),hoursClaimed:o().int().nonnegative(),hoursWalked:o().int().nonnegative(),hoursMissing:o().int().nonnegative(),listings:o().int().nonnegative(),segmentsClaimed:o().int().nonnegative(),ghostSegments:o().int().nonnegative(),ghostBytes:o().int().nonnegative(),ghostHoursWhole:o().int().nonnegative(),forgottenSegments:o().int().nonnegative(),forgottenBytes:o().int().nonnegative(),orphanFiles:o().int().nonnegative(),orphanSample:p(g()).readonly(),hoursSkipped:o().int().nonnegative(),skippedByReason:fa,bounded:v(),byDevice:p(pa).readonly()}),ha=a({rows:o().int().nonnegative()}).nullable(),ga=a({toLocationId:g().min(1),fromLocationId:g().optional(),mode:zi.optional()}),_a=m([`orphans`,`debug-media`,`ghost-ledger`,`done`,`failed`,`cancelled`]),va=a({includeDebugMedia:v().optional()}),ya=a({jobId:g(),phase:_a,includeDebugMedia:v(),orphansReclaimed:o().int().nonnegative(),orphanBytesReclaimed:o().int().nonnegative(),debugMediaReclaimed:o().int().nonnegative(),debugMediaBytesReclaimed:o().int().nonnegative(),ghostsForgotten:o().int().nonnegative(),ghostBytesForgotten:o().int().nonnegative(),detail:g().nullable(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),ba=a({jobId:g().optional()}),xa=[`face`,`plate`],Sa=[`face`,`plate`,`clip`,`custom`],Ca=[`active`,`readonly`,`drain`,`disabled`],wa=m(Ca),Ta=m([`normal`,`never`,`drain`]),Ea=`readOnly`;function Da(e){return e===`active`}function Oa(e){return e!==`disabled`}function ka(e){switch(e){case`active`:return`normal`;case`drain`:return`drain`;case`readonly`:case`disabled`:return`never`}}function Aa(e){return e.mode===void 0&&(e.config.readOnly===!0||e.enabled===!1)?`readonly`:null}function ja(e){return(Ma(e.mode)?e.mode:void 0)??Aa(e)??`active`}function Ma(e){return Ca.some(t=>t===e)}function Na(e){return Da(ja(e))}function Pa(e){return Oa(ja(e))}function Fa(e){return ka(ja(e))}function Ia(e){if(!(`readOnly`in e))return e;let t={...e};return delete t[Ea],t}function La(e,t){return{...e,mode:t,enabled:Da(t),config:Ia(e.config)}}var Ra=g().regex(/^[a-z][a-zA-Z0-9-]*$/),D=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),type:g(),displayName:g().min(1),providerId:g().min(1),config:r(g(),d()),nodeId:g().optional(),isSystem:v().default(!1),enabled:v().optional(),mode:wa.optional(),capacity:a({totalBytes:o(),availableBytes:o()}).nullable().optional(),owned:a({bytes:o().int().nonnegative(),measuredAtMs:o().int().nonnegative()}).optional(),createdAt:o(),updatedAt:o()}),za=a({isDefault:v().optional()});function Ba(e){return Na({...e,config:e.config??{}})}var Va=1024**3;function Ha(e){return Math.floor(e*Va)}var Ua=a({locationId:g(),startedAtMs:o(),startBytes:o(),bytesRemaining:o(),drained:v(),estimatedEmptyAtMs:o().nullable()}),O=l([Ra,g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),Wa=m([`local-path`,`cap-mediated`]),Ga=`local-path`,Ka=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*$/,{message:`id must start with a lowercase letter and contain only letters, digits, or hyphens`}),displayName:g().min(1,{message:`displayName must not be empty`}),description:g().optional(),cardinality:m([`single`,`multi`]),access:Wa.optional(),defaultsTo:g().optional(),defaultRoot:m([`data`,`media`,`backup`]).optional()}),qa=a({inputFps:o(),outputFps:o(),avgDecodeTimeMs:o(),droppedFrames:o(),lagMs:o().optional(),effectiveFps:o().optional(),adaptiveFps:o().optional()}),Ja=a({codec:g(),maxFps:o().default(0),outputFormat:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]).default(`jpeg`),scale:o().default(1),width:o().optional(),height:o().optional(),deviceId:o().int().nonnegative().optional(),tag:g().optional(),frameSink:m([`callback`,`shm`]).default(`callback`),debug:v().optional()}),Ya={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},Xa={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},Za=[{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:Ya},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ya},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ya},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ya},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ya},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ya},{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:Xa},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:Xa},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:Xa},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:Xa},{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 Qa(e){return Za.find(t=>t.id===e)}var $a=m([`info`,`warn`,`error`]),eo=a({name:g().min(3).regex(/^[a-z0-9-]+(\.[a-z0-9-]+)+$/,`a channel name is dotted lower-kebab, e.g. area.thing`),description:g().min(1),defaultLevel:$a,perDevice:v()}),to=a({channel:g().min(1),armedUntilMs:o(),deviceIds:p(o().int()).readonly().nullable()}),no=class{descriptor;on=!1;devices=null;level;closesAtMs=0;constructor(e){this.descriptor=e,this.level=e.defaultLevel}get armedUntilMs(){return this.on?this.closesAtMs:0}wants(e){return this.on?this.devices===null||this.devices.has(e):!1}log(e,t,n){if(!this.on)return;let r={...n.tags,logChannel:this.descriptor.name},i={...n,tags:r};this.level===`error`?e.error(t,i):this.level===`warn`?e.warn(t,i):e.info(t,i)}arm(e){let t=e.deviceIds;this.devices=t===null||t.length===0?null:new Set(t),this.closesAtMs=e.armedUntilMs,this.on=!0}disarm(){this.on=!1,this.devices=null,this.closesAtMs=0}},ro=class{gates=new Map;declare(e){let t=eo.parse(e);if(this.gates.get(t.name)!==void 0)throw Error(`log channel "${t.name}" is already declared in this process — two declarations of one name is a programming error, not a merge`);let n=new no(t);return this.gates.set(t.name,n),n}list(){return[...this.gates.values()].map(e=>e.descriptor).sort((e,t)=>e.name.localeCompare(t.name))}gate(e){return this.gates.get(e)}apply(e,t){let n=new Map,r=[];for(let i of e)if(!(i.armedUntilMs<=t)){if(!this.gates.has(i.channel)){r.push(i.channel);continue}n.set(i.channel,i)}for(let[e,t]of this.gates){let r=n.get(e);r===void 0?t.disarm():t.arm(r)}return r}tick(e){let t=[];for(let[n,r]of this.gates)r.on&&r.armedUntilMs<=e&&(r.disarm(),t.push(n));return t}armed(){let e=[];for(let[t,n]of this.gates)n.on&&e.push({channel:t,armedUntilMs:n.armedUntilMs,deviceIds:null});return e}},io=null;function ao(){return io??=new ro,io}function oo(e){return ao().declare(e)}function so(){io=null}var co=5e3;function lo(e,t={}){let n=ao(),r=t.now??Date.now,i=t.tickMs??5e3,a=setInterval(()=>{let t=n.tick(r());for(let n of t)e.info(`log channel window closed`,{tags:{logChannel:n},meta:{channel:n}})},i);return a.unref?.(),{list:()=>n.list(),apply:t=>{let i=n.apply(t.windows,r()),a=n.armed();return e.info(`log channels applied`,{meta:{armed:a.map(e=>e.channel),unknown:i,declared:n.list().length}}),{armed:a.length,unknown:i}},stop:()=>{clearInterval(a)}}}var uo=1024,fo=`other`;function po(e,t,n){return n===void 0?`${e}${t}`:`${e}${t}${n}`}var mo=class{maxKeys;maxReasons;counters=new Map;refused=0;constructor(e=uo,t=16){this.maxKeys=e,this.maxReasons=t}get keysRefused(){return this.refused}get size(){return this.counters.size}note(e,t){if(!Number.isInteger(e.deviceId)||e.deviceId<=0)return;let n=po(e.deviceId,e.family,e.variant),r=this.counters.get(n);if(r===void 0){if(this.counters.size>=this.maxKeys){this.refused+=1;return}r={deviceId:e.deviceId,family:e.family,variant:e.variant,sinceMs:t,attempts:0,succeeded:0,reasons:new Map},this.counters.set(n,r)}if(r.attempts+=1,e.reason===void 0){r.succeeded+=1;return}let i=r.reasons.has(e.reason)||r.reasons.size<this.maxReasons?e.reason:fo;r.reasons.set(i,(r.reasons.get(i)??0)+1)}snapshot(e){let t=[];for(let n of this.counters.values())t.push({deviceId:n.deviceId,family:n.family,...n.variant===void 0?{}:{variant:n.variant},sinceMs:n.sinceMs,atMs:e,attempts:n.attempts,succeeded:n.succeeded,reasons:[...n.reasons.entries()].map(([e,t])=>({reason:e,count:t})).toSorted((e,t)=>t.count-e.count)});return t}clear(){this.counters.clear()}};function ho(e){return e.attempts<=0?null:(e.attempts-e.succeeded)/e.attempts}var go=`__unattributed__`,_o=`__root__`;function vo(e){return e.addonId===null?e.classification===`root`?{key:_o,kind:`root`}:{key:go,kind:`unattributed`}:{key:e.addonId,kind:`addon`}}function yo(e){return Math.round(e*10)/10}function bo(e,t){let n=new Map;for(let t of e){let{key:e,kind:r}=vo(t),i=n.get(e)??{kind:r,main:0,gc:0,lifetime:0,memory:0,count:0,splitKnown:!0},a=t.cpuMainPercent!==null&&t.cpuGcPercent!==null;n.set(e,{kind:i.kind,main:i.main+(t.cpuMainPercent??0),gc:i.gc+(t.cpuGcPercent??0),lifetime:i.lifetime+t.cpuPercent,memory:i.memory+t.memoryRssBytes,count:i.count+1,splitKnown:i.splitKnown&&a})}return[...n.entries()].map(([e,n])=>{let r=n.splitKnown?yo(n.main):null,i=n.splitKnown?yo(n.gc):null,a=yo(n.lifetime);return{key:e,kind:n.kind,point:{atMs:t,samples:1,cpuMainPercent:r,cpuMainPercentMin:r,cpuGcPercent:i,cpuGcPercentMin:i,cpuLifetimePercent:a,cpuLifetimePercentMin:a,memoryRssBytes:n.memory,memoryRssBytesMin:n.memory,processCount:n.count,processCountMin:n.count}}})}function xo(e,t){return e===null||t===null?null:e<t?e:t}function So(e,t){return e===null||t===null?null:e>t?e:t}function Co(e,t,n){return{atMs:n,samples:e.samples+t.samples,cpuMainPercent:So(e.cpuMainPercent,t.cpuMainPercent),cpuMainPercentMin:xo(e.cpuMainPercentMin,t.cpuMainPercentMin),cpuGcPercent:So(e.cpuGcPercent,t.cpuGcPercent),cpuGcPercentMin:xo(e.cpuGcPercentMin,t.cpuGcPercentMin),cpuLifetimePercent:Math.max(e.cpuLifetimePercent,t.cpuLifetimePercent),cpuLifetimePercentMin:Math.min(e.cpuLifetimePercentMin,t.cpuLifetimePercentMin),memoryRssBytes:Math.max(e.memoryRssBytes,t.memoryRssBytes),memoryRssBytesMin:Math.min(e.memoryRssBytesMin,t.memoryRssBytesMin),processCount:Math.max(e.processCount,t.processCount),processCountMin:Math.min(e.processCountMin,t.processCountMin)}}function wo(e,t,n){if(n<=0||t<=0||e<=0)return Math.max(t,1);let r=e/n;return r<=t?t:Math.ceil(r/t)*t}function To(e,t,n){if(t<=0||e.length===0)return e;let r=new Map;for(let i of e){let e=n+Math.floor((i.atMs-n)/t)*t,a=r.get(e);r.set(e,a===void 0?{...i,atMs:e}:Co(a,i,e))}return[...r.values()].toSorted((e,t)=>e.atMs-t.atMs)}var Eo=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${Oo(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function Do(e,t){return`${e}|${Oo(t)}`}function Oo(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function ko(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function Ao(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 jo=class{bus;sourceNodeId;logger;now;generation;verboseDeviceScopeLogs;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??Mo(),this.verboseDeviceScopeLogs=e.verboseDeviceScopeLogs??!1,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(Do(e,t))??null}getSnapshotForTransport(){return Array.from(this.snapshot.values())}hydrate(e){let t=this.now(),n=0;for(let r of e){let e=Do(r.capName,r.scope),i=this.snapshot.get(e)??null,a,o;if(i!==null){if(this.isLocallyAuthoritative(i))continue;let e=i.generation===r.generation;if(e&&ko(r.state)<=ko(i.state))continue;a=!e&&r.state===`ready`?i.epoch+1:i.epoch,o=Math.max(0,t-i.lastChange)}else a=1,o=0;let s={capName:r.capName,scope:r.scope,state:r.state,generation:r.generation,epoch:a,lastChange:t,sourceNodeId:r.sourceNodeId};this.snapshot.set(e,s),n++,this.logPerRecord(r.scope,`readiness: ${r.capName} (${Oo(r.scope)}) → ${r.state} (hydrated${i===null?``:` update`}, gen=${r.generation.slice(0,6)})`);let c={capName:r.capName,scope:r.scope,state:r.state,epoch:a,generation:r.generation,sourceNodeId:`hydrated`,ts:t,durationInPrevState:o};for(let e of this.subscriptions)if(e.capName===r.capName&&Ao(e.scope,r.scope))try{e.handler(c)}catch(e){this.logger?.warn(`readiness hydrate handler threw for ${r.capName}: ${e.message??String(e)}`)}}return n}logPerRecord(e,t){if(this.logger){if(e.type===`device`){if(!this.verboseDeviceScopeLogs)return;this.logger.debug(t,{tags:{deviceId:e.deviceId}});return}this.logger.debug(t)}}isLocallyAuthoritative(e){return e.scope.type===`node`?e.scope.nodeId===this.sourceNodeId:e.sourceNodeId===this.sourceNodeId}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 Eo(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${Oo(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(Je(`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=Do(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.logPerRecord(e.scope,`readiness: ${e.capName} (${Oo(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&&Ao(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.logPerRecord(r.scope,`readiness: ${r.capName} (${Oo(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&Ao(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 Mo(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function No(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function Po(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=Fo(e,s);if(t)return a(t)}}return a(o[0])}function Fo(e,t){let n=t.width*t.height;return[...e.flatMap(e=>e.resolution===void 0?[]:[{entry:e,pixels:e.resolution.width*e.resolution.height}])].sort((e,t)=>ht(e.pixels,t.pixels,n))[0]?.entry}var Io=[`motion`,`objects`,`discarded`,`stationary`],Lo=[`motion`,`objects`,`stationary`],Ro={borderWidth:2,dashed:!0,dashPattern:[6,4],opacity:1,borderRadius:2};function zo(e){return!Number.isFinite(e)||e<=0?`0 s`:e<6e4?`${String(Math.round(e/1e3))} s`:e<36e5?`${String(Math.round(e/6e4))} min`:`${String(Math.round(e/36e5))} h`}var Bo=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],Vo={yolo26:`YOLO26`,yolov9:`YOLOv9`};function Ho(e){return Vo[e]??e.toUpperCase()}var Uo=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function Wo(e,t){let n=Ho(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(Uo,``).trim();return r.length>0?r:t}function Go(e,t){let n=[];return t===`fast`&&n.push(`Fast`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function Ko(e){return Bo.filter(t=>e.formats[t]!==void 0)}function qo(e){let t=Bo.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var Jo=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],Yo=[`fp32`,`int8`];function Xo(e){let t=new Map;for(let n of e){if(n.legacy===!0||n.group===void 0)continue;let{family:e,tier:r}=n.group,i=t.get(e)??new Map,a=i.get(r)??[];a.push(n),i.set(r,a),t.set(e,i)}let n=[];for(let[e,r]of t){let t=[];for(let[n,i]of r){let r=i.map(e=>{let t=e.group?.precision??`fp32`,n=e.group?.optimization??`standard`;return{modelId:e.id,precision:t,optimization:n,resolution:e.group?.resolution,label:Go(t,n),formats:Ko(e),sizeMB:qo(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?Yo.indexOf(e.precision)-Yo.indexOf(t.precision):e.optimization===`fast`?1:-1:(t.resolution??1/0)-(e.resolution??1/0)),a=r.find(e=>e.precision===`fp32`&&e.optimization===`standard`)??r[0];if(a===void 0)continue;let o=i.find(e=>e.id===a.modelId);t.push({tier:n,label:o?Wo(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=Jo.indexOf(e.tier),r=Jo.indexOf(t.tier);return n!==-1&&r!==-1?n-r:n===-1?r===-1?e.tier.localeCompare(t.tier):1:-1}),n.push({family:e,label:Ho(e),tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function Zo(e,t){let n=t.precision??`fp32`,r=t.optimization??`standard`,i=e.filter(e=>e.group!==void 0&&e.group.family===t.family&&e.group.tier===t.tier&&(e.group.precision??`fp32`)===n&&(e.group.optimization??`standard`)===r);return t.resolution===void 0?i.toSorted((e,t)=>(t.group?.resolution??1/0)-(e.group?.resolution??1/0))[0]?.id??null:i.find(e=>e.group?.resolution===t.resolution)?.id??null}function Qo(e,t){let n=e.find(e=>e.id===t);return n?.group===void 0?null:{family:n.group.family,tier:n.group.tier,precision:n.group.precision??`fp32`,optimization:n.group.optimization??`standard`,resolution:n.group.resolution}}var $o=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],es=a({url:g(),sizeMB:o(),isDirectory:v().optional(),files:p(g()).readonly().optional(),runtimes:p(m([`node`,`python`])).readonly().optional()}),ts=a({url:g(),filename:g(),sizeMB:o()}),ns=a({onnx:es.optional(),coreml:es.optional(),openvino:es.optional(),tflite:es.optional(),pt:es.optional(),gguf:es.optional()}),rs=a({family:g(),tier:g(),precision:m([`fp32`,`int8`]).optional(),optimization:m([`standard`,`fast`]).optional(),resolution:o().int().positive().optional()}),is=[`camstack`,`frigate`,`scrypted`,`custom`],as=m(is);function os(e){if(e.provider!==void 0)return e.provider;let t=`${e.id} ${e.description??``}`;return/scrypted/i.test(t)?`scrypted`:/frigate/i.test(t)?`frigate`:`custom`}var ss=a({id:g(),name:g(),description:g(),formats:ns,inputSize:a({width:o(),height:o()}),inputChannels:o().int().positive().optional(),labels:p(ii).readonly(),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`,`scrfd`]).optional(),outputProbabilities:v().optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),postprocessor:x().optional(),faceAlignment:v().optional(),extraFiles:p(ts).readonly().optional(),legacy:v().optional(),metrics:a({map50:o().optional(),p95LatencyMs:r(g(),o()).optional()}).optional(),license:g().optional(),group:rs.optional(),provider:as.optional(),classMap:ci.optional()}),cs=b(`format`,[a({format:y(`openvino`),precisions:p(m([`fp16`,`int8`])).min(1).readonly()}),a({format:y(`coreml`)})]),ls=a({id:g().regex(/^[a-zA-Z0-9._-]+$/),name:g(),labels:p(ii).readonly(),inputSize:a({width:o(),height:o()}),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`,`scrfd`]).optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),outputFormat:m([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:v().optional(),classMap:ci.optional()}),us=a({format:m($o),precision:m([`fp16`,`int8`]).optional(),sizeMB:o(),validated:v(),files:p(g()).readonly()}),ds=a({entry:ss,artifacts:p(us).readonly()});function fs(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function ps(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function ms(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function hs(e){let t=e.kind;if(t===void 0)return{kind:`session`};if(t!==`sso-bridge`)return{kind:`not-a-credential`,reason:`bridge token kind=${String(t)}`};let n=e.provider;return n===`oauth-access`?{kind:`integration`,provider:`oauth-access`}:{kind:`not-a-credential`,reason:`bridge token provider=${String(n)}`}}function gs(e){let{principal:t}=e;if(t.kind===`not-a-credential`)return{allowed:!1,reason:t.reason};if(t.kind===`session`)return{allowed:!0};let n=fs(e.method);return ms(e.scopes,e.addonId,n)?{allowed:!0}:{allowed:!1,reason:`integration token holds no addon:${e.addonId}[${n}] grant`}}var k=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},A=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}};function j(e,t,n){if(typeof e!=`number`||!Number.isFinite(e))throw new A(`${t}: argument ${n+1} must be a finite number`);return e}function _s(e,t,n){if(typeof e!=`string`)throw new A(`${t}: argument ${n+1} must be a string`);return e}function M(e,t){if(!Number.isFinite(e))throw new A(`${t}: produced a non-finite result`);return e}function vs(e,t){return e.map((e,n)=>j(e,t,n))}var ys=1/0,bs={min:{minArgs:1,maxArgs:ys,apply:e=>M(Math.min(...vs(e,`min`)),`min`)},max:{minArgs:1,maxArgs:ys,apply:e=>M(Math.max(...vs(e,`max`)),`max`)},abs:{minArgs:1,maxArgs:1,apply:e=>M(Math.abs(j(e[0],`abs`,0)),`abs`)},floor:{minArgs:1,maxArgs:1,apply:e=>M(Math.floor(j(e[0],`floor`,0)),`floor`)},ceil:{minArgs:1,maxArgs:1,apply:e=>M(Math.ceil(j(e[0],`ceil`,0)),`ceil`)},sqrt:{minArgs:1,maxArgs:1,apply:e=>M(Math.sqrt(j(e[0],`sqrt`,0)),`sqrt`)},round:{minArgs:1,maxArgs:2,apply:e=>{let t=j(e[0],`round`,0),n=e.length>1?Math.trunc(j(e[1],`round`,1)):0;if(n<0||n>100)throw new A(`round: digits must be between 0 and 100`);let r=10**n;return M(Math.round(t*r)/r,`round`)}},pow:{minArgs:2,maxArgs:2,apply:e=>M(j(e[0],`pow`,0)**j(e[1],`pow`,1),`pow`)},clamp:{minArgs:3,maxArgs:3,apply:e=>{let t=j(e[0],`clamp`,0),n=j(e[1],`clamp`,1),r=j(e[2],`clamp`,2);if(n>r)throw new A(`clamp: lower bound is greater than upper bound`);return M(Math.min(r,Math.max(n,t)),`clamp`)}},avg:{minArgs:1,maxArgs:ys,apply:e=>{let t=vs(e,`avg`);return M(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:ys,apply:e=>M(vs(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:ys,apply:e=>{for(let t of e)if(t!==null)return t;return null}},age:{minArgs:2,maxArgs:2,apply:e=>M(j(e[0],`age`,0)-j(e[1],`age`,1),`age`)},convert:{minArgs:3,maxArgs:3,apply:(e,t)=>{let n=j(e[0],`convert`,0),r=_s(e[1],`convert`,1).trim(),i=_s(e[2],`convert`,2).trim();if(t.convert){let e=t.convert(n,r,i);if(e===null)throw new A(`convert: cannot convert '${r}' to '${i}'`);return M(e,`convert`)}if(r===i)return n;throw new A(`convert: unit conversion table not installed`)}}},xs=Object.freeze(Object.assign(Object.create(null),bs)),Ss=new Set(Object.keys(bs)),Cs=2048,ws=4096,Ts=/^[A-Za-z_][A-Za-z0-9_]*$/,Es=new Set([`now`,`true`,`false`,`null`]),Ds=new Set([`true`,`false`,`null`]);function Os(e){return e>=`0`&&e<=`9`}function ks(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function As(e){return ks(e)||Os(e)}function js(e){return e===` `||e===` `||e===`
3
3
  `||e===`\r`||e===`\f`||e===`\v`}function Ms(e){if(e.length>2048)throw new k(`expression too long (${e.length} > ${Cs} chars)`,0);let t=[],n=0,r=e.length;for(;n<r;){let i=e[n];if(js(i)){n+=1;continue}if(Os(i)){let i=n;for(;n<r&&Os(e[n]);)n+=1;if(n<r&&e[n]===`.`){if(n+1>=r||!Os(e[n+1]))throw new k(`malformed number: decimal point needs a digit`,n);for(n+=1;n<r&&Os(e[n]);)n+=1}let a=e.slice(i,n),o=Number(a);if(!Number.isFinite(o))throw new k(`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 k(`invalid string escape: '\\${t}'`,n)}if(t===a){c=!0,n+=1;break}s+=t,n+=1}if(!c)throw new k(`unterminated string literal`,o);t.push({type:`string`,value:s,pos:o});continue}if(ks(i)){let i=n;for(;n<r&&As(e[n]);)n+=1;let a=e.slice(i,n);Ds.has(a)?t.push({type:`keyword`,keyword:Ns(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(Ps(i)){t.push({type:`punct`,punct:i,pos:n}),n+=1;continue}throw new k(`unexpected character '${i}'`,n)}return t.push({type:`eof`,pos:r}),t}function Ns(e){return e===`true`?`true`:e===`false`?`false`:`null`}function Ps(e){return e===`(`||e===`)`||e===`,`||e===`?`||e===`:`||e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`!`||e===`<`||e===`>`}var Fs={"||":1,"&&":2,"==":3,"!=":3,"<":4,"<=":4,">":4,">=":4,"+":5,"-":5,"*":6,"/":6,"%":6};function Is(e){return e===`&&`||e===`||`}function Ls(e){return e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`==`||e===`!=`||e===`<`||e===`<=`||e===`>`||e===`>=`}var Rs=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 k(`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 k(`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 k(`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=Fs[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(),Is(i))t={kind:`logical`,op:i,left:t,right:a};else if(Ls(i))t={kind:`binary`,op:i,left:t,right:a};else throw new k(`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 k(`unexpected token '${e.punct}'`,e.pos);case`eof`:throw new k(`unexpected end of expression`,e.pos)}}parseCall(e,t){if(!Ss.has(e))throw new k(`unknown function '${e}'`,t);this.expectPunct(`(`);let n=[];if(!this.matchPunct(`)`))for(;;){if(n.push(this.parseTernary()),n.length>16)throw new k(`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 zs(e){return new Rs(Ms(e)).parse()}var Bs=new Map;function Vs(e){let t=Bs.get(e);if(t!==void 0)return Bs.delete(e),Bs.set(e,t),t;let n;try{n={ok:!0,parsed:zs(e)}}catch(e){n={ok:!1,error:e instanceof k?e.message:String(e)}}if(Bs.set(e,n),Bs.size>256){let e=Bs.keys().next().value;e!==void 0&&Bs.delete(e)}return n}function Hs(e){let t=Vs(e);if(t.ok)return t.parsed;throw new k(t.error)}function Us(e){return Vs(e)}var Ws=Object.freeze({});function Gs(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 Ks(e){return typeof e==`number`&&Number.isFinite(e)}function qs(e){return!!e}function Js(e,t){if(!Number.isFinite(e))throw new A(`${t} produced a non-finite result`);return e}function Ys(e){if(e.steps+=1,e.steps>e.maxSteps)throw new A(`expression evaluation step budget exceeded`)}function N(e,t){switch(Ys(t),e.kind){case`literal`:return e.value;case`identifier`:if(!(e.name in t.scope))throw new A(`unknown identifier: ${e.name}`);return t.scope[e.name];case`unary`:return Xs(e.op,N(e.operand,t));case`binary`:return Zs(e.op,N(e.left,t),N(e.right,t));case`logical`:{let n=N(e.left,t);return e.op===`&&`?qs(n)?N(e.right,t):n:qs(n)?n:N(e.right,t)}case`conditional`:return qs(N(e.test,t))?N(e.consequent,t):N(e.alternate,t);case`call`:return Qs(e.callee,e.args.map(e=>N(e,t)),t.hooks)}}function Xs(e,t){if(e===`!`)return!qs(t);if(!Ks(t))throw new A(`unary "-" requires a finite number`);return Js(-t,`unary "-"`)}function Zs(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(Ks(t)&&Ks(n))return Js(t+n,`"+"`);throw new A(`"+" requires two numbers or two strings`);case`-`:case`*`:case`/`:case`%`:if(!Ks(t)||!Ks(n))throw new A(`"${e}" requires two finite numbers`);return Js(e===`-`?t-n:e===`*`?t*n:e===`/`?t/n:t%n,`"${e}"`);case`<`:case`<=`:case`>`:case`>=`:if(Ks(t)&&Ks(n)||typeof t==`string`&&typeof n==`string`)return e===`<`?t<n:e===`<=`?t<=n:e===`>`?t>n:t>=n;throw new A(`"${e}" requires two numbers or two strings`)}}function Qs(e,t,n){if(!Object.prototype.hasOwnProperty.call(xs,e))throw new A(`unknown function: ${e}`);let r=xs[e];if(t.length<r.minArgs||t.length>r.maxArgs)throw new A(`${e}: wrong number of arguments (${t.length})`);return r.apply(t,n)}function $s(e,t,n){return N(e,{scope:t,hooks:n?.hooks??Ws,maxSteps:n?.maxSteps??4096,steps:0})}function ec(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 tc(e){let t=Object.keys(e.bindings);if(t.length>32)return`too many bindings (${t.length} > 32)`;for(let e of t){if(!Ts.test(e))return`invalid binding name '${e}'`;if(Es.has(e))return`binding name '${e}' is reserved`;if(Ss.has(e))return`binding name '${e}' shadows a builtin function`}let n=Us(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 nc(e,t,n,r){let i=Us(e);if(!i.ok)return{ok:!1,error:i.error};let a=Gs({...t,now:n});try{return{ok:!0,value:$s(i.parsed.ast,a,r)}}catch(e){return{ok:!1,error:e instanceof A?e.message:String(e)}}}var rc=a({kind:y(`field`).optional(),sourceKey:g(),cap:g(),fieldPath:g()}),ic=a({kind:y(`literal`),value:l([g(),o(),v(),le()])}),ac=a({kind:y(`global`),sourceStableId:g(),cap:g(),fieldPath:g()}),oc=l([rc,ic,ac]),sc=a({expr:g().min(1).max(Cs),bindings:r(g().regex(Ts),oc)}).superRefine((e,t)=>{let n=tc(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),cc=m([`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`contains`,`in`]),lc=a({kind:y(`condition`),deviceId:o().int().nonnegative(),cap:g().min(1),fieldPath:g().min(1),operator:cc,value:l([g(),o(),v(),p(l([g(),o()]))])}),uc=a({kind:y(`expression`),expr:g().min(1).max(Cs),bindings:r(g().regex(Ts),oc)}).superRefine((e,t)=>{let n=tc(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),dc=i(()=>b(`kind`,[a({kind:y(`all`),children:p(dc)}),a({kind:y(`any`),children:p(dc)}),a({kind:y(`not`),child:dc}),lc,uc])),fc=b(`kind`,[a({kind:y(`device-state`),deviceId:o().int().nonnegative(),cap:g().min(1),fieldPath:g().min(1),becomes:l([g(),o(),v()]).optional(),edge:v().optional(),forMs:o().int().min(0).max(864e5).optional(),debounceMs:o().int().min(0).max(6e5).optional()}),a({kind:y(`device-event`),category:g().min(1),deviceId:o().int().nonnegative().optional()}),a({kind:y(`schedule`),cron:g().min(1).max(120)}),a({kind:y(`manual`)})]),pc=b(`kind`,[a({kind:y(`wait`),seconds:o().min(0).max(300)}),a({kind:y(`cap`),deviceId:l([o().int(),a({$var:g().min(1)})]),cap:g().min(1),method:g().min(1),args:r(g(),d()).optional()}),a({kind:y(`code`),code:g().min(1).max(2e4)})]),mc=a({triggers:p(fc),conditions:dc.optional(),actions:p(pc)});function hc(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return 1+hc(e.child);let t=e.children;if(t.length===0)return 1;let n=0;for(let e of t){let t=hc(e);t>n&&(n=t)}return 1+n}function gc(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return gc(e.child);let t=0;for(let n of e.children)t+=gc(n);return t}function _c(e){return e.kind===`condition`||e.kind===`expression`?!1:e.kind===`not`?_c(e.child):e.children.length===0?!0:e.children.some(_c)}function vc(e){if(e.triggers.length===0)return`an automation needs at least one trigger — without one nothing can start a run`;if(e.actions.length===0)return`an automation needs at least one action — a rule that does nothing is not a rule`;let t=e.conditions;if(t!==void 0){if(_c(t))return`a condition group is empty — group existing rows instead of leaving a container to fill`;let e=hc(t);if(e>3)return`conditions nest ${e} levels deep — the limit is 3. "not (any of …)" is the same as "all of (not …)", which is one level shallower`;let n=gc(t);if(n>32)return`conditions use ${n} leaves — the limit is 32`}return null}var yc=15e3;function P(e){return JSON.stringify(e)}function bc(e,t){switch(e.kind){case`all`:return`allOf([\n${e.children.map(e=>`${t} () => ${bc(e,`${t} `)}`).join(`,
4
4
  `)}\n${t}])`;case`any`:return`anyOf([\n${e.children.map(e=>`${t} () => ${bc(e,`${t} `)}`).join(`,
5
5
  `)}\n${t}])`;case`not`:return`notOf(() => ${bc(e.child,t)})`;case`condition`:return`leaf(${P(e.deviceId)}, ${P(e.cap)}, ${P(e.fieldPath)}, ${P(e.operator)}, ${P(e.value)})`;case`expression`:return`exprLeaf(${P(e.expr)}, ${P(e.bindings)})`}}function xc(e,t){switch(e.kind){case`schedule`:return` // trigger ${t}: schedule — armed to the next minute boundary and
@@ -1 +1 @@
1
- import{a as e}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{at as t}from"./player-overlays--BOkL6mz.js";import"./src-BoFa7hhW.js";var n=3e4,r={results:[],unreachableCount:0};function i(i){let a=t(),o=i.length>0,s=[...i].sort((e,t)=>e-t),{data:c,isLoading:l,isError:u}=e({queryKey:[`scenes-feed`,s],enabled:o,staleTime:n,refetchInterval:n,retry:!1,queryFn:async()=>{let e=await a.trpcClient.sceneMonitor.listScenesBatch.query({deviceIds:s}),t=[],n=0;for(let r of e){if(r.status===null){n++;continue}t.push({deviceId:r.deviceId,monitors:r.status.monitors})}return{results:t,unreachableCount:n}}}),d=c??(u?{results:[],unreachableCount:s.length}:r);return{results:d.results,isLoading:o&&l,unreachableCount:d.unreachableCount}}export{i as t};
1
+ import{a as e}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{at as t}from"./player-overlays-EeJrynNb.js";import"./src-B-lfEnzH.js";var n=3e4,r={results:[],unreachableCount:0};function i(i){let a=t(),o=i.length>0,s=[...i].sort((e,t)=>e-t),{data:c,isLoading:l,isError:u}=e({queryKey:[`scenes-feed`,s],enabled:o,staleTime:n,refetchInterval:n,retry:!1,queryFn:async()=>{let e=await a.trpcClient.sceneMonitor.listScenesBatch.query({deviceIds:s}),t=[],n=0;for(let r of e){if(r.status===null){n++;continue}t.push({deviceId:r.deviceId,monitors:r.status.monitors})}return{results:t,unreachableCount:n}}}),d=c??(u?{results:[],unreachableCount:s.length}:r);return{results:d.results,isLoading:o&&l,unreachableCount:d.unreachableCount}}export{i as t};
@@ -1 +1 @@
1
- import{a as e}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{at as t}from"./player-overlays--BOkL6mz.js";import"./src-BoFa7hhW.js";var n=15e3,r={rows:[],unreadableCount:0};function i(i){let a=t(),o=i.length>0,s=[...i].sort((e,t)=>e-t),{data:c,isLoading:l}=e({queryKey:[`stationary-objects`,s],enabled:o,staleTime:n,refetchInterval:n,queryFn:async()=>{let e=await a.trpcClient.zoneAnalytics.getCurrentSnapshotBatch.query({deviceIds:s}),t=[],n=0;for(let r of e){if(r.read===`unreadable`){n++;continue}for(let e of r.snapshot?.stationaryObjects??[])t.push({...e,deviceId:r.deviceId})}return{rows:t,unreadableCount:n}}}),u=c??r;return{rows:u.rows.toSorted((e,t)=>t.becameStationaryAt-e.becameStationaryAt),isLoading:o&&l,unreadableCount:u.unreadableCount}}export{i as t};
1
+ import{a as e}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{at as t}from"./player-overlays-EeJrynNb.js";import"./src-B-lfEnzH.js";var n=15e3,r={rows:[],unreadableCount:0};function i(i){let a=t(),o=i.length>0,s=[...i].sort((e,t)=>e-t),{data:c,isLoading:l}=e({queryKey:[`stationary-objects`,s],enabled:o,staleTime:n,refetchInterval:n,queryFn:async()=>{let e=await a.trpcClient.zoneAnalytics.getCurrentSnapshotBatch.query({deviceIds:s}),t=[],n=0;for(let r of e){if(r.read===`unreadable`){n++;continue}for(let e of r.snapshot?.stationaryObjects??[])t.push({...e,deviceId:r.deviceId})}return{rows:t,unreadableCount:n}}}),u=c??r;return{rows:u.rows.toSorted((e,t)=>t.becameStationaryAt-e.becameStationaryAt),isLoading:o&&l,unreadableCount:u.unreadableCount}}export{i as t};
@@ -0,0 +1 @@
1
+ import"./src-B-lfEnzH.js";
@@ -1 +1 @@
1
- import{I as e,Q as t,S as n,W as r,x as i}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{Hc as a}from"./src-BoFa7hhW.js";import{s as o}from"./index-CHPT-81A.js";function s({staleNodeId:e,shownNodeName:t}){return e===null?null:n(`div`,{role:`status`,className:`flex items-start gap-2 rounded-md border border-warning/30 bg-warning/5 px-3 py-2 text-[11px] text-foreground-subtle`,children:[i(a,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-warning`}),n(`span`,{children:[`This link named node `,i(`span`,{className:`font-medium text-foreground`,children:e}),`, which is not in this cluster. Showing`,` `,i(`span`,{className:`font-medium text-foreground`,children:t}),` instead.`]})]})}t();var c=`node`;function l(e){return[...e].toSorted((e,t)=>e.isHub===t.isHub?e.isOnline===t.isOnline?e.name.localeCompare(t.name):e.isOnline?-1:1:e.isHub?-1:1)}function u(e,t){let n=l(e),r=n[0]??null;if(r===null)return{node:null,outcome:`empty`,staleNodeId:null};if(t===null||t.length===0)return{node:r,outcome:`default`,staleNodeId:null};let i=n.find(e=>e.id===t);return i===void 0?{node:r,outcome:`stale`,staleNodeId:t}:{node:i,outcome:`requested`,staleNodeId:null}}function d(t){let[n,i]=o(),a=n.get(c);return{selection:r(()=>u(t,a),[t,a]),selectNode:e(e=>{let t=new URLSearchParams(n);t.set(c,e),i(t,{replace:!0})},[n,i]),requestedNodeId:a}}export{l as n,s as r,d as t};
1
+ import{I as e,Q as t,S as n,W as r,x as i}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{Hc as a}from"./src-B-lfEnzH.js";import{s as o}from"./index-DNU21ztY.js";function s({staleNodeId:e,shownNodeName:t}){return e===null?null:n(`div`,{role:`status`,className:`flex items-start gap-2 rounded-md border border-warning/30 bg-warning/5 px-3 py-2 text-[11px] text-foreground-subtle`,children:[i(a,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-warning`}),n(`span`,{children:[`This link named node `,i(`span`,{className:`font-medium text-foreground`,children:e}),`, which is not in this cluster. Showing`,` `,i(`span`,{className:`font-medium text-foreground`,children:t}),` instead.`]})]})}t();var c=`node`;function l(e){return[...e].toSorted((e,t)=>e.isHub===t.isHub?e.isOnline===t.isOnline?e.name.localeCompare(t.name):e.isOnline?-1:1:e.isHub?-1:1)}function u(e,t){let n=l(e),r=n[0]??null;if(r===null)return{node:null,outcome:`empty`,staleNodeId:null};if(t===null||t.length===0)return{node:r,outcome:`default`,staleNodeId:null};let i=n.find(e=>e.id===t);return i===void 0?{node:r,outcome:`stale`,staleNodeId:t}:{node:i,outcome:`requested`,staleNodeId:null}}function d(t){let[n,i]=o(),a=n.get(c);return{selection:r(()=>u(t,a),[t,a]),selectNode:e(e=>{let t=new URLSearchParams(n);t.set(c,e),i(t,{replace:!0})},[n,i]),requestedNodeId:a}}export{l as n,s as r,d as t};
@@ -0,0 +1 @@
1
+ import{vt as e}from"./player-overlays-EeJrynNb.js";var t=e(`user-round`,[[`circle`,{cx:`12`,cy:`8`,r:`5`,key:`1hypcn`}],[`path`,{d:`M20 21a8 8 0 0 0-16 0`,key:`rfgkzh`}]]);export{t};