@camstack/addon-admin-ui 1.2.220 → 1.2.222

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/assets/{AddonCollectionPage-BlUfvfw2.js → AddonCollectionPage-CP30M6Xd.js} +1 -1
  2. package/dist/assets/{Addons-DrIny1O6.js → Addons-Bha_MP6d.js} +1 -1
  3. package/dist/assets/{AdminTabs-5-gPZ0Kn.js → AdminTabs-BsdQ0tzR.js} +1 -1
  4. package/dist/assets/{AiProfiles-BGK6vdGd.js → AiProfiles-BF-sr0EU.js} +1 -1
  5. package/dist/assets/{BrokerForm-BZ-3xeKo.js → BrokerForm-Cmog_ICk.js} +1 -1
  6. package/dist/assets/{Build-kFgP-WgJ.js → Build-D5konfPU.js} +1 -1
  7. package/dist/assets/{Capabilities-CyWMzHRe.js → Capabilities-Dw8bE8aj.js} +1 -1
  8. package/dist/assets/{CapabilityBadges-ucAVtIkj.js → CapabilityBadges-CuMb0n3k.js} +1 -1
  9. package/dist/assets/{Cluster-Dui4ToEg.js → Cluster-Cs4QSLO-.js} +1 -1
  10. package/dist/assets/{Data-D4-5tq_1.js → Data-BZ1lKgZg.js} +1 -1
  11. package/dist/assets/{DetectionIntelligence-Fj5CMhso.js → DetectionIntelligence-DB0F7N3T.js} +1 -1
  12. package/dist/assets/{DeviceAggregateSection-kpLeKiTS.js → DeviceAggregateSection-DnGT86C5.js} +1 -1
  13. package/dist/assets/{DeviceDetail-CSQMOxZd.js → DeviceDetail-BMiSxO15.js} +1 -1
  14. package/dist/assets/{Devices-gY-v5kkh.js → Devices-NAWRw5wa.js} +1 -1
  15. package/dist/assets/{EmbedPlayerPage-CecyDGW8.js → EmbedPlayerPage-LlUWTDkS.js} +1 -1
  16. package/dist/assets/{Events-CfUp6yDf.js → Events-Si6ERDdC.js} +1 -1
  17. package/dist/assets/{FormBuilder-CRvIrlLp.js → FormBuilder-C8gnBVC5.js} +1 -1
  18. package/dist/assets/{Identity-BnXDNCKM.js → Identity-B_IijttW.js} +1 -1
  19. package/dist/assets/{IntegrationDetail-sq-_KfSy.js → IntegrationDetail-C0cEOY65.js} +1 -1
  20. package/dist/assets/{Integrations-CFbG5gGn.js → Integrations-BggHj0lo.js} +1 -1
  21. package/dist/assets/{Integrations-CpCu0v-S.js → Integrations-BgmuP3-x.js} +1 -1
  22. package/dist/assets/{Locations-DVZ1pgvZ.js → Locations-DnBr1V6n.js} +1 -1
  23. package/dist/assets/{Logs-dWqqkYjm.js → Logs-Dp4lyTXL.js} +1 -1
  24. package/dist/assets/{MotionZonesSettings-L5KsSaSS.js → MotionZonesSettings-BP4iLCnL.js} +1 -1
  25. package/dist/assets/{MyAccess-CtrCjb7B.js → MyAccess-D4cdXHNK.js} +1 -1
  26. package/dist/assets/{Network-Cw05d-ss.js → Network-Dap096Bz.js} +1 -1
  27. package/dist/assets/{NodeAddonsSettingsPanel-Bl440HH5.js → NodeAddonsSettingsPanel-B4W4cKn4.js} +1 -1
  28. package/dist/assets/{NodeInferenceDevices-HqQG8pwt.js → NodeInferenceDevices-MbWMz90L.js} +1 -1
  29. package/dist/assets/{Notifications-Cvht9t4j.js → Notifications-C8aSMirV.js} +1 -1
  30. package/dist/assets/{Pipeline-BpzNx76x.js → Pipeline-BAVXPcSV.js} +1 -1
  31. package/dist/assets/{Plates-C1nuzHDA.js → Plates-Be5ALnxb.js} +1 -1
  32. package/dist/assets/{PrivacyMaskSettings-CI2Aktcg.js → PrivacyMaskSettings-DLo78I1l.js} +1 -1
  33. package/dist/assets/{ProviderIcon-BTXWVchY.js → ProviderIcon-D-xkqn7M.js} +1 -1
  34. package/dist/assets/{Recordings-B0Di1Kuc.js → Recordings-3-NPo1vx.js} +1 -1
  35. package/dist/assets/{ScanNetworkModal-DIKQfIaN.js → ScanNetworkModal-CPsZUd6l.js} +1 -1
  36. package/dist/assets/{SceneMonitorEditor-DkKZQhiY.js → SceneMonitorEditor-CKlIlEJF.js} +1 -1
  37. package/dist/assets/{Scenes-CkDw7Buo.js → Scenes-DYHjUsyX.js} +1 -1
  38. package/dist/assets/{Settings-yghNKb0A.js → Settings-DaQ5xSwl.js} +1 -1
  39. package/dist/assets/{Showroom-BBZX-oIm.js → Showroom-BXQfska2.js} +1 -1
  40. package/dist/assets/{StorageLocationsPanel-7-Ye4w7a.js → StorageLocationsPanel-DU7bi57b.js} +1 -1
  41. package/dist/assets/{Terminal-DxXtgQyc.js → Terminal-BozopgHe.js} +1 -1
  42. package/dist/assets/{Viewer-D7-Mx4nV.js → Viewer-BNVZrYSz.js} +1 -1
  43. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-BuVBGgzb.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DwjZTS9z.js} +1 -1
  44. package/dist/assets/{authed-media-vDvEbWGl.js → authed-media-CJXL05ZC.js} +1 -1
  45. package/dist/assets/{bell-off-CdKw7KuP.js → bell-off-cMbne4qJ.js} +1 -1
  46. package/dist/assets/{boxes-Bduf8SdQ.js → boxes-C3ArB2zb.js} +1 -1
  47. package/dist/assets/circle-slash-Dk-_Uk1o.js +1 -0
  48. package/dist/assets/{debounced-invalidate-C94KSlOl.js → debounced-invalidate-DavDZR3F.js} +1 -1
  49. package/dist/assets/{dist-CldYeITD.js → dist-B0TjVCvC.js} +1 -1
  50. package/dist/assets/{dist-CaOsgzw_.js → dist-B0fAQA-M.js} +1 -1
  51. package/dist/assets/{face-bbox-BtPf-ilu.js → face-bbox-CyVxIWlv.js} +1 -1
  52. package/dist/assets/{hard-drive-download-DeBKVX42.js → hard-drive-download-BrovS-vT.js} +1 -1
  53. package/dist/assets/{hostInit-C1QdtVyl.js → hostInit-D0anikJ0.js} +1 -1
  54. package/dist/assets/{index-Ccfk4_gz.js → index-CBGnYUQw.js} +3 -3
  55. package/dist/assets/{key-round-ClG4wHuA.js → key-round-D8LsW4TE.js} +1 -1
  56. package/dist/assets/{layers-CPAaCU5T.js → layers-k6pCitz4.js} +1 -1
  57. package/dist/assets/{location-owned-usage-CwdgizXy.js → location-owned-usage-ylBszKoH.js} +1 -1
  58. package/dist/assets/{mf-entry-bootstrap-0-d787cca4.js → mf-entry-bootstrap-0-9682d8c1.js} +2 -2
  59. package/dist/assets/{player-overlays-CvqXF-1v.js → player-overlays-CKzRSmyl.js} +1 -1
  60. package/dist/assets/remoteEntry-Cm3BbEJw.js +1 -0
  61. package/dist/assets/{send-BWpJsCGH.js → send-DWNscK_K.js} +1 -1
  62. package/dist/assets/{settings-2-BDfftML8.js → settings-2-BGUkneGT.js} +1 -1
  63. package/dist/assets/{square-check-big-CNV0AJio.js → square-check-big-Dl7PAeem.js} +1 -1
  64. package/dist/assets/{src-DqYmvBaa.js → src-B8-bKekW.js} +1 -1
  65. package/dist/assets/{src-s8gzctWs.js → src-DuYDOsGj.js} +3 -3
  66. package/dist/assets/{use-scenes-feed-CQwemdP3.js → use-scenes-feed-BWW_X-MO.js} +1 -1
  67. package/dist/assets/{use-stationary-objects-BDuk3_zb.js → use-stationary-objects-BAiWMKQ6.js} +1 -1
  68. package/dist/assets/useEventInvalidation-umYj5occ.js +1 -0
  69. package/dist/assets/{useNodeUrlSelection-DUNrAfpl.js → useNodeUrlSelection-BpvwIEkQ.js} +1 -1
  70. package/dist/assets/user-round-epyUHZw8.js +1 -0
  71. package/dist/assets/{video-BIMAIQNk.js → video-CCg4IOvi.js} +1 -1
  72. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BZi_1wCB.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-C5UpdReq.js} +2 -2
  73. package/dist/index.html +5 -5
  74. package/dist/server/addon.js +1 -1
  75. package/package.json +1 -1
  76. package/dist/assets/circle-slash-BrTYtQXl.js +0 -1
  77. package/dist/assets/remoteEntry-BZ5qcsH_.js +0 -1
  78. package/dist/assets/useEventInvalidation-CH81-z9K.js +0 -1
  79. package/dist/assets/user-round-CpIa7709.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.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.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