@camstack/addon-admin-ui 1.2.352 → 1.2.353

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 (82) hide show
  1. package/dist/assets/{Addons-CGDc3MCi.js → Addons-CSSlxmKX.js} +1 -1
  2. package/dist/assets/{AdminTabs-CZPAmhas.js → AdminTabs-D2EUE5A0.js} +1 -1
  3. package/dist/assets/{AiProfiles-Cb885xLi.js → AiProfiles-ZTs3hQfG.js} +1 -1
  4. package/dist/assets/{BrokerForm-CHyLrgZU.js → BrokerForm-jvEIkwfE.js} +1 -1
  5. package/dist/assets/{Build-Cq1iHbS5.js → Build-D-cQZg2g.js} +1 -1
  6. package/dist/assets/{Calendars-Bp7O4Q0e.js → Calendars-BCpPE1jT.js} +1 -1
  7. package/dist/assets/{Capabilities-BwrQQsWg.js → Capabilities-WsxtQm6G.js} +1 -1
  8. package/dist/assets/{Cluster-BxZqJz_z.js → Cluster-BZpFTXoQ.js} +1 -1
  9. package/dist/assets/{ClusterStepModel-BXQrb9-2.js → ClusterStepModel-Hz5Uy3Lc.js} +1 -1
  10. package/dist/assets/{CompositionEditor-CWseh3e4.js → CompositionEditor-DlXjZmuS.js} +1 -1
  11. package/dist/assets/{CompositionEditorPage-B6M-10Ch.js → CompositionEditorPage-DN1jwFte.js} +1 -1
  12. package/dist/assets/{Data-8_oyAAFm.js → Data-BiwkrKto.js} +1 -1
  13. package/dist/assets/{DetectionIntelligence-ZAxkWwsC.js → DetectionIntelligence-C_6PVnNp.js} +1 -1
  14. package/dist/assets/{DeviceDetail-CZeHFThw.js → DeviceDetail-Dd16eq5_.js} +1 -1
  15. package/dist/assets/{DeviceDoActionFields-rqWve7Cc.js → DeviceDoActionFields-C9efvuLy.js} +1 -1
  16. package/dist/assets/{Devices-KcQPMfTP.js → Devices-uRSR1KF9.js} +1 -1
  17. package/dist/assets/{EmbedPlayerPage-jqACjBI1.js → EmbedPlayerPage-B0M5LCl6.js} +1 -1
  18. package/dist/assets/{Events-BF592qf_.js → Events-BqYGW97U.js} +1 -1
  19. package/dist/assets/{Identity-Cts1UzJ3.js → Identity-CwF15mWM.js} +1 -1
  20. package/dist/assets/{IntegrationDetail-CPXel_5q.js → IntegrationDetail-KiizjQky.js} +1 -1
  21. package/dist/assets/{IntegrationHub-P7DZLhMu.js → IntegrationHub-CtZ9pFUl.js} +1 -1
  22. package/dist/assets/{Integrations-BkAo2E4O.js → Integrations-5D0W0NO_.js} +1 -1
  23. package/dist/assets/{Integrations-COJxgwuo.js → Integrations-8JethkBu.js} +1 -1
  24. package/dist/assets/{Locations-CHSHPbFF.js → Locations-C0VGgBDh.js} +1 -1
  25. package/dist/assets/{Logs-DRTuZa-s.js → Logs-BdD9ktZ1.js} +1 -1
  26. package/dist/assets/{MotionZonesSettings-BWlY0uhl.js → MotionZonesSettings-BMZDT9aS.js} +1 -1
  27. package/dist/assets/{MyAccess-C4ubGrSr.js → MyAccess-VT-IYS_0.js} +1 -1
  28. package/dist/assets/{Network-BOzx7hn8.js → Network-DAS4ofeO.js} +1 -1
  29. package/dist/assets/{NodeAddonsSettingsPanel-DaKtOtU5.js → NodeAddonsSettingsPanel-2ImNi4l_.js} +1 -1
  30. package/dist/assets/{Notifications-D_GaC55O.js → Notifications-CtpsBCVg.js} +1 -1
  31. package/dist/assets/{Plates-Di4sfAWp.js → Plates-DRYDfqhl.js} +1 -1
  32. package/dist/assets/{PrivacyMaskSettings-z1qT12AK.js → PrivacyMaskSettings-e1shTFq0.js} +1 -1
  33. package/dist/assets/{Recordings-BmNingKf.js → Recordings-Cp1t8Lsr.js} +1 -1
  34. package/dist/assets/{ScanNetworkModal-ByV68CCf.js → ScanNetworkModal-CtcUY86A.js} +1 -1
  35. package/dist/assets/{SceneMonitorEditor-DqvGdipD.js → SceneMonitorEditor-B8SaYaRg.js} +1 -1
  36. package/dist/assets/{Scenes-_7asi5eD.js → Scenes-UX3CQiSD.js} +1 -1
  37. package/dist/assets/{Settings-FlIRnDpv.js → Settings-hvJAx444.js} +1 -1
  38. package/dist/assets/{Showroom-DBp7iZ0G.js → Showroom-DGF0GI0t.js} +1 -1
  39. package/dist/assets/{Terminal-K34D1Ywo.js → Terminal-CnAgipZG.js} +1 -1
  40. package/dist/assets/{Viewer-BYJtbGy9.js → Viewer-u429VTlj.js} +1 -1
  41. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-VirN8RQI.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-Dmoq9iz_.js} +1 -1
  42. package/dist/assets/{archive-BCuy69tM.js → archive-DEGN5b-2.js} +1 -1
  43. package/dist/assets/{authed-media-C08zoxUE.js → authed-media-zoQQL-DU.js} +1 -1
  44. package/dist/assets/{boxes-Co2Q90CO.js → boxes-D53xb3mF.js} +1 -1
  45. package/dist/assets/circle-slash-g5R19IPN.js +1 -0
  46. package/dist/assets/{client-Diiyoh60.js → client-CxHFB-xR.js} +1 -1
  47. package/dist/assets/crop-DTBzwOc0.js +1 -0
  48. package/dist/assets/{debounced-invalidate-4bQv6974.js → debounced-invalidate-Di49k3Ur.js} +1 -1
  49. package/dist/assets/{device-integration-icon-DMx3ZoRE.js → device-integration-icon-C44r3pOz.js} +1 -1
  50. package/dist/assets/device-picker-model-Y21yLCDr.js +1 -0
  51. package/dist/assets/{dist-Lw8PosIF.js → dist-B_y7Xf3Y.js} +1 -1
  52. package/dist/assets/{dist-CupfglO0.js → dist-CupCPVu2.js} +1 -1
  53. package/dist/assets/{face-bbox-UX05kDZA.js → face-bbox-BekWkYM8.js} +1 -1
  54. package/dist/assets/{hard-drive-download-gfGmt8d5.js → hard-drive-download-CaBI4JJt.js} +1 -1
  55. package/dist/assets/{hostInit-BKiqkTOp.js → hostInit-LeZtjcV4.js} +1 -1
  56. package/dist/assets/{index-cOBEaAEQ.js → index-BdYsVZMw.js} +3 -3
  57. package/dist/assets/{layers-DOEpCuQZ.js → layers-Bl4GXnaV.js} +1 -1
  58. package/dist/assets/{location-owned-usage-BLkNLXfg.js → location-owned-usage-B2EH12kQ.js} +1 -1
  59. package/dist/assets/{mf-entry-bootstrap-0-72b0f0d1.js → mf-entry-bootstrap-0-f71236c8.js} +2 -2
  60. package/dist/assets/mount-Y21yLCDr.js +1 -0
  61. package/dist/assets/{notification-schedule-field-B8_FhM0a.js → notification-schedule-field-CX_ISfhK.js} +1 -1
  62. package/dist/assets/{player-overlays-BFYAtS6k.js → player-overlays-CHWCYkGf.js} +1 -1
  63. package/dist/assets/remoteEntry-D2L5CI92.js +1 -0
  64. package/dist/assets/{send-CYjwgPvF.js → send-BxCvGnMf.js} +1 -1
  65. package/dist/assets/{settings-2-DzUYHDiK.js → settings-2-CWTgzyTw.js} +1 -1
  66. package/dist/assets/{src-CPNx7Cnt.js → src-Crb8RLzq.js} +3 -3
  67. package/dist/assets/{use-scenes-feed--Nza8Rhx.js → use-scenes-feed-CsZwOmyp.js} +1 -1
  68. package/dist/assets/{use-stationary-objects-CJwD3-xc.js → use-stationary-objects-DTKCTzni.js} +1 -1
  69. package/dist/assets/useEventInvalidation-Y21yLCDr.js +1 -0
  70. package/dist/assets/{useNodeUrlSelection-DKxGlIbc.js → useNodeUrlSelection-BSYJnQKG.js} +1 -1
  71. package/dist/assets/user-round-BR8uDCSh.js +1 -0
  72. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-MXxx-qLy.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-mzuJ2veF.js} +2 -2
  73. package/dist/index.html +7 -7
  74. package/dist/server/addon.js +1 -1
  75. package/package.json +1 -1
  76. package/dist/assets/circle-slash-0LfB3qk4.js +0 -1
  77. package/dist/assets/crop--L-amBAa.js +0 -1
  78. package/dist/assets/device-picker-model-D073lAZn.js +0 -1
  79. package/dist/assets/mount-D073lAZn.js +0 -1
  80. package/dist/assets/remoteEntry-BY-9rdAo.js +0 -1
  81. package/dist/assets/useEventInvalidation-D073lAZn.js +0 -1
  82. package/dist/assets/user-round-BfNCEGcF.js +0 -1
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./__vite-browser-external-Cc3gW-QT.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,I as c,M as l,N as u,O as d,P as f,S as p,T as m,_ as h,a as g,b as _,c as ee,d as te,f as ne,g as v,h as re,i as ie,j as y,k as ae,l as oe,m as b,n as se,o as ce,p as x,r as le,s as ue,t as de,u as fe,v as S,w as pe,x as me,y as C}from"./__vite-browser-external-Cc3gW-QT.js";var he=[`f32le`,`pcmu`,`pcma`];function ge(e){return typeof e==`string`&&he.includes(e)}function _e(e){return e===`f32le`?4:1}function ve(e,t){if(t===`f32le`){let t=new Uint8Array(e.byteLength);return t.set(e),t}let n=t===`pcmu`?xe:Se,r=new Float32Array(e.length);for(let t=0;t<e.length;t++)r[t]=n[e[t]];return new Uint8Array(r.buffer)}function ye(){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 be(){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 xe=ye(),Se=be(),Ce=[`track`,`face`,`identity`,`plate`,`vehicle`,`scene`,`motion`,`object`,`audio`,`mosaic`],we=new Set(Ce),Te=/^\d+$/;function Ee(e){return we.has(e)}function De(e){let t=e.split(`:`);if(t.length!==3&&t.length!==4)return null;let[n,r,i,a]=t;return n===void 0||!Ee(n)||r===void 0||r.length===0||i===void 0||i.length===0?null:a===void 0?{ownerType:n,ownerId:r,fileKind:i}:Te.test(a)?{ownerType:n,ownerId:r,fileKind:i,timestampMs:Number(a)}:null}function Oe(e){let t=`${e.ownerType}:${e.ownerId}:${e.fileKind}`;return e.timestampMs===void 0?t:`${t}:${e.timestampMs}`}var ke=[`motion`,`object`,`audio`],Ae=x(ke),je=[...ke,`track`],Me=x(je),Ne=new Set(ke);function Pe(e){return Ne.has(e)}var w=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.DeviceNativeShadowChanged=`device.native-shadow-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.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=new Set([`device.native-shadow-changed`]);function Ie(e){return Fe.has(e)}function Le(){let e=Object.values(w).filter(e=>typeof e==`string`);return[...new Set(e)].filter(e=>!Ie(e)).toSorted()}var Re=[{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}],ze=Object.fromEntries(Re.map(e=>[e.id,e]));function Be(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 Ve(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&&He(e.fields,t);return t}function He(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){He(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&&He(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 Ue(e){let t=new Map;for(let[n,r]of Ve(e))t.set(n,r.value??r.default);return t}function We(e,t){let n=Ve(e).get(t);return n===void 0?void 0:n.value??n.default}function Ge(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Ke(e,t))}))}}function Ke(e,t){if(Be(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Ke(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Ke(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?qe(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;if(e.type===`tags`&&typeof e.suggestionsFrom==`string`){let n=t[e.suggestionsFrom],r=Array.isArray(n)?n.filter(e=>typeof e==`string`&&e.length>0):[],i=[...new Set([...e.suggestions??[],...r])];return{...e,suggestions:i,value:o}}if((e.type===`select`||e.type===`multiselect`)&&typeof e.optionsFrom==`string`){let n=t[e.optionsFrom],r=new Map;for(let t of e.options)r.set(t.value,t);if(Array.isArray(n))for(let e of n){if(typeof e==`string`&&e.length>0){r.has(e)||r.set(e,{value:e,label:e});continue}if(typeof e!=`object`||!e)continue;let t=Reflect.get(e,`value`),n=Reflect.get(e,`label`);typeof t!=`string`||t.length===0||r.has(t)||r.set(t,{value:t,label:typeof n==`string`&&n.length>0?n:t})}return{...e,options:[...r.values()],value:o}}return{...e,value:o}}function qe(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 Je(e,t){return e.category===t}function Ye(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 Xe(e,t){let n=t.ts??Date.now();e.emit(Ye(`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 Ze(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 Qe(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 $e(e,t){return`${e}@${Qe(t)}`}function et(e,t,n){return e[$e(t,n)]}function tt(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?$e(i,n):i]=a;return r}function nt(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=et(e,i,n);t!==void 0&&(r[i]=t)}return r}var rt=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(w.AddonStarted);let n=ot(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(w.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 Ge(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=it(t.fields);n.length!==0&&i.push({...t,fields:n})}if(i.length===0)return null;let a=await this.resolveGlobalStore(e);return Ge({...n,sections:i},a)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=Qe(e??this._ctx?.kernel?.localNodeId);return r.size>0?nt(n,r,i):n}async readStoredGlobalKey(e){let t=this._ctx?.settings?.readAddonStoreResult;if(t===void 0)return{kind:`unreadable`,reason:`three-way-read-unavailable`};let n;try{n=await t.call(this._ctx?.settings)}catch(e){return{kind:`unreadable`,reason:`store-read-failed`,error:e instanceof Error?e.message:String(e)}}return n.kind===`failed`?{kind:`unreadable`,reason:`store-read-failed`,error:n.error}:n.kind===`missing`||!Object.prototype.hasOwnProperty.call(n.value,e)?{kind:`absent`}:{kind:`present`,value:n.value[e]}}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=Qe(this._ctx?.kernel?.localNodeId),i=Qe(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?tt(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(w.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=>at(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?Ge(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{Xe(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-Cc3gW-QT.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-Cc3gW-QT.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=Qe(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?et(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 Ze({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 Ze({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 it(e){let t=[];for(let n of e){if(n.type===`group`){let e=it(n.fields);e.length>0&&t.push({...n,fields:e});continue}if(n.type===`sub-tabs`){let e=n.tabs.map(e=>({...e,fields:it(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 at(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...at(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...at(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function ot(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function st(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=ct(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=ut(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 ct(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=lt(t.path,n);if(e!==null)return{route:t,params:e}}return null}function lt(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 ut(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 dt=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)}}}},ft=d({codec:x([`h264`,`h265`,`copy`]),profile:x([`baseline`,`main`,`high`]).optional(),level:l().optional(),width:a().int().positive().optional(),height:a().int().positive().optional(),fps:a().positive().optional(),bitrateKbps:a().int().positive().optional(),gopFrames:a().int().positive().optional(),bf:a().int().min(0).optional(),preset:x([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:x([`zerolatency`,`film`,`animation`]).optional(),singleSlicePerFrame:C().optional()}),pt=f([m(`passthrough`),d({codec:x([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:a().int().positive().optional(),sampleRateHz:a().int().positive().optional(),channels:f([m(1),m(2)]).optional()})]),mt=d({video:ft,audio:pt,inputArgs:S(l()).optional(),outputArgs:S(l()).optional()});function ht(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 gt(e,t,n){let r=e>=n;return r===t>=n?r?e-t:t-e:r?-1:1}function _t(e){let t=e.toLowerCase().replace(/[.\s-]/g,``);return t===`hevc`||t===`hvc1`||t===`hev1`?`h265`:t===`avc`||t===`avc1`?`h264`:t}function vt(e,t){if(t.length===0)return!0;if(e===void 0)return!1;let n=_t(e);return t.some(e=>_t(e)===n)}function yt(e,t){for(let n=0;n<t.length;n+=1)if(e.startsWith(t[n]))return n;return t.length}function bt(e,t){let n=e.filter(e=>t.allowTranscode||vt(e.codec,t.acceptCodecs));if(n.length===0)return null;let r=t.targetHeight,i=n.map(e=>({candidate:e,transcodes:!vt(e.codec,t.acceptCodecs),provider:yt(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:gt(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 xt={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},St={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 Ct(e){return[`-hide_banner`,`-loglevel`,e]}function wt(e){return!e||e===`none`||e===`copy`}function Tt(e,t){let n=[];if(wt(t)||n.push(`-hwaccel`,String(t)),e.extraArgs?.length&&n.push(...e.extraArgs),e.decodeThreadCount!==void 0&&e.decodeThreadCount>0&&n.push(`-threads`,String(e.decodeThreadCount)),e.analyzeDurationUs!==void 0&&n.push(`-analyzeduration`,String(e.analyzeDurationUs)),e.probeSizeBytes!==void 0&&n.push(`-probesize`,String(e.probeSizeBytes)),e.lowDelay===!0&&n.push(`-flags`,`low_delay`),e.useWallclockTimestamps===!0&&n.push(`-use_wallclock_as_timestamps`,`1`),e.fflags?.length)for(let t of e.fflags)n.push(`-fflags`,t);if(e.rtspTransport&&n.push(`-rtsp_transport`,e.rtspTransport),e.rawVideo!==void 0){let t=e.rawVideo;n.push(`-f`,`rawvideo`,`-pix_fmt`,t.pixelFormat,`-video_size`,`${String(t.width)}x${String(t.height)}`,`-framerate`,String(t.framerate))}return n.push(`-i`,e.url),n}function Et(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 Dt(e,t,n,r){if(n){if(e)throw Error(`FfmpegInvocation: video.scale cannot be combined with a filter graph — scale inside the graph instead (the -vf would feed an output the graph already feeds)`);if(t.some(e=>e===`-vf`))throw Error(`FfmpegInvocation: outputArgs carries a -vf while a filter graph feeds the same output — fold the filter into the graph`);return[]}if(t.some(e=>e===`-vf`))return[];if(!e)return r.length>0?[`-vf`,r]:[];let i=r.length>0?`,${r}`:``;return e.mode===`exact`?[`-vf`,`scale=${e.width}:${e.height}${i}`]:[`-vf`,`scale='min(${e.width},iw)':'min(${e.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2${i}`]}function Ot(e,t){return e===void 0||!wt(t)?``:`format=nv12,hwupload`}function kt(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 At(e,t,n,r){if(e.kind===`raw`){if(n&&e.filter!==void 0)throw Error(`FfmpegInvocation: video.filter cannot be combined with a filter graph — fold the filter into the graph`);return[...e.filter===void 0?[]:[`-vf`,e.filter],`-c:v`,`rawvideo`,`-pix_fmt`,e.pixelFormat,...e.fps===void 0?[]:[`-r`,String(e.fps)]]}if(e.kind===`copy`){if(n)throw Error("FfmpegInvocation: a filter graph produces a NEW picture, so video.kind must be `encode`");return[`-c:v`,`copy`,...e.bitstreamFilter?[`-bsf:v`,e.bitstreamFilter]:[]]}let i=r===void 0?``:Ot(r.device,r.decodeHwAccel);if(r!==void 0&&n)throw Error(`FfmpegInvocation: a hardware encode fed by a filter graph must upload INSIDE the graph — hwEncodeDevice cannot be combined with filterGraph`);let a=[...Dt(e.scale,t,n,i),`-c:v`,e.encoder];return e.preset!==void 0&&a.push(`-preset`,e.preset),e.tune!==void 0&&a.push(`-tune`,e.tune),e.singleSlicePerFrame===!0&&e.encoder===`libx264`&&a.push(`-x264-params`,`sliced-threads=0`),e.profile!==void 0&&a.push(`-profile:v`,e.profile),e.level!==void 0&&a.push(`-level`,e.level),e.pixelFormat!==void 0&&a.push(`-pix_fmt`,e.pixelFormat),e.fps!==void 0&&a.push(`-r`,String(e.fps)),e.gopFrames!==void 0&&a.push(`-g`,String(e.gopFrames)),e.forceKeyFramesSeconds!==void 0&&a.push(`-force_key_frames`,`expr:gte(t,n_forced*${e.forceKeyFramesSeconds})`),e.bf!==void 0&&a.push(`-bf`,String(e.bf)),a.push(...kt(e)),e.bitstreamFilter!==void 0&&a.push(`-bsf:v`,e.bitstreamFilter),a}function jt(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`,xt[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 Mt(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 Nt(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var Pt=`+frag_keyframe+empty_moov+default_base_moof`;function Ft(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?Lt(e):[`-f`,e.container,`pipe:1`]}var It=.9;function Lt(e){return[`-movflags`,Pt,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*It*1e3))),`-f`,`mp4`,`pipe:1`]}function Rt(e){return[`-map`,`0:a:0?`,...jt(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:St[e.codec]),...Mt({url:e.rtpUrl,sdpFile:e.sdpFile})]}function zt(e){return e.hwEncodeDevice===void 0?void 0:{device:e.hwEncodeDevice,decodeHwAccel:e.decodeHwAccel}}function Bt(e){let t=e.filterGraph??null,n=[...Ct(e.logLevel),...e.hwEncodeDevice===void 0?[]:[`-vaapi_device`,e.hwEncodeDevice.renderNode],...Tt(e.input,e.decodeHwAccel),...(e.extraInputs??[]).flatMap(t=>Tt(t,e.decodeHwAccel)),...t?[`-filter_complex`,t.graph]:[]],r=[...e.threadCount>0?[`-threads`,String(e.threadCount)]:[],...e.filterThreadCount!==void 0&&e.filterThreadCount>0?[`-filter_threads`,String(e.filterThreadCount)]:[]],i=Et(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`,...At(e.video,e.outputArgs,t,zt(e)),...r,...e.outputArgs,...Mt(e.sink.video)]:[],o=e.sink.audio?[`-vn`,`-map`,i.audio??`0:a:0?`,...jt(e.audio),...Mt(e.sink.audio)]:[];return[...n,...a,...o]}let s=Nt(e.sink)||e.audio.kind===`none`,c=Nt(e.sink)?[`-an`]:jt(e.audio);return[...n,...a,...At(e.video,e.outputArgs,t,zt(e)),...r,...s?[]:o,...c,...e.outputArgs,...Ft(e.sink),...e.audioSidecar?Rt(e.audioSidecar):[]]}var Vt={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 Ht(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||wt(t)||t===`auto`)return r;let i=Vt[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function Ut(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 Wt(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:Ht(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:Ut(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var Gt={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`},Kt={...Gt,video:{...Gt.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},qt={...Gt,audio:{codec:`opus`},video:{...Gt.video,singleSlicePerFrame:!0}},Jt={kind:`cbr`,vbvSeconds:1},Yt={kind:`cap`,vbvSeconds:2},Xt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},Zt=16*1024*1024,Qt=8,$t=16,en=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??Zt}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<$t)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 tn(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 nn(e){return!e||e===`none`||e===`copy`}async function rn(e){let t=e.override;if(t!=null&&t!==``)return nn(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=nn(r)?null:r;return e.cache?.write(i),i}function an(e){return String(Math.round(e*1e3)/1e3)}function on(e,t){return!Number.isFinite(t)||t<=0?e:e/t}function sn(e){let t=e.speed>0?e.speed:1;return t===1?`[0:v]fps=${an(e.fps)},scale=${e.maxWidth}:-2:flags=lanczos,split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle`:`[0:v]fps=${an(e.fps/t)},setpts=PTS/${t},fps=${an(e.fps)},scale=${e.maxWidth}:-2:flags=lanczos,split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle`}function cn(e){return[`-y`,`-v`,`error`,`-f`,`mp4`,`-i`,e.input??`pipe:0`,`-filter_complex`,sn(e),`-loop`,`0`,`-f`,`gif`,`pipe:1`]}var ln=de();function un(e){let t=JSON.stringify(e,dn);return(0,ln.createHash)(`sha256`).update(t??``).digest(`hex`)}function dn(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 fn(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var pn=`\0unset`;function mn(e){return{codec:e.codec,profile:e.profile??pn,level:e.level??pn,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??pn,tune:e.tune??pn,singleSlicePerFrame:e.singleSlicePerFrame===void 0?pn:String(e.singleSlicePerFrame)}}function hn(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function gn(e,t=fn(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:mn(e.encode.video),audio:hn(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??pn,pixelFormat:e.pixelFormat??pn,decodeHwAccel:e.decodeHwAccel??pn}}function _n(e,t=fn(e)){return`egress:${un(gn(e,t))}`}function vn(e){let t=null;return()=>{if(t!==null)return t;let n=e();return t=n,n.catch(()=>{t===n&&(t=null)}),n}}var yn=`8.1.2-5`,bn=`https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${yn}`;function xn(e){return`${bn}/jellyfin-ffmpeg_${yn}_portable_${e}-gpl.tar.xz`}xn(`linux64`),xn(`linuxarm64`),xn(`macarm64`),xn(`mac64`);var Sn=`CAMSTACK_FFMPEG_PATH`,Cn=x([`singleton`,`device`,`widget`]),wn=d({capName:l(),kind:Cn,deviceId:a().optional(),reachable:C(),latencyMs:a(),error:l().optional()}),Tn=d({addonId:l(),caps:S(wn).readonly(),widgets:S(wn).readonly()}),En=d({nodeId:l(),addons:S(Tn).readonly()}),Dn=d({ok:C(),degraded:C(),checkedAt:l(),nodes:S(En).readonly(),summary:d({total:a(),reachable:a(),unreachable:a()})}),On=`hub-only`;function kn(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function An(e){let t=kn(e).placement;return t===`any-node`||t===`agent-only`}function jn(e){return kn(e).placement===`agent-only`}function Mn(e){return kn(e).group}function Nn(e,t){return e.execution?.group??t}function Pn(e){return kn(e).placement}function Fn(e){return e.execution?.isolate===!0}var In=`x-camstack-dataplane-secret`,Ln=[`grid-view`,`events-view`],Rn=3e4,zn=15e3,Bn=256*1024,Vn=d({url:l().min(1),hostNodeId:l().min(1),expiresAtMs:a().int().nonnegative(),declaredBytes:a().int().nonnegative().nullable()}),Hn=x([`running`,`done`,`failed`,`cancelled`]),Un=x([`adopted`,`already-adopted`,`failed`,`cancelled`]),Wn=d({childNativeId:l(),outcome:Un,parentDeviceId:a().int().nonnegative().nullable(),accessoryCount:a().int().nonnegative(),error:l().nullable()}),Gn=d({jobId:l(),addonId:l(),integrationId:l(),state:Hn,total:a().int().nonnegative(),processed:a().int().nonnegative(),adopted:a().int().nonnegative(),alreadyAdopted:a().int().nonnegative(),failed:a().int().nonnegative(),accessoriesCreated:a().int().nonnegative(),currentChildNativeId:l().nullable(),results:S(Wn).readonly(),startedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),Kn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},qn=x([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`]),Jn=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`],Yn=p(`kind`,[d({kind:m(`device-disabled`)}),d({kind:m(`wrapper-binding`),capName:l()}),d({kind:m(`recording-config`)}),d({kind:m(`notification-mute`)}),d({kind:m(`camera-audio`),capName:l()}),d({kind:m(`camera-mask`),capName:l()}),d({kind:m(`broker-audio-mute`)})]),Xn=x([`no-provider`,`source-unreachable`,`device-disabled`]),Zn=x([`no-privacy-zones`]),Qn=d({id:qn,label:l(),costWhenOff:l(),available:C(),unavailableReason:Xn.optional(),warning:Zn.optional(),enabled:C(),authority:Yn}),$n=d({deviceId:a().int(),switches:S(Qn).readonly(),fetchedAt:a()}),er=`detection-pipeline`,tr=`audio-analysis`,nr=`privacy-mask`,rr=`pipeline-analytics`,ir=[`motion-detection`,er,tr,rr,`scene-monitor`],ar={"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:er},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:nr},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:nr},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:tr},countsAsSwitchedOff:!0},"event-saving":{id:`event-saving`,label:`Event saving`,costWhenOff:`Off: nothing about this camera is written to its history — no tracks, no events and no event snapshots or clips. Detection keeps running and live boxes still appear, so the camera looks busy while its timeline stays empty, and anything that fires ON an event (notification rules, event-triggered recording) has nothing to fire on. Continuous recording is unaffected, and history already written is kept.`,authority:{kind:`wrapper-binding`,capName:rr},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 or(e,t){switch(e.authority.kind){case`device-disabled`:return{available:!0,enabled:!t.deviceDisabled};case`wrapper-binding`:{let n=e.authority.capName;return t.bindableCapNames===null||t.activeWrapperCapNames===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:t.bindableCapNames.includes(n)?{available:!0,enabled:t.activeWrapperCapNames.includes(n)}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`recording-config`:return t.recordingEnabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:t.recordingEnabled};case`notification-mute`:return t.notificationsMuted===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!t.notificationsMuted};case`camera-audio`:{let e=t.deviceAudio;return e===null?{available:!1,enabled:!0,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.enabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`camera-mask`:{let e=t.privacyMask;return e===null?{available:!1,enabled:!1,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.configuredRegions===null||e.enabled===null?{available:!1,enabled:!1,unavailableReason:`source-unreachable`}:e.configuredRegions===0?{available:!0,enabled:e.enabled,warning:`no-privacy-zones`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!1,unavailableReason:`no-provider`}}case`broker-audio-mute`:{let e=t.brokerAudio;return e===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!e.muted}}}}function sr(e){return Jn.map(t=>{let n=ar[t],r=or(n,e);return{id:n.id,label:n.label,costWhenOff:n.costWhenOff,available:r.available,...r.unavailableReason===void 0?{}:{unavailableReason:r.unavailableReason},...r.warning===void 0?{}:{warning:r.warning},enabled:r.enabled,authority:n.authority}})}function cr(e){return e.filter(e=>ar[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function lr(e){let t=[],n=[];for(let r of Jn){let i=ar[r];if(!i.countsAsSwitchedOff)continue;let a=or(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var ur=`__camstack_redacted__`;function dr(e){return e.type===`password`?!0:`secret`in e&&e.secret===!0}function fr(e){let t=new Set;for(let n of hr(e))for(let e of gr(n))_r(e,t);return t}function pr(e){for(let t of hr(e))if(gr(t).length>0)return!0;return!1}function mr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function hr(e){if(!mr(e))return[];let t=e.sections;return Array.isArray(t)?t:[]}function gr(e){if(!mr(e))return[];let t=e.fields;return Array.isArray(t)?t:[]}function _r(e,t){if(!mr(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 gr(e))_r(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 gr(e))_r(n,t)}}var vr=3e4,yr=6e4,br=x([`confirmed`,`suppressed`,`exhausted-fallback`]),xr=d({id:l(),at:a().int(),deviceId:a().int(),sourceTrackId:l(),className:l(),verdict:br,reason:l().nullable(),attempts:a().int(),deferredForMs:a().int(),decidedOnCoastedFrame:C(),birthEvidenceAvailable:C(),decidedByBirthEvidence:C(),bestScore:a().nullable(),appliedMinConfidence:a().nullable(),firstSeen:a().int().nullable(),motionOnsetAt:a().int().nullable(),birthLatencyMs:a().int().nullable(),birthIndexInBurst:a().int().nullable()}),Sr=d({deviceId:a().int().optional(),since:a().int().optional(),verdict:br.optional(),limit:a().int().min(1).max(5e3).optional()}),Cr=5e3,wr=d({id:l(),note:l(),deviceId:a().int(),sourceTrackId:l(),archivedAt:a().int(),trackStartedAt:a().int().nullable(),trackClass:l().nullable(),trackLabel:l().nullable()}),Tr=d({deviceId:a().int().optional(),limit:a().int().min(1).max(1e3).optional()}),Er=2e4,Dr=5e3,Or=x([`same-subject`,`different-subjects`]),kr=x([`before`,`after`]),Ar=x([`mixed`,`not-a-subject`]),jr=d({id:l(),deviceId:a().int(),leftTrackId:l(),rightTrackId:l(),leftSide:kr.nullable(),rightSide:kr.nullable(),relation:Or,presence:m(`continuous`).nullable(),leftStartedAt:a().int().nullable(),rightStartedAt:a().int().nullable(),createdAt:a().int(),updatedAt:a().int(),author:l().nullable()}),Mr=d({id:l(),deviceId:a().int(),sourceTrackId:l(),purity:Ar,switchAtMs:a().int().nullable(),startedAt:a().int().nullable(),createdAt:a().int(),updatedAt:a().int(),author:l().nullable()}),Nr=d({deviceId:a().int(),trackId:l().min(1),otherTrackId:l().min(1),relation:Or,presence:m(`continuous`).optional(),trackSide:kr.optional(),otherSide:kr.optional()}),Pr=d({deviceId:a().int(),trackId:l().min(1),otherTrackId:l().min(1)}),Fr=d({cleared:C()}),Ir=d({deviceId:a().int(),trackId:l().min(1),purity:x([`pure`,`mixed`,`not-a-subject`]),switchAtMs:a().int().optional()}),Lr=d({purity:Mr.nullable()}),Rr=d({deviceId:a().int(),trackId:l().optional(),since:a().int().optional(),until:a().int().optional(),limit:a().int().min(1).max(5e3).optional()}),zr=d({relations:S(jr).readonly(),purities:S(Mr).readonly(),truncated:C()}),Br=x([`unknown-track`,`cross-device`,`self-relation`,`contradiction`,`switch-outside-track`,`switch-needs-mixed`]),Vr={high:`High`,mid:`Mid`,low:`Low`};function Hr(e){return Vr[e]??e.charAt(0).toUpperCase()+e.slice(1)}function Ur(e){return(e.width??0)*(e.height??0)}function Wr(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:Ur(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 Gr(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function Kr(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 T(e){return typeof e==`string`}function qr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Jr(e){return T(e)&&e.trim()?{url:e}:qr(e)&&T(e.url)&&e.url.trim()?{url:e.url,label:T(e.label)?e.label:void 0}:null}function Yr(e){let t=T(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=Jr(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=T(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:T(e.main_stream_name)?e.main_stream_name:void 0});let i=T(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:T(e.sub_stream_name)?e.sub_stream_name:void 0});let a=T(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:T(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function Xr(e){if(e.length===0)return{};let t=Wr(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 Zr={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},Qr={debug:0,info:1,warn:2,error:3};function $r(e,t){return Qr[e]<=Qr[t]}var ei=x([`recording`,`events`]),ti=x([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),ni=x([`retention`,`quota`,`manual`,`operator`,`maintenance`,`orphaned-device`]),ri=d({id:l(),at:a(),domain:ei,op:ti,reason:ni,deviceId:a().nullable(),nodeId:l(),itemsAffected:a(),bytesReclaimed:a(),detail:l().nullable(),actor:l()}),ii=d({deviceId:a().optional(),limit:a().int().min(1).max(1e3).optional()}),E=x([`high`,`mid`,`low`]),ai=[`high`,`mid`,`low`],oi=f([E,m(`auto`)]),si=x([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),ci=d({width:a().int().positive(),height:a().int().positive()}),li=d({camStreamId:l().min(1),deviceId:a().int().nonnegative(),kind:si,url:l().optional(),codec:l().optional(),resolution:ci.optional(),fps:a().positive().optional(),label:l().optional(),deviceFeatures:S(l()).optional(),autoEligible:C().optional(),profileHint:E.optional(),metadata:y(l(),s()).optional()}),ui=x([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),di=d({deviceId:a().int().nonnegative(),profile:E,brokerId:l(),sourceCamStreamId:l().nullable(),status:ui,resolution:ci.optional(),codec:l().optional(),preBufferSec:a().nonnegative().optional(),errorMessage:l().optional()});function fi(e,t){return`${e}/${t}`}function pi(e,t){return`${e}/${t}`}function mi(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=E.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function hi(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>ai.indexOf(e.profile)-ai.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 gi=d({id:l(),label:l(),protocol:x([`rtsp`,`rtmp`,`annexb`,`http-mjpeg`,`webrtc`,`custom`]),url:l().optional(),resolution:d({width:a(),height:a()}).readonly().optional(),fps:a().optional(),bitrate:a().optional(),codec:l().optional(),profileHint:E.optional()}),_i=d({type:l(),url:l(),videoCodec:l().optional(),audioCodec:l().optional(),metadata:y(l(),s()).readonly().optional()}),vi=d({shmId:l(),slot:a().int().nonnegative(),seq:a().int().nonnegative(),width:a().int().positive(),height:a().int().positive(),format:x([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:a(),byteLength:a().int().nonnegative(),nodeId:l(),slotCount:a().int().positive()}),yi=x(he),bi=d({data:b(Uint8Array),sampleRate:a().int().positive(),channels:a().int().positive(),timestamp:a(),format:yi.optional()}),xi=d({brokerId:l(),tag:l().optional(),accept:S(yi).readonly().optional()}),Si=d({subscriptionId:l()}),Ci=x([`idle`,`connecting`,`streaming`,`error`,`stopped`]),wi=d({status:Ci,inputFps:a(),encodedSubscribers:a(),uptimeMs:a(),bitrateKbps:a(),idrIntervalMs:a(),codec:l().optional(),totalBytes:a(),packetCount:a(),rtspClients:a(),pipeClients:a(),preBufferSec:a(),preBufferMs:a(),preBufferPackets:a(),audio:d({codec:l(),sampleRate:a(),channels:a(),supported:C()}).nullable().optional(),audioMuted:C().optional(),audioMutedDropped:a().optional()}),Ti=d({profile:E,brokerId:l(),url:l(),mutedUrl:l(),enabled:C(),codec:l().optional(),resolution:ci.optional()}),Ei=d({id:l(),name:l(),category:l().optional(),description:l().optional(),icon:l().optional()}),Di=[`person`,`vehicle`,`animal`,`package`],Oi=[`person`,`vehicle`,`animal`];function ki(e){return Oi.some(t=>t===e)}var Ai=d({mapping:y(l(),x(Di)),preserveOriginal:C()}),ji={preMs:5e3,postMs:1e4},Mi=a().int().min(0).max(6),Ni=/^([01]\d|2[0-3]):[0-5]\d$/,Pi=x([`off`,`events`,`continuous`,`on-device-decision`]),Fi=x(Oi),Ii=e=>new Set(e).size===e.length,Li=d({motion:C().optional(),audioThresholdDbfs:a().optional(),objectClasses:S(Fi).min(1).refine(Ii,{message:`objectClasses must not repeat a class`}).optional(),sensorDeviceIds:S(a().int().positive()).min(1).max(16).refine(Ii,{message:`sensorDeviceIds must not repeat a device`}).optional()}),Ri=x([`continuous`,`events`]),zi=Li,Bi=x([`on`,`muted`]),Vi=d({days:S(Mi),start:l().regex(Ni),end:l().regex(Ni),mode:Ri,audio:Bi.optional(),triggers:zi.optional(),preBufferSec:a().min(0).optional(),postBufferSec:a().min(0).optional()}),Hi={postBufferSec:30};function Ui(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 Wi=Hi.postBufferSec*1e3,Gi=d({maxAgeDays:a().min(0).optional(),maxSizeGb:a().min(0).optional()}),Ki=d({enabled:C(),mode:Pi.optional(),profiles:S(E).optional(),segmentSeconds:a().int().positive().optional(),bands:S(Vi).default([]),deviceDecision:C().optional(),retention:Gi.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 qi(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 Ji=[`high`,`low`];function Yi(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=>Ji.includes(e));return n.length>0?n:[...e]}var Xi=[`motion`,`audioThresholdDbfs`,`objectClasses`,`sensorDeviceIds`];function Zi(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Qi(e){return Zi(e)&&Zi(e.triggers)&&e.triggers.deviceSignal===!0}function $i(e){let t=e.triggers;return Zi(t)?Xi.some(e=>t[e]!==void 0):!1}function ea(e){let t=e.triggers;if(!Zi(t))return e;let{deviceSignal:n,...r}=t;return{...e,triggers:r}}function ta(e){let t={value:e,migrated:!1,strippedOnly:!1};if(!Zi(e)||!Array.isArray(e.bands)||!e.bands.some(Qi))return t;let n=[];for(let t of e.bands){if(!Qi(t)||!Zi(t)){n.push(t);continue}$i(t)&&n.push(ea(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 na=x([`queued`,`running`,`done`,`failed`,`cancelled`]),ra=d({jobId:l(),state:na,fromLocationId:l(),toLocationId:l(),deviceId:a().nullable(),entities:S(l()),filesMoved:a().int(),bytesMoved:a().int(),filesTotal:a().int().nullable(),rowsReconciled:a().int().nonnegative().optional(),rowsForgotten:a().int().nonnegative().optional(),startedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),ia=x([`recordings`,`recordingsLow`]),aa=d({fromLocationId:l(),toLocationId:l(),entities:S(x([`segments`])).optional(),footageClass:ia.optional(),deviceId:a().int().optional(),profiles:S(l()).optional(),throttleMbps:a().min(1).max(1e3).optional(),sinceMs:a().int().optional()}),oa=d({leaseId:l().min(1)}),sa=aa.extend({leaseId:l().min(1)}),ca=x([`move`,`seal`,`gallery`]),la=d({toLocationId:l(),fromLocationId:l().optional(),throttleMbps:a().min(1).max(1e3).optional(),mode:ca.optional()}),ua=d({present:C(),rows:a().int().nonnegative().nullable()}),da=d({media:ua,retrainFrames:ua,anyPresent:C(),total:a().int().nonnegative().nullable()}).nullable(),fa=la.extend({leaseId:l().min(1)}),pa=x([`recordings`,`recordingsLow`,`eventMedia`,`backups`,`galleryMedia`]),ma=d({recordings:l().min(1).optional(),recordingsLow:l().min(1).optional(),eventMedia:l().min(1).optional(),backups:l().min(1).optional(),galleryMedia:l().min(1).optional()}).refine(e=>Object.keys(e).length>0,{message:`select at least one storage class`}),ha=d({recordings:l().min(1).optional(),recordingsLow:l().min(1).optional(),eventMedia:l().min(1).optional(),backups:l().min(1).optional(),galleryMedia:l().min(1).optional()}).optional(),ga=x([`blocking`,`nonBlocking`]),_a=d({destinations:ma,sources:ha,throttleMbps:a().min(1).max(1e3).optional(),mode:ga.optional()}),va=x([`planning`,`sealing`,`pausing`,`moving`,`draining`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),ya=x([`pipeline`,`recorder`,`analytics`]),ba=d({filesMoved:a().int().nonnegative(),filesTotal:a().int().nonnegative().nullable(),bytesMoved:a().int().nonnegative(),rowsReconciled:a().int().nonnegative().optional(),startedAt:a(),observedAt:a()}),xa=d({storageClass:pa,fromLocationId:l(),toLocationId:l(),freezeSource:C().optional(),moverJobId:l().nullable(),state:na.nullable(),error:l().nullable(),progress:ba.nullable()}),Sa=d({jobId:l(),phase:va,mode:ga,destinations:ma,sources:ha,throttleMbps:a(),moves:S(xa),pauseLeaseId:l().nullable(),pausedParticipants:S(ya),repointed:C(),cancelRequested:C(),startedAt:a(),updatedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),Ca=x([`sharesDeviceWithSource`,`deviceIdentityUnknown`,`unstampedEventMediaRows`,`blockingOnly`,`noMover`]),wa=d({code:Ca,storageClass:pa,message:l()}),Ta=d({destinations:ma,sources:ha,mode:ga,moves:S(d({storageClass:pa,fromLocationId:l(),toLocationId:l(),freezeSource:C().optional()})),findings:S(wa)}),Ea=x([`footage`,`media`]),Da=d({lane:Ea,job:ra,migrationJobId:l().nullable(),observedAt:a()}),Oa=d({storageClass:pa,fromLocationId:l(),toLocationId:l(),items:a().int().nonnegative().nullable(),bytes:a().int().nonnegative().nullable()}),ka=d({classes:S(pa).min(1),throttleMbps:a().min(1).max(1e3).optional()}),Aa=d({fromLocationId:l().min(1),footageClass:ia.optional()}),ja=d({segments:a().int().nonnegative(),bytes:a().int().nonnegative()}).nullable(),Ma=d({locationId:l().min(1),apply:C().optional(),deviceId:a().int().positive().optional(),profiles:S(l().min(1)).optional()}),Na=x([`location-unknown`,`source-writable`,`no-ledger`,`archive-unreadable`,`anchor-absent`,`anchor-unreadable`,`anchor-moved`]),Pa=x([`live-tail`,`listing-error`,`path-mismatch`,`durable-refused`]),Fa=d({"live-tail":a().int().nonnegative(),"listing-error":a().int().nonnegative(),"path-mismatch":a().int().nonnegative(),"durable-refused":a().int().nonnegative()}),Ia=d({deviceId:a().int(),hoursWalked:a().int().nonnegative(),hoursMissing:a().int().nonnegative(),ghostSegments:a().int().nonnegative(),ghostBytes:a().int().nonnegative(),forgottenSegments:a().int().nonnegative(),orphanFiles:a().int().nonnegative()}),La=d({locationId:l(),applied:C(),refused:Na.nullable(),archiveSegments:a().int().nonnegative().nullable(),archiveBytes:a().int().nonnegative().nullable(),hoursClaimed:a().int().nonnegative(),hoursWalked:a().int().nonnegative(),hoursMissing:a().int().nonnegative(),listings:a().int().nonnegative(),segmentsClaimed:a().int().nonnegative(),ghostSegments:a().int().nonnegative(),ghostBytes:a().int().nonnegative(),ghostHoursWhole:a().int().nonnegative(),forgottenSegments:a().int().nonnegative(),forgottenBytes:a().int().nonnegative(),orphanFiles:a().int().nonnegative(),orphanSample:S(l()).readonly(),hoursSkipped:a().int().nonnegative(),skippedByReason:Fa,bounded:C(),byDevice:S(Ia).readonly()}),Ra=d({rows:a().int().nonnegative()}).nullable(),za=d({toLocationId:l().min(1),fromLocationId:l().optional(),mode:ca.optional()}),Ba=x([`orphans`,`debug-media`,`ghost-ledger`,`done`,`failed`,`cancelled`]),Va=d({includeDebugMedia:C().optional()}),Ha=d({jobId:l(),phase:Ba,includeDebugMedia:C(),orphansReclaimed:a().int().nonnegative(),orphanBytesReclaimed:a().int().nonnegative(),debugMediaReclaimed:a().int().nonnegative(),debugMediaBytesReclaimed:a().int().nonnegative(),ghostsForgotten:a().int().nonnegative(),ghostBytesForgotten:a().int().nonnegative(),detail:l().nullable(),cancelRequested:C(),startedAt:a(),updatedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),Ua=d({jobId:l().optional()}),Wa=[`face`,`plate`],Ga=[`face`,`plate`,`clip`,`custom`],Ka=[`active`,`readonly`,`drain`,`disabled`],qa=x(Ka),Ja=x([`normal`,`never`,`drain`]),Ya=`readOnly`;function Xa(e){return e===`active`}function Za(e){return e!==`disabled`}function Qa(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 eo(e){return(to(e.mode)?e.mode:void 0)??$a(e)??`active`}function to(e){return Ka.some(t=>t===e)}function no(e){return Xa(eo(e))}function ro(e){return Za(eo(e))}function io(e){return Qa(eo(e))}function ao(e){if(!(`readOnly`in e))return e;let t={...e};return delete t[Ya],t}function oo(e,t){return{...e,mode:t,enabled:Xa(t),config:ao(e.config)}}var so=l().regex(/^[a-z][a-zA-Z0-9-]*$/),D=d({id:l().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),type:l(),displayName:l().min(1),providerId:l().min(1),config:y(l(),s()),nodeId:l().optional(),isSystem:C().default(!1),enabled:C().optional(),mode:qa.optional(),capacity:d({totalBytes:a(),availableBytes:a()}).nullable().optional(),owned:d({bytes:a().int().nonnegative(),measuredAtMs:a().int().nonnegative()}).optional(),createdAt:a(),updatedAt:a()}),co=d({isDefault:C().optional()});function lo(e){return no({...e,config:e.config??{}})}var uo=1024**3;function fo(e){return Math.floor(e*uo)}var po=d({locationId:l(),startedAtMs:a(),startBytes:a(),bytesRemaining:a(),drained:C(),estimatedEmptyAtMs:a().nullable()}),O=f([so,l().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),mo=x([`local-path`,`cap-mediated`]),ho=`local-path`,go=d({id:l().regex(/^[a-z][a-zA-Z0-9-]*$/,{message:`id must start with a lowercase letter and contain only letters, digits, or hyphens`}),displayName:l().min(1,{message:`displayName must not be empty`}),description:l().optional(),cardinality:x([`single`,`multi`]),access:mo.optional(),defaultsTo:l().optional(),defaultRoot:x([`data`,`media`,`backup`]).optional()}),_o={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},vo={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},yo=[{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:_o},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:_o},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:_o},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:_o},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:_o},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:_o},{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:vo},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:vo},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:vo},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:vo},{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 bo(e){return yo.find(t=>t.id===e)}var xo=x([`info`,`warn`,`error`]),So=d({name:l().min(3).regex(/^[a-z0-9-]+(\.[a-z0-9-]+)+$/,`a channel name is dotted lower-kebab, e.g. area.thing`),description:l().min(1),defaultLevel:xo,perDevice:C()}),Co=d({channel:l().min(1),armedUntilMs:a(),deviceIds:S(a().int()).readonly().nullable()}),wo=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}},To=class{gates=new Map;declare(e){let t=So.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 wo(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}},Eo=null;function Do(){return Eo??=new To,Eo}function Oo(e){return Do().declare(e)}function ko(){Eo=null}var Ao=5e3;function jo(e,t={}){let n=Do(),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 Mo=1024,No=`other`;function Po(e,t,n){return n===void 0?`${e}${t}`:`${e}${t}${n}`}var Fo=class{maxKeys;maxReasons;counters=new Map;refused=0;constructor(e=Mo,t=16){this.maxKeys=e,this.maxReasons=t}get keysRefused(){return this.refused}get size(){return this.counters.size}note(e,t){if(!Number.isInteger(e.deviceId)||e.deviceId<=0)return;let n=Po(e.deviceId,e.family,e.variant),r=this.counters.get(n);if(r===void 0){if(this.counters.size>=this.maxKeys){this.refused+=1;return}r={deviceId:e.deviceId,family:e.family,variant:e.variant,sinceMs:t,attempts:0,succeeded:0,reasons:new Map},this.counters.set(n,r)}if(r.attempts+=1,e.reason===void 0){r.succeeded+=1;return}let i=r.reasons.has(e.reason)||r.reasons.size<this.maxReasons?e.reason:No;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 Io(e){return e.attempts<=0?null:(e.attempts-e.succeeded)/e.attempts}var Lo=`__unattributed__`,Ro=`__root__`;function zo(e){return e.addonId===null?e.classification===`root`?{key:Ro,kind:`root`}:{key:Lo,kind:`unattributed`}:{key:e.addonId,kind:`addon`}}function Bo(e){return Math.round(e*10)/10}function Vo(e,t){let n=new Map;for(let t of e){let{key:e,kind:r}=zo(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?Bo(n.main):null,i=n.splitKnown?Bo(n.gc):null,a=Bo(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 Ho(e,t){return e===null||t===null?null:e<t?e:t}function Uo(e,t){return e===null||t===null?null:e>t?e:t}function Wo(e,t,n){return{atMs:n,samples:e.samples+t.samples,cpuMainPercent:Uo(e.cpuMainPercent,t.cpuMainPercent),cpuMainPercentMin:Ho(e.cpuMainPercentMin,t.cpuMainPercentMin),cpuGcPercent:Uo(e.cpuGcPercent,t.cpuGcPercent),cpuGcPercentMin:Ho(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 Go(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 Ko(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}:Wo(a,i,e))}return[...r.values()].toSorted((e,t)=>e.atMs-t.atMs)}var qo=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${Yo(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function Jo(e,t){return`${e}|${Yo(t)}`}function Yo(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function Xo(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function Zo(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 Qo=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??$o(),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(Jo(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=Jo(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&&Xo(r.state)<=Xo(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} (${Yo(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&&Zo(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 qo(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${Yo(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(Ye(`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=Jo(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} (${Yo(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&&Zo(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} (${Yo(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&Zo(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 $o(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function es(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function ts(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=ns(e,s);if(t)return a(t)}}return a(o[0])}function ns(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)=>gt(e.pixels,t.pixels,n))[0]?.entry}var rs={upperHs:[0,32],upperV:[32,40],upperGrad:[40,48],lowerHs:[48,80],lowerV:[80,88],lowerGrad:[88,96]},is=[`motion`,`objects`,`discarded`,`stationary`],as=[`motion`,`objects`,`stationary`],os={borderWidth:2,dashed:!0,dashPattern:[6,4],opacity:1,borderRadius:2};function ss(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 cs=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],ls={yolo26:`YOLO26`,"yolo26-seg":`YOLO26-seg`,yolov9:`YOLOv9`};function us(e){return ls[e]??e.toUpperCase()}var ds={"yolo26-seg":`detection + masks, slightly heavier`},fs=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function ps(e,t){let n=us(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(fs,``).trim();return r.length>0?r:t}function ms(e,t){let n=[];return t===`test`&&n.push(`Test`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function hs(e){return cs.filter(t=>e.formats[t]!==void 0)}function gs(e){let t=cs.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var _s=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],vs=[`fp32`,`int8`];function ys(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:ms(t,n),formats:hs(e),sizeMB:gs(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?vs.indexOf(e.precision)-vs.indexOf(t.precision):e.optimization===`test`?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?ps(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=_s.indexOf(e.tier),r=_s.indexOf(t.tier);return n!==-1&&r!==-1?n-r:n===-1?r===-1?e.tier.localeCompare(t.tier):1:-1});let i=ds[e];n.push({family:e,label:us(e),...i===void 0?{}:{hint:i},tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function bs(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 xs(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 Ss=/^object-clip(-[a-z0-9][a-z0-9-]*)?$/,Cs=d({textModelId:l().min(1),embeddingDim:a().int().positive(),vectorIndex:l().regex(Ss),tokenizerFile:l().min(1),contextLength:a().int().positive(),padId:a().int().nonnegative(),searchMinScore:a().min(0).max(1)}),ws=[`loose`,`balanced`,`strict`],Ts=x(ws),Es={loose:1,balanced:1.25,strict:1.5};function Ds(e,t){if(t.minScore!==void 0)return t.minScore;let n=Es[t.strictness??`loose`];return Math.min(1,Math.round(e.searchMinScore*n*1e3)/1e3)}var Os=[`animal-classifier`,`vehicle-classifier`,`package-detection`],ks=[`plate-detection`,`face-detection`],As=[`segmentation`],js=[...Os,...ks,...As];function Ms(e){return js.some(t=>t===e)}function Ns(e){return Os.some(t=>t===e)}var Ps={"animal-classifier":[`bird`,`cat`,`cow`,`deer`,`dog`,`horse`,`sheep`,`squirrel`],"vehicle-classifier":[`Ambulance`,`Bicycle`,`Bus`,`Car`,`Motorcycle`,`Taxi`,`Truck`,`Van`],"package-detection":[`package`]},Fs={"animal-classifier":`animal`,"vehicle-classifier":`vehicle`,"package-detection":`package`},Is={"animal-classifier":{},"vehicle-classifier":{school_bus:`Bus`,garbage_truck:`Truck`},"package-detection":{}},Ls={"plate-detection":{rootLabels:[`license_plate`],parentMacro:`vehicle`,childClass:`plate`,servedChildSteps:[`plate-ocr`],use:`as-output`},"face-detection":{rootLabels:[`face`],parentMacro:`person`,childClass:`face`,servedChildSteps:[`face-embedding`],use:`refine`,minRootInputPx:640}},Rs={"animal-classifier":!0,"vehicle-classifier":!0,"package-detection":!0,"plate-detection":!1,"face-detection":!1,segmentation:!0},zs=`useRootModel`,Bs=`labelLink`,Vs=`detector-link:`;function Hs(e){return`${Vs}${e}`}function Us(e){if(e===void 0||!e.startsWith(`detector-link:`))return;let t=e.slice(14);return Ns(t)?t:void 0}function Ws(e,t){let n=Is[e][t];if(n!==void 0)return n;let r=t.toLowerCase();return Ps[e].find(e=>e.toLowerCase()===r)}function Gs(e,t){let n=[];if(t!==void 0)for(let r of Os){let i={};for(let n of e){if(t.mapping[n]!==Fs[r])continue;let e=Ws(r,n);e!==void 0&&(i[n]=e)}let a=new Set(Object.values(i));if(a.size===0)continue;let o=Ps[r].filter(e=>!a.has(e));n.push({kind:`label`,stepId:r,labelToEffect:i,uncovered:o})}let r=new Set(e);for(let e of ks){let t=Ls[e],i=t.rootLabels.filter(e=>r.has(e));i.length!==0&&n.push({kind:`crop`,stepId:e,rootLabels:i,parentMacro:t.parentMacro,childClass:t.childClass})}return n}var Ks=[`yolo-seg`];function qs(e){return e===void 0||!Ks.includes(e)?[]:As.map(e=>({kind:`mask`,stepId:e}))}function Js(e,t){let n=e?.suppliesSteps??Gs(e!==void 0&&e.labels.length>0?e.labels.map(e=>e.id):t.labels,e?.classMap??t.classMap),r=qs(e?.postprocessor).filter(e=>!n.some(t=>t.stepId===e.stepId)),i=r.length>0?[...n,...r]:n,a=e===void 0?void 0:Math.min(e.inputSize.width,e.inputSize.height);return a===void 0?i:i.map(e=>e.kind===`crop`?{...e,rootInputPx:a}:e)}function Ys(e,t){return e?.find(e=>e.stepId===t)}function Xs(e,t){let n=t?.[zs];if(typeof n==`boolean`)return n;let r=t?.[Bs];return r===`skip-when-filled`?!0:r===`run`?!1:Rs[e]}function Zs(e){if(e.kind!==`crop`)return;let t=Ls[e.stepId].minRootInputPx;if(t!==void 0)return e.rootInputPx!==void 0&&e.rootInputPx>=t?void 0:`root-input-too-small`}function Qs(e,t,n){let r=Ys(n,e),i=Xs(e,t),a=r===void 0?`root-does-not-declare`:Zs(r);return{stepId:e,supply:r,intent:i,effective:i&&a===void 0,inactive:i&&a!==void 0,...i&&a!==void 0?{inactiveReason:a}:{}}}function $s(e,t){let n=t?.enabledClasses;return!Array.isArray(n)||n.length===0?!0:n.some(t=>t===e)}function ec(e){return Ls[e].servedChildSteps}var tc=.9;function nc(e,t){let n=e.w*e.h;if(!(n>0))return-1;let r=-1,i=1/0;return t.forEach((t,a)=>{if(Math.max(0,Math.min(e.x+e.w,t.x+t.w)-Math.max(e.x,t.x))*Math.max(0,Math.min(e.y+e.h,t.y+t.h)-Math.max(e.y,t.y))/n<.9)return;let o=t.w*t.h;o<i&&(r=a,i=o)}),r}var rc={"animal-classifier":`animals`,"vehicle-classifier":`vehicles`,"package-detection":`packages`,"plate-detection":`plates`,"face-detection":`faces`,segmentation:`masks`};function ic(e){let t=rc[e.stepId];if(e.kind!==`label`)return t;let n=Ps[e.stepId].length;return n<=1?t:`${t} ${String(n-e.uncovered.length)}/${String(n)}`}function ac(e){return(e??[]).map(ic).join(` · `)}var oc=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],sc=d({url:l(),sizeMB:a(),isDirectory:C().optional(),files:S(l()).readonly().optional(),runtimes:S(x([`python`])).readonly().optional(),revision:l().min(1).optional()}),cc=x([`current`,`stale`,`missing`]),lc=x([`fp32`,`fp16`,`int8`]),uc=d({downloaded:C(),sizeMB:a(),onDisk:cc.optional(),precision:lc.optional()}),dc=d({url:l(),filename:l(),sizeMB:a()}),fc=d({onnx:sc.optional(),coreml:sc.optional(),openvino:sc.optional(),tflite:sc.optional(),pt:sc.optional(),gguf:sc.optional()}),pc=d({family:l(),tier:l(),precision:x([`fp32`,`int8`]).optional(),optimization:x([`standard`,`test`]).optional(),resolution:a().int().positive().optional()}),mc=[`camstack`,`frigate`,`scrypted`,`custom`],hc=x(mc);function gc(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 _c=[`camstack-hf`,`third-party`,`built-in`],vc=r(e=>typeof e==`string`?{weights:e}:e,d({weights:l().min(1),code:l().min(1).optional(),data:d({name:l().min(1),terms:l().min(1),url:l().url().optional()}).optional(),upstream:d({name:l().min(1),url:l().url()}).optional(),url:l().url().optional(),attribution:l().min(1).optional(),modifications:l().min(1).optional(),hosting:x(_c).optional(),nonCommercial:C().optional()})),yc=p(`kind`,[d({kind:m(`label`),stepId:x(Os),labelToEffect:y(l(),l()),uncovered:S(l()).readonly()}),d({kind:m(`crop`),stepId:x(ks),rootLabels:S(l()).readonly(),parentMacro:x([`vehicle`,`person`]),childClass:x([`plate`,`face`]),rootInputPx:a().int().positive().optional()}),d({kind:m(`mask`),stepId:x(As)})]),bc=d({id:l(),name:l(),description:l(),formats:fc,inputSize:d({width:a(),height:a()}),inputChannels:a().int().positive().optional(),labels:S(Ei).readonly(),inputLayout:x([`nchw`,`nhwc`]).optional(),inputNormalization:x([`zero-one`,`imagenet`,`none`,`scrfd`]).optional(),outputProbabilities:C().optional(),preprocessMode:x([`letterbox`,`resize`]).optional(),postprocessor:_().optional(),defaultConfidence:a().min(0).max(1).optional(),defaultClassFloors:y(l(),a().min(0).max(1)).optional(),gpuInferencePrecision:x([`f32`,`f16`]).optional(),suppliedLabelFloors:y(l(),a().min(0).max(1)).optional(),faceAlignment:C().optional(),extraFiles:S(dc).readonly().optional(),legacy:C().optional(),metrics:d({map50:a().optional(),p95LatencyMs:y(l(),a()).optional()}).optional(),license:vc.optional(),group:pc.optional(),provider:hc.optional(),classMap:Ai.optional(),suppliesSteps:S(yc).readonly().optional(),clip:Cs.optional()}),xc=p(`format`,[d({format:m(`openvino`),precisions:S(x([`fp16`,`int8`])).min(1).readonly()}),d({format:m(`coreml`)})]),Sc=d({id:l().regex(/^[a-zA-Z0-9._-]+$/),name:l(),labels:S(Ei).readonly(),inputSize:d({width:a(),height:a()}),inputLayout:x([`nchw`,`nhwc`]).optional(),inputNormalization:x([`zero-one`,`imagenet`,`none`,`scrfd`]).optional(),preprocessMode:x([`letterbox`,`resize`]).optional(),outputFormat:x([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:C().optional(),classMap:Ai.optional()}),Cc=d({format:x(oc),precision:x([`fp16`,`int8`]).optional(),sizeMB:a(),validated:C(),files:S(l()).readonly()}),wc=d({entry:bc,artifacts:S(Cc).readonly()});function Tc(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function Ec(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function Dc(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function Oc(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 kc(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=Tc(e.method);return Dc(e.scopes,e.addonId,n)?{allowed:!0}:{allowed:!1,reason:`integration token holds no addon:${e.addonId}[${n}] grant`}}var k={contact:`entryOpen`,binary:`on`,switch:`on`,motion:`detected`,flood:`flooded`,gas:`detected`,smoke:`detected`,"carbon-monoxide":`detected`,vibration:`detected`,tamper:`tampered`},Ac={contact:`lastChangedAt`,binary:`lastChangedAt`,switch:`lastChangedAt`,motion:`lastDetectedAt`,flood:`lastChangedAt`,gas:`lastChangedAt`,smoke:`lastChangedAt`,"carbon-monoxide":`lastChangedAt`,vibration:`lastChangedAt`,tamper:`lastChangedAt`},jc=Object.keys(k),Mc=[`sensor`,`switch`,`control`];function Nc(e){return Object.prototype.hasOwnProperty.call(k,e)}function Pc(e,t){let n=k[e];if(n===void 0)return null;let r=t[n];return typeof r==`boolean`?r:null}function Fc(e,t){let n=Ac[e];if(n===void 0)return null;let r=t[n];return typeof r!=`number`||!Number.isFinite(r)||r<=0?null:r}var Ic=3e4;function Lc(e){let t=e.changedAt,n=Math.max(e.startedAtMs,e.nowMs-e.firstSightingFreshnessMs),r=e.priorLevel===void 0&&e.level&&t!==null&&Number.isFinite(t)&&t>=n,i=e.priorLevel===!1&&e.level&&t!==null&&Number.isFinite(t);return(r||i)&&t!==null?{kind:`rise`,timestamp:t}:{kind:`none`,nextPriorLevel:e.level}}function Rc(e){let t=Pc(e.capName,e.slice);return t===null?{edge:`none`,value:null,reason:Nc(e.capName)?`non-boolean-value`:`unknown-cap`}:Lc({level:t,changedAt:Fc(e.capName,e.slice),priorLevel:e.prior,startedAtMs:e.startedAtMs,nowMs:e.nowMs,firstSightingFreshnessMs:e.firstSightingFreshnessMs}).kind===`rise`?{edge:`rising`,value:!0}:e.prior===void 0?t?{edge:`none`,value:t,reason:`baseline-seeded-stale-active`}:{edge:`none`,value:t,reason:`baseline-seeded-inactive`}:e.prior===t?{edge:`none`,value:t,reason:`no-change`}:t?{edge:`none`,value:t,reason:`missing-timestamp`}:{edge:`none`,value:t,reason:`falling-edge`}}var A=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},j=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}};function zc(e){return e===`rose`||e===`count`}function M(e,t,n){if(typeof e!=`number`||!Number.isFinite(e))throw new j(`${t}: argument ${n+1} must be a finite number`);return e}function Bc(e,t,n){if(typeof e!=`string`)throw new j(`${t}: argument ${n+1} must be a string`);return e}function N(e,t){if(!Number.isFinite(e))throw new j(`${t}: produced a non-finite result`);return e}function Vc(e,t){return e.map((e,n)=>M(e,t,n))}function Hc(e,t,n){if(typeof e!=`boolean`)throw new j(`${t}: argument ${n+1} must be a boolean`);return e}var Uc=/^[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/;function Wc(e){if(typeof e==`number`)return Number.isFinite(e)?e:null;if(typeof e!=`string`)return null;let t=e.trim();if(!Uc.test(t))return null;let n=Number(t);return Number.isFinite(n)?n:null}var Gc=2e3;function Kc(e,t,n,r,i,a){let o=Hc(e,`rose`,0),s=typeof t==`number`&&Number.isFinite(t)?t:null,c=n===void 0?Gc:M(n,`rose`,2);if(c<0)throw new j(`rose: debounce must be a non-negative finite number`);if(r.disarmNext===!0||i.disarmRoseNext)return r.disarmNext=!1,r.priorLevel===void 0&&(r.priorLevel=o),a.currentOutput;let l=Lc({level:o,changedAt:s,priorLevel:r.priorLevel,startedAtMs:a.startedAtMs,nowMs:a.nowMs,firstSightingFreshnessMs:Ic});return r.priorLevel=l.kind===`rise`?!0:l.nextPriorLevel,l.kind===`none`||i.acceptedEdgeAt!==null&&l.timestamp-i.acceptedEdgeAt<c?a.currentOutput:(i.acceptedEdgeAt=l.timestamp,l.timestamp)}function qc(e){e.disarmRoseNext=!0;for(let[t,n]of e.calls)n.kind===`rose`&&e.calls.set(t,{...n,disarmNext:!0})}function Jc(e,t,n){let r=typeof n==`number`&&Number.isFinite(n)&&n>=0?n:0;return e===null?(t.primed=!0,r):typeof e!=`number`||!Number.isFinite(e)?r:t.primed?t.highWater!==null&&e<=t.highWater?r:(t.highWater=e,r+1):(t.primed=!0,t.highWater=e,r)}var Yc=1/0,Xc={min:{minArgs:1,maxArgs:Yc,apply:e=>N(Math.min(...Vc(e,`min`)),`min`)},max:{minArgs:1,maxArgs:Yc,apply:e=>N(Math.max(...Vc(e,`max`)),`max`)},abs:{minArgs:1,maxArgs:1,apply:e=>N(Math.abs(M(e[0],`abs`,0)),`abs`)},floor:{minArgs:1,maxArgs:1,apply:e=>N(Math.floor(M(e[0],`floor`,0)),`floor`)},ceil:{minArgs:1,maxArgs:1,apply:e=>N(Math.ceil(M(e[0],`ceil`,0)),`ceil`)},sqrt:{minArgs:1,maxArgs:1,apply:e=>N(Math.sqrt(M(e[0],`sqrt`,0)),`sqrt`)},round:{minArgs:1,maxArgs:2,apply:e=>{let t=M(e[0],`round`,0),n=e.length>1?Math.trunc(M(e[1],`round`,1)):0;if(n<0||n>100)throw new j(`round: digits must be between 0 and 100`);let r=10**n;return N(Math.round(t*r)/r,`round`)}},pow:{minArgs:2,maxArgs:2,apply:e=>N(M(e[0],`pow`,0)**M(e[1],`pow`,1),`pow`)},clamp:{minArgs:3,maxArgs:3,apply:e=>{let t=M(e[0],`clamp`,0),n=M(e[1],`clamp`,1),r=M(e[2],`clamp`,2);if(n>r)throw new j(`clamp: lower bound is greater than upper bound`);return N(Math.min(r,Math.max(n,t)),`clamp`)}},avg:{minArgs:1,maxArgs:Yc,apply:e=>{let t=Vc(e,`avg`);return N(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:Yc,apply:e=>N(Vc(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:Yc,apply:e=>{for(let t of e)if(t!==null)return t;return null}},age:{minArgs:2,maxArgs:2,apply:e=>N(M(e[0],`age`,0)-M(e[1],`age`,1),`age`)},convert:{minArgs:3,maxArgs:3,apply:(e,t)=>{let n=M(e[0],`convert`,0),r=Bc(e[1],`convert`,1).trim(),i=Bc(e[2],`convert`,2).trim();if(t.convert){let e=t.convert(n,r,i);if(e===null)throw new j(`convert: cannot convert '${r}' to '${i}'`);return N(e,`convert`)}if(r===i)return n;throw new j(`convert: unit conversion table not installed`)}},any:{minArgs:1,maxArgs:Yc,apply:e=>e.map((e,t)=>Hc(e,`any`,t)).some(e=>e)},all:{minArgs:1,maxArgs:Yc,apply:e=>e.map((e,t)=>Hc(e,`all`,t)).every(e=>e)},within:{minArgs:2,maxArgs:2,apply:(e,t)=>{let n=M(e[1],`within`,1);if(n<0)throw new j(`within: the window must not be negative`);let r=e[0];if(r===null)return!1;let i=M(r,`within`,0),a=t.now;if(a===void 0||!Number.isFinite(a))throw new j(`within: no clock was supplied to this evaluation`);let o=a-i<=n;return o&&t.noteDeadline?.(i+n+1),o}},number:{minArgs:1,maxArgs:1,apply:e=>Wc(e[0])},latest:{minArgs:1,maxArgs:Yc,apply:e=>{let t=e.flatMap((e,t)=>e===null?[]:[M(e,`latest`,t)]);return t.length===0?null:N(Math.max(...t),`latest`)}},rose:{minArgs:2,maxArgs:3,apply:()=>{throw new j(`rose: stateful evaluation context is required`)}},count:{minArgs:1,maxArgs:1,apply:()=>{throw new j(`count: stateful evaluation context is required`)}}},Zc=Object.freeze(Object.assign(Object.create(null),Xc)),Qc=new Set(Object.keys(Xc)),$c=2048,el=4096,tl=/^[A-Za-z_][A-Za-z0-9_]*$/,nl=new Set([`now`,`true`,`false`,`null`]),rl=new Set([`true`,`false`,`null`]);function il(e){return e>=`0`&&e<=`9`}function al(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function ol(e){return al(e)||il(e)}function sl(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,I as c,M as l,N as u,O as d,P as f,S as p,T as m,_ as h,a as g,b as _,c as ee,d as te,f as ne,g as v,h as re,i as ie,j as y,k as ae,l as oe,m as b,n as se,o as ce,p as x,r as le,s as ue,t as de,u as fe,v as S,w as pe,x as me,y as C}from"./__vite-browser-external-Cc3gW-QT.js";var he=[`f32le`,`pcmu`,`pcma`];function ge(e){return typeof e==`string`&&he.includes(e)}function _e(e){return e===`f32le`?4:1}function ve(e,t){if(t===`f32le`){let t=new Uint8Array(e.byteLength);return t.set(e),t}let n=t===`pcmu`?xe:Se,r=new Float32Array(e.length);for(let t=0;t<e.length;t++)r[t]=n[e[t]];return new Uint8Array(r.buffer)}function ye(){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 be(){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 xe=ye(),Se=be(),Ce=[`track`,`face`,`identity`,`plate`,`vehicle`,`scene`,`motion`,`object`,`audio`,`mosaic`],we=new Set(Ce),Te=/^\d+$/;function Ee(e){return we.has(e)}function De(e){let t=e.split(`:`);if(t.length!==3&&t.length!==4)return null;let[n,r,i,a]=t;return n===void 0||!Ee(n)||r===void 0||r.length===0||i===void 0||i.length===0?null:a===void 0?{ownerType:n,ownerId:r,fileKind:i}:Te.test(a)?{ownerType:n,ownerId:r,fileKind:i,timestampMs:Number(a)}:null}function Oe(e){let t=`${e.ownerType}:${e.ownerId}:${e.fileKind}`;return e.timestampMs===void 0?t:`${t}:${e.timestampMs}`}var ke=[`motion`,`object`,`audio`],Ae=x(ke),je=[...ke,`track`],Me=x(je),Ne=new Set(ke);function Pe(e){return Ne.has(e)}var w=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.DeviceNativeShadowChanged=`device.native-shadow-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.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=new Set([`device.native-shadow-changed`]);function Ie(e){return Fe.has(e)}function Le(){let e=Object.values(w).filter(e=>typeof e==`string`);return[...new Set(e)].filter(e=>!Ie(e)).toSorted()}var Re=[{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}],ze=Object.fromEntries(Re.map(e=>[e.id,e]));function Be(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 Ve(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&&He(e.fields,t);return t}function He(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){He(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&&He(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 Ue(e){let t=new Map;for(let[n,r]of Ve(e))t.set(n,r.value??r.default);return t}function We(e,t){let n=Ve(e).get(t);return n===void 0?void 0:n.value??n.default}function Ge(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Ke(e,t))}))}}function Ke(e,t){if(Be(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Ke(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Ke(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?qe(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;if(e.type===`tags`&&typeof e.suggestionsFrom==`string`){let n=t[e.suggestionsFrom],r=Array.isArray(n)?n.filter(e=>typeof e==`string`&&e.length>0):[],i=[...new Set([...e.suggestions??[],...r])];return{...e,suggestions:i,value:o}}if((e.type===`select`||e.type===`multiselect`)&&typeof e.optionsFrom==`string`){let n=t[e.optionsFrom],r=new Map;for(let t of e.options)r.set(t.value,t);if(Array.isArray(n))for(let e of n){if(typeof e==`string`&&e.length>0){r.has(e)||r.set(e,{value:e,label:e});continue}if(typeof e!=`object`||!e)continue;let t=Reflect.get(e,`value`),n=Reflect.get(e,`label`);typeof t!=`string`||t.length===0||r.has(t)||r.set(t,{value:t,label:typeof n==`string`&&n.length>0?n:t})}return{...e,options:[...r.values()],value:o}}return{...e,value:o}}function qe(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 Je(e,t){return e.category===t}function Ye(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 Xe(e,t){let n=t.ts??Date.now();e.emit(Ye(`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 Ze(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 Qe(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 $e(e,t){return`${e}@${Qe(t)}`}function et(e,t,n){return e[$e(t,n)]}function tt(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?$e(i,n):i]=a;return r}function nt(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=et(e,i,n);t!==void 0&&(r[i]=t)}return r}var rt=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(w.AddonStarted);let n=ot(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(w.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 Ge(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=it(t.fields);n.length!==0&&i.push({...t,fields:n})}if(i.length===0)return null;let a=await this.resolveGlobalStore(e);return Ge({...n,sections:i},a)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=Qe(e??this._ctx?.kernel?.localNodeId);return r.size>0?nt(n,r,i):n}async readStoredGlobalKey(e){let t=this._ctx?.settings?.readAddonStoreResult;if(t===void 0)return{kind:`unreadable`,reason:`three-way-read-unavailable`};let n;try{n=await t.call(this._ctx?.settings)}catch(e){return{kind:`unreadable`,reason:`store-read-failed`,error:e instanceof Error?e.message:String(e)}}return n.kind===`failed`?{kind:`unreadable`,reason:`store-read-failed`,error:n.error}:n.kind===`missing`||!Object.prototype.hasOwnProperty.call(n.value,e)?{kind:`absent`}:{kind:`present`,value:n.value[e]}}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=Qe(this._ctx?.kernel?.localNodeId),i=Qe(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?tt(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(w.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=>at(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?Ge(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{Xe(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-Cc3gW-QT.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-Cc3gW-QT.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=Qe(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?et(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 Ze({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 Ze({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 it(e){let t=[];for(let n of e){if(n.type===`group`){let e=it(n.fields);e.length>0&&t.push({...n,fields:e});continue}if(n.type===`sub-tabs`){let e=n.tabs.map(e=>({...e,fields:it(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 at(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...at(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...at(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function ot(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function st(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=ct(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=ut(r),a={params:{...n.params,...e.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 ct(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=lt(t.path,n);if(e!==null)return{route:t,params:e}}return null}function lt(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 ut(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 dt=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)}}}},ft=d({codec:x([`h264`,`h265`,`copy`]),profile:x([`baseline`,`main`,`high`]).optional(),level:l().optional(),width:a().int().positive().optional(),height:a().int().positive().optional(),fps:a().positive().optional(),bitrateKbps:a().int().positive().optional(),gopFrames:a().int().positive().optional(),bf:a().int().min(0).optional(),preset:x([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:x([`zerolatency`,`film`,`animation`]).optional(),singleSlicePerFrame:C().optional()}),pt=f([m(`passthrough`),d({codec:x([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:a().int().positive().optional(),sampleRateHz:a().int().positive().optional(),channels:f([m(1),m(2)]).optional()})]),mt=d({video:ft,audio:pt,inputArgs:S(l()).optional(),outputArgs:S(l()).optional()});function ht(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 gt(e,t,n){let r=e>=n;return r===t>=n?r?e-t:t-e:r?-1:1}function _t(e){let t=e.toLowerCase().replace(/[.\s-]/g,``);return t===`hevc`||t===`hvc1`||t===`hev1`?`h265`:t===`avc`||t===`avc1`?`h264`:t}function vt(e,t){if(t.length===0)return!0;if(e===void 0)return!1;let n=_t(e);return t.some(e=>_t(e)===n)}function yt(e,t){for(let n=0;n<t.length;n+=1)if(e.startsWith(t[n]))return n;return t.length}function bt(e,t){let n=e.filter(e=>t.allowTranscode||vt(e.codec,t.acceptCodecs));if(n.length===0)return null;let r=t.targetHeight,i=n.map(e=>({candidate:e,transcodes:!vt(e.codec,t.acceptCodecs),provider:yt(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:gt(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 xt={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},St={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 Ct(e){return[`-hide_banner`,`-loglevel`,e]}function wt(e){return!e||e===`none`||e===`copy`}function Tt(e,t){let n=[];if(wt(t)||n.push(`-hwaccel`,String(t)),e.extraArgs?.length&&n.push(...e.extraArgs),e.decodeThreadCount!==void 0&&e.decodeThreadCount>0&&n.push(`-threads`,String(e.decodeThreadCount)),e.analyzeDurationUs!==void 0&&n.push(`-analyzeduration`,String(e.analyzeDurationUs)),e.probeSizeBytes!==void 0&&n.push(`-probesize`,String(e.probeSizeBytes)),e.lowDelay===!0&&n.push(`-flags`,`low_delay`),e.useWallclockTimestamps===!0&&n.push(`-use_wallclock_as_timestamps`,`1`),e.fflags?.length)for(let t of e.fflags)n.push(`-fflags`,t);if(e.rtspTransport&&n.push(`-rtsp_transport`,e.rtspTransport),e.rawVideo!==void 0){let t=e.rawVideo;n.push(`-f`,`rawvideo`,`-pix_fmt`,t.pixelFormat,`-video_size`,`${String(t.width)}x${String(t.height)}`,`-framerate`,String(t.framerate))}return n.push(`-i`,e.url),n}function Et(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 Dt(e,t,n,r){if(n){if(e)throw Error(`FfmpegInvocation: video.scale cannot be combined with a filter graph — scale inside the graph instead (the -vf would feed an output the graph already feeds)`);if(t.some(e=>e===`-vf`))throw Error(`FfmpegInvocation: outputArgs carries a -vf while a filter graph feeds the same output — fold the filter into the graph`);return[]}if(t.some(e=>e===`-vf`))return[];if(!e)return r.length>0?[`-vf`,r]:[];let i=r.length>0?`,${r}`:``;return e.mode===`exact`?[`-vf`,`scale=${e.width}:${e.height}${i}`]:[`-vf`,`scale='min(${e.width},iw)':'min(${e.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2${i}`]}function Ot(e,t){return e===void 0||!wt(t)?``:`format=nv12,hwupload`}function kt(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 At(e,t,n,r){if(e.kind===`raw`){if(n&&e.filter!==void 0)throw Error(`FfmpegInvocation: video.filter cannot be combined with a filter graph — fold the filter into the graph`);return[...e.filter===void 0?[]:[`-vf`,e.filter],`-c:v`,`rawvideo`,`-pix_fmt`,e.pixelFormat,...e.fps===void 0?[]:[`-r`,String(e.fps)]]}if(e.kind===`copy`){if(n)throw Error("FfmpegInvocation: a filter graph produces a NEW picture, so video.kind must be `encode`");return[`-c:v`,`copy`,...e.bitstreamFilter?[`-bsf:v`,e.bitstreamFilter]:[]]}let i=r===void 0?``:Ot(r.device,r.decodeHwAccel);if(r!==void 0&&n)throw Error(`FfmpegInvocation: a hardware encode fed by a filter graph must upload INSIDE the graph — hwEncodeDevice cannot be combined with filterGraph`);let a=[...Dt(e.scale,t,n,i),`-c:v`,e.encoder];return e.preset!==void 0&&a.push(`-preset`,e.preset),e.tune!==void 0&&a.push(`-tune`,e.tune),e.singleSlicePerFrame===!0&&e.encoder===`libx264`&&a.push(`-x264-params`,`sliced-threads=0`),e.profile!==void 0&&a.push(`-profile:v`,e.profile),e.level!==void 0&&a.push(`-level`,e.level),e.pixelFormat!==void 0&&a.push(`-pix_fmt`,e.pixelFormat),e.fps!==void 0&&a.push(`-r`,String(e.fps)),e.gopFrames!==void 0&&a.push(`-g`,String(e.gopFrames)),e.forceKeyFramesSeconds!==void 0&&a.push(`-force_key_frames`,`expr:gte(t,n_forced*${e.forceKeyFramesSeconds})`),e.bf!==void 0&&a.push(`-bf`,String(e.bf)),a.push(...kt(e)),e.bitstreamFilter!==void 0&&a.push(`-bsf:v`,e.bitstreamFilter),a}function jt(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`,xt[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 Mt(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 Nt(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var Pt=`+frag_keyframe+empty_moov+default_base_moof`;function Ft(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?Lt(e):[`-f`,e.container,`pipe:1`]}var It=.9;function Lt(e){return[`-movflags`,Pt,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*It*1e3))),`-f`,`mp4`,`pipe:1`]}function Rt(e){return[`-map`,`0:a:0?`,...jt(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:St[e.codec]),...Mt({url:e.rtpUrl,sdpFile:e.sdpFile})]}function zt(e){return e.hwEncodeDevice===void 0?void 0:{device:e.hwEncodeDevice,decodeHwAccel:e.decodeHwAccel}}function Bt(e){let t=e.filterGraph??null,n=[...Ct(e.logLevel),...e.hwEncodeDevice===void 0?[]:[`-vaapi_device`,e.hwEncodeDevice.renderNode],...Tt(e.input,e.decodeHwAccel),...(e.extraInputs??[]).flatMap(t=>Tt(t,e.decodeHwAccel)),...t?[`-filter_complex`,t.graph]:[]],r=[...e.threadCount>0?[`-threads`,String(e.threadCount)]:[],...e.filterThreadCount!==void 0&&e.filterThreadCount>0?[`-filter_threads`,String(e.filterThreadCount)]:[]],i=Et(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`,...At(e.video,e.outputArgs,t,zt(e)),...r,...e.outputArgs,...Mt(e.sink.video)]:[],o=e.sink.audio?[`-vn`,`-map`,i.audio??`0:a:0?`,...jt(e.audio),...Mt(e.sink.audio)]:[];return[...n,...a,...o]}let s=Nt(e.sink)||e.audio.kind===`none`,c=Nt(e.sink)?[`-an`]:jt(e.audio);return[...n,...a,...At(e.video,e.outputArgs,t,zt(e)),...r,...s?[]:o,...c,...e.outputArgs,...Ft(e.sink),...e.audioSidecar?Rt(e.audioSidecar):[]]}var Vt={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 Ht(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||wt(t)||t===`auto`)return r;let i=Vt[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function Ut(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 Wt(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:Ht(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:Ut(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var Gt={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`},Kt={...Gt,video:{...Gt.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},qt={...Gt,audio:{codec:`opus`},video:{...Gt.video,singleSlicePerFrame:!0}},Jt={kind:`cbr`,vbvSeconds:1},Yt={kind:`cap`,vbvSeconds:2},Xt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},Zt=16*1024*1024,Qt=8,$t=16,en=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??Zt}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<$t)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 tn(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 nn(e){return!e||e===`none`||e===`copy`}async function rn(e){let t=e.override;if(t!=null&&t!==``)return nn(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=nn(r)?null:r;return e.cache?.write(i),i}function an(e){return String(Math.round(e*1e3)/1e3)}function on(e,t){return!Number.isFinite(t)||t<=0?e:e/t}function sn(e){let t=e.speed>0?e.speed:1;return t===1?`[0:v]fps=${an(e.fps)},scale=${e.maxWidth}:-2:flags=lanczos,split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle`:`[0:v]fps=${an(e.fps/t)},setpts=PTS/${t},fps=${an(e.fps)},scale=${e.maxWidth}:-2:flags=lanczos,split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle`}function cn(e){return[`-y`,`-v`,`error`,`-f`,`mp4`,`-i`,e.input??`pipe:0`,`-filter_complex`,sn(e),`-loop`,`0`,`-f`,`gif`,`pipe:1`]}var ln=de();function un(e){let t=JSON.stringify(e,dn);return(0,ln.createHash)(`sha256`).update(t??``).digest(`hex`)}function dn(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 fn(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var pn=`\0unset`;function mn(e){return{codec:e.codec,profile:e.profile??pn,level:e.level??pn,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??pn,tune:e.tune??pn,singleSlicePerFrame:e.singleSlicePerFrame===void 0?pn:String(e.singleSlicePerFrame)}}function hn(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function gn(e,t=fn(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:mn(e.encode.video),audio:hn(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??pn,pixelFormat:e.pixelFormat??pn,decodeHwAccel:e.decodeHwAccel??pn}}function _n(e,t=fn(e)){return`egress:${un(gn(e,t))}`}function vn(e){let t=null;return()=>{if(t!==null)return t;let n=e();return t=n,n.catch(()=>{t===n&&(t=null)}),n}}var yn=`8.1.2-5`,bn=`https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${yn}`;function xn(e){return`${bn}/jellyfin-ffmpeg_${yn}_portable_${e}-gpl.tar.xz`}xn(`linux64`),xn(`linuxarm64`),xn(`macarm64`),xn(`mac64`);var Sn=`CAMSTACK_FFMPEG_PATH`,Cn=x([`singleton`,`device`,`widget`]),wn=d({capName:l(),kind:Cn,deviceId:a().optional(),reachable:C(),latencyMs:a(),error:l().optional()}),Tn=d({addonId:l(),caps:S(wn).readonly(),widgets:S(wn).readonly()}),En=d({nodeId:l(),addons:S(Tn).readonly()}),Dn=d({ok:C(),degraded:C(),checkedAt:l(),nodes:S(En).readonly(),summary:d({total:a(),reachable:a(),unreachable:a()})}),On=`hub-only`;function kn(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function An(e){let t=kn(e).placement;return t===`any-node`||t===`agent-only`}function jn(e){return kn(e).placement===`agent-only`}function Mn(e){return kn(e).group}function Nn(e,t){return e.execution?.group??t}function Pn(e){return kn(e).placement}function Fn(e){return e.execution?.isolate===!0}var In=`x-camstack-dataplane-secret`,Ln=[`grid-view`,`events-view`],Rn=3e4,zn=15e3,Bn=256*1024,Vn=d({url:l().min(1),hostNodeId:l().min(1),expiresAtMs:a().int().nonnegative(),declaredBytes:a().int().nonnegative().nullable()}),Hn=x([`running`,`done`,`failed`,`cancelled`]),Un=x([`adopted`,`already-adopted`,`failed`,`cancelled`]),Wn=d({childNativeId:l(),outcome:Un,parentDeviceId:a().int().nonnegative().nullable(),accessoryCount:a().int().nonnegative(),error:l().nullable()}),Gn=d({jobId:l(),addonId:l(),integrationId:l(),state:Hn,total:a().int().nonnegative(),processed:a().int().nonnegative(),adopted:a().int().nonnegative(),alreadyAdopted:a().int().nonnegative(),failed:a().int().nonnegative(),accessoriesCreated:a().int().nonnegative(),currentChildNativeId:l().nullable(),results:S(Wn).readonly(),startedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),Kn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},qn=x([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`]),Jn=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`],Yn=p(`kind`,[d({kind:m(`device-disabled`)}),d({kind:m(`wrapper-binding`),capName:l()}),d({kind:m(`recording-config`)}),d({kind:m(`notification-mute`)}),d({kind:m(`camera-audio`),capName:l()}),d({kind:m(`camera-mask`),capName:l()}),d({kind:m(`broker-audio-mute`)})]),Xn=x([`no-provider`,`source-unreachable`,`device-disabled`]),Zn=x([`no-privacy-zones`]),Qn=d({id:qn,label:l(),costWhenOff:l(),available:C(),unavailableReason:Xn.optional(),warning:Zn.optional(),enabled:C(),authority:Yn}),$n=d({deviceId:a().int(),switches:S(Qn).readonly(),fetchedAt:a()}),er=`detection-pipeline`,tr=`audio-analysis`,nr=`privacy-mask`,rr=`pipeline-analytics`,ir=[`motion-detection`,er,tr,rr,`scene-monitor`],ar={"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:er},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:nr},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:nr},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:tr},countsAsSwitchedOff:!0},"event-saving":{id:`event-saving`,label:`Event saving`,costWhenOff:`Off: nothing about this camera is written to its history — no tracks, no events and no event snapshots or clips. Detection keeps running and live boxes still appear, so the camera looks busy while its timeline stays empty, and anything that fires ON an event (notification rules, event-triggered recording) has nothing to fire on. Continuous recording is unaffected, and history already written is kept.`,authority:{kind:`wrapper-binding`,capName:rr},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 or(e,t){switch(e.authority.kind){case`device-disabled`:return{available:!0,enabled:!t.deviceDisabled};case`wrapper-binding`:{let n=e.authority.capName;return t.bindableCapNames===null||t.activeWrapperCapNames===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:t.bindableCapNames.includes(n)?{available:!0,enabled:t.activeWrapperCapNames.includes(n)}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`recording-config`:return t.recordingEnabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:t.recordingEnabled};case`notification-mute`:return t.notificationsMuted===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!t.notificationsMuted};case`camera-audio`:{let e=t.deviceAudio;return e===null?{available:!1,enabled:!0,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.enabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`camera-mask`:{let e=t.privacyMask;return e===null?{available:!1,enabled:!1,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.configuredRegions===null||e.enabled===null?{available:!1,enabled:!1,unavailableReason:`source-unreachable`}:e.configuredRegions===0?{available:!0,enabled:e.enabled,warning:`no-privacy-zones`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!1,unavailableReason:`no-provider`}}case`broker-audio-mute`:{let e=t.brokerAudio;return e===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!e.muted}}}}function sr(e){return Jn.map(t=>{let n=ar[t],r=or(n,e);return{id:n.id,label:n.label,costWhenOff:n.costWhenOff,available:r.available,...r.unavailableReason===void 0?{}:{unavailableReason:r.unavailableReason},...r.warning===void 0?{}:{warning:r.warning},enabled:r.enabled,authority:n.authority}})}function cr(e){return e.filter(e=>ar[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function lr(e){let t=[],n=[];for(let r of Jn){let i=ar[r];if(!i.countsAsSwitchedOff)continue;let a=or(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var ur=`__camstack_redacted__`;function dr(e){return e.type===`password`?!0:`secret`in e&&e.secret===!0}function fr(e){let t=new Set;for(let n of hr(e))for(let e of gr(n))_r(e,t);return t}function pr(e){for(let t of hr(e))if(gr(t).length>0)return!0;return!1}function mr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function hr(e){if(!mr(e))return[];let t=e.sections;return Array.isArray(t)?t:[]}function gr(e){if(!mr(e))return[];let t=e.fields;return Array.isArray(t)?t:[]}function _r(e,t){if(!mr(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 gr(e))_r(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 gr(e))_r(n,t)}}var vr=3e4,yr=6e4,br=x([`confirmed`,`suppressed`,`exhausted-fallback`]),xr=d({id:l(),at:a().int(),deviceId:a().int(),sourceTrackId:l(),className:l(),verdict:br,reason:l().nullable(),attempts:a().int(),deferredForMs:a().int(),decidedOnCoastedFrame:C(),birthEvidenceAvailable:C(),decidedByBirthEvidence:C(),bestScore:a().nullable(),appliedMinConfidence:a().nullable(),firstSeen:a().int().nullable(),motionOnsetAt:a().int().nullable(),birthLatencyMs:a().int().nullable(),birthIndexInBurst:a().int().nullable()}),Sr=d({deviceId:a().int().optional(),since:a().int().optional(),verdict:br.optional(),limit:a().int().min(1).max(5e3).optional()}),Cr=5e3,wr=d({id:l(),note:l(),deviceId:a().int(),sourceTrackId:l(),archivedAt:a().int(),trackStartedAt:a().int().nullable(),trackClass:l().nullable(),trackLabel:l().nullable()}),Tr=d({deviceId:a().int().optional(),limit:a().int().min(1).max(1e3).optional()}),Er=2e4,Dr=5e3,Or=x([`same-subject`,`different-subjects`]),kr=x([`before`,`after`]),Ar=x([`mixed`,`not-a-subject`]),jr=d({id:l(),deviceId:a().int(),leftTrackId:l(),rightTrackId:l(),leftSide:kr.nullable(),rightSide:kr.nullable(),relation:Or,presence:m(`continuous`).nullable(),leftStartedAt:a().int().nullable(),rightStartedAt:a().int().nullable(),createdAt:a().int(),updatedAt:a().int(),author:l().nullable()}),Mr=d({id:l(),deviceId:a().int(),sourceTrackId:l(),purity:Ar,switchAtMs:a().int().nullable(),startedAt:a().int().nullable(),createdAt:a().int(),updatedAt:a().int(),author:l().nullable()}),Nr=d({deviceId:a().int(),trackId:l().min(1),otherTrackId:l().min(1),relation:Or,presence:m(`continuous`).optional(),trackSide:kr.optional(),otherSide:kr.optional()}),Pr=d({deviceId:a().int(),trackId:l().min(1),otherTrackId:l().min(1)}),Fr=d({cleared:C()}),Ir=d({deviceId:a().int(),trackId:l().min(1),purity:x([`pure`,`mixed`,`not-a-subject`]),switchAtMs:a().int().optional()}),Lr=d({purity:Mr.nullable()}),Rr=d({deviceId:a().int(),trackId:l().optional(),since:a().int().optional(),until:a().int().optional(),limit:a().int().min(1).max(5e3).optional()}),zr=d({relations:S(jr).readonly(),purities:S(Mr).readonly(),truncated:C()}),Br=x([`unknown-track`,`cross-device`,`self-relation`,`contradiction`,`switch-outside-track`,`switch-needs-mixed`]),Vr={high:`High`,mid:`Mid`,low:`Low`};function Hr(e){return Vr[e]??e.charAt(0).toUpperCase()+e.slice(1)}function Ur(e){return(e.width??0)*(e.height??0)}function Wr(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:Ur(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 Gr(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function Kr(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 T(e){return typeof e==`string`}function qr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Jr(e){return T(e)&&e.trim()?{url:e}:qr(e)&&T(e.url)&&e.url.trim()?{url:e.url,label:T(e.label)?e.label:void 0}:null}function Yr(e){let t=T(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=Jr(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=T(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:T(e.main_stream_name)?e.main_stream_name:void 0});let i=T(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:T(e.sub_stream_name)?e.sub_stream_name:void 0});let a=T(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:T(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function Xr(e){if(e.length===0)return{};let t=Wr(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 Zr={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},Qr={debug:0,info:1,warn:2,error:3};function $r(e,t){return Qr[e]<=Qr[t]}var ei=x([`recording`,`events`]),ti=x([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),ni=x([`retention`,`quota`,`manual`,`operator`,`maintenance`,`orphaned-device`]),ri=d({id:l(),at:a(),domain:ei,op:ti,reason:ni,deviceId:a().nullable(),nodeId:l(),itemsAffected:a(),bytesReclaimed:a(),detail:l().nullable(),actor:l()}),ii=d({deviceId:a().optional(),limit:a().int().min(1).max(1e3).optional()}),E=x([`high`,`mid`,`low`]),ai=[`high`,`mid`,`low`],oi=f([E,m(`auto`)]),si=x([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),ci=d({width:a().int().positive(),height:a().int().positive()}),li=d({camStreamId:l().min(1),deviceId:a().int().nonnegative(),kind:si,url:l().optional(),codec:l().optional(),resolution:ci.optional(),fps:a().positive().optional(),label:l().optional(),deviceFeatures:S(l()).optional(),autoEligible:C().optional(),profileHint:E.optional(),metadata:y(l(),s()).optional()}),ui=x([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),di=d({deviceId:a().int().nonnegative(),profile:E,brokerId:l(),sourceCamStreamId:l().nullable(),status:ui,resolution:ci.optional(),codec:l().optional(),preBufferSec:a().nonnegative().optional(),errorMessage:l().optional()});function fi(e,t){return`${e}/${t}`}function pi(e,t){return`${e}/${t}`}function mi(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=E.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function hi(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>ai.indexOf(e.profile)-ai.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 gi=d({id:l(),label:l(),protocol:x([`rtsp`,`rtmp`,`annexb`,`http-mjpeg`,`webrtc`,`custom`]),url:l().optional(),resolution:d({width:a(),height:a()}).readonly().optional(),fps:a().optional(),bitrate:a().optional(),codec:l().optional(),profileHint:E.optional()}),_i=d({type:l(),url:l(),videoCodec:l().optional(),audioCodec:l().optional(),metadata:y(l(),s()).readonly().optional()}),vi=d({shmId:l(),slot:a().int().nonnegative(),seq:a().int().nonnegative(),width:a().int().positive(),height:a().int().positive(),format:x([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:a(),byteLength:a().int().nonnegative(),nodeId:l(),slotCount:a().int().positive()}),yi=x(he),bi=d({data:b(Uint8Array),sampleRate:a().int().positive(),channels:a().int().positive(),timestamp:a(),format:yi.optional()}),xi=d({brokerId:l(),tag:l().optional(),accept:S(yi).readonly().optional()}),Si=d({subscriptionId:l()}),Ci=x([`idle`,`connecting`,`streaming`,`error`,`stopped`]),wi=d({status:Ci,inputFps:a(),encodedSubscribers:a(),uptimeMs:a(),bitrateKbps:a(),idrIntervalMs:a(),codec:l().optional(),totalBytes:a(),packetCount:a(),rtspClients:a(),pipeClients:a(),preBufferSec:a(),preBufferMs:a(),preBufferPackets:a(),audio:d({codec:l(),sampleRate:a(),channels:a(),supported:C()}).nullable().optional(),audioMuted:C().optional(),audioMutedDropped:a().optional()}),Ti=d({profile:E,brokerId:l(),url:l(),mutedUrl:l(),enabled:C(),codec:l().optional(),resolution:ci.optional()}),Ei=d({id:l(),name:l(),category:l().optional(),description:l().optional(),icon:l().optional()}),Di=[`person`,`vehicle`,`animal`,`package`],Oi=[`person`,`vehicle`,`animal`];function ki(e){return Oi.some(t=>t===e)}var Ai=d({mapping:y(l(),x(Di)),preserveOriginal:C()}),ji={preMs:5e3,postMs:1e4},Mi=a().int().min(0).max(6),Ni=/^([01]\d|2[0-3]):[0-5]\d$/,Pi=x([`off`,`events`,`continuous`,`on-device-decision`]),Fi=x(Oi),Ii=e=>new Set(e).size===e.length,Li=d({motion:C().optional(),audioThresholdDbfs:a().optional(),objectClasses:S(Fi).min(1).refine(Ii,{message:`objectClasses must not repeat a class`}).optional(),sensorDeviceIds:S(a().int().positive()).min(1).max(16).refine(Ii,{message:`sensorDeviceIds must not repeat a device`}).optional()}),Ri=x([`continuous`,`events`]),zi=Li,Bi=x([`on`,`muted`]),Vi=d({days:S(Mi),start:l().regex(Ni),end:l().regex(Ni),mode:Ri,audio:Bi.optional(),triggers:zi.optional(),preBufferSec:a().min(0).optional(),postBufferSec:a().min(0).optional()}),Hi={postBufferSec:30};function Ui(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 Wi=Hi.postBufferSec*1e3,Gi=d({maxAgeDays:a().min(0).optional(),maxSizeGb:a().min(0).optional()}),Ki=d({enabled:C(),mode:Pi.optional(),profiles:S(E).optional(),segmentSeconds:a().int().positive().optional(),bands:S(Vi).default([]),deviceDecision:C().optional(),retention:Gi.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 qi(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 Ji=[`high`,`low`];function Yi(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=>Ji.includes(e));return n.length>0?n:[...e]}var Xi=[`motion`,`audioThresholdDbfs`,`objectClasses`,`sensorDeviceIds`];function Zi(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Qi(e){return Zi(e)&&Zi(e.triggers)&&e.triggers.deviceSignal===!0}function $i(e){let t=e.triggers;return Zi(t)?Xi.some(e=>t[e]!==void 0):!1}function ea(e){let t=e.triggers;if(!Zi(t))return e;let{deviceSignal:n,...r}=t;return{...e,triggers:r}}function ta(e){let t={value:e,migrated:!1,strippedOnly:!1};if(!Zi(e)||!Array.isArray(e.bands)||!e.bands.some(Qi))return t;let n=[];for(let t of e.bands){if(!Qi(t)||!Zi(t)){n.push(t);continue}$i(t)&&n.push(ea(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 na=x([`queued`,`running`,`done`,`failed`,`cancelled`]),ra=d({jobId:l(),state:na,fromLocationId:l(),toLocationId:l(),deviceId:a().nullable(),entities:S(l()),filesMoved:a().int(),bytesMoved:a().int(),filesTotal:a().int().nullable(),rowsReconciled:a().int().nonnegative().optional(),rowsForgotten:a().int().nonnegative().optional(),startedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),ia=x([`recordings`,`recordingsLow`]),aa=d({fromLocationId:l(),toLocationId:l(),entities:S(x([`segments`])).optional(),footageClass:ia.optional(),deviceId:a().int().optional(),profiles:S(l()).optional(),throttleMbps:a().min(1).max(1e3).optional(),sinceMs:a().int().optional()}),oa=d({leaseId:l().min(1)}),sa=aa.extend({leaseId:l().min(1)}),ca=x([`move`,`seal`,`gallery`]),la=d({toLocationId:l(),fromLocationId:l().optional(),throttleMbps:a().min(1).max(1e3).optional(),mode:ca.optional()}),ua=d({present:C(),rows:a().int().nonnegative().nullable()}),da=d({media:ua,retrainFrames:ua,anyPresent:C(),total:a().int().nonnegative().nullable()}).nullable(),fa=la.extend({leaseId:l().min(1)}),pa=x([`recordings`,`recordingsLow`,`eventMedia`,`backups`,`galleryMedia`]),ma=d({recordings:l().min(1).optional(),recordingsLow:l().min(1).optional(),eventMedia:l().min(1).optional(),backups:l().min(1).optional(),galleryMedia:l().min(1).optional()}).refine(e=>Object.keys(e).length>0,{message:`select at least one storage class`}),ha=d({recordings:l().min(1).optional(),recordingsLow:l().min(1).optional(),eventMedia:l().min(1).optional(),backups:l().min(1).optional(),galleryMedia:l().min(1).optional()}).optional(),ga=x([`blocking`,`nonBlocking`]),_a=d({destinations:ma,sources:ha,throttleMbps:a().min(1).max(1e3).optional(),mode:ga.optional()}),va=x([`planning`,`sealing`,`pausing`,`moving`,`draining`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),ya=x([`pipeline`,`recorder`,`analytics`]),ba=d({filesMoved:a().int().nonnegative(),filesTotal:a().int().nonnegative().nullable(),bytesMoved:a().int().nonnegative(),rowsReconciled:a().int().nonnegative().optional(),startedAt:a(),observedAt:a()}),xa=d({storageClass:pa,fromLocationId:l(),toLocationId:l(),freezeSource:C().optional(),moverJobId:l().nullable(),state:na.nullable(),error:l().nullable(),progress:ba.nullable()}),Sa=d({jobId:l(),phase:va,mode:ga,destinations:ma,sources:ha,throttleMbps:a(),moves:S(xa),pauseLeaseId:l().nullable(),pausedParticipants:S(ya),repointed:C(),cancelRequested:C(),startedAt:a(),updatedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),Ca=x([`sharesDeviceWithSource`,`deviceIdentityUnknown`,`unstampedEventMediaRows`,`blockingOnly`,`noMover`]),wa=d({code:Ca,storageClass:pa,message:l()}),Ta=d({destinations:ma,sources:ha,mode:ga,moves:S(d({storageClass:pa,fromLocationId:l(),toLocationId:l(),freezeSource:C().optional()})),findings:S(wa)}),Ea=x([`footage`,`media`]),Da=d({lane:Ea,job:ra,migrationJobId:l().nullable(),observedAt:a()}),Oa=d({storageClass:pa,fromLocationId:l(),toLocationId:l(),items:a().int().nonnegative().nullable(),bytes:a().int().nonnegative().nullable()}),ka=d({classes:S(pa).min(1),throttleMbps:a().min(1).max(1e3).optional()}),Aa=d({fromLocationId:l().min(1),footageClass:ia.optional()}),ja=d({segments:a().int().nonnegative(),bytes:a().int().nonnegative()}).nullable(),Ma=d({locationId:l().min(1),apply:C().optional(),deviceId:a().int().positive().optional(),profiles:S(l().min(1)).optional()}),Na=x([`location-unknown`,`source-writable`,`no-ledger`,`archive-unreadable`,`anchor-absent`,`anchor-unreadable`,`anchor-moved`]),Pa=x([`live-tail`,`listing-error`,`path-mismatch`,`durable-refused`]),Fa=d({"live-tail":a().int().nonnegative(),"listing-error":a().int().nonnegative(),"path-mismatch":a().int().nonnegative(),"durable-refused":a().int().nonnegative()}),Ia=d({deviceId:a().int(),hoursWalked:a().int().nonnegative(),hoursMissing:a().int().nonnegative(),ghostSegments:a().int().nonnegative(),ghostBytes:a().int().nonnegative(),forgottenSegments:a().int().nonnegative(),orphanFiles:a().int().nonnegative()}),La=d({locationId:l(),applied:C(),refused:Na.nullable(),archiveSegments:a().int().nonnegative().nullable(),archiveBytes:a().int().nonnegative().nullable(),hoursClaimed:a().int().nonnegative(),hoursWalked:a().int().nonnegative(),hoursMissing:a().int().nonnegative(),listings:a().int().nonnegative(),segmentsClaimed:a().int().nonnegative(),ghostSegments:a().int().nonnegative(),ghostBytes:a().int().nonnegative(),ghostHoursWhole:a().int().nonnegative(),forgottenSegments:a().int().nonnegative(),forgottenBytes:a().int().nonnegative(),orphanFiles:a().int().nonnegative(),orphanSample:S(l()).readonly(),hoursSkipped:a().int().nonnegative(),skippedByReason:Fa,bounded:C(),byDevice:S(Ia).readonly()}),Ra=d({rows:a().int().nonnegative()}).nullable(),za=d({toLocationId:l().min(1),fromLocationId:l().optional(),mode:ca.optional()}),Ba=x([`orphans`,`debug-media`,`ghost-ledger`,`done`,`failed`,`cancelled`]),Va=d({includeDebugMedia:C().optional()}),Ha=d({jobId:l(),phase:Ba,includeDebugMedia:C(),orphansReclaimed:a().int().nonnegative(),orphanBytesReclaimed:a().int().nonnegative(),debugMediaReclaimed:a().int().nonnegative(),debugMediaBytesReclaimed:a().int().nonnegative(),ghostsForgotten:a().int().nonnegative(),ghostBytesForgotten:a().int().nonnegative(),detail:l().nullable(),cancelRequested:C(),startedAt:a(),updatedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),Ua=d({jobId:l().optional()}),Wa=[`face`,`plate`],Ga=[`face`,`plate`,`clip`,`custom`],Ka=[`active`,`readonly`,`drain`,`disabled`],qa=x(Ka),Ja=x([`normal`,`never`,`drain`]),Ya=`readOnly`;function Xa(e){return e===`active`}function Za(e){return e!==`disabled`}function Qa(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 eo(e){return(to(e.mode)?e.mode:void 0)??$a(e)??`active`}function to(e){return Ka.some(t=>t===e)}function no(e){return Xa(eo(e))}function ro(e){return Za(eo(e))}function io(e){return Qa(eo(e))}function ao(e){if(!(`readOnly`in e))return e;let t={...e};return delete t[Ya],t}function oo(e,t){return{...e,mode:t,enabled:Xa(t),config:ao(e.config)}}var so=l().regex(/^[a-z][a-zA-Z0-9-]*$/),D=d({id:l().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),type:l(),displayName:l().min(1),providerId:l().min(1),config:y(l(),s()),nodeId:l().optional(),isSystem:C().default(!1),enabled:C().optional(),mode:qa.optional(),capacity:d({totalBytes:a(),availableBytes:a()}).nullable().optional(),owned:d({bytes:a().int().nonnegative(),measuredAtMs:a().int().nonnegative()}).optional(),createdAt:a(),updatedAt:a()}),co=d({isDefault:C().optional()});function lo(e){return no({...e,config:e.config??{}})}var uo=1024**3;function fo(e){return Math.floor(e*uo)}var po=d({locationId:l(),startedAtMs:a(),startBytes:a(),bytesRemaining:a(),drained:C(),estimatedEmptyAtMs:a().nullable()}),O=f([so,l().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),mo=x([`local-path`,`cap-mediated`]),ho=`local-path`,go=d({id:l().regex(/^[a-z][a-zA-Z0-9-]*$/,{message:`id must start with a lowercase letter and contain only letters, digits, or hyphens`}),displayName:l().min(1,{message:`displayName must not be empty`}),description:l().optional(),cardinality:x([`single`,`multi`]),access:mo.optional(),defaultsTo:l().optional(),defaultRoot:x([`data`,`media`,`backup`]).optional()}),_o={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},vo={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},yo=[{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:_o},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:_o},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:_o},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:_o},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:_o},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:_o},{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:vo},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:vo},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:vo},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:vo},{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 bo(e){return yo.find(t=>t.id===e)}var xo=x([`info`,`warn`,`error`]),So=d({name:l().min(3).regex(/^[a-z0-9-]+(\.[a-z0-9-]+)+$/,`a channel name is dotted lower-kebab, e.g. area.thing`),description:l().min(1),defaultLevel:xo,perDevice:C()}),Co=d({channel:l().min(1),armedUntilMs:a(),deviceIds:S(a().int()).readonly().nullable()}),wo=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}},To=class{gates=new Map;declare(e){let t=So.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 wo(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}},Eo=null;function Do(){return Eo??=new To,Eo}function Oo(e){return Do().declare(e)}function ko(){Eo=null}var Ao=5e3;function jo(e,t={}){let n=Do(),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 Mo=1024,No=`other`;function Po(e,t,n){return n===void 0?`${e}${t}`:`${e}${t}${n}`}var Fo=class{maxKeys;maxReasons;counters=new Map;refused=0;constructor(e=Mo,t=16){this.maxKeys=e,this.maxReasons=t}get keysRefused(){return this.refused}get size(){return this.counters.size}note(e,t){if(!Number.isInteger(e.deviceId)||e.deviceId<=0)return;let n=Po(e.deviceId,e.family,e.variant),r=this.counters.get(n);if(r===void 0){if(this.counters.size>=this.maxKeys){this.refused+=1;return}r={deviceId:e.deviceId,family:e.family,variant:e.variant,sinceMs:t,attempts:0,succeeded:0,reasons:new Map},this.counters.set(n,r)}if(r.attempts+=1,e.reason===void 0){r.succeeded+=1;return}let i=r.reasons.has(e.reason)||r.reasons.size<this.maxReasons?e.reason:No;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 Io(e){return e.attempts<=0?null:(e.attempts-e.succeeded)/e.attempts}var Lo=`__unattributed__`,Ro=`__root__`;function zo(e){return e.addonId===null?e.classification===`root`?{key:Ro,kind:`root`}:{key:Lo,kind:`unattributed`}:{key:e.addonId,kind:`addon`}}function Bo(e){return Math.round(e*10)/10}function Vo(e,t){let n=new Map;for(let t of e){let{key:e,kind:r}=zo(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?Bo(n.main):null,i=n.splitKnown?Bo(n.gc):null,a=Bo(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 Ho(e,t){return e===null||t===null?null:e<t?e:t}function Uo(e,t){return e===null||t===null?null:e>t?e:t}function Wo(e,t,n){return{atMs:n,samples:e.samples+t.samples,cpuMainPercent:Uo(e.cpuMainPercent,t.cpuMainPercent),cpuMainPercentMin:Ho(e.cpuMainPercentMin,t.cpuMainPercentMin),cpuGcPercent:Uo(e.cpuGcPercent,t.cpuGcPercent),cpuGcPercentMin:Ho(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 Go(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 Ko(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}:Wo(a,i,e))}return[...r.values()].toSorted((e,t)=>e.atMs-t.atMs)}var qo=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${Yo(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function Jo(e,t){return`${e}|${Yo(t)}`}function Yo(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function Xo(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function Zo(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 Qo=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??$o(),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(Jo(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=Jo(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&&Xo(r.state)<=Xo(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} (${Yo(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&&Zo(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 qo(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${Yo(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(Ye(`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=Jo(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} (${Yo(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&&Zo(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} (${Yo(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&Zo(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 $o(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function es(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function ts(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=ns(e,s);if(t)return a(t)}}return a(o[0])}function ns(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)=>gt(e.pixels,t.pixels,n))[0]?.entry}var rs={upperHs:[0,32],upperV:[32,40],upperGrad:[40,48],lowerHs:[48,80],lowerV:[80,88],lowerGrad:[88,96]},is=[`motion`,`objects`,`discarded`,`stationary`],as=[`motion`,`objects`,`stationary`],os={borderWidth:2,dashed:!0,dashPattern:[6,4],opacity:1,borderRadius:2};function ss(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 cs=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],ls={yolo26:`YOLO26`,"yolo26-seg":`YOLO26-seg`,yolov9:`YOLOv9`};function us(e){return ls[e]??e.toUpperCase()}var ds={"yolo26-seg":`detection + masks, slightly heavier`},fs=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function ps(e,t){let n=us(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(fs,``).trim();return r.length>0?r:t}function ms(e,t){let n=[];return t===`test`&&n.push(`Test`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function hs(e){return cs.filter(t=>e.formats[t]!==void 0)}function gs(e){let t=cs.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var _s=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],vs=[`fp32`,`int8`];function ys(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:ms(t,n),formats:hs(e),sizeMB:gs(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?vs.indexOf(e.precision)-vs.indexOf(t.precision):e.optimization===`test`?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?ps(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=_s.indexOf(e.tier),r=_s.indexOf(t.tier);return n!==-1&&r!==-1?n-r:n===-1?r===-1?e.tier.localeCompare(t.tier):1:-1});let i=ds[e];n.push({family:e,label:us(e),...i===void 0?{}:{hint:i},tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function bs(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 xs(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 Ss=/^object-clip(-[a-z0-9][a-z0-9-]*)?$/,Cs=d({textModelId:l().min(1),embeddingDim:a().int().positive(),vectorIndex:l().regex(Ss),tokenizerFile:l().min(1),contextLength:a().int().positive(),padId:a().int().nonnegative(),searchMinScore:a().min(0).max(1)}),ws=[`loose`,`balanced`,`strict`],Ts=x(ws),Es={loose:1,balanced:1.25,strict:1.5};function Ds(e,t){if(t.minScore!==void 0)return t.minScore;let n=Es[t.strictness??`loose`];return Math.min(1,Math.round(e.searchMinScore*n*1e3)/1e3)}var Os=[`animal-classifier`,`vehicle-classifier`,`package-detection`],ks=[`plate-detection`,`face-detection`],As=[`segmentation`],js=[...Os,...ks,...As];function Ms(e){return js.some(t=>t===e)}function Ns(e){return Os.some(t=>t===e)}var Ps={"animal-classifier":[`bird`,`cat`,`cow`,`deer`,`dog`,`horse`,`sheep`,`squirrel`],"vehicle-classifier":[`Ambulance`,`Bicycle`,`Bus`,`Car`,`Motorcycle`,`Taxi`,`Truck`,`Van`],"package-detection":[`package`]},Fs={"animal-classifier":`animal`,"vehicle-classifier":`vehicle`,"package-detection":`package`},Is={"animal-classifier":{},"vehicle-classifier":{school_bus:`Bus`,garbage_truck:`Truck`},"package-detection":{}},Ls={"plate-detection":{rootLabels:[`license_plate`],parentMacro:`vehicle`,childClass:`plate`,servedChildSteps:[`plate-ocr`],use:`as-output`},"face-detection":{rootLabels:[`face`],parentMacro:`person`,childClass:`face`,servedChildSteps:[`face-embedding`],use:`refine`,minRootInputPx:640}},Rs={"animal-classifier":!0,"vehicle-classifier":!0,"package-detection":!0,"plate-detection":!1,"face-detection":!1,segmentation:!0},zs=`useRootModel`,Bs=`labelLink`,Vs=`detector-link:`;function Hs(e){return`${Vs}${e}`}function Us(e){if(e===void 0||!e.startsWith(`detector-link:`))return;let t=e.slice(14);return Ns(t)?t:void 0}function Ws(e,t){let n=Is[e][t];if(n!==void 0)return n;let r=t.toLowerCase();return Ps[e].find(e=>e.toLowerCase()===r)}function Gs(e,t){let n=[];if(t!==void 0)for(let r of Os){let i={};for(let n of e){if(t.mapping[n]!==Fs[r])continue;let e=Ws(r,n);e!==void 0&&(i[n]=e)}let a=new Set(Object.values(i));if(a.size===0)continue;let o=Ps[r].filter(e=>!a.has(e));n.push({kind:`label`,stepId:r,labelToEffect:i,uncovered:o})}let r=new Set(e);for(let e of ks){let t=Ls[e],i=t.rootLabels.filter(e=>r.has(e));i.length!==0&&n.push({kind:`crop`,stepId:e,rootLabels:i,parentMacro:t.parentMacro,childClass:t.childClass})}return n}var Ks=[`yolo-seg`];function qs(e){return e===void 0||!Ks.includes(e)?[]:As.map(e=>({kind:`mask`,stepId:e}))}function Js(e,t){let n=e?.suppliesSteps??Gs(e!==void 0&&e.labels.length>0?e.labels.map(e=>e.id):t.labels,e?.classMap??t.classMap),r=qs(e?.postprocessor).filter(e=>!n.some(t=>t.stepId===e.stepId)),i=r.length>0?[...n,...r]:n,a=e===void 0?void 0:Math.min(e.inputSize.width,e.inputSize.height);return a===void 0?i:i.map(e=>e.kind===`crop`?{...e,rootInputPx:a}:e)}function Ys(e,t){return e?.find(e=>e.stepId===t)}function Xs(e,t){let n=t?.[zs];if(typeof n==`boolean`)return n;let r=t?.[Bs];return r===`skip-when-filled`?!0:r===`run`?!1:Rs[e]}function Zs(e){if(e.kind!==`crop`)return;let t=Ls[e.stepId].minRootInputPx;if(t!==void 0)return e.rootInputPx!==void 0&&e.rootInputPx>=t?void 0:`root-input-too-small`}function Qs(e,t,n){let r=Ys(n,e),i=Xs(e,t),a=r===void 0?`root-does-not-declare`:Zs(r);return{stepId:e,supply:r,intent:i,effective:i&&a===void 0,inactive:i&&a!==void 0,...i&&a!==void 0?{inactiveReason:a}:{}}}function $s(e,t){let n=t?.enabledClasses;return!Array.isArray(n)||n.length===0?!0:n.some(t=>t===e)}function ec(e){return Ls[e].servedChildSteps}var tc=.9;function nc(e,t){let n=e.w*e.h;if(!(n>0))return-1;let r=-1,i=1/0;return t.forEach((t,a)=>{if(Math.max(0,Math.min(e.x+e.w,t.x+t.w)-Math.max(e.x,t.x))*Math.max(0,Math.min(e.y+e.h,t.y+t.h)-Math.max(e.y,t.y))/n<.9)return;let o=t.w*t.h;o<i&&(r=a,i=o)}),r}var rc={"animal-classifier":`animals`,"vehicle-classifier":`vehicles`,"package-detection":`packages`,"plate-detection":`plates`,"face-detection":`faces`,segmentation:`masks`};function ic(e){let t=rc[e.stepId];if(e.kind!==`label`)return t;let n=Ps[e.stepId].length;return n<=1?t:`${t} ${String(n-e.uncovered.length)}/${String(n)}`}function ac(e){return(e??[]).map(ic).join(` · `)}var oc=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],sc=d({url:l(),sizeMB:a(),isDirectory:C().optional(),files:S(l()).readonly().optional(),runtimes:S(x([`python`])).readonly().optional(),revision:l().min(1).optional()}),cc=x([`current`,`stale`,`missing`]),lc=x([`fp32`,`fp16`,`int8`]),uc=d({downloaded:C(),sizeMB:a(),onDisk:cc.optional(),precision:lc.optional()}),dc=d({url:l(),filename:l(),sizeMB:a()}),fc=d({onnx:sc.optional(),coreml:sc.optional(),openvino:sc.optional(),tflite:sc.optional(),pt:sc.optional(),gguf:sc.optional()}),pc=d({family:l(),tier:l(),precision:x([`fp32`,`int8`]).optional(),optimization:x([`standard`,`test`]).optional(),resolution:a().int().positive().optional()}),mc=[`camstack`,`frigate`,`scrypted`,`custom`],hc=x(mc);function gc(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 _c=[`camstack-hf`,`third-party`,`built-in`],vc=r(e=>typeof e==`string`?{weights:e}:e,d({weights:l().min(1),code:l().min(1).optional(),data:d({name:l().min(1),terms:l().min(1),url:l().url().optional()}).optional(),upstream:d({name:l().min(1),url:l().url()}).optional(),url:l().url().optional(),attribution:l().min(1).optional(),modifications:l().min(1).optional(),hosting:x(_c).optional(),nonCommercial:C().optional()})),yc=p(`kind`,[d({kind:m(`label`),stepId:x(Os),labelToEffect:y(l(),l()),uncovered:S(l()).readonly()}),d({kind:m(`crop`),stepId:x(ks),rootLabels:S(l()).readonly(),parentMacro:x([`vehicle`,`person`]),childClass:x([`plate`,`face`]),rootInputPx:a().int().positive().optional()}),d({kind:m(`mask`),stepId:x(As)})]),bc=d({id:l(),name:l(),description:l(),formats:fc,inputSize:d({width:a(),height:a()}),inputChannels:a().int().positive().optional(),labels:S(Ei).readonly(),inputLayout:x([`nchw`,`nhwc`]).optional(),inputNormalization:x([`zero-one`,`imagenet`,`none`,`scrfd`]).optional(),outputProbabilities:C().optional(),preprocessMode:x([`letterbox`,`resize`]).optional(),postprocessor:_().optional(),defaultConfidence:a().min(0).max(1).optional(),defaultClassFloors:y(l(),a().min(0).max(1)).optional(),gpuInferencePrecision:x([`f32`,`f16`]).optional(),suppliedLabelFloors:y(l(),a().min(0).max(1)).optional(),faceAlignment:C().optional(),extraFiles:S(dc).readonly().optional(),legacy:C().optional(),metrics:d({map50:a().optional(),p95LatencyMs:y(l(),a()).optional()}).optional(),license:vc.optional(),group:pc.optional(),provider:hc.optional(),classMap:Ai.optional(),suppliesSteps:S(yc).readonly().optional(),clip:Cs.optional()}),xc=p(`format`,[d({format:m(`openvino`),precisions:S(x([`fp16`,`int8`])).min(1).readonly()}),d({format:m(`coreml`)})]),Sc=d({id:l().regex(/^[a-zA-Z0-9._-]+$/),name:l(),labels:S(Ei).readonly(),inputSize:d({width:a(),height:a()}),inputLayout:x([`nchw`,`nhwc`]).optional(),inputNormalization:x([`zero-one`,`imagenet`,`none`,`scrfd`]).optional(),preprocessMode:x([`letterbox`,`resize`]).optional(),outputFormat:x([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:C().optional(),classMap:Ai.optional()}),Cc=d({format:x(oc),precision:x([`fp16`,`int8`]).optional(),sizeMB:a(),validated:C(),files:S(l()).readonly()}),wc=d({entry:bc,artifacts:S(Cc).readonly()});function Tc(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function Ec(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function Dc(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function Oc(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 kc(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=Tc(e.method);return Dc(e.scopes,e.addonId,n)?{allowed:!0}:{allowed:!1,reason:`integration token holds no addon:${e.addonId}[${n}] grant`}}var k={contact:`entryOpen`,binary:`on`,switch:`on`,motion:`detected`,flood:`flooded`,gas:`detected`,smoke:`detected`,"carbon-monoxide":`detected`,vibration:`detected`,tamper:`tampered`},Ac={contact:`lastChangedAt`,binary:`lastChangedAt`,switch:`lastChangedAt`,motion:`lastDetectedAt`,flood:`lastChangedAt`,gas:`lastChangedAt`,smoke:`lastChangedAt`,"carbon-monoxide":`lastChangedAt`,vibration:`lastChangedAt`,tamper:`lastChangedAt`},jc=Object.keys(k),Mc=[`sensor`,`switch`,`control`];function Nc(e){return Object.prototype.hasOwnProperty.call(k,e)}function Pc(e,t){let n=k[e];if(n===void 0)return null;let r=t[n];return typeof r==`boolean`?r:null}function Fc(e,t){let n=Ac[e];if(n===void 0)return null;let r=t[n];return typeof r!=`number`||!Number.isFinite(r)||r<=0?null:r}var Ic=3e4;function Lc(e){let t=e.changedAt,n=Math.max(e.startedAtMs,e.nowMs-e.firstSightingFreshnessMs),r=e.priorLevel===void 0&&e.level&&t!==null&&Number.isFinite(t)&&t>=n,i=e.priorLevel===!1&&e.level&&t!==null&&Number.isFinite(t);return(r||i)&&t!==null?{kind:`rise`,timestamp:t}:{kind:`none`,nextPriorLevel:e.level}}function Rc(e){let t=Pc(e.capName,e.slice);return t===null?{edge:`none`,value:null,reason:Nc(e.capName)?`non-boolean-value`:`unknown-cap`}:Lc({level:t,changedAt:Fc(e.capName,e.slice),priorLevel:e.prior,startedAtMs:e.startedAtMs,nowMs:e.nowMs,firstSightingFreshnessMs:e.firstSightingFreshnessMs}).kind===`rise`?{edge:`rising`,value:!0}:e.prior===void 0?t?{edge:`none`,value:t,reason:`baseline-seeded-stale-active`}:{edge:`none`,value:t,reason:`baseline-seeded-inactive`}:e.prior===t?{edge:`none`,value:t,reason:`no-change`}:t?{edge:`none`,value:t,reason:`missing-timestamp`}:{edge:`none`,value:t,reason:`falling-edge`}}var A=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},j=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}};function zc(e){return e===`rose`||e===`count`}function M(e,t,n){if(typeof e!=`number`||!Number.isFinite(e))throw new j(`${t}: argument ${n+1} must be a finite number`);return e}function Bc(e,t,n){if(typeof e!=`string`)throw new j(`${t}: argument ${n+1} must be a string`);return e}function N(e,t){if(!Number.isFinite(e))throw new j(`${t}: produced a non-finite result`);return e}function Vc(e,t){return e.map((e,n)=>M(e,t,n))}function Hc(e,t,n){if(typeof e!=`boolean`)throw new j(`${t}: argument ${n+1} must be a boolean`);return e}var Uc=/^[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/;function Wc(e){if(typeof e==`number`)return Number.isFinite(e)?e:null;if(typeof e!=`string`)return null;let t=e.trim();if(!Uc.test(t))return null;let n=Number(t);return Number.isFinite(n)?n:null}var Gc=2e3;function Kc(e,t,n,r,i,a){let o=Hc(e,`rose`,0),s=typeof t==`number`&&Number.isFinite(t)?t:null,c=n===void 0?Gc:M(n,`rose`,2);if(c<0)throw new j(`rose: debounce must be a non-negative finite number`);if(r.disarmNext===!0||i.disarmRoseNext)return r.disarmNext=!1,r.priorLevel===void 0&&(r.priorLevel=o),a.currentOutput;let l=Lc({level:o,changedAt:s,priorLevel:r.priorLevel,startedAtMs:a.startedAtMs,nowMs:a.nowMs,firstSightingFreshnessMs:Ic});return r.priorLevel=l.kind===`rise`?!0:l.nextPriorLevel,l.kind===`none`||i.acceptedEdgeAt!==null&&l.timestamp-i.acceptedEdgeAt<c?a.currentOutput:(i.acceptedEdgeAt=l.timestamp,l.timestamp)}function qc(e){e.disarmRoseNext=!0;for(let[t,n]of e.calls)n.kind===`rose`&&e.calls.set(t,{...n,disarmNext:!0})}function Jc(e,t,n){let r=typeof n==`number`&&Number.isFinite(n)&&n>=0?n:0;return e===null?(t.primed=!0,r):typeof e!=`number`||!Number.isFinite(e)?r:t.primed?t.highWater!==null&&e<=t.highWater?r:(t.highWater=e,r+1):(t.primed=!0,t.highWater=e,r)}var Yc=1/0,Xc={min:{minArgs:1,maxArgs:Yc,apply:e=>N(Math.min(...Vc(e,`min`)),`min`)},max:{minArgs:1,maxArgs:Yc,apply:e=>N(Math.max(...Vc(e,`max`)),`max`)},abs:{minArgs:1,maxArgs:1,apply:e=>N(Math.abs(M(e[0],`abs`,0)),`abs`)},floor:{minArgs:1,maxArgs:1,apply:e=>N(Math.floor(M(e[0],`floor`,0)),`floor`)},ceil:{minArgs:1,maxArgs:1,apply:e=>N(Math.ceil(M(e[0],`ceil`,0)),`ceil`)},sqrt:{minArgs:1,maxArgs:1,apply:e=>N(Math.sqrt(M(e[0],`sqrt`,0)),`sqrt`)},round:{minArgs:1,maxArgs:2,apply:e=>{let t=M(e[0],`round`,0),n=e.length>1?Math.trunc(M(e[1],`round`,1)):0;if(n<0||n>100)throw new j(`round: digits must be between 0 and 100`);let r=10**n;return N(Math.round(t*r)/r,`round`)}},pow:{minArgs:2,maxArgs:2,apply:e=>N(M(e[0],`pow`,0)**M(e[1],`pow`,1),`pow`)},clamp:{minArgs:3,maxArgs:3,apply:e=>{let t=M(e[0],`clamp`,0),n=M(e[1],`clamp`,1),r=M(e[2],`clamp`,2);if(n>r)throw new j(`clamp: lower bound is greater than upper bound`);return N(Math.min(r,Math.max(n,t)),`clamp`)}},avg:{minArgs:1,maxArgs:Yc,apply:e=>{let t=Vc(e,`avg`);return N(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:Yc,apply:e=>N(Vc(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:Yc,apply:e=>{for(let t of e)if(t!==null)return t;return null}},age:{minArgs:2,maxArgs:2,apply:e=>N(M(e[0],`age`,0)-M(e[1],`age`,1),`age`)},convert:{minArgs:3,maxArgs:3,apply:(e,t)=>{let n=M(e[0],`convert`,0),r=Bc(e[1],`convert`,1).trim(),i=Bc(e[2],`convert`,2).trim();if(t.convert){let e=t.convert(n,r,i);if(e===null)throw new j(`convert: cannot convert '${r}' to '${i}'`);return N(e,`convert`)}if(r===i)return n;throw new j(`convert: unit conversion table not installed`)}},any:{minArgs:1,maxArgs:Yc,apply:e=>e.map((e,t)=>Hc(e,`any`,t)).some(e=>e)},all:{minArgs:1,maxArgs:Yc,apply:e=>e.map((e,t)=>Hc(e,`all`,t)).every(e=>e)},within:{minArgs:2,maxArgs:2,apply:(e,t)=>{let n=M(e[1],`within`,1);if(n<0)throw new j(`within: the window must not be negative`);let r=e[0];if(r===null)return!1;let i=M(r,`within`,0),a=t.now;if(a===void 0||!Number.isFinite(a))throw new j(`within: no clock was supplied to this evaluation`);let o=a-i<=n;return o&&t.noteDeadline?.(i+n+1),o}},number:{minArgs:1,maxArgs:1,apply:e=>Wc(e[0])},latest:{minArgs:1,maxArgs:Yc,apply:e=>{let t=e.flatMap((e,t)=>e===null?[]:[M(e,`latest`,t)]);return t.length===0?null:N(Math.max(...t),`latest`)}},rose:{minArgs:2,maxArgs:3,apply:()=>{throw new j(`rose: stateful evaluation context is required`)}},count:{minArgs:1,maxArgs:1,apply:()=>{throw new j(`count: stateful evaluation context is required`)}}},Zc=Object.freeze(Object.assign(Object.create(null),Xc)),Qc=new Set(Object.keys(Xc)),$c=2048,el=4096,tl=/^[A-Za-z_][A-Za-z0-9_]*$/,nl=new Set([`now`,`true`,`false`,`null`]),rl=new Set([`true`,`false`,`null`]);function il(e){return e>=`0`&&e<=`9`}function al(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function ol(e){return al(e)||il(e)}function sl(e){return e===` `||e===` `||e===`
3
3
  `||e===`\r`||e===`\f`||e===`\v`}function cl(e){if(e.length>2048)throw new A(`expression too long (${e.length} > ${$c} chars)`,0);let t=[],n=0,r=e.length;for(;n<r;){let i=e[n];if(sl(i)){n+=1;continue}if(il(i)){let i=n;for(;n<r&&il(e[n]);)n+=1;if(n<r&&e[n]===`.`){if(n+1>=r||!il(e[n+1]))throw new A(`malformed number: decimal point needs a digit`,n);for(n+=1;n<r&&il(e[n]);)n+=1}let a=e.slice(i,n),o=Number(a);if(!Number.isFinite(o))throw new A(`malformed number: '${a}'`,i);t.push({type:`number`,value:o,pos:i});continue}if(i===`'`||i===`"`){let a=i,o=n;n+=1;let s=``,c=!1;for(;n<r;){let t=e[n];if(t===`\\`){let t=n+1<r?e[n+1]:``;if(t===`\\`||t===`'`||t===`"`){s+=t,n+=2;continue}throw new A(`invalid string escape: '\\${t}'`,n)}if(t===a){c=!0,n+=1;break}s+=t,n+=1}if(!c)throw new A(`unterminated string literal`,o);t.push({type:`string`,value:s,pos:o});continue}if(al(i)){let i=n;for(;n<r&&ol(e[n]);)n+=1;let a=e.slice(i,n);rl.has(a)?t.push({type:`keyword`,keyword:ll(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(ul(i)){t.push({type:`punct`,punct:i,pos:n}),n+=1;continue}throw new A(`unexpected character '${i}'`,n)}return t.push({type:`eof`,pos:r}),t}function ll(e){return e===`true`?`true`:e===`false`?`false`:`null`}function ul(e){return e===`(`||e===`)`||e===`,`||e===`?`||e===`:`||e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`!`||e===`<`||e===`>`}var dl={"||":1,"&&":2,"==":3,"!=":3,"<":4,"<=":4,">":4,">=":4,"+":5,"-":5,"*":6,"/":6,"%":6};function fl(e){return e===`&&`||e===`||`}function pl(e){return e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`==`||e===`!=`||e===`<`||e===`<=`||e===`>`||e===`>=`}var ml=class{tokens;pos=0;nodeCount=0;identifiers=new Set;callees=new Set;constructor(e){this.tokens=e}parse(){let e=this.parseTernary(),t=this.peek();if(t.type!==`eof`)throw new A(`unexpected trailing input`,t.pos);return{ast:e,identifiers:this.identifiers,callees:this.callees,nodeCount:this.nodeCount}}peek(){return this.tokens[this.pos]}next(){return this.tokens[this.pos++]}expectPunct(e){let t=this.peek();if(t.type!==`punct`||t.punct!==e)throw new A(`expected '${e}'`,t.pos);this.pos+=1}matchPunct(e){let t=this.peek();return t.type===`punct`&&t.punct===e?(this.pos+=1,!0):!1}countNode(){if(this.nodeCount+=1,this.nodeCount>256)throw new A(`expression too complex`,this.peek().pos)}parseTernary(){let e=this.parseBinary(1);if(this.matchPunct(`?`)){let t=this.parseTernary();this.expectPunct(`:`);let n=this.parseTernary();return this.countNode(),{kind:`conditional`,test:e,consequent:t,alternate:n}}return e}parseBinary(e){let t=this.parseUnary();for(;;){let n=this.peek();if(n.type!==`punct`)break;let r=dl[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(),fl(i))t={kind:`logical`,op:i,left:t,right:a};else if(pl(i))t={kind:`binary`,op:i,left:t,right:a};else throw new A(`unexpected operator '${i}'`,n.pos)}return t}parseUnary(){let e=this.peek();if(e.type===`punct`&&(e.punct===`!`||e.punct===`-`)){let t=e.punct;this.pos+=1;let n=this.parseUnary();return this.countNode(),{kind:`unary`,op:t,operand:n}}return this.parsePrimary()}parsePrimary(){let e=this.next();switch(e.type){case`number`:return this.countNode(),{kind:`literal`,value:e.value};case`string`:return this.countNode(),{kind:`literal`,value:e.value};case`keyword`:return this.countNode(),{kind:`literal`,value:e.keyword===`null`?null:e.keyword===`true`};case`identifier`:{let t=this.peek();return t.type===`punct`&&t.punct===`(`?this.parseCall(e.name,e.pos):(this.identifiers.add(e.name),this.countNode(),{kind:`identifier`,name:e.name})}case`punct`:if(e.punct===`(`){let e=this.parseTernary();return this.expectPunct(`)`),e}throw new A(`unexpected token '${e.punct}'`,e.pos);case`eof`:throw new A(`unexpected end of expression`,e.pos)}}parseCall(e,t){if(!Qc.has(e))throw new A(`unknown function '${e}'`,t);this.expectPunct(`(`);let n=[];if(!this.matchPunct(`)`))for(;;){if(n.push(this.parseTernary()),n.length>16)throw new A(`too many arguments to '${e}'`,t);if(!this.matchPunct(`,`)){this.expectPunct(`)`);break}}return this.callees.add(e),this.countNode(),{kind:`call`,callee:e,args:n}}};function hl(e){return new ml(cl(e)).parse()}var gl=new Map;function _l(e){let t=gl.get(e);if(t!==void 0)return gl.delete(e),gl.set(e,t),t;let n;try{n={ok:!0,parsed:hl(e)}}catch(e){n={ok:!1,error:e instanceof A?e.message:String(e)}}if(gl.set(e,n),gl.size>256){let e=gl.keys().next().value;e!==void 0&&gl.delete(e)}return n}function vl(e){let t=_l(e);if(t.ok)return t.parsed;throw new A(t.error)}function yl(e){return _l(e)}var bl=Object.freeze({});function xl(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 Sl(e){return typeof e==`number`&&Number.isFinite(e)}function Cl(e){return!!e}function wl(e,t){if(!Number.isFinite(e))throw new j(`${t} produced a non-finite result`);return e}function Tl(e){if(e.steps+=1,e.steps>e.maxSteps)throw new j(`expression evaluation step budget exceeded`)}function P(e,t){return`${e}/${t}`}function F(e,t,n){switch(Tl(t),e.kind){case`literal`:return e.value;case`identifier`:if(!(e.name in t.scope))throw new j(`unknown identifier: ${e.name}`);return t.scope[e.name];case`unary`:return El(e.op,F(e.operand,t,P(n,`operand`)));case`binary`:return Dl(e.op,F(e.left,t,P(n,`left`)),F(e.right,t,P(n,`right`)));case`logical`:{let r=F(e.left,t,P(n,`left`));return e.op===`&&`?Cl(r)?F(e.right,t,P(n,`right`)):r:Cl(r)?r:F(e.right,t,P(n,`right`))}case`conditional`:return Cl(F(e.test,t,P(n,`test`)))?F(e.consequent,t,P(n,`consequent`)):F(e.alternate,t,P(n,`alternate`));case`call`:{let r=e.args.map((e,r)=>F(e,t,P(n,`arg:${r}`)));return Ol(e.callee,r,n,t)}}}function El(e,t){if(e===`!`)return!Cl(t);if(!Sl(t))throw new j(`unary "-" requires a finite number`);return wl(-t,`unary "-"`)}function Dl(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(Sl(t)&&Sl(n))return wl(t+n,`"+"`);throw new j(`"+" requires two numbers or two strings`);case`-`:case`*`:case`/`:case`%`:if(!Sl(t)||!Sl(n))throw new j(`"${e}" requires two finite numbers`);return wl(e===`-`?t-n:e===`*`?t*n:e===`/`?t/n:t%n,`"${e}"`);case`<`:case`<=`:case`>`:case`>=`:if(Sl(t)&&Sl(n)||typeof t==`string`&&typeof n==`string`)return e===`<`?t<n:e===`<=`?t<=n:e===`>`?t>n:t>=n;throw new j(`"${e}" requires two numbers or two strings`)}}function Ol(e,t,n,r){if(!Object.prototype.hasOwnProperty.call(Zc,e))throw new j(`unknown function: ${e}`);let i=Zc[e];if(t.length<i.minArgs||t.length>i.maxArgs)throw new j(`${e}: wrong number of arguments (${t.length})`);if(zc(e)){if(r.invokeStateful===void 0)throw new j(`${e}: stateful evaluation context is required`);return r.invokeStateful({name:e,path:n,args:t})}return i.apply(t,r.hooks)}function kl(e,t,n){return F(e,{scope:t,hooks:n?.hooks??bl,maxSteps:n?.maxSteps??4096,...n?.invokeStateful===void 0?{}:{invokeStateful:n.invokeStateful},steps:0},`root`)}function Al(){return{calls:new Map,acceptedEdgeAt:null,disarmRoseNext:!1}}function jl(e){return{calls:new Map([...e.calls].map(([e,t])=>[e,{...t}])),acceptedEdgeAt:e.acceptedEdgeAt,disarmRoseNext:e.disarmRoseNext}}function Ml(e,t,n){let r=t.calls.get(e.path);switch(e.name){case`rose`:{let i=r?.kind===`rose`?r:{kind:`rose`};t.calls.set(e.path,i);let a=n.currentOutput===null||typeof n.currentOutput==`number`&&Number.isFinite(n.currentOutput)?n.currentOutput:null;return Kc(e.args[0],e.args[1],e.args[2],i,t,{currentOutput:a,startedAtMs:n.startedAtMs,nowMs:n.nowMs})}case`count`:{let i=r?.kind===`count`?r:{kind:`count`,highWater:null,primed:!1};return t.calls.set(e.path,i),Jc(e.args[0],i,n.currentOutput)}}}function Nl(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 Pl(e){let t=Object.keys(e.bindings);if(t.length>32)return`too many bindings (${t.length} > 32)`;for(let e of t){if(!tl.test(e))return`invalid binding name '${e}'`;if(nl.has(e))return`binding name '${e}' is reserved`;if(Qc.has(e))return`binding name '${e}' shadows a builtin function`}let n=yl(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 Fl(e,t,n,r){let i=yl(e);if(!i.ok)return{ok:!1,error:i.error};let a=xl({...t,now:n}),o={...r?.hooks,now:n};try{return{ok:!0,value:kl(i.parsed.ast,a,{...r,hooks:o})}}catch(e){return{ok:!1,error:e instanceof j?e.message:String(e)}}}var Il=d({kind:m(`field`).optional(),sourceKey:l(),cap:l(),fieldPath:l()}),Ll=d({kind:m(`literal`),value:f([l(),a(),C(),re()])}),Rl=d({kind:m(`global`),sourceStableId:l(),cap:l(),fieldPath:l()}),zl=f([Il,Ll,Rl]),Bl=d({expr:l().min(1).max($c),bindings:y(l().regex(tl),zl)}).superRefine((e,t)=>{let n=Pl(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),Vl=x([`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`contains`,`in`]),Hl=d({kind:m(`condition`),deviceId:a().int().nonnegative(),cap:l().min(1),fieldPath:l().min(1),operator:Vl,value:f([l(),a(),C(),S(f([l(),a()]))])}),Ul=d({kind:m(`expression`),expr:l().min(1).max($c),bindings:y(l().regex(tl),zl)}).superRefine((e,t)=>{let n=Pl(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),Wl=pe(()=>p(`kind`,[d({kind:m(`all`),children:S(Wl)}),d({kind:m(`any`),children:S(Wl)}),d({kind:m(`not`),child:Wl}),Hl,Ul])),Gl=p(`kind`,[d({kind:m(`device-state`),deviceId:a().int().nonnegative(),cap:l().min(1),fieldPath:l().min(1),becomes:f([l(),a(),C()]).optional(),edge:C().optional(),forMs:a().int().min(0).max(864e5).optional(),debounceMs:a().int().min(0).max(6e5).optional()}),d({kind:m(`device-event`),category:l().min(1),deviceId:a().int().nonnegative().optional()}),d({kind:m(`schedule`),cron:l().min(1).max(120)}),d({kind:m(`manual`)})]),Kl=p(`kind`,[d({kind:m(`wait`),seconds:a().min(0).max(300)}),d({kind:m(`cap`),deviceId:f([a().int(),S(a().int()).min(1),d({$var:l().min(1)})]),cap:l().min(1),method:l().min(1),args:y(l(),s()).optional()}),d({kind:m(`code`),code:l().min(1).max(2e4)})]),ql=d({triggers:S(Gl),conditions:Wl.optional(),actions:S(Kl)});function Jl(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return 1+Jl(e.child);let t=e.children;if(t.length===0)return 1;let n=0;for(let e of t){let t=Jl(e);t>n&&(n=t)}return 1+n}function Yl(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return Yl(e.child);let t=0;for(let n of e.children)t+=Yl(n);return t}function Xl(e){return e.kind===`condition`||e.kind===`expression`?!1:e.kind===`not`?Xl(e.child):e.children.length===0?!0:e.children.some(Xl)}function Zl(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(Xl(t))return`a condition group is empty — group existing rows instead of leaving a container to fill`;let e=Jl(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=Yl(t);if(n>32)return`conditions use ${n} leaves — the limit is 32`}return null}var Ql=15e3;function I(e){return JSON.stringify(e)}function $l(e,t){switch(e.kind){case`all`:return`allOf([\n${e.children.map(e=>`${t} () => ${$l(e,`${t} `)}`).join(`,
4
4
  `)}\n${t}])`;case`any`:return`anyOf([\n${e.children.map(e=>`${t} () => ${$l(e,`${t} `)}`).join(`,
5
5
  `)}\n${t}])`;case`not`:return`notOf(() => ${$l(e.child,t)})`;case`condition`:return`leaf(${I(e.deviceId)}, ${I(e.cap)}, ${I(e.fieldPath)}, ${I(e.operator)}, ${I(e.value)})`;case`expression`:return`exprLeaf(${I(e.expr)}, ${I(e.bindings)})`}}function eu(e,t){switch(e.kind){case`schedule`:return` // trigger ${t}: schedule — armed to the next minute boundary and
@@ -0,0 +1 @@
1
+ import{vt as e}from"./player-overlays-CHWCYkGf.js";var t=e(`crop`,[[`path`,{d:`M6 2v14a2 2 0 0 0 2 2h14`,key:`ron5a4`}],[`path`,{d:`M18 22V8a2 2 0 0 0-2-2H2`,key:`7s9ehn`}]]);export{t};
@@ -1 +1 @@
1
- import{K as e,Q as t,S as n,W as r,q as i,x as a,z as o}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{_t as s,gt as c,ht as l,vt as u}from"./player-overlays-BFYAtS6k.js";import{Hd as d,Vd as f}from"./src-CPNx7Cnt.js";var p=u(`square-check-big`,[[`path`,{d:`M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344`,key:`2acyp4`}],[`path`,{d:`m9 11 3 3L22 4`,key:`1pflzl`}]]);t();var m={fromMs:null,toMs:null},h=36e5,g=24*h;function _(e,t){switch(e){case`24h`:return{fromMs:t-g,toMs:null};case`7d`:return{fromMs:t-7*g,toMs:null};case`30d`:return{fromMs:t-30*g,toMs:null};case`all`:return m}}function v(e){return e.fromMs!==null||e.toMs!==null}function y(e,t){return v(t)?e.filter(e=>!(t.fromMs!==null&&e.timestamp<t.fromMs||t.toMs!==null&&e.timestamp>t.toMs)):[...e]}function b(e,t){return t.size===0?[...e]:e.filter(e=>t.has(e.deviceId))}function x(e){let t=new Set,n=[];for(let r of e)t.has(r.deviceId)||(t.add(r.deviceId),n.push(r.deviceId));return n}function S(e){if(!e)return null;let t=Date.parse(`${e}T00:00:00`);return Number.isNaN(t)?null:t}function C(e){if(!e)return null;let t=Date.parse(`${e}T23:59:59.999`);return Number.isNaN(t)?null:t}function w(e,t){if(!Number.isFinite(e)||e<=0)return`—`;let n=t-e;return n<6e4?`just now`:n<h?`${String(Math.floor(n/6e4))}m ago`:n<g?`${String(Math.floor(n/h))}h ago`:n<7*g?`${String(Math.floor(n/g))}d ago`:new Date(e).toLocaleDateString(void 0,{month:`short`,day:`numeric`})}function T(e){return!Number.isFinite(e)||e<=0?`—`:new Date(e).toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function E(e){return!Number.isFinite(e)||e<=0?`—`:new Date(e).toLocaleString(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function D(e,t,n){let[a,s]=i(1);o(()=>{s(1)},[n]);let c=e.length,l=Math.max(1,Math.ceil(c/t)),u=Math.min(a,l);return o(()=>{u!==a&&s(u)},[u,a]),{page:u,setPage:s,pageItems:r(()=>{let n=(u-1)*t;return e.slice(n,n+t)},[e,u,t]),totalPages:l,totalItems:c,pageSize:t}}var O=2;function k(e,t){if(t<=1)return[{kind:`page`,n:1}];if(t<=7){let e=[];for(let n=1;n<=t;n++)e.push({kind:`page`,n});return e}let n=[],r=Math.max(2,e-O),i=Math.min(t-1,e+O);n.push({kind:`page`,n:1}),r>2&&n.push({kind:`ellipsis`,side:`left`});for(let e=r;e<=i;e++)n.push({kind:`page`,n:e});return i<t-1&&n.push({kind:`ellipsis`,side:`right`}),n.push({kind:`page`,n:t}),n}function A({currentPage:e,totalItems:t,pageSize:r,onPageChange:i,itemNoun:o=`items`}){if(t<=r)return null;let s=Math.ceil(t/r),c=(e-1)*r+1,u=Math.min(e*r,t),d=k(e,s),p=`inline-flex h-7 min-w-7 items-center justify-center rounded-md px-2 text-[11px] transition-colors disabled:opacity-40`;return n(`div`,{className:`flex items-center justify-between gap-4 flex-wrap pt-2 text-[11px] text-foreground-subtle`,children:[n(`span`,{children:[`Showing `,c,`–`,u,` of `,t,` `,o]}),n(`div`,{className:`flex items-center gap-1`,children:[a(`button`,{type:`button`,className:`${p} hover:bg-surface-hover`,onClick:()=>i(e-1),disabled:e<=1,"aria-label":`Previous page`,children:a(f,{className:`h-3.5 w-3.5`})}),d.map(t=>t.kind===`ellipsis`?a(`span`,{className:`px-1 opacity-60`,children:`…`},`ellipsis-${t.side}`):a(`button`,{type:`button`,className:`${p} ${t.n===e?`bg-primary/12 text-primary font-medium`:`hover:bg-surface-hover hover:text-foreground`}`,onClick:()=>i(t.n),"aria-current":t.n===e?`page`:void 0,children:t.n},t.n)),a(`button`,{type:`button`,className:`${p} hover:bg-surface-hover`,onClick:()=>i(e+1),disabled:e>=s,"aria-label":`Next page`,children:a(l,{className:`h-3.5 w-3.5`})})]})]})}t();function j({cameras:t,selected:r,onChange:l}){let[u,f]=i(!1),p=e(null);o(()=>{if(!u)return;function e(e){p.current&&e.target instanceof Node&&!p.current.contains(e.target)&&f(!1)}function t(e){e.key===`Escape`&&f(!1)}return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[u]);function m(e){let t=new Set(r);t.has(e)?t.delete(e):t.add(e),l(t)}let h=r.size,g=h===0?`All cameras`:h===1?t.find(e=>r.has(e.id))?.name??`1 camera`:`${String(h)} cameras`;return n(`div`,{ref:p,className:`relative`,children:[n(`button`,{type:`button`,onClick:()=>f(e=>!e),disabled:t.length===0,className:`flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs transition-colors disabled:opacity-40 ${h>0?`border-primary/40 bg-primary/8 text-primary`:`border-border text-foreground-subtle hover:bg-surface-hover hover:text-foreground`}`,children:[a(s,{className:`h-3.5 w-3.5`}),a(`span`,{className:`max-w-[10rem] truncate`,children:g}),a(c,{className:`h-3 w-3 opacity-70`})]}),u&&n(`div`,{className:`absolute left-0 z-30 mt-1 max-h-64 w-[min(15rem,calc(100vw-1.5rem))] overflow-y-auto rounded-md border border-border bg-surface p-1 shadow-lg shadow-black/30`,children:[h>0&&a(`button`,{type:`button`,onClick:()=>l(new Set),className:`mb-1 w-full rounded px-2 py-1 text-left text-[11px] text-foreground-subtle hover:bg-surface-hover hover:text-foreground`,children:`Clear selection`}),t.map(e=>{let t=r.has(e.id);return n(`button`,{type:`button`,onClick:()=>m(e.id),className:`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-xs transition-colors ${t?`bg-primary/10 text-primary`:`text-foreground hover:bg-surface-hover`}`,children:[a(`span`,{className:`flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded-sm border ${t?`border-primary bg-primary text-white`:`border-border`}`,children:t&&a(d,{className:`h-2.5 w-2.5`})}),a(`span`,{className:`truncate`,children:e.name})]},e.id)})]})]})}t();var M=[{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`},{label:`All`,value:`all`}];function N({onChange:e}){let[t,r]=i(`all`),[o,s]=i(``),[c,l]=i(``);function u(t){r(t),s(``),l(``),e(_(t,Date.now()))}function d(t,n){r(`custom`),s(t),l(n),e({fromMs:S(t),toMs:C(n)})}let f=`rounded-md border border-border bg-surface px-2 py-1.5 text-[11px] text-foreground outline-none focus:border-primary [color-scheme:light] dark:[color-scheme:dark]`;return n(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[a(`div`,{className:`flex items-center gap-1 rounded-md border border-border p-0.5`,children:M.map(e=>a(`button`,{type:`button`,onClick:()=>u(e.value),className:`rounded px-2.5 py-1 text-[11px] transition-colors ${t===e.value?`bg-primary/12 text-primary font-medium`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground`}`,children:e.label},e.value))}),n(`div`,{className:`flex items-center gap-1`,children:[a(`input`,{type:`date`,"aria-label":`From date`,value:o,max:c||void 0,onChange:e=>d(e.target.value,c),className:`${f} ${t===`custom`&&o?`border-primary/50`:``}`}),a(`span`,{className:`text-[11px] text-foreground-subtle`,children:`→`}),a(`input`,{type:`date`,"aria-label":`To date`,value:c,min:o||void 0,onChange:e=>d(o,e.target.value),className:`${f} ${t===`custom`&&c?`border-primary/50`:``}`})]})]})}t();var P=2.6;function F({src:e,alt:t,className:r,overlay:s,fit:c=`contain`}){let[l,u]=i(!1),[d,f]=i(`50% 50%`);o(()=>{u(!1),f(`50% 50%`)},[e]);function p(e){if(!l){let t=e.currentTarget.getBoundingClientRect(),n=(e.clientX-t.left)/t.width*100,r=(e.clientY-t.top)/t.height*100;f(`${String(n)}% ${String(r)}%`)}u(e=>!e)}let m=c===`natural`;return a(`div`,{className:`relative overflow-hidden bg-background ${r??``}`,onClick:p,children:n(`div`,{className:`relative select-none transition-transform duration-200 ease-out ${m?`w-full`:`h-full w-full`} ${l?`cursor-zoom-out`:`cursor-zoom-in`}`,style:{transformOrigin:d,transform:l?`scale(${String(P)})`:`scale(1)`},children:[a(`img`,{src:e,alt:t,draggable:!1,className:m?`block h-auto w-full object-contain`:`h-full w-full object-contain`}),s]})})}function I(e){let{delayMs:t,invalidate:n,setTimeoutFn:r=setTimeout,clearTimeoutFn:i=clearTimeout}=e,a;function o(){a===void 0&&(a=r(()=>{a=void 0,n()},t))}function s(){a!==void 0&&(i(a),a=void 0)}return{trigger:o,cancel:s}}export{A as a,x as c,T as d,w as f,j as i,b as l,p as m,F as n,D as o,E as p,N as r,m as s,I as t,y as u};
1
+ import{K as e,Q as t,S as n,W as r,q as i,x as a,z as o}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{_t as s,gt as c,ht as l,vt as u}from"./player-overlays-CHWCYkGf.js";import{Hd as d,Vd as f}from"./src-Crb8RLzq.js";var p=u(`square-check-big`,[[`path`,{d:`M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344`,key:`2acyp4`}],[`path`,{d:`m9 11 3 3L22 4`,key:`1pflzl`}]]);t();var m={fromMs:null,toMs:null},h=36e5,g=24*h;function _(e,t){switch(e){case`24h`:return{fromMs:t-g,toMs:null};case`7d`:return{fromMs:t-7*g,toMs:null};case`30d`:return{fromMs:t-30*g,toMs:null};case`all`:return m}}function v(e){return e.fromMs!==null||e.toMs!==null}function y(e,t){return v(t)?e.filter(e=>!(t.fromMs!==null&&e.timestamp<t.fromMs||t.toMs!==null&&e.timestamp>t.toMs)):[...e]}function b(e,t){return t.size===0?[...e]:e.filter(e=>t.has(e.deviceId))}function x(e){let t=new Set,n=[];for(let r of e)t.has(r.deviceId)||(t.add(r.deviceId),n.push(r.deviceId));return n}function S(e){if(!e)return null;let t=Date.parse(`${e}T00:00:00`);return Number.isNaN(t)?null:t}function C(e){if(!e)return null;let t=Date.parse(`${e}T23:59:59.999`);return Number.isNaN(t)?null:t}function w(e,t){if(!Number.isFinite(e)||e<=0)return`—`;let n=t-e;return n<6e4?`just now`:n<h?`${String(Math.floor(n/6e4))}m ago`:n<g?`${String(Math.floor(n/h))}h ago`:n<7*g?`${String(Math.floor(n/g))}d ago`:new Date(e).toLocaleDateString(void 0,{month:`short`,day:`numeric`})}function T(e){return!Number.isFinite(e)||e<=0?`—`:new Date(e).toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function E(e){return!Number.isFinite(e)||e<=0?`—`:new Date(e).toLocaleString(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function D(e,t,n){let[a,s]=i(1);o(()=>{s(1)},[n]);let c=e.length,l=Math.max(1,Math.ceil(c/t)),u=Math.min(a,l);return o(()=>{u!==a&&s(u)},[u,a]),{page:u,setPage:s,pageItems:r(()=>{let n=(u-1)*t;return e.slice(n,n+t)},[e,u,t]),totalPages:l,totalItems:c,pageSize:t}}var O=2;function k(e,t){if(t<=1)return[{kind:`page`,n:1}];if(t<=7){let e=[];for(let n=1;n<=t;n++)e.push({kind:`page`,n});return e}let n=[],r=Math.max(2,e-O),i=Math.min(t-1,e+O);n.push({kind:`page`,n:1}),r>2&&n.push({kind:`ellipsis`,side:`left`});for(let e=r;e<=i;e++)n.push({kind:`page`,n:e});return i<t-1&&n.push({kind:`ellipsis`,side:`right`}),n.push({kind:`page`,n:t}),n}function A({currentPage:e,totalItems:t,pageSize:r,onPageChange:i,itemNoun:o=`items`}){if(t<=r)return null;let s=Math.ceil(t/r),c=(e-1)*r+1,u=Math.min(e*r,t),d=k(e,s),p=`inline-flex h-7 min-w-7 items-center justify-center rounded-md px-2 text-[11px] transition-colors disabled:opacity-40`;return n(`div`,{className:`flex items-center justify-between gap-4 flex-wrap pt-2 text-[11px] text-foreground-subtle`,children:[n(`span`,{children:[`Showing `,c,`–`,u,` of `,t,` `,o]}),n(`div`,{className:`flex items-center gap-1`,children:[a(`button`,{type:`button`,className:`${p} hover:bg-surface-hover`,onClick:()=>i(e-1),disabled:e<=1,"aria-label":`Previous page`,children:a(f,{className:`h-3.5 w-3.5`})}),d.map(t=>t.kind===`ellipsis`?a(`span`,{className:`px-1 opacity-60`,children:`…`},`ellipsis-${t.side}`):a(`button`,{type:`button`,className:`${p} ${t.n===e?`bg-primary/12 text-primary font-medium`:`hover:bg-surface-hover hover:text-foreground`}`,onClick:()=>i(t.n),"aria-current":t.n===e?`page`:void 0,children:t.n},t.n)),a(`button`,{type:`button`,className:`${p} hover:bg-surface-hover`,onClick:()=>i(e+1),disabled:e>=s,"aria-label":`Next page`,children:a(l,{className:`h-3.5 w-3.5`})})]})]})}t();function j({cameras:t,selected:r,onChange:l}){let[u,f]=i(!1),p=e(null);o(()=>{if(!u)return;function e(e){p.current&&e.target instanceof Node&&!p.current.contains(e.target)&&f(!1)}function t(e){e.key===`Escape`&&f(!1)}return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[u]);function m(e){let t=new Set(r);t.has(e)?t.delete(e):t.add(e),l(t)}let h=r.size,g=h===0?`All cameras`:h===1?t.find(e=>r.has(e.id))?.name??`1 camera`:`${String(h)} cameras`;return n(`div`,{ref:p,className:`relative`,children:[n(`button`,{type:`button`,onClick:()=>f(e=>!e),disabled:t.length===0,className:`flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs transition-colors disabled:opacity-40 ${h>0?`border-primary/40 bg-primary/8 text-primary`:`border-border text-foreground-subtle hover:bg-surface-hover hover:text-foreground`}`,children:[a(s,{className:`h-3.5 w-3.5`}),a(`span`,{className:`max-w-[10rem] truncate`,children:g}),a(c,{className:`h-3 w-3 opacity-70`})]}),u&&n(`div`,{className:`absolute left-0 z-30 mt-1 max-h-64 w-[min(15rem,calc(100vw-1.5rem))] overflow-y-auto rounded-md border border-border bg-surface p-1 shadow-lg shadow-black/30`,children:[h>0&&a(`button`,{type:`button`,onClick:()=>l(new Set),className:`mb-1 w-full rounded px-2 py-1 text-left text-[11px] text-foreground-subtle hover:bg-surface-hover hover:text-foreground`,children:`Clear selection`}),t.map(e=>{let t=r.has(e.id);return n(`button`,{type:`button`,onClick:()=>m(e.id),className:`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-xs transition-colors ${t?`bg-primary/10 text-primary`:`text-foreground hover:bg-surface-hover`}`,children:[a(`span`,{className:`flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded-sm border ${t?`border-primary bg-primary text-white`:`border-border`}`,children:t&&a(d,{className:`h-2.5 w-2.5`})}),a(`span`,{className:`truncate`,children:e.name})]},e.id)})]})]})}t();var M=[{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`},{label:`All`,value:`all`}];function N({onChange:e}){let[t,r]=i(`all`),[o,s]=i(``),[c,l]=i(``);function u(t){r(t),s(``),l(``),e(_(t,Date.now()))}function d(t,n){r(`custom`),s(t),l(n),e({fromMs:S(t),toMs:C(n)})}let f=`rounded-md border border-border bg-surface px-2 py-1.5 text-[11px] text-foreground outline-none focus:border-primary [color-scheme:light] dark:[color-scheme:dark]`;return n(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[a(`div`,{className:`flex items-center gap-1 rounded-md border border-border p-0.5`,children:M.map(e=>a(`button`,{type:`button`,onClick:()=>u(e.value),className:`rounded px-2.5 py-1 text-[11px] transition-colors ${t===e.value?`bg-primary/12 text-primary font-medium`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground`}`,children:e.label},e.value))}),n(`div`,{className:`flex items-center gap-1`,children:[a(`input`,{type:`date`,"aria-label":`From date`,value:o,max:c||void 0,onChange:e=>d(e.target.value,c),className:`${f} ${t===`custom`&&o?`border-primary/50`:``}`}),a(`span`,{className:`text-[11px] text-foreground-subtle`,children:`→`}),a(`input`,{type:`date`,"aria-label":`To date`,value:c,min:o||void 0,onChange:e=>d(o,e.target.value),className:`${f} ${t===`custom`&&c?`border-primary/50`:``}`})]})]})}t();var P=2.6;function F({src:e,alt:t,className:r,overlay:s,fit:c=`contain`}){let[l,u]=i(!1),[d,f]=i(`50% 50%`);o(()=>{u(!1),f(`50% 50%`)},[e]);function p(e){if(!l){let t=e.currentTarget.getBoundingClientRect(),n=(e.clientX-t.left)/t.width*100,r=(e.clientY-t.top)/t.height*100;f(`${String(n)}% ${String(r)}%`)}u(e=>!e)}let m=c===`natural`;return a(`div`,{className:`relative overflow-hidden bg-background ${r??``}`,onClick:p,children:n(`div`,{className:`relative select-none transition-transform duration-200 ease-out ${m?`w-full`:`h-full w-full`} ${l?`cursor-zoom-out`:`cursor-zoom-in`}`,style:{transformOrigin:d,transform:l?`scale(${String(P)})`:`scale(1)`},children:[a(`img`,{src:e,alt:t,draggable:!1,className:m?`block h-auto w-full object-contain`:`h-full w-full object-contain`}),s]})})}function I(e){let{delayMs:t,invalidate:n,setTimeoutFn:r=setTimeout,clearTimeoutFn:i=clearTimeout}=e,a;function o(){a===void 0&&(a=r(()=>{a=void 0,n()},t))}function s(){a!==void 0&&(i(a),a=void 0)}return{trigger:o,cancel:s}}export{A as a,x as c,T as d,w as f,j as i,b as l,p as m,F as n,D as o,E as p,N as r,m as s,I as t,y as u};
@@ -1 +1 @@
1
- import{x as e}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{z as t}from"./index-cOBEaAEQ.js";function n(n,r){switch(r.kind){case`resolved`:return e(t,{type:r.integration.addonId,size:`sm`});case`orphan`:return e(t,{type:n.addonId,size:`sm`});case`unknown`:case`unlinked`:return null}}export{n as t};
1
+ import{x as e}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{z as t}from"./index-BdYsVZMw.js";function n(n,r){switch(r.kind){case`resolved`:return e(t,{type:r.integration.addonId,size:`sm`});case`orphan`:return e(t,{type:n.addonId,size:`sm`});case`unknown`:case`unlinked`:return null}}export{n as t};
@@ -0,0 +1 @@
1
+ import"./src-Crb8RLzq.js";