@camstack/addon-admin-ui 1.2.221 → 1.2.223
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.
- package/dist/assets/{AddonCollectionPage-Dprb_cS1.js → AddonCollectionPage-KV-cUAyS.js} +1 -1
- package/dist/assets/{Addons-Ci6q2XVl.js → Addons-DePnoBSr.js} +1 -1
- package/dist/assets/{AdminTabs-BhnXE1ye.js → AdminTabs-CxTyQDgy.js} +1 -1
- package/dist/assets/{AiProfiles-D793aQKq.js → AiProfiles-CglhmQZu.js} +1 -1
- package/dist/assets/{BrokerForm-DNq4SLS9.js → BrokerForm-C1mYzw9t.js} +1 -1
- package/dist/assets/{Build-MyKznyh_.js → Build-F5BDyP_S.js} +1 -1
- package/dist/assets/{Capabilities-9gCOdstq.js → Capabilities-DLndBBbF.js} +1 -1
- package/dist/assets/{CapabilityBadges-CKAqCSu3.js → CapabilityBadges-DGEXHIiV.js} +1 -1
- package/dist/assets/{Cluster-DRe9g_hi.js → Cluster-CxNGBHYm.js} +1 -1
- package/dist/assets/{Data-5ATiWeq5.js → Data-L-qs-P4F.js} +1 -1
- package/dist/assets/{DetectionIntelligence-7OUS19J3.js → DetectionIntelligence-BicDKWLJ.js} +1 -1
- package/dist/assets/{DeviceAggregateSection-b9E1kc2E.js → DeviceAggregateSection-C2ZiEEBO.js} +1 -1
- package/dist/assets/{DeviceDetail-B2S0_PGk.js → DeviceDetail-NAnl7VGD.js} +1 -1
- package/dist/assets/{Devices-D8awMnCt.js → Devices-CMcKlkeE.js} +1 -1
- package/dist/assets/{EmbedPlayerPage-CadP76jS.js → EmbedPlayerPage-Y5MfBD2d.js} +1 -1
- package/dist/assets/{Events-dKAohoez.js → Events-CESCWKSJ.js} +1 -1
- package/dist/assets/{FormBuilder-CodCsikq.js → FormBuilder-BQiNcPCn.js} +1 -1
- package/dist/assets/{Identity-CMiN0Eo0.js → Identity-ml_OEpRk.js} +1 -1
- package/dist/assets/{IntegrationDetail-BcK5b24R.js → IntegrationDetail-L0sjBQAr.js} +1 -1
- package/dist/assets/{Integrations-sruuaJYo.js → Integrations-CW99vWdY.js} +1 -1
- package/dist/assets/{Integrations-sR7meg_r.js → Integrations-Deg36S5U.js} +1 -1
- package/dist/assets/{Locations-BJjf6edD.js → Locations-CxtBdYF2.js} +1 -1
- package/dist/assets/{Logs-CZdBqR0M.js → Logs-B_JrXMcJ.js} +1 -1
- package/dist/assets/{MotionZonesSettings-BP4iLCnL.js → MotionZonesSettings-B6UU7y6j.js} +1 -1
- package/dist/assets/{MyAccess-CejlOVWj.js → MyAccess-CeD7kRTI.js} +1 -1
- package/dist/assets/{Network-bp05u8wc.js → Network-ixQJoeH9.js} +1 -1
- package/dist/assets/{NodeAddonsSettingsPanel-BSAn2YZZ.js → NodeAddonsSettingsPanel-BSeHKJJ3.js} +1 -1
- package/dist/assets/{NodeInferenceDevices-BTGtyQmI.js → NodeInferenceDevices-Dg5CSHG8.js} +1 -1
- package/dist/assets/{Notifications-DYru48NO.js → Notifications-DFULzT5D.js} +1 -1
- package/dist/assets/{Pipeline-C5iZYmZc.js → Pipeline-C3qQRdIU.js} +1 -1
- package/dist/assets/{Plates-DjK0sNCO.js → Plates-D0nyFKFe.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings-DLo78I1l.js → PrivacyMaskSettings-cvXFksHo.js} +1 -1
- package/dist/assets/{ProviderIcon-DrUFWYPk.js → ProviderIcon-BNeCNIEn.js} +1 -1
- package/dist/assets/{Recordings-CF_y26sZ.js → Recordings-DH55vGxL.js} +1 -1
- package/dist/assets/{ScanNetworkModal-Cfr9_uq4.js → ScanNetworkModal-BXXqnp-E.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-CKlIlEJF.js → SceneMonitorEditor-BhC03DbU.js} +1 -1
- package/dist/assets/{Scenes-ClcX4Lpe.js → Scenes-lHlJXZSf.js} +1 -1
- package/dist/assets/{Settings-Tub_HwtL.js → Settings-rbX15vYk.js} +1 -1
- package/dist/assets/{Showroom-BDravmQi.js → Showroom-Bqx468JP.js} +1 -1
- package/dist/assets/{StorageLocationsPanel-fXImyww4.js → StorageLocationsPanel-D7HQKvdi.js} +1 -1
- package/dist/assets/{Terminal-D6T5T7YY.js → Terminal-DjJDsu9d.js} +1 -1
- package/dist/assets/{Viewer-CjXC4LZX.js → Viewer-DtSb3Tm2.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DOK-uI8m.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-LfW9OC2M.js} +1 -1
- package/dist/assets/{authed-media-8ZX0fxpS.js → authed-media-DOfAhsdg.js} +1 -1
- package/dist/assets/{bell-off-cMbne4qJ.js → bell-off-8hc_zYZQ.js} +1 -1
- package/dist/assets/{boxes-C3ArB2zb.js → boxes-B2NdpZ7W.js} +1 -1
- package/dist/assets/circle-slash-DBQ2yz-k.js +1 -0
- package/dist/assets/{debounced-invalidate-BtKt8XQW.js → debounced-invalidate-BXEVqCjM.js} +1 -1
- package/dist/assets/{dist-B0fAQA-M.js → dist-Af2y9Wd_.js} +1 -1
- package/dist/assets/{dist-B0TjVCvC.js → dist-DXuo4eD3.js} +1 -1
- package/dist/assets/{face-bbox-B_KyEUZo.js → face-bbox-BikzBHlF.js} +1 -1
- package/dist/assets/{hard-drive-download-BrovS-vT.js → hard-drive-download-BRQ3CmK2.js} +1 -1
- package/dist/assets/{hostInit-1HOs7J0X.js → hostInit-7GeTKQFL.js} +1 -1
- package/dist/assets/{index-KsyFkthG.js → index-eyM91djI.js} +3 -3
- package/dist/assets/{key-round-D8LsW4TE.js → key-round-C3bLNXv_.js} +1 -1
- package/dist/assets/{layers-k6pCitz4.js → layers-BMnZIGjG.js} +1 -1
- package/dist/assets/{location-owned-usage-Bx4uoJHX.js → location-owned-usage-Cvh-NgVJ.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-3bfd59cf.js → mf-entry-bootstrap-0-b73c7ce0.js} +2 -2
- package/dist/assets/{player-overlays-CKzRSmyl.js → player-overlays-C4R1ot5Y.js} +1 -1
- package/dist/assets/remoteEntry-BdyiKEcb.js +1 -0
- package/dist/assets/{send-DWNscK_K.js → send-C0JgpgnH.js} +1 -1
- package/dist/assets/{settings-2-BGUkneGT.js → settings-2-DxPl5aHH.js} +1 -1
- package/dist/assets/{square-check-big-Dl7PAeem.js → square-check-big-4TNo6adL.js} +1 -1
- package/dist/assets/{src-vbjrlRUY.js → src-BlkUL-F8.js} +3 -3
- package/dist/assets/{src-B8-bKekW.js → src-BxoWwBL1.js} +1 -1
- package/dist/assets/{use-scenes-feed-DgUqwOSZ.js → use-scenes-feed-BEJ36T1b.js} +1 -1
- package/dist/assets/{use-stationary-objects-C8DfKVLu.js → use-stationary-objects-C7yQYI6G.js} +1 -1
- package/dist/assets/useEventInvalidation-0iWBYh1b.js +1 -0
- package/dist/assets/{useNodeUrlSelection-RE8bPH3X.js → useNodeUrlSelection-ByWfp2dT.js} +1 -1
- package/dist/assets/user-round-DSH1NEap.js +1 -0
- package/dist/assets/{video-CCg4IOvi.js → video-BDCQo3Tq.js} +1 -1
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BhASMilX.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-ju-y3YLR.js} +2 -2
- package/dist/index.html +5 -5
- package/dist/server/addon.js +1 -1
- package/package.json +1 -1
- package/dist/assets/circle-slash-Dk-_Uk1o.js +0 -1
- package/dist/assets/remoteEntry-CCW1HAey.js +0 -1
- package/dist/assets/useEventInvalidation-DrSXsy11.js +0 -1
- package/dist/assets/user-round-epyUHZw8.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=new Set(Ae);function Ne(e){return Me.has(e)}var Pe=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}({}),Fe=[{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}],Ie=Object.fromEntries(Fe.map(e=>[e.id,e]));function Le(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 Re(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&&ze(e.fields,t);return t}function ze(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){ze(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&&ze(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 Be(e){let t=new Map;for(let[n,r]of Re(e))t.set(n,r.value??r.default);return t}function Ve(e,t){let n=Re(e).get(t);return n===void 0?void 0:n.value??n.default}function He(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Ue(e,t))}))}}function Ue(e,t){if(Le(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Ue(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Ue(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?We(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 We(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 Ge(e,t){return e.category===t}function Ke(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 qe(e,t){let n=t.ts??Date.now();e.emit(Ke(`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 Je(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 Ye(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 Xe(e,t){return`${e}@${Ye(t)}`}function Ze(e,t,n){return e[Xe(t,n)]}function Qe(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?Xe(i,n):i]=a;return r}function $e(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=Ze(e,i,n);t!==void 0&&(r[i]=t)}return r}var et=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(Pe.AddonStarted);let n=rt(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(Pe.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 He(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=tt(t.fields);n.length!==0&&i.push({...t,fields:n})}if(i.length===0)return null;let a=await this.resolveGlobalStore(e);return He({...n,sections:i},a)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=Ye(e??this._ctx?.kernel?.localNodeId);return r.size>0?$e(n,r,i):n}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=Ye(this._ctx?.kernel?.localNodeId),i=Ye(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?Qe(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(Pe.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=>nt(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?He(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{qe(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=Ye(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?Ze(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 Je({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 Je({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 tt(e){let t=[];for(let n of e){if(n.type===`group`){let e=tt(n.fields);e.length>0&&t.push({...n,fields:e});continue}if(n.type===`sub-tabs`){let e=n.tabs.map(e=>({...e,fields:tt(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 nt(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...nt(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...nt(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function rt(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function it(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=at(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=st(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 at(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=ot(t.path,n);if(e!==null)return{route:t,params:e}}return null}function ot(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 st(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 ct=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)}}}},lt=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()}),ut=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()})]),dt=a({video:lt,audio:ut,inputArgs:p(g()).optional(),outputArgs:p(g()).optional()});function ft(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 pt(e,t,n){let r=e>=n;return r===t>=n?r?e-t:t-e:r?-1:1}function mt(e){let t=e.toLowerCase().replace(/[.\s-]/g,``);return t===`hevc`||t===`hvc1`||t===`hev1`?`h265`:t===`avc`||t===`avc1`?`h264`:t}function ht(e,t){if(t.length===0)return!0;if(e===void 0)return!1;let n=mt(e);return t.some(e=>mt(e)===n)}function gt(e,t){for(let n=0;n<t.length;n+=1)if(e.startsWith(t[n]))return n;return t.length}function _t(e,t){let n=e.filter(e=>t.allowTranscode||ht(e.codec,t.acceptCodecs));if(n.length===0)return null;let r=t.targetHeight,i=n.map(e=>({candidate:e,transcodes:!ht(e.codec,t.acceptCodecs),provider:gt(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:pt(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 vt={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},yt={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 bt(e){return[`-hide_banner`,`-loglevel`,e]}function xt(e){return!e||e===`none`||e===`copy`}function St(e,t){let n=[];if(xt(t)||n.push(`-hwaccel`,String(t)),e.extraArgs?.length&&n.push(...e.extraArgs),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.fflags?.length)for(let t of e.fflags)n.push(`-fflags`,t);return e.rtspTransport&&n.push(`-rtsp_transport`,e.rtspTransport),n.push(`-i`,e.url),n}function Ct(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 wt(e,t,n){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[]}return!e||t.some(e=>e===`-vf`)?[]:e.mode===`exact`?[`-vf`,`scale=${e.width}:${e.height}`]:[`-vf`,`scale='min(${e.width},iw)':'min(${e.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2`]}function Tt(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 Et(e,t,n){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 r=[...wt(e.scale,t,n),`-c:v`,e.encoder];return e.preset!==void 0&&r.push(`-preset`,e.preset),e.tune!==void 0&&r.push(`-tune`,e.tune),e.singleSlicePerFrame===!0&&e.encoder===`libx264`&&r.push(`-x264-params`,`sliced-threads=0`),e.profile!==void 0&&r.push(`-profile:v`,e.profile),e.level!==void 0&&r.push(`-level`,e.level),e.pixelFormat!==void 0&&r.push(`-pix_fmt`,e.pixelFormat),e.fps!==void 0&&r.push(`-r`,String(e.fps)),e.gopFrames!==void 0&&r.push(`-g`,String(e.gopFrames)),e.forceKeyFramesSeconds!==void 0&&r.push(`-force_key_frames`,`expr:gte(t,n_forced*${e.forceKeyFramesSeconds})`),e.bf!==void 0&&r.push(`-bf`,String(e.bf)),r.push(...Tt(e)),e.bitstreamFilter!==void 0&&r.push(`-bsf:v`,e.bitstreamFilter),r}function Dt(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`,vt[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 Ot(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 kt(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var At=`+frag_keyframe+empty_moov+default_base_moof`;function jt(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?Nt(e):[`-f`,e.container,`pipe:1`]}var Mt=.9;function Nt(e){return[`-movflags`,At,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*Mt*1e3))),`-f`,`mp4`,`pipe:1`]}function Pt(e){return[`-map`,`0:a:0?`,...Dt(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:yt[e.codec]),...Ot({url:e.rtpUrl,sdpFile:e.sdpFile})]}function Ft(e){let t=e.filterGraph??null,n=[...bt(e.logLevel),...St(e.input,e.decodeHwAccel),...(e.extraInputs??[]).flatMap(t=>St(t,e.decodeHwAccel)),...t?[`-filter_complex`,t.graph]:[]],r=e.threadCount>0?[`-threads`,String(e.threadCount)]:[],i=Ct(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`,...Et(e.video,e.outputArgs,t),...r,...e.outputArgs,...Ot(e.sink.video)]:[],o=e.sink.audio?[`-vn`,`-map`,i.audio??`0:a:0?`,...Dt(e.audio),...Ot(e.sink.audio)]:[];return[...n,...a,...o]}let s=kt(e.sink)||e.audio.kind===`none`,c=kt(e.sink)?[`-an`]:Dt(e.audio);return[...n,...a,...Et(e.video,e.outputArgs,t),...r,...s?[]:o,...c,...e.outputArgs,...jt(e.sink),...e.audioSidecar?Pt(e.audioSidecar):[]]}var It={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 Lt(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||xt(t)||t===`auto`)return r;let i=It[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function Rt(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 zt(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:Lt(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:Rt(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var Bt={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`},Vt={...Bt,video:{...Bt.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},Ht={...Bt,audio:{codec:`opus`},video:{...Bt.video,singleSlicePerFrame:!0}},Ut={kind:`cbr`,vbvSeconds:1},Wt={kind:`cap`,vbvSeconds:2},Gt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},Kt=16*1024*1024,qt=8,Jt=16,Yt=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??Kt}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<qt)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<Jt)return null;let n=t.getBigUint64(this.cursor+qt);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<qt?(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 Xt(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 Zt(e){return!e||e===`none`||e===`copy`}async function Qt(e){let t=e.override;if(t!=null&&t!==``)return Zt(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=Zt(r)?null:r;return e.cache?.write(i),i}var $t=me();function en(e){let t=JSON.stringify(e,tn);return(0,$t.createHash)(`sha256`).update(t??``).digest(`hex`)}function tn(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 nn(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var S=`\0unset`;function rn(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 an(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function on(e,t=nn(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:rn(e.encode.video),audio:an(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??S,pixelFormat:e.pixelFormat??S,decodeHwAccel:e.decodeHwAccel??S}}function sn(e,t=nn(e)){return`egress:${en(on(e,t))}`}var cn=m([`singleton`,`device`,`widget`]),ln=a({capName:g(),kind:cn,deviceId:o().optional(),reachable:v(),latencyMs:o(),error:g().optional()}),un=a({addonId:g(),caps:p(ln).readonly(),widgets:p(ln).readonly()}),dn=a({nodeId:g(),addons:p(un).readonly()}),fn=a({ok:v(),degraded:v(),checkedAt:g(),nodes:p(dn).readonly(),summary:a({total:o(),reachable:o(),unreachable:o()})}),pn=`hub-only`;function mn(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function hn(e){let t=mn(e).placement;return t===`any-node`||t===`agent-only`}function gn(e){return mn(e).placement===`agent-only`}function _n(e){return mn(e).group}function vn(e,t){return e.execution?.group??t}function yn(e){return mn(e).placement}function bn(e){return e.execution?.isolate===!0}var xn=`x-camstack-dataplane-secret`,Sn=[`grid-view`,`events-view`],Cn=m([`running`,`done`,`failed`,`cancelled`]),wn=m([`adopted`,`already-adopted`,`failed`,`cancelled`]),Tn=a({childNativeId:g(),outcome:wn,parentDeviceId:o().int().nonnegative().nullable(),accessoryCount:o().int().nonnegative(),error:g().nullable()}),En=a({jobId:g(),addonId:g(),integrationId:g(),state:Cn,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(Tn).readonly(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Dn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},On=m([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`]),kn=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`],An=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`)})]),jn=m([`no-provider`,`source-unreachable`,`not-configured`,`device-disabled`]),Mn=a({id:On,label:g(),costWhenOff:g(),available:v(),unavailableReason:jn.optional(),enabled:v(),authority:An}),Nn=a({deviceId:o().int(),switches:p(Mn).readonly(),fetchedAt:o()}),Pn=`detection-pipeline`,Fn=`audio-analysis`,In=`privacy-mask`,Ln={"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:Pn},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:In},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:In},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:Fn},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 Rn(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:!1,enabled:!1,unavailableReason:`not-configured`}:{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 zn(e){return kn.map(t=>{let n=Ln[t],r=Rn(n,e);return{id:n.id,label:n.label,costWhenOff:n.costWhenOff,available:r.available,...r.unavailableReason===void 0?{}:{unavailableReason:r.unavailableReason},enabled:r.enabled,authority:n.authority}})}function Bn(e){return e.filter(e=>Ln[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function Vn(e){let t=[],n=[];for(let r of kn){let i=Ln[r];if(!i.countsAsSwitchedOff)continue;let a=Rn(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var Hn=`__camstack_redacted__`;function Un(e){return e.type===`password`?!0:`secret`in e&&e.secret===!0}function Wn(e){let t=new Set;for(let n of qn(e))for(let e of Jn(n))Yn(e,t);return t}function Gn(e){for(let t of qn(e))if(Jn(t).length>0)return!0;return!1}function Kn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function qn(e){if(!Kn(e))return[];let t=e.sections;return Array.isArray(t)?t:[]}function Jn(e){if(!Kn(e))return[];let t=e.fields;return Array.isArray(t)?t:[]}function Yn(e,t){if(!Kn(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 Jn(e))Yn(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 Jn(e))Yn(n,t)}}var Xn=3e4,Zn=6e4,Qn=m([`confirmed`,`suppressed`,`exhausted-fallback`]),$n=a({id:g(),at:o().int(),deviceId:o().int(),sourceTrackId:g(),className:g(),verdict:Qn,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()}),er=a({deviceId:o().int().optional(),since:o().int().optional(),verdict:Qn.optional(),limit:o().int().min(1).max(5e3).optional()}),tr=5e3,nr=a({id:g(),note:g(),deviceId:o().int(),sourceTrackId:g(),archivedAt:o().int(),trackStartedAt:o().int().nullable(),trackClass:g().nullable(),trackLabel:g().nullable()}),rr=a({deviceId:o().int().optional(),limit:o().int().min(1).max(1e3).optional()}),ir={high:`High`,mid:`Mid`,low:`Low`};function ar(e){return ir[e]??e.charAt(0).toUpperCase()+e.slice(1)}function or(e){return(e.width??0)*(e.height??0)}function sr(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:or(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 cr(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function lr(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 ur(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function dr(e){return C(e)&&e.trim()?{url:e}:ur(e)&&C(e.url)&&e.url.trim()?{url:e.url,label:C(e.label)?e.label:void 0}:null}function fr(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=dr(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 pr(e){if(e.length===0)return{};let t=sr(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 mr={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},hr={debug:0,info:1,warn:2,error:3};function gr(e,t){return hr[e]<=hr[t]}var _r=m([`recording`,`events`]),vr=m([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),yr=m([`retention`,`quota`,`manual`,`operator`,`maintenance`,`orphaned-device`]),br=a({id:g(),at:o(),domain:_r,op:vr,reason:yr,deviceId:o().nullable(),nodeId:g(),itemsAffected:o(),bytesReclaimed:o(),detail:g().nullable(),actor:g()}),xr=a({deviceId:o().optional(),limit:o().int().min(1).max(1e3).optional()}),w=m([`high`,`mid`,`low`]),Sr=[`high`,`mid`,`low`],Cr=m([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),wr=a({width:o().int().positive(),height:o().int().positive()}),Tr=a({camStreamId:g().min(1),deviceId:o().int().nonnegative(),kind:Cr,url:g().optional(),codec:g().optional(),resolution:wr.optional(),fps:o().positive().optional(),label:g().optional(),deviceFeatures:p(g()).optional(),autoEligible:v().optional(),profileHint:w.optional(),metadata:r(g(),d()).optional()}),Er=m([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),Dr=a({deviceId:o().int().nonnegative(),profile:w,brokerId:g(),sourceCamStreamId:g().nullable(),status:Er,resolution:wr.optional(),codec:g().optional(),preBufferSec:o().nonnegative().optional(),errorMessage:g().optional()});function Or(e,t){return`${e}/${t}`}function kr(e,t){return`${e}/${t}`}function Ar(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 jr(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>Sr.indexOf(e.profile)-Sr.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 Mr=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()}),Nr=a({type:g(),url:g(),videoCodec:g().optional(),audioCodec:g().optional(),metadata:r(g(),d()).readonly().optional()}),Pr=a({type:m([`video`,`audio`]),data:_(Uint8Array),pts:o(),dts:o(),keyframe:v(),codec:g()}),Fr=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()}),Ir=m([`rgb`,`bgr`,`yuv420`,`gray`]),Lr=a({brokerId:g(),format:Ir,maxFps:o().positive().optional(),tag:g().optional()}),Rr=a({subscriptionId:g(),maxFps:o().nonnegative()}),zr=m(ge),Br=a({data:_(Uint8Array),sampleRate:o().int().positive(),channels:o().int().positive(),timestamp:o(),format:zr.optional()}),Vr=a({brokerId:g(),tag:g().optional(),accept:p(zr).readonly().optional()}),Hr=a({subscriptionId:g()}),Ur=m([`idle`,`connecting`,`streaming`,`error`,`stopped`]),Wr=a({status:Ur,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()}),Gr=a({profile:w,brokerId:g(),url:g(),mutedUrl:g(),enabled:v(),codec:g().optional(),resolution:wr.optional()}),Kr=a({id:g(),name:g(),category:g().optional(),description:g().optional(),icon:g().optional()}),qr=[`person`,`vehicle`,`animal`,`package`],Jr=[`person`,`vehicle`,`animal`];function Yr(e){return Jr.some(t=>t===e)}var Xr=a({mapping:r(g(),m(qr)),preserveOriginal:v()}),Zr={preMs:5e3,postMs:1e4},Qr=o().int().min(0).max(6),$r=/^([01]\d|2[0-3]):[0-5]\d$/,ei=m([`off`,`events`,`continuous`,`on-device-decision`]),ti=m(Jr),ni=e=>new Set(e).size===e.length,ri=a({motion:v().optional(),audioThresholdDbfs:o().optional(),objectClasses:p(ti).min(1).refine(ni,{message:`objectClasses must not repeat a class`}).optional(),sensorDeviceIds:p(o().int().positive()).min(1).max(16).refine(ni,{message:`sensorDeviceIds must not repeat a device`}).optional()}),ii=m([`continuous`,`events`]),ai=ri,oi=a({days:p(Qr),start:g().regex($r),end:g().regex($r),mode:ii,triggers:ai.optional(),preBufferSec:o().min(0).optional(),postBufferSec:o().min(0).optional()}),si={postBufferSec:30};function ci(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 li=si.postBufferSec*1e3,ui=a({maxAgeDays:o().min(0).optional(),maxSizeGb:o().min(0).optional()}),di=a({enabled:v(),mode:ei.optional(),profiles:p(w).optional(),segmentSeconds:o().int().positive().optional(),bands:p(oi).default([]),deviceDecision:v().optional(),retention:ui.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 fi(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 pi=[`high`,`low`];function mi(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=>pi.includes(e));return n.length>0?n:[...e]}var hi=[`motion`,`audioThresholdDbfs`,`objectClasses`,`sensorDeviceIds`];function gi(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function _i(e){return gi(e)&&gi(e.triggers)&&e.triggers.deviceSignal===!0}function vi(e){let t=e.triggers;return gi(t)?hi.some(e=>t[e]!==void 0):!1}function yi(e){let t=e.triggers;if(!gi(t))return e;let{deviceSignal:n,...r}=t;return{...e,triggers:r}}function bi(e){let t={value:e,migrated:!1,strippedOnly:!1};if(!gi(e)||!Array.isArray(e.bands)||!e.bands.some(_i))return t;let n=[];for(let t of e.bands){if(!_i(t)||!gi(t)){n.push(t);continue}vi(t)&&n.push(yi(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 xi=m([`queued`,`running`,`done`,`failed`,`cancelled`]),Si=a({jobId:g(),state:xi,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()}),Ci=m([`recordings`,`recordingsLow`]),wi=a({fromLocationId:g(),toLocationId:g(),entities:p(m([`segments`])).optional(),footageClass:Ci.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)}),Ti=wi.extend({leaseId:g().min(1)}),Ei=m([`move`,`seal`,`gallery`]),Di=a({toLocationId:g(),fromLocationId:g().optional(),throttleMbps:o().min(1).max(1e3).optional(),mode:Ei.optional()}),Oi=a({present:v(),rows:o().int().nonnegative().nullable()}),ki=a({media:Oi,retrainFrames:Oi,anyPresent:v(),total:o().int().nonnegative().nullable()}).nullable(),Ai=Di.extend({leaseId:g().min(1)}),ji=m([`recordings`,`recordingsLow`,`eventMedia`,`backups`,`galleryMedia`]),Mi=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`}),Ni=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(),Pi=m([`blocking`,`nonBlocking`]),Fi=a({destinations:Mi,sources:Ni,throttleMbps:o().min(1).max(1e3).optional(),mode:Pi.optional()}),Ii=m([`planning`,`sealing`,`pausing`,`moving`,`draining`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),Li=m([`pipeline`,`recorder`,`analytics`]),Ri=a({filesMoved:o().int().nonnegative(),filesTotal:o().int().nonnegative().nullable(),bytesMoved:o().int().nonnegative(),rowsReconciled:o().int().nonnegative().optional(),startedAt:o(),observedAt:o()}),zi=a({storageClass:ji,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional(),moverJobId:g().nullable(),state:xi.nullable(),error:g().nullable(),progress:Ri.nullable()}),Bi=a({jobId:g(),phase:Ii,mode:Pi,destinations:Mi,sources:Ni,throttleMbps:o(),moves:p(zi),pauseLeaseId:g().nullable(),pausedParticipants:p(Li),repointed:v(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Vi=m([`sharesDeviceWithSource`,`deviceIdentityUnknown`,`unstampedEventMediaRows`,`blockingOnly`,`noMover`]),Hi=a({code:Vi,storageClass:ji,message:g()}),Ui=a({destinations:Mi,sources:Ni,mode:Pi,moves:p(a({storageClass:ji,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional()})),findings:p(Hi)}),Wi=m([`footage`,`media`]),Gi=a({lane:Wi,job:Si,migrationJobId:g().nullable(),observedAt:o()}),Ki=a({storageClass:ji,fromLocationId:g(),toLocationId:g(),items:o().int().nonnegative().nullable(),bytes:o().int().nonnegative().nullable()}),qi=a({classes:p(ji).min(1),throttleMbps:o().min(1).max(1e3).optional()}),Ji=a({fromLocationId:g().min(1),footageClass:Ci.optional()}),Yi=a({segments:o().int().nonnegative(),bytes:o().int().nonnegative()}).nullable(),Xi=a({locationId:g().min(1),apply:v().optional(),deviceId:o().int().positive().optional(),profiles:p(g().min(1)).optional()}),Zi=m([`location-unknown`,`source-writable`,`no-ledger`,`archive-unreadable`,`anchor-absent`,`anchor-unreadable`,`anchor-moved`]),Qi=m([`live-tail`,`listing-error`,`path-mismatch`,`durable-refused`]),$i=a({"live-tail":o().int().nonnegative(),"listing-error":o().int().nonnegative(),"path-mismatch":o().int().nonnegative(),"durable-refused":o().int().nonnegative()}),ea=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()}),ta=a({locationId:g(),applied:v(),refused:Zi.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:$i,bounded:v(),byDevice:p(ea).readonly()}),na=a({rows:o().int().nonnegative()}).nullable(),ra=a({toLocationId:g().min(1),fromLocationId:g().optional(),mode:Ei.optional()}),ia=m([`orphans`,`debug-media`,`ghost-ledger`,`done`,`failed`,`cancelled`]),aa=a({includeDebugMedia:v().optional()}),oa=a({jobId:g(),phase:ia,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()}),sa=a({jobId:g().optional()}),ca=[`face`,`plate`],la=[`face`,`plate`,`clip`,`custom`],ua=[`active`,`readonly`,`drain`,`disabled`],da=m(ua),fa=m([`normal`,`never`,`drain`]),pa=`readOnly`;function ma(e){return e===`active`}function ha(e){return e!==`disabled`}function ga(e){switch(e){case`active`:return`normal`;case`drain`:return`drain`;case`readonly`:case`disabled`:return`never`}}function _a(e){return e.mode===void 0&&(e.config.readOnly===!0||e.enabled===!1)?`readonly`:null}function va(e){return(ya(e.mode)?e.mode:void 0)??_a(e)??`active`}function ya(e){return ua.some(t=>t===e)}function ba(e){return ma(va(e))}function xa(e){return ha(va(e))}function Sa(e){return ga(va(e))}function Ca(e){if(!(`readOnly`in e))return e;let t={...e};return delete t[pa],t}function wa(e,t){return{...e,mode:t,enabled:ma(t),config:Ca(e.config)}}var Ta=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:da.optional(),capacity:a({totalBytes:o(),availableBytes:o()}).nullable().optional(),owned:a({bytes:o().int().nonnegative(),measuredAtMs:o().int().nonnegative()}).optional(),createdAt:o(),updatedAt:o()}),Ea=a({isDefault:v().optional()});function Da(e){return ba({...e,config:e.config??{}})}var Oa=1024**3;function ka(e){return Math.floor(e*Oa)}var Aa=a({locationId:g(),startedAtMs:o(),startBytes:o(),bytesRemaining:o(),drained:v(),estimatedEmptyAtMs:o().nullable()}),O=l([Ta,g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),ja=m([`local-path`,`cap-mediated`]),Ma=`local-path`,Na=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:ja.optional(),defaultsTo:g().optional(),defaultRoot:m([`data`,`media`,`backup`]).optional()}),Pa=a({inputFps:o(),outputFps:o(),avgDecodeTimeMs:o(),droppedFrames:o(),lagMs:o().optional(),effectiveFps:o().optional(),adaptiveFps:o().optional()}),Fa=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()}),Ia={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},La={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},Ra=[{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:Ia},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ia},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ia},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ia},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ia},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ia},{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:La},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:La},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:La},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:La},{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 za(e){return Ra.find(t=>t.id===e)}var Ba=m([`info`,`warn`,`error`]),Va=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:Ba,perDevice:v()}),Ha=a({channel:g().min(1),armedUntilMs:o(),deviceIds:p(o().int()).readonly().nullable()}),Ua=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}},Wa=class{gates=new Map;declare(e){let t=Va.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 Ua(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}},Ga=null;function Ka(){return Ga??=new Wa,Ga}function qa(e){return Ka().declare(e)}function Ja(){Ga=null}var Ya=5e3;function Xa(e,t={}){let n=Ka(),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 Za=1024,Qa=`other`;function $a(e,t,n){return n===void 0?`${e}${t}`:`${e}${t}${n}`}var eo=class{maxKeys;maxReasons;counters=new Map;refused=0;constructor(e=Za,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=$a(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:Qa;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 to(e){return e.attempts<=0?null:(e.attempts-e.succeeded)/e.attempts}var no=`__unattributed__`,ro=`__root__`;function io(e){return e.addonId===null?e.classification===`root`?{key:ro,kind:`root`}:{key:no,kind:`unattributed`}:{key:e.addonId,kind:`addon`}}function ao(e){return Math.round(e*10)/10}function oo(e,t){let n=new Map;for(let t of e){let{key:e,kind:r}=io(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?ao(n.main):null,i=n.splitKnown?ao(n.gc):null,a=ao(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 so(e,t){return e===null||t===null?null:e<t?e:t}function co(e,t){return e===null||t===null?null:e>t?e:t}function lo(e,t,n){return{atMs:n,samples:e.samples+t.samples,cpuMainPercent:co(e.cpuMainPercent,t.cpuMainPercent),cpuMainPercentMin:so(e.cpuMainPercentMin,t.cpuMainPercentMin),cpuGcPercent:co(e.cpuGcPercent,t.cpuGcPercent),cpuGcPercentMin:so(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 uo(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 fo(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}:lo(a,i,e))}return[...r.values()].toSorted((e,t)=>e.atMs-t.atMs)}var po=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${ho(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function mo(e,t){return`${e}|${ho(t)}`}function ho(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function go(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function _o(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 vo=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??yo(),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(mo(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=mo(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&&go(r.state)<=go(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} (${ho(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&&_o(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 po(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${ho(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(Ke(`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=mo(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} (${ho(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&&_o(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} (${ho(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&_o(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 yo(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function bo(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function xo(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=So(e,s);if(t)return a(t)}}return a(o[0])}function So(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)=>pt(e.pixels,t.pixels,n))[0]?.entry}var Co=[`motion`,`objects`,`discarded`,`stationary`],wo=[`motion`,`objects`,`stationary`],To={borderWidth:2,dashed:!0,dashPattern:[6,4],opacity:1,borderRadius:2};function Eo(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 Do=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],Oo={yolo26:`YOLO26`,yolov9:`YOLOv9`};function ko(e){return Oo[e]??e.toUpperCase()}var Ao=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function jo(e,t){let n=ko(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(Ao,``).trim();return r.length>0?r:t}function Mo(e,t){let n=[];return t===`fast`&&n.push(`Fast`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function No(e){return Do.filter(t=>e.formats[t]!==void 0)}function Po(e){let t=Do.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var Fo=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],Io=[`fp32`,`int8`];function Lo(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:Mo(t,n),formats:No(e),sizeMB:Po(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?Io.indexOf(e.precision)-Io.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?jo(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=Fo.indexOf(e.tier),r=Fo.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:ko(e),tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function Ro(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 zo(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 Bo=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],Vo=a({url:g(),sizeMB:o(),isDirectory:v().optional(),files:p(g()).readonly().optional(),runtimes:p(m([`node`,`python`])).readonly().optional()}),Ho=a({url:g(),filename:g(),sizeMB:o()}),Uo=a({onnx:Vo.optional(),coreml:Vo.optional(),openvino:Vo.optional(),tflite:Vo.optional(),pt:Vo.optional(),gguf:Vo.optional()}),Wo=a({family:g(),tier:g(),precision:m([`fp32`,`int8`]).optional(),optimization:m([`standard`,`fast`]).optional(),resolution:o().int().positive().optional()}),Go=[`camstack`,`frigate`,`scrypted`,`custom`],Ko=m(Go);function qo(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 Jo=a({id:g(),name:g(),description:g(),formats:Uo,inputSize:a({width:o(),height:o()}),inputChannels:o().int().positive().optional(),labels:p(Kr).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(Ho).readonly().optional(),legacy:v().optional(),metrics:a({map50:o().optional(),p95LatencyMs:r(g(),o()).optional()}).optional(),license:g().optional(),group:Wo.optional(),provider:Ko.optional(),classMap:Xr.optional()}),Yo=b(`format`,[a({format:y(`openvino`),precisions:p(m([`fp16`,`int8`])).min(1).readonly()}),a({format:y(`coreml`)})]),Xo=a({id:g().regex(/^[a-zA-Z0-9._-]+$/),name:g(),labels:p(Kr).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:Xr.optional()}),Zo=a({format:m(Bo),precision:m([`fp16`,`int8`]).optional(),sizeMB:o(),validated:v(),files:p(g()).readonly()}),Qo=a({entry:Jo,artifacts:p(Zo).readonly()});function $o(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function es(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function ts(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function ns(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 rs(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=$o(e.method);return ts(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 is(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 as(e,t){return e.map((e,n)=>j(e,t,n))}var os=1/0,ss={min:{minArgs:1,maxArgs:os,apply:e=>M(Math.min(...as(e,`min`)),`min`)},max:{minArgs:1,maxArgs:os,apply:e=>M(Math.max(...as(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:os,apply:e=>{let t=as(e,`avg`);return M(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:os,apply:e=>M(as(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:os,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=is(e[1],`convert`,1).trim(),i=is(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`)}}},cs=Object.freeze(Object.assign(Object.create(null),ss)),ls=new Set(Object.keys(ss)),us=2048,ds=4096,fs=/^[A-Za-z_][A-Za-z0-9_]*$/,ps=new Set([`now`,`true`,`false`,`null`]),ms=new Set([`true`,`false`,`null`]);function hs(e){return e>=`0`&&e<=`9`}function gs(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function _s(e){return gs(e)||hs(e)}function vs(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=new Set(Ae);function Ne(e){return Me.has(e)}var Pe=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}({}),Fe=[{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}],Ie=Object.fromEntries(Fe.map(e=>[e.id,e]));function Le(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 Re(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&&ze(e.fields,t);return t}function ze(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){ze(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&&ze(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 Be(e){let t=new Map;for(let[n,r]of Re(e))t.set(n,r.value??r.default);return t}function Ve(e,t){let n=Re(e).get(t);return n===void 0?void 0:n.value??n.default}function He(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Ue(e,t))}))}}function Ue(e,t){if(Le(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Ue(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Ue(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?We(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 We(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 Ge(e,t){return e.category===t}function Ke(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 qe(e,t){let n=t.ts??Date.now();e.emit(Ke(`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 Je(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 Ye(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 Xe(e,t){return`${e}@${Ye(t)}`}function Ze(e,t,n){return e[Xe(t,n)]}function Qe(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?Xe(i,n):i]=a;return r}function $e(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=Ze(e,i,n);t!==void 0&&(r[i]=t)}return r}var et=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(Pe.AddonStarted);let n=rt(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(Pe.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 He(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=tt(t.fields);n.length!==0&&i.push({...t,fields:n})}if(i.length===0)return null;let a=await this.resolveGlobalStore(e);return He({...n,sections:i},a)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=Ye(e??this._ctx?.kernel?.localNodeId);return r.size>0?$e(n,r,i):n}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=Ye(this._ctx?.kernel?.localNodeId),i=Ye(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?Qe(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(Pe.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=>nt(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?He(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{qe(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=Ye(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?Ze(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 Je({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 Je({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 tt(e){let t=[];for(let n of e){if(n.type===`group`){let e=tt(n.fields);e.length>0&&t.push({...n,fields:e});continue}if(n.type===`sub-tabs`){let e=n.tabs.map(e=>({...e,fields:tt(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 nt(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...nt(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...nt(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function rt(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function it(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=at(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=st(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 at(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=ot(t.path,n);if(e!==null)return{route:t,params:e}}return null}function ot(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 st(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 ct=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)}}}},lt=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()}),ut=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()})]),dt=a({video:lt,audio:ut,inputArgs:p(g()).optional(),outputArgs:p(g()).optional()});function ft(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 pt(e,t,n){let r=e>=n;return r===t>=n?r?e-t:t-e:r?-1:1}function mt(e){let t=e.toLowerCase().replace(/[.\s-]/g,``);return t===`hevc`||t===`hvc1`||t===`hev1`?`h265`:t===`avc`||t===`avc1`?`h264`:t}function ht(e,t){if(t.length===0)return!0;if(e===void 0)return!1;let n=mt(e);return t.some(e=>mt(e)===n)}function gt(e,t){for(let n=0;n<t.length;n+=1)if(e.startsWith(t[n]))return n;return t.length}function _t(e,t){let n=e.filter(e=>t.allowTranscode||ht(e.codec,t.acceptCodecs));if(n.length===0)return null;let r=t.targetHeight,i=n.map(e=>({candidate:e,transcodes:!ht(e.codec,t.acceptCodecs),provider:gt(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:pt(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 vt={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},yt={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 bt(e){return[`-hide_banner`,`-loglevel`,e]}function xt(e){return!e||e===`none`||e===`copy`}function St(e,t){let n=[];if(xt(t)||n.push(`-hwaccel`,String(t)),e.extraArgs?.length&&n.push(...e.extraArgs),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);return e.rtspTransport&&n.push(`-rtsp_transport`,e.rtspTransport),n.push(`-i`,e.url),n}function Ct(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 wt(e,t,n){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[]}return!e||t.some(e=>e===`-vf`)?[]:e.mode===`exact`?[`-vf`,`scale=${e.width}:${e.height}`]:[`-vf`,`scale='min(${e.width},iw)':'min(${e.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2`]}function Tt(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 Et(e,t,n){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 r=[...wt(e.scale,t,n),`-c:v`,e.encoder];return e.preset!==void 0&&r.push(`-preset`,e.preset),e.tune!==void 0&&r.push(`-tune`,e.tune),e.singleSlicePerFrame===!0&&e.encoder===`libx264`&&r.push(`-x264-params`,`sliced-threads=0`),e.profile!==void 0&&r.push(`-profile:v`,e.profile),e.level!==void 0&&r.push(`-level`,e.level),e.pixelFormat!==void 0&&r.push(`-pix_fmt`,e.pixelFormat),e.fps!==void 0&&r.push(`-r`,String(e.fps)),e.gopFrames!==void 0&&r.push(`-g`,String(e.gopFrames)),e.forceKeyFramesSeconds!==void 0&&r.push(`-force_key_frames`,`expr:gte(t,n_forced*${e.forceKeyFramesSeconds})`),e.bf!==void 0&&r.push(`-bf`,String(e.bf)),r.push(...Tt(e)),e.bitstreamFilter!==void 0&&r.push(`-bsf:v`,e.bitstreamFilter),r}function Dt(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`,vt[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 Ot(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 kt(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var At=`+frag_keyframe+empty_moov+default_base_moof`;function jt(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?Nt(e):[`-f`,e.container,`pipe:1`]}var Mt=.9;function Nt(e){return[`-movflags`,At,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*Mt*1e3))),`-f`,`mp4`,`pipe:1`]}function Pt(e){return[`-map`,`0:a:0?`,...Dt(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:yt[e.codec]),...Ot({url:e.rtpUrl,sdpFile:e.sdpFile})]}function Ft(e){let t=e.filterGraph??null,n=[...bt(e.logLevel),...St(e.input,e.decodeHwAccel),...(e.extraInputs??[]).flatMap(t=>St(t,e.decodeHwAccel)),...t?[`-filter_complex`,t.graph]:[]],r=e.threadCount>0?[`-threads`,String(e.threadCount)]:[],i=Ct(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`,...Et(e.video,e.outputArgs,t),...r,...e.outputArgs,...Ot(e.sink.video)]:[],o=e.sink.audio?[`-vn`,`-map`,i.audio??`0:a:0?`,...Dt(e.audio),...Ot(e.sink.audio)]:[];return[...n,...a,...o]}let s=kt(e.sink)||e.audio.kind===`none`,c=kt(e.sink)?[`-an`]:Dt(e.audio);return[...n,...a,...Et(e.video,e.outputArgs,t),...r,...s?[]:o,...c,...e.outputArgs,...jt(e.sink),...e.audioSidecar?Pt(e.audioSidecar):[]]}var It={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 Lt(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||xt(t)||t===`auto`)return r;let i=It[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function Rt(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 zt(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:Lt(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:Rt(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var Bt={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`},Vt={...Bt,video:{...Bt.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},Ht={...Bt,audio:{codec:`opus`},video:{...Bt.video,singleSlicePerFrame:!0}},Ut={kind:`cbr`,vbvSeconds:1},Wt={kind:`cap`,vbvSeconds:2},Gt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},Kt=16*1024*1024,qt=8,Jt=16,Yt=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??Kt}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<qt)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<Jt)return null;let n=t.getBigUint64(this.cursor+qt);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<qt?(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 Xt(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 Zt(e){return!e||e===`none`||e===`copy`}async function Qt(e){let t=e.override;if(t!=null&&t!==``)return Zt(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=Zt(r)?null:r;return e.cache?.write(i),i}var $t=me();function en(e){let t=JSON.stringify(e,tn);return(0,$t.createHash)(`sha256`).update(t??``).digest(`hex`)}function tn(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 nn(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var S=`\0unset`;function rn(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 an(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function on(e,t=nn(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:rn(e.encode.video),audio:an(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??S,pixelFormat:e.pixelFormat??S,decodeHwAccel:e.decodeHwAccel??S}}function sn(e,t=nn(e)){return`egress:${en(on(e,t))}`}var cn=m([`singleton`,`device`,`widget`]),ln=a({capName:g(),kind:cn,deviceId:o().optional(),reachable:v(),latencyMs:o(),error:g().optional()}),un=a({addonId:g(),caps:p(ln).readonly(),widgets:p(ln).readonly()}),dn=a({nodeId:g(),addons:p(un).readonly()}),fn=a({ok:v(),degraded:v(),checkedAt:g(),nodes:p(dn).readonly(),summary:a({total:o(),reachable:o(),unreachable:o()})}),pn=`hub-only`;function mn(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function hn(e){let t=mn(e).placement;return t===`any-node`||t===`agent-only`}function gn(e){return mn(e).placement===`agent-only`}function _n(e){return mn(e).group}function vn(e,t){return e.execution?.group??t}function yn(e){return mn(e).placement}function bn(e){return e.execution?.isolate===!0}var xn=`x-camstack-dataplane-secret`,Sn=[`grid-view`,`events-view`],Cn=m([`running`,`done`,`failed`,`cancelled`]),wn=m([`adopted`,`already-adopted`,`failed`,`cancelled`]),Tn=a({childNativeId:g(),outcome:wn,parentDeviceId:o().int().nonnegative().nullable(),accessoryCount:o().int().nonnegative(),error:g().nullable()}),En=a({jobId:g(),addonId:g(),integrationId:g(),state:Cn,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(Tn).readonly(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Dn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},On=m([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`]),kn=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`],An=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`)})]),jn=m([`no-provider`,`source-unreachable`,`not-configured`,`device-disabled`]),Mn=a({id:On,label:g(),costWhenOff:g(),available:v(),unavailableReason:jn.optional(),enabled:v(),authority:An}),Nn=a({deviceId:o().int(),switches:p(Mn).readonly(),fetchedAt:o()}),Pn=`detection-pipeline`,Fn=`audio-analysis`,In=`privacy-mask`,Ln={"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:Pn},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:In},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:In},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:Fn},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 Rn(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:!1,enabled:!1,unavailableReason:`not-configured`}:{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 zn(e){return kn.map(t=>{let n=Ln[t],r=Rn(n,e);return{id:n.id,label:n.label,costWhenOff:n.costWhenOff,available:r.available,...r.unavailableReason===void 0?{}:{unavailableReason:r.unavailableReason},enabled:r.enabled,authority:n.authority}})}function Bn(e){return e.filter(e=>Ln[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function Vn(e){let t=[],n=[];for(let r of kn){let i=Ln[r];if(!i.countsAsSwitchedOff)continue;let a=Rn(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var Hn=`__camstack_redacted__`;function Un(e){return e.type===`password`?!0:`secret`in e&&e.secret===!0}function Wn(e){let t=new Set;for(let n of qn(e))for(let e of Jn(n))Yn(e,t);return t}function Gn(e){for(let t of qn(e))if(Jn(t).length>0)return!0;return!1}function Kn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function qn(e){if(!Kn(e))return[];let t=e.sections;return Array.isArray(t)?t:[]}function Jn(e){if(!Kn(e))return[];let t=e.fields;return Array.isArray(t)?t:[]}function Yn(e,t){if(!Kn(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 Jn(e))Yn(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 Jn(e))Yn(n,t)}}var Xn=3e4,Zn=6e4,Qn=m([`confirmed`,`suppressed`,`exhausted-fallback`]),$n=a({id:g(),at:o().int(),deviceId:o().int(),sourceTrackId:g(),className:g(),verdict:Qn,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()}),er=a({deviceId:o().int().optional(),since:o().int().optional(),verdict:Qn.optional(),limit:o().int().min(1).max(5e3).optional()}),tr=5e3,nr=a({id:g(),note:g(),deviceId:o().int(),sourceTrackId:g(),archivedAt:o().int(),trackStartedAt:o().int().nullable(),trackClass:g().nullable(),trackLabel:g().nullable()}),rr=a({deviceId:o().int().optional(),limit:o().int().min(1).max(1e3).optional()}),ir={high:`High`,mid:`Mid`,low:`Low`};function ar(e){return ir[e]??e.charAt(0).toUpperCase()+e.slice(1)}function or(e){return(e.width??0)*(e.height??0)}function sr(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:or(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 cr(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function lr(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 ur(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function dr(e){return C(e)&&e.trim()?{url:e}:ur(e)&&C(e.url)&&e.url.trim()?{url:e.url,label:C(e.label)?e.label:void 0}:null}function fr(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=dr(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 pr(e){if(e.length===0)return{};let t=sr(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 mr={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},hr={debug:0,info:1,warn:2,error:3};function gr(e,t){return hr[e]<=hr[t]}var _r=m([`recording`,`events`]),vr=m([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),yr=m([`retention`,`quota`,`manual`,`operator`,`maintenance`,`orphaned-device`]),br=a({id:g(),at:o(),domain:_r,op:vr,reason:yr,deviceId:o().nullable(),nodeId:g(),itemsAffected:o(),bytesReclaimed:o(),detail:g().nullable(),actor:g()}),xr=a({deviceId:o().optional(),limit:o().int().min(1).max(1e3).optional()}),w=m([`high`,`mid`,`low`]),Sr=[`high`,`mid`,`low`],Cr=m([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),wr=a({width:o().int().positive(),height:o().int().positive()}),Tr=a({camStreamId:g().min(1),deviceId:o().int().nonnegative(),kind:Cr,url:g().optional(),codec:g().optional(),resolution:wr.optional(),fps:o().positive().optional(),label:g().optional(),deviceFeatures:p(g()).optional(),autoEligible:v().optional(),profileHint:w.optional(),metadata:r(g(),d()).optional()}),Er=m([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),Dr=a({deviceId:o().int().nonnegative(),profile:w,brokerId:g(),sourceCamStreamId:g().nullable(),status:Er,resolution:wr.optional(),codec:g().optional(),preBufferSec:o().nonnegative().optional(),errorMessage:g().optional()});function Or(e,t){return`${e}/${t}`}function kr(e,t){return`${e}/${t}`}function Ar(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 jr(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>Sr.indexOf(e.profile)-Sr.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 Mr=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()}),Nr=a({type:g(),url:g(),videoCodec:g().optional(),audioCodec:g().optional(),metadata:r(g(),d()).readonly().optional()}),Pr=a({type:m([`video`,`audio`]),data:_(Uint8Array),pts:o(),dts:o(),keyframe:v(),codec:g()}),Fr=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()}),Ir=m([`rgb`,`bgr`,`yuv420`,`gray`]),Lr=a({brokerId:g(),format:Ir,maxFps:o().positive().optional(),tag:g().optional()}),Rr=a({subscriptionId:g(),maxFps:o().nonnegative()}),zr=m(ge),Br=a({data:_(Uint8Array),sampleRate:o().int().positive(),channels:o().int().positive(),timestamp:o(),format:zr.optional()}),Vr=a({brokerId:g(),tag:g().optional(),accept:p(zr).readonly().optional()}),Hr=a({subscriptionId:g()}),Ur=m([`idle`,`connecting`,`streaming`,`error`,`stopped`]),Wr=a({status:Ur,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()}),Gr=a({profile:w,brokerId:g(),url:g(),mutedUrl:g(),enabled:v(),codec:g().optional(),resolution:wr.optional()}),Kr=a({id:g(),name:g(),category:g().optional(),description:g().optional(),icon:g().optional()}),qr=[`person`,`vehicle`,`animal`,`package`],Jr=[`person`,`vehicle`,`animal`];function Yr(e){return Jr.some(t=>t===e)}var Xr=a({mapping:r(g(),m(qr)),preserveOriginal:v()}),Zr={preMs:5e3,postMs:1e4},Qr=o().int().min(0).max(6),$r=/^([01]\d|2[0-3]):[0-5]\d$/,ei=m([`off`,`events`,`continuous`,`on-device-decision`]),ti=m(Jr),ni=e=>new Set(e).size===e.length,ri=a({motion:v().optional(),audioThresholdDbfs:o().optional(),objectClasses:p(ti).min(1).refine(ni,{message:`objectClasses must not repeat a class`}).optional(),sensorDeviceIds:p(o().int().positive()).min(1).max(16).refine(ni,{message:`sensorDeviceIds must not repeat a device`}).optional()}),ii=m([`continuous`,`events`]),ai=ri,oi=a({days:p(Qr),start:g().regex($r),end:g().regex($r),mode:ii,triggers:ai.optional(),preBufferSec:o().min(0).optional(),postBufferSec:o().min(0).optional()}),si={postBufferSec:30};function ci(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 li=si.postBufferSec*1e3,ui=a({maxAgeDays:o().min(0).optional(),maxSizeGb:o().min(0).optional()}),di=a({enabled:v(),mode:ei.optional(),profiles:p(w).optional(),segmentSeconds:o().int().positive().optional(),bands:p(oi).default([]),deviceDecision:v().optional(),retention:ui.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 fi(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 pi=[`high`,`low`];function mi(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=>pi.includes(e));return n.length>0?n:[...e]}var hi=[`motion`,`audioThresholdDbfs`,`objectClasses`,`sensorDeviceIds`];function gi(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function _i(e){return gi(e)&&gi(e.triggers)&&e.triggers.deviceSignal===!0}function vi(e){let t=e.triggers;return gi(t)?hi.some(e=>t[e]!==void 0):!1}function yi(e){let t=e.triggers;if(!gi(t))return e;let{deviceSignal:n,...r}=t;return{...e,triggers:r}}function bi(e){let t={value:e,migrated:!1,strippedOnly:!1};if(!gi(e)||!Array.isArray(e.bands)||!e.bands.some(_i))return t;let n=[];for(let t of e.bands){if(!_i(t)||!gi(t)){n.push(t);continue}vi(t)&&n.push(yi(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 xi=m([`queued`,`running`,`done`,`failed`,`cancelled`]),Si=a({jobId:g(),state:xi,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()}),Ci=m([`recordings`,`recordingsLow`]),wi=a({fromLocationId:g(),toLocationId:g(),entities:p(m([`segments`])).optional(),footageClass:Ci.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)}),Ti=wi.extend({leaseId:g().min(1)}),Ei=m([`move`,`seal`,`gallery`]),Di=a({toLocationId:g(),fromLocationId:g().optional(),throttleMbps:o().min(1).max(1e3).optional(),mode:Ei.optional()}),Oi=a({present:v(),rows:o().int().nonnegative().nullable()}),ki=a({media:Oi,retrainFrames:Oi,anyPresent:v(),total:o().int().nonnegative().nullable()}).nullable(),Ai=Di.extend({leaseId:g().min(1)}),ji=m([`recordings`,`recordingsLow`,`eventMedia`,`backups`,`galleryMedia`]),Mi=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`}),Ni=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(),Pi=m([`blocking`,`nonBlocking`]),Fi=a({destinations:Mi,sources:Ni,throttleMbps:o().min(1).max(1e3).optional(),mode:Pi.optional()}),Ii=m([`planning`,`sealing`,`pausing`,`moving`,`draining`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),Li=m([`pipeline`,`recorder`,`analytics`]),Ri=a({filesMoved:o().int().nonnegative(),filesTotal:o().int().nonnegative().nullable(),bytesMoved:o().int().nonnegative(),rowsReconciled:o().int().nonnegative().optional(),startedAt:o(),observedAt:o()}),zi=a({storageClass:ji,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional(),moverJobId:g().nullable(),state:xi.nullable(),error:g().nullable(),progress:Ri.nullable()}),Bi=a({jobId:g(),phase:Ii,mode:Pi,destinations:Mi,sources:Ni,throttleMbps:o(),moves:p(zi),pauseLeaseId:g().nullable(),pausedParticipants:p(Li),repointed:v(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Vi=m([`sharesDeviceWithSource`,`deviceIdentityUnknown`,`unstampedEventMediaRows`,`blockingOnly`,`noMover`]),Hi=a({code:Vi,storageClass:ji,message:g()}),Ui=a({destinations:Mi,sources:Ni,mode:Pi,moves:p(a({storageClass:ji,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional()})),findings:p(Hi)}),Wi=m([`footage`,`media`]),Gi=a({lane:Wi,job:Si,migrationJobId:g().nullable(),observedAt:o()}),Ki=a({storageClass:ji,fromLocationId:g(),toLocationId:g(),items:o().int().nonnegative().nullable(),bytes:o().int().nonnegative().nullable()}),qi=a({classes:p(ji).min(1),throttleMbps:o().min(1).max(1e3).optional()}),Ji=a({fromLocationId:g().min(1),footageClass:Ci.optional()}),Yi=a({segments:o().int().nonnegative(),bytes:o().int().nonnegative()}).nullable(),Xi=a({locationId:g().min(1),apply:v().optional(),deviceId:o().int().positive().optional(),profiles:p(g().min(1)).optional()}),Zi=m([`location-unknown`,`source-writable`,`no-ledger`,`archive-unreadable`,`anchor-absent`,`anchor-unreadable`,`anchor-moved`]),Qi=m([`live-tail`,`listing-error`,`path-mismatch`,`durable-refused`]),$i=a({"live-tail":o().int().nonnegative(),"listing-error":o().int().nonnegative(),"path-mismatch":o().int().nonnegative(),"durable-refused":o().int().nonnegative()}),ea=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()}),ta=a({locationId:g(),applied:v(),refused:Zi.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:$i,bounded:v(),byDevice:p(ea).readonly()}),na=a({rows:o().int().nonnegative()}).nullable(),ra=a({toLocationId:g().min(1),fromLocationId:g().optional(),mode:Ei.optional()}),ia=m([`orphans`,`debug-media`,`ghost-ledger`,`done`,`failed`,`cancelled`]),aa=a({includeDebugMedia:v().optional()}),oa=a({jobId:g(),phase:ia,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()}),sa=a({jobId:g().optional()}),ca=[`face`,`plate`],la=[`face`,`plate`,`clip`,`custom`],ua=[`active`,`readonly`,`drain`,`disabled`],da=m(ua),fa=m([`normal`,`never`,`drain`]),pa=`readOnly`;function ma(e){return e===`active`}function ha(e){return e!==`disabled`}function ga(e){switch(e){case`active`:return`normal`;case`drain`:return`drain`;case`readonly`:case`disabled`:return`never`}}function _a(e){return e.mode===void 0&&(e.config.readOnly===!0||e.enabled===!1)?`readonly`:null}function va(e){return(ya(e.mode)?e.mode:void 0)??_a(e)??`active`}function ya(e){return ua.some(t=>t===e)}function ba(e){return ma(va(e))}function xa(e){return ha(va(e))}function Sa(e){return ga(va(e))}function Ca(e){if(!(`readOnly`in e))return e;let t={...e};return delete t[pa],t}function wa(e,t){return{...e,mode:t,enabled:ma(t),config:Ca(e.config)}}var Ta=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:da.optional(),capacity:a({totalBytes:o(),availableBytes:o()}).nullable().optional(),owned:a({bytes:o().int().nonnegative(),measuredAtMs:o().int().nonnegative()}).optional(),createdAt:o(),updatedAt:o()}),Ea=a({isDefault:v().optional()});function Da(e){return ba({...e,config:e.config??{}})}var Oa=1024**3;function ka(e){return Math.floor(e*Oa)}var Aa=a({locationId:g(),startedAtMs:o(),startBytes:o(),bytesRemaining:o(),drained:v(),estimatedEmptyAtMs:o().nullable()}),O=l([Ta,g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),ja=m([`local-path`,`cap-mediated`]),Ma=`local-path`,Na=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:ja.optional(),defaultsTo:g().optional(),defaultRoot:m([`data`,`media`,`backup`]).optional()}),Pa=a({inputFps:o(),outputFps:o(),avgDecodeTimeMs:o(),droppedFrames:o(),lagMs:o().optional(),effectiveFps:o().optional(),adaptiveFps:o().optional()}),Fa=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()}),Ia={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},La={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},Ra=[{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:Ia},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ia},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ia},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ia},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ia},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Ia},{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:La},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:La},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:La},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:La},{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 za(e){return Ra.find(t=>t.id===e)}var Ba=m([`info`,`warn`,`error`]),Va=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:Ba,perDevice:v()}),Ha=a({channel:g().min(1),armedUntilMs:o(),deviceIds:p(o().int()).readonly().nullable()}),Ua=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}},Wa=class{gates=new Map;declare(e){let t=Va.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 Ua(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}},Ga=null;function Ka(){return Ga??=new Wa,Ga}function qa(e){return Ka().declare(e)}function Ja(){Ga=null}var Ya=5e3;function Xa(e,t={}){let n=Ka(),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 Za=1024,Qa=`other`;function $a(e,t,n){return n===void 0?`${e}${t}`:`${e}${t}${n}`}var eo=class{maxKeys;maxReasons;counters=new Map;refused=0;constructor(e=Za,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=$a(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:Qa;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 to(e){return e.attempts<=0?null:(e.attempts-e.succeeded)/e.attempts}var no=`__unattributed__`,ro=`__root__`;function io(e){return e.addonId===null?e.classification===`root`?{key:ro,kind:`root`}:{key:no,kind:`unattributed`}:{key:e.addonId,kind:`addon`}}function ao(e){return Math.round(e*10)/10}function oo(e,t){let n=new Map;for(let t of e){let{key:e,kind:r}=io(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?ao(n.main):null,i=n.splitKnown?ao(n.gc):null,a=ao(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 so(e,t){return e===null||t===null?null:e<t?e:t}function co(e,t){return e===null||t===null?null:e>t?e:t}function lo(e,t,n){return{atMs:n,samples:e.samples+t.samples,cpuMainPercent:co(e.cpuMainPercent,t.cpuMainPercent),cpuMainPercentMin:so(e.cpuMainPercentMin,t.cpuMainPercentMin),cpuGcPercent:co(e.cpuGcPercent,t.cpuGcPercent),cpuGcPercentMin:so(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 uo(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 fo(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}:lo(a,i,e))}return[...r.values()].toSorted((e,t)=>e.atMs-t.atMs)}var po=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${ho(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function mo(e,t){return`${e}|${ho(t)}`}function ho(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function go(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function _o(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 vo=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??yo(),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(mo(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=mo(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&&go(r.state)<=go(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} (${ho(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&&_o(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 po(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${ho(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(Ke(`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=mo(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} (${ho(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&&_o(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} (${ho(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&_o(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 yo(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function bo(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function xo(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=So(e,s);if(t)return a(t)}}return a(o[0])}function So(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)=>pt(e.pixels,t.pixels,n))[0]?.entry}var Co=[`motion`,`objects`,`discarded`,`stationary`],wo=[`motion`,`objects`,`stationary`],To={borderWidth:2,dashed:!0,dashPattern:[6,4],opacity:1,borderRadius:2};function Eo(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 Do=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],Oo={yolo26:`YOLO26`,yolov9:`YOLOv9`};function ko(e){return Oo[e]??e.toUpperCase()}var Ao=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function jo(e,t){let n=ko(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(Ao,``).trim();return r.length>0?r:t}function Mo(e,t){let n=[];return t===`fast`&&n.push(`Fast`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function No(e){return Do.filter(t=>e.formats[t]!==void 0)}function Po(e){let t=Do.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var Fo=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],Io=[`fp32`,`int8`];function Lo(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:Mo(t,n),formats:No(e),sizeMB:Po(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?Io.indexOf(e.precision)-Io.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?jo(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=Fo.indexOf(e.tier),r=Fo.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:ko(e),tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function Ro(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 zo(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 Bo=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],Vo=a({url:g(),sizeMB:o(),isDirectory:v().optional(),files:p(g()).readonly().optional(),runtimes:p(m([`node`,`python`])).readonly().optional()}),Ho=a({url:g(),filename:g(),sizeMB:o()}),Uo=a({onnx:Vo.optional(),coreml:Vo.optional(),openvino:Vo.optional(),tflite:Vo.optional(),pt:Vo.optional(),gguf:Vo.optional()}),Wo=a({family:g(),tier:g(),precision:m([`fp32`,`int8`]).optional(),optimization:m([`standard`,`fast`]).optional(),resolution:o().int().positive().optional()}),Go=[`camstack`,`frigate`,`scrypted`,`custom`],Ko=m(Go);function qo(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 Jo=a({id:g(),name:g(),description:g(),formats:Uo,inputSize:a({width:o(),height:o()}),inputChannels:o().int().positive().optional(),labels:p(Kr).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(Ho).readonly().optional(),legacy:v().optional(),metrics:a({map50:o().optional(),p95LatencyMs:r(g(),o()).optional()}).optional(),license:g().optional(),group:Wo.optional(),provider:Ko.optional(),classMap:Xr.optional()}),Yo=b(`format`,[a({format:y(`openvino`),precisions:p(m([`fp16`,`int8`])).min(1).readonly()}),a({format:y(`coreml`)})]),Xo=a({id:g().regex(/^[a-zA-Z0-9._-]+$/),name:g(),labels:p(Kr).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:Xr.optional()}),Zo=a({format:m(Bo),precision:m([`fp16`,`int8`]).optional(),sizeMB:o(),validated:v(),files:p(g()).readonly()}),Qo=a({entry:Jo,artifacts:p(Zo).readonly()});function $o(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function es(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function ts(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function ns(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 rs(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=$o(e.method);return ts(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 is(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 as(e,t){return e.map((e,n)=>j(e,t,n))}var os=1/0,ss={min:{minArgs:1,maxArgs:os,apply:e=>M(Math.min(...as(e,`min`)),`min`)},max:{minArgs:1,maxArgs:os,apply:e=>M(Math.max(...as(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:os,apply:e=>{let t=as(e,`avg`);return M(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:os,apply:e=>M(as(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:os,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=is(e[1],`convert`,1).trim(),i=is(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`)}}},cs=Object.freeze(Object.assign(Object.create(null),ss)),ls=new Set(Object.keys(ss)),us=2048,ds=4096,fs=/^[A-Za-z_][A-Za-z0-9_]*$/,ps=new Set([`now`,`true`,`false`,`null`]),ms=new Set([`true`,`false`,`null`]);function hs(e){return e>=`0`&&e<=`9`}function gs(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function _s(e){return gs(e)||hs(e)}function vs(e){return e===` `||e===` `||e===`
|
|
3
3
|
`||e===`\r`||e===`\f`||e===`\v`}function ys(e){if(e.length>2048)throw new k(`expression too long (${e.length} > ${us} chars)`,0);let t=[],n=0,r=e.length;for(;n<r;){let i=e[n];if(vs(i)){n+=1;continue}if(hs(i)){let i=n;for(;n<r&&hs(e[n]);)n+=1;if(n<r&&e[n]===`.`){if(n+1>=r||!hs(e[n+1]))throw new k(`malformed number: decimal point needs a digit`,n);for(n+=1;n<r&&hs(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(gs(i)){let i=n;for(;n<r&&_s(e[n]);)n+=1;let a=e.slice(i,n);ms.has(a)?t.push({type:`keyword`,keyword:bs(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(xs(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 bs(e){return e===`true`?`true`:e===`false`?`false`:`null`}function xs(e){return e===`(`||e===`)`||e===`,`||e===`?`||e===`:`||e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`!`||e===`<`||e===`>`}var Ss={"||":1,"&&":2,"==":3,"!=":3,"<":4,"<=":4,">":4,">=":4,"+":5,"-":5,"*":6,"/":6,"%":6};function Cs(e){return e===`&&`||e===`||`}function ws(e){return e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`==`||e===`!=`||e===`<`||e===`<=`||e===`>`||e===`>=`}var Ts=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=Ss[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(),Cs(i))t={kind:`logical`,op:i,left:t,right:a};else if(ws(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(!ls.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 Es(e){return new Ts(ys(e)).parse()}var Ds=new Map;function Os(e){let t=Ds.get(e);if(t!==void 0)return Ds.delete(e),Ds.set(e,t),t;let n;try{n={ok:!0,parsed:Es(e)}}catch(e){n={ok:!1,error:e instanceof k?e.message:String(e)}}if(Ds.set(e,n),Ds.size>256){let e=Ds.keys().next().value;e!==void 0&&Ds.delete(e)}return n}function ks(e){let t=Os(e);if(t.ok)return t.parsed;throw new k(t.error)}function As(e){return Os(e)}var js=Object.freeze({});function Ms(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 Ns(e){return typeof e==`number`&&Number.isFinite(e)}function Ps(e){return!!e}function Fs(e,t){if(!Number.isFinite(e))throw new A(`${t} produced a non-finite result`);return e}function Is(e){if(e.steps+=1,e.steps>e.maxSteps)throw new A(`expression evaluation step budget exceeded`)}function N(e,t){switch(Is(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 Ls(e.op,N(e.operand,t));case`binary`:return Rs(e.op,N(e.left,t),N(e.right,t));case`logical`:{let n=N(e.left,t);return e.op===`&&`?Ps(n)?N(e.right,t):n:Ps(n)?n:N(e.right,t)}case`conditional`:return Ps(N(e.test,t))?N(e.consequent,t):N(e.alternate,t);case`call`:return zs(e.callee,e.args.map(e=>N(e,t)),t.hooks)}}function Ls(e,t){if(e===`!`)return!Ps(t);if(!Ns(t))throw new A(`unary "-" requires a finite number`);return Fs(-t,`unary "-"`)}function Rs(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(Ns(t)&&Ns(n))return Fs(t+n,`"+"`);throw new A(`"+" requires two numbers or two strings`);case`-`:case`*`:case`/`:case`%`:if(!Ns(t)||!Ns(n))throw new A(`"${e}" requires two finite numbers`);return Fs(e===`-`?t-n:e===`*`?t*n:e===`/`?t/n:t%n,`"${e}"`);case`<`:case`<=`:case`>`:case`>=`:if(Ns(t)&&Ns(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 zs(e,t,n){if(!Object.prototype.hasOwnProperty.call(cs,e))throw new A(`unknown function: ${e}`);let r=cs[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 Bs(e,t,n){return N(e,{scope:t,hooks:n?.hooks??js,maxSteps:n?.maxSteps??4096,steps:0})}function Vs(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 Hs(e){let t=Object.keys(e.bindings);if(t.length>32)return`too many bindings (${t.length} > 32)`;for(let e of t){if(!fs.test(e))return`invalid binding name '${e}'`;if(ps.has(e))return`binding name '${e}' is reserved`;if(ls.has(e))return`binding name '${e}' shadows a builtin function`}let n=As(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 Us(e,t,n,r){let i=As(e);if(!i.ok)return{ok:!1,error:i.error};let a=Ms({...t,now:n});try{return{ok:!0,value:Bs(i.parsed.ast,a,r)}}catch(e){return{ok:!1,error:e instanceof A?e.message:String(e)}}}var Ws=a({kind:y(`field`).optional(),sourceKey:g(),cap:g(),fieldPath:g()}),Gs=a({kind:y(`literal`),value:l([g(),o(),v(),le()])}),Ks=a({kind:y(`global`),sourceStableId:g(),cap:g(),fieldPath:g()}),qs=l([Ws,Gs,Ks]),Js=a({expr:g().min(1).max(us),bindings:r(g().regex(fs),qs)}).superRefine((e,t)=>{let n=Hs(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),Ys=m([`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`contains`,`in`]),Xs=a({kind:y(`condition`),deviceId:o().int().nonnegative(),cap:g().min(1),fieldPath:g().min(1),operator:Ys,value:l([g(),o(),v(),p(l([g(),o()]))])}),Zs=a({kind:y(`expression`),expr:g().min(1).max(us),bindings:r(g().regex(fs),qs)}).superRefine((e,t)=>{let n=Hs(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),Qs=i(()=>b(`kind`,[a({kind:y(`all`),children:p(Qs)}),a({kind:y(`any`),children:p(Qs)}),a({kind:y(`not`),child:Qs}),Xs,Zs])),$s=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`)})]),ec=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)})]),tc=a({triggers:p($s),conditions:Qs.optional(),actions:p(ec)});function nc(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return 1+nc(e.child);let t=e.children;if(t.length===0)return 1;let n=0;for(let e of t){let t=nc(e);t>n&&(n=t)}return 1+n}function rc(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return rc(e.child);let t=0;for(let n of e.children)t+=rc(n);return t}function ic(e){return e.kind===`condition`||e.kind===`expression`?!1:e.kind===`not`?ic(e.child):e.children.length===0?!0:e.children.some(ic)}function ac(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(ic(t))return`a condition group is empty — group existing rows instead of leaving a container to fill`;let e=nc(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=rc(t);if(n>32)return`conditions use ${n} leaves — the limit is 32`}return null}var oc=15e3;function P(e){return JSON.stringify(e)}function sc(e,t){switch(e.kind){case`all`:return`allOf([\n${e.children.map(e=>`${t} () => ${sc(e,`${t} `)}`).join(`,
|
|
4
4
|
`)}\n${t}])`;case`any`:return`anyOf([\n${e.children.map(e=>`${t} () => ${sc(e,`${t} `)}`).join(`,
|
|
5
5
|
`)}\n${t}])`;case`not`:return`notOf(() => ${sc(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 cc(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-
|
|
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-C4R1ot5Y.js";import"./src-BlkUL-F8.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};
|
package/dist/assets/{use-stationary-objects-C8DfKVLu.js → use-stationary-objects-C7yQYI6G.js}
RENAMED
|
@@ -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-
|
|
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-C4R1ot5Y.js";import"./src-BlkUL-F8.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-BlkUL-F8.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{kc as a}from"./src-
|
|
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{kc as a}from"./src-BlkUL-F8.js";import{s as o}from"./index-eyM91djI.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{_t as e}from"./player-overlays-C4R1ot5Y.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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_t as e}from"./player-overlays-
|
|
1
|
+
import{_t as e}from"./player-overlays-C4R1ot5Y.js";var t=e(`video`,[[`path`,{d:`m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5`,key:`ftymec`}],[`rect`,{x:`2`,y:`6`,width:`14`,height:`12`,rx:`2`,key:`158x01`}]]);export{t};
|