@camstack/addon-admin-ui 1.2.340 → 1.2.341
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{AddonCollectionPage-OzCDkyMU.js → AddonCollectionPage-OFxQqAoW.js} +1 -1
- package/dist/assets/{Addons-C6XFi5pW.js → Addons-CGWlUYfe.js} +1 -1
- package/dist/assets/{AdminTabs-Ch-CMNb7.js → AdminTabs-DLnTp3g1.js} +1 -1
- package/dist/assets/{AiProfiles-zINN3DWe.js → AiProfiles-CGMdRCP9.js} +1 -1
- package/dist/assets/{BrokerForm-BU9fVoGh.js → BrokerForm-Cz7wX12D.js} +1 -1
- package/dist/assets/{Build-CdcBfvrZ.js → Build-Di3zrxOa.js} +1 -1
- package/dist/assets/{Calendars-i9Jpx69E.js → Calendars-z2ErDSiX.js} +1 -1
- package/dist/assets/{Capabilities-NMkE2u1W.js → Capabilities-S89Qhb3x.js} +1 -1
- package/dist/assets/{Cluster-C_rvAKwE.js → Cluster-Dgxyi1L-.js} +1 -1
- package/dist/assets/{CompositionEditor-DoeUsnlY.js → CompositionEditor-C1QWYqEr.js} +1 -1
- package/dist/assets/{CompositionEditorPage-gA_K4Md7.js → CompositionEditorPage-BVFAgSZs.js} +1 -1
- package/dist/assets/{Data-Bp1E6Ebx.js → Data-DoMUkr5U.js} +1 -1
- package/dist/assets/{DetectionIntelligence-NotL2ICP.js → DetectionIntelligence-CaFNOOBq.js} +1 -1
- package/dist/assets/{DeviceDetail-BuRLDLQo.js → DeviceDetail-DsjaKMqr.js} +1 -1
- package/dist/assets/{DeviceDoActionFields-CvCAdVMh.js → DeviceDoActionFields-CsOyPI8C.js} +1 -1
- package/dist/assets/{Devices-DPBCVqGZ.js → Devices-DyT7xApI.js} +1 -1
- package/dist/assets/{EmbedPlayerPage-OpO8LaDo.js → EmbedPlayerPage-BwaJjheh.js} +1 -1
- package/dist/assets/{Events-DyPWp6_e.js → Events-DJ9VXfgT.js} +1 -1
- package/dist/assets/{Identity-Br1KdOR0.js → Identity-DMA2mONj.js} +1 -1
- package/dist/assets/{IntegrationDetail-BmEtRPyU.js → IntegrationDetail-Bbq5Et1Y.js} +1 -1
- package/dist/assets/{Integrations-vTbKXz8I.js → Integrations-CEvnTQ3v.js} +1 -1
- package/dist/assets/{Integrations-CN-rpCeJ.js → Integrations-cf0EhRIL.js} +1 -1
- package/dist/assets/{Locations-CKZPfhYl.js → Locations-XqJRZ8tM.js} +1 -1
- package/dist/assets/{Logs-NVSsHqFU.js → Logs-CIipk6by.js} +1 -1
- package/dist/assets/{MotionZonesSettings-BJyUvvfi.js → MotionZonesSettings-PK_RhzUS.js} +1 -1
- package/dist/assets/{MyAccess-GD_6KNr1.js → MyAccess-d2xk75ip.js} +1 -1
- package/dist/assets/{Network-QoN3n6Zz.js → Network-YxjkhS1P.js} +1 -1
- package/dist/assets/{NodeAddonsSettingsPanel-CfS4fDa-.js → NodeAddonsSettingsPanel-MWSzdM7B.js} +1 -1
- package/dist/assets/{NodeInferenceDevices-BRXydFFv.js → NodeInferenceDevices-CJXFbwRn.js} +1 -1
- package/dist/assets/{Notifications-a2lNk25U.js → Notifications-MLHKasF-.js} +1 -1
- package/dist/assets/{Pipeline-COkO3cAW.js → Pipeline-Q4TgkeOw.js} +1 -1
- package/dist/assets/{Plates-CeTqaMVp.js → Plates-CegVEk2k.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings-D4b3HD4o.js → PrivacyMaskSettings-BnjtiPUD.js} +1 -1
- package/dist/assets/{Recordings-D6YCerVl.js → Recordings-BTderpPx.js} +1 -1
- package/dist/assets/{ScanNetworkModal-ChaGY9YG.js → ScanNetworkModal-DNLL_t7z.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-DZwqXZGk.js → SceneMonitorEditor-C35-Indg.js} +1 -1
- package/dist/assets/{Scenes-DdR-TORM.js → Scenes-ByOb7T0x.js} +1 -1
- package/dist/assets/{Settings-D2hd95ZH.js → Settings-B4Qb2DUw.js} +1 -1
- package/dist/assets/{Showroom-C2Dl5UJv.js → Showroom-DTxtdOJp.js} +1 -1
- package/dist/assets/{StorageLocationsPanel-Lf7Cc5Di.js → StorageLocationsPanel-CSWtebRR.js} +1 -1
- package/dist/assets/{Terminal-0zpwyKw1.js → Terminal-BkIgZzNv.js} +1 -1
- package/dist/assets/{Viewer-DzBafew5.js → Viewer-CfhCZXMA.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-Da61ppfF.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-z770ywnV.js} +1 -1
- package/dist/assets/{archive-B4Kq40PR.js → archive-Cr-BIlNA.js} +1 -1
- package/dist/assets/{authed-media--rdXjodO.js → authed-media-CeLnj8Ys.js} +1 -1
- package/dist/assets/{boxes-DNZ46q91.js → boxes-C54oMdA_.js} +1 -1
- package/dist/assets/circle-slash-iHyT1430.js +1 -0
- package/dist/assets/{client-DOoKqepC.js → client-USvucJT_.js} +1 -1
- package/dist/assets/{debounced-invalidate-CV4IPm22.js → debounced-invalidate-C3E-ZxqU.js} +1 -1
- package/dist/assets/{device-integration-icon-VckVIRV1.js → device-integration-icon-Bo1DZXF5.js} +1 -1
- package/dist/assets/device-picker-model-Do5zHkB-.js +1 -0
- package/dist/assets/{dist-BMRg-Acy.js → dist-DAPUZI5S.js} +1 -1
- package/dist/assets/{dist-CX4ZW5Nk.js → dist-cztQPA_y.js} +1 -1
- package/dist/assets/{face-bbox-CRAUHidx.js → face-bbox-BIRbV0KX.js} +1 -1
- package/dist/assets/{hard-drive-download-vjPcYNvQ.js → hard-drive-download-C-k_wqAM.js} +1 -1
- package/dist/assets/{hostInit--Ger2EtU.js → hostInit-DE3Z7XT5.js} +1 -1
- package/dist/assets/{index-ClfLCUUn.js → index-Bi_XNWNi.js} +3 -3
- package/dist/assets/{layers-mgcgefqn.js → layers-CW939zq1.js} +1 -1
- package/dist/assets/{location-owned-usage-C9Nw4pl1.js → location-owned-usage-BUWlm1CB.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-a89cc212.js → mf-entry-bootstrap-0-3f76a9b1.js} +2 -2
- package/dist/assets/mount-Do5zHkB-.js +1 -0
- package/dist/assets/{notification-schedule-field-C5o7LtYG.js → notification-schedule-field-CREV1-k1.js} +1 -1
- package/dist/assets/{player-overlays-D99aruRn.js → player-overlays-BzWBMmxi.js} +1 -1
- package/dist/assets/remoteEntry-BFi5UTY_.js +1 -0
- package/dist/assets/{send-BgylcHOh.js → send-DkNVOtAO.js} +1 -1
- package/dist/assets/{settings-2-LW1IN_gt.js → settings-2-C2Xnx-LO.js} +1 -1
- package/dist/assets/{square-check-big-D5pqQNiY.js → square-check-big-Cye5KH4u.js} +1 -1
- package/dist/assets/{src-DEc5SPAU.js → src-ZWAjTIoO.js} +3 -3
- package/dist/assets/{use-scenes-feed-B-ZZi-03.js → use-scenes-feed-D8q1WiH1.js} +1 -1
- package/dist/assets/{use-stationary-objects-duMJ6znZ.js → use-stationary-objects-uc9eGIUH.js} +1 -1
- package/dist/assets/useEventInvalidation-Do5zHkB-.js +1 -0
- package/dist/assets/{useNodeUrlSelection-CojY6y4Y.js → useNodeUrlSelection-C6cRiQwh.js} +1 -1
- package/dist/assets/user-round-BjVxqy86.js +1 -0
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-C5D0MB1B.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BwnemvKX.js} +2 -2
- package/dist/index.html +7 -7
- package/dist/server/addon.js +11 -2
- package/package.json +1 -1
- package/dist/assets/circle-slash-B4DbbsQJ.js +0 -1
- package/dist/assets/device-picker-model-ClhnucnD.js +0 -1
- package/dist/assets/mount-ClhnucnD.js +0 -1
- package/dist/assets/remoteEntry-DlMXNmK9.js +0 -1
- package/dist/assets/useEventInvalidation-ClhnucnD.js +0 -1
- package/dist/assets/user-round-C9Bokffe.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{vt as e}from"./player-overlays-BzWBMmxi.js";var t=e(`circle-slash`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`9`,x2:`15`,y1:`15`,y2:`9`,key:`1dfufj`}]]);export{t};
|
|
@@ -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 ee,a as h,b as g,c as te,d as ne,f as re,g as _,h as ie,i as ae,j as v,k as oe,l as se,m as y,n as ce,o as le,p as b,r as ue,s as de,t as fe,u as pe,v as x,w as me,x as he,y as S}from"./__vite-browser-external-Cc3gW-QT.js";var ge=[`f32le`,`pcmu`,`pcma`];function _e(e){return typeof e==`string`&&ge.includes(e)}function ve(e){return e===`f32le`?4:1}function ye(e,t){if(t===`f32le`){let t=new Uint8Array(e.byteLength);return t.set(e),t}let n=t===`pcmu`?Se:Ce,r=new Float32Array(e.length);for(let t=0;t<e.length;t++)r[t]=n[e[t]];return new Uint8Array(r.buffer)}function be(){let e=new Float32Array(256);for(let t=0;t<256;t++){let n=~t&255,r=n&128?-1:1,i=n>>4&7;e[t]=r*((8*(n&15)+132<<i)-132)/32768}return e}function xe(){let e=new Float32Array(256);for(let t=0;t<256;t++){let n=t^85,r=n&128?1:-1,i=n>>4&7,a=n&15;e[t]=r*(i===0?16*a+8:16*a+264<<i-1)/32768}return e}var Se=be(),Ce=xe(),we=[`track`,`face`,`identity`,`plate`,`vehicle`,`scene`,`motion`,`object`,`audio`,`mosaic`],Te=new Set(we),Ee=/^\d+$/;function De(e){return Te.has(e)}function Oe(e){let t=e.split(`:`);if(t.length!==3&&t.length!==4)return null;let[n,r,i,a]=t;return n===void 0||!De(n)||r===void 0||r.length===0||i===void 0||i.length===0?null:a===void 0?{ownerType:n,ownerId:r,fileKind:i}:Ee.test(a)?{ownerType:n,ownerId:r,fileKind:i,timestampMs:Number(a)}:null}function ke(e){let t=`${e.ownerType}:${e.ownerId}:${e.fileKind}`;return e.timestampMs===void 0?t:`${t}:${e.timestampMs}`}var Ae=[`motion`,`object`,`audio`],je=b(Ae),Me=[...Ae,`track`],Ne=b(Me),Pe=new Set(Ae);function Fe(e){return Pe.has(e)}var C=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.PipelineAgentHwaccelChanged=`pipeline.agent-hwaccel-changed`,e.MotionAnalysis=`detection.motion-analysis`,e.MotionZonesRaw=`detection.motion-zones-raw`,e.MotionOnMotionChanged=`motion.on-motion-changed`,e.DetectionResult=`detection.result`,e.DetectionRaw=`detection.raw`,e.DetectionCameraNative=`detection.camera-native`,e.PipelineAudioInferenceResult=`pipeline.audio-inference-result`,e.DetectionPhaseTransition=`detection.phase-transition`,e.ProviderMotion=`provider.motion`,e.ProviderDetection=`provider.detection`,e.EnrichmentEmbeddingStored=`enrichment.embedding.stored`,e.EnrichmentSceneStateChanged=`enrichment.scene.state-changed`,e.EnrichmentActivitySummary=`enrichment.activity.summary`,e.PipelineAnalyticsTrackLifecycle=`pipeline-analytics.track-lifecycle`,e.PipelineAnalyticsTrackStarted=`pipeline-analytics.track-started`,e.PipelineAnalyticsTrackEnded=`pipeline-analytics.track-ended`,e.PipelineAnalyticsDetectionEvent=`pipeline-analytics.detection-event`,e.PipelineAnalyticsFrameTracked=`pipeline-analytics.frame-tracked`,e.PipelineAnalyticsStationaryChanged=`pipeline-analytics.stationary-changed`,e.PipelineAnalyticsPackageDelivered=`pipeline-analytics.package-delivered`,e.PipelineAnalyticsPackagePickedUp=`pipeline-analytics.package-picked-up`,e.PipelineAnalyticsFaceGalleryChanged=`pipeline-analytics.face-gallery-changed`,e.PipelineAnalyticsPlateGalleryChanged=`pipeline-analytics.plate-gallery-changed`,e.CameraStreamsProfileSlotsChanged=`camera-streams.onProfileSlotsChanged`,e.StreamOnline=`stream.online`,e.StreamOffline=`stream.offline`,e.NetworkTunnelStarted=`network.tunnel.started`,e.NetworkTunnelStopped=`network.tunnel.stopped`,e.LocalNetworkChanged=`network.local.changed`,e.MeshNetworkChanged=`network.mesh.changed`,e.BackupCompleted=`backup.completed`,e.BackupRunCompleted=`backup.run-completed`,e.BackupRestored=`backup.restored`,e.NotificationDispatched=`notification.dispatched`,e.NotificationFailed=`notification.failed`,e.DeviceUpdated=`device.updated`,e.DeviceOnline=`device.online`,e.DeviceOffline=`device.offline`,e.DeviceAwake=`device.awake`,e.DeviceSleeping=`device.sleeping`,e.RetentionCleanup=`retention.cleanup`,e.AddonsBulkUpdateProgress=`addons.bulk-update-progress`,e.AddonsJobProgress=`addons.job-progress`,e.AddonsJobLog=`addons.job-log`,e.AccessoriesChildVisibilityChanged=`accessories.onChildVisibilityChanged`,e.AccessoriesChanged=`accessories.onAccessoriesChanged`,e.ModelConvertProgress=`model-convert.progress`,e}({}),Ie=new Set([`device.native-shadow-changed`]);function Le(e){return Ie.has(e)}function Re(){let e=Object.values(C).filter(e=>typeof e==`string`);return[...new Set(e)].filter(e=>!Le(e)).toSorted()}var ze=[{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}],Be=Object.fromEntries(ze.map(e=>[e.id,e]));function Ve(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 He(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&&Ue(e.fields,t);return t}function Ue(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){Ue(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&&Ue(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 We(e){let t=new Map;for(let[n,r]of He(e))t.set(n,r.value??r.default);return t}function Ge(e,t){let n=He(e).get(t);return n===void 0?void 0:n.value??n.default}function Ke(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>qe(e,t))}))}}function qe(e,t){if(Ve(e))return e;if(e.type===`group`){let n=e.fields.map(e=>qe(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>qe(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?Je(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 Je(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 Ye(e,t){return e.category===t}function Xe(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 Ze(e,t){let n=t.ts??Date.now();e.emit(Xe(`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 Qe(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 $e(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 et(e,t){return`${e}@${$e(t)}`}function tt(e,t,n){return e[et(t,n)]}function nt(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?et(i,n):i]=a;return r}function rt(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=tt(e,i,n);t!==void 0&&(r[i]=t)}return r}var it=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(C.AddonStarted);let n=st(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(C.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 Ke(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=at(t.fields);n.length!==0&&i.push({...t,fields:n})}if(i.length===0)return null;let a=await this.resolveGlobalStore(e);return Ke({...n,sections:i},a)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=$e(e??this._ctx?.kernel?.localNodeId);return r.size>0?rt(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=$e(this._ctx?.kernel?.localNodeId),i=$e(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?nt(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(C.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=>ot(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?Ke(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{Ze(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=$e(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?tt(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 Qe({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 Qe({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 at(e){let t=[];for(let n of e){if(n.type===`group`){let e=at(n.fields);e.length>0&&t.push({...n,fields:e});continue}if(n.type===`sub-tabs`){let e=n.tabs.map(e=>({...e,fields:at(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 ot(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...ot(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...ot(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function st(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function ct(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=lt(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=dt(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 lt(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=ut(t.path,n);if(e!==null)return{route:t,params:e}}return null}function ut(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 dt(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 ft=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)}}}},pt=d({codec:b([`h264`,`h265`,`copy`]),profile:b([`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:b([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:b([`zerolatency`,`film`,`animation`]).optional(),singleSlicePerFrame:S().optional()}),mt=f([m(`passthrough`),d({codec:b([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:a().int().positive().optional(),sampleRateHz:a().int().positive().optional(),channels:f([m(1),m(2)]).optional()})]),ht=d({video:pt,audio:mt,inputArgs:x(l()).optional(),outputArgs:x(l()).optional()});function gt(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 _t(e,t,n){let r=e>=n;return r===t>=n?r?e-t:t-e:r?-1:1}function vt(e){let t=e.toLowerCase().replace(/[.\s-]/g,``);return t===`hevc`||t===`hvc1`||t===`hev1`?`h265`:t===`avc`||t===`avc1`?`h264`:t}function yt(e,t){if(t.length===0)return!0;if(e===void 0)return!1;let n=vt(e);return t.some(e=>vt(e)===n)}function bt(e,t){for(let n=0;n<t.length;n+=1)if(e.startsWith(t[n]))return n;return t.length}function xt(e,t){let n=e.filter(e=>t.allowTranscode||yt(e.codec,t.acceptCodecs));if(n.length===0)return null;let r=t.targetHeight,i=n.map(e=>({candidate:e,transcodes:!yt(e.codec,t.acceptCodecs),provider:bt(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:_t(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 St={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},Ct={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 wt(e){return[`-hide_banner`,`-loglevel`,e]}function Tt(e){return!e||e===`none`||e===`copy`}function Et(e,t){let n=[];if(Tt(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 Dt(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 Ot(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 kt(e,t){return e===void 0||!Tt(t)?``:`format=nv12,hwupload`}function At(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 jt(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?``:kt(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=[...Ot(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(...At(e)),e.bitstreamFilter!==void 0&&a.push(`-bsf:v`,e.bitstreamFilter),a}function Mt(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`,St[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 Nt(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 Pt(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var Ft=`+frag_keyframe+empty_moov+default_base_moof`;function It(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?Rt(e):[`-f`,e.container,`pipe:1`]}var Lt=.9;function Rt(e){return[`-movflags`,Ft,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*Lt*1e3))),`-f`,`mp4`,`pipe:1`]}function zt(e){return[`-map`,`0:a:0?`,...Mt(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:Ct[e.codec]),...Nt({url:e.rtpUrl,sdpFile:e.sdpFile})]}function Bt(e){return e.hwEncodeDevice===void 0?void 0:{device:e.hwEncodeDevice,decodeHwAccel:e.decodeHwAccel}}function Vt(e){let t=e.filterGraph??null,n=[...wt(e.logLevel),...e.hwEncodeDevice===void 0?[]:[`-vaapi_device`,e.hwEncodeDevice.renderNode],...Et(e.input,e.decodeHwAccel),...(e.extraInputs??[]).flatMap(t=>Et(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=Dt(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`,...jt(e.video,e.outputArgs,t,Bt(e)),...r,...e.outputArgs,...Nt(e.sink.video)]:[],o=e.sink.audio?[`-vn`,`-map`,i.audio??`0:a:0?`,...Mt(e.audio),...Nt(e.sink.audio)]:[];return[...n,...a,...o]}let s=Pt(e.sink)||e.audio.kind===`none`,c=Pt(e.sink)?[`-an`]:Mt(e.audio);return[...n,...a,...jt(e.video,e.outputArgs,t,Bt(e)),...r,...s?[]:o,...c,...e.outputArgs,...It(e.sink),...e.audioSidecar?zt(e.audioSidecar):[]]}var Ht={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 Ut(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||Tt(t)||t===`auto`)return r;let i=Ht[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function Wt(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 Gt(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:Ut(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:Wt(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var Kt={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`},qt={...Kt,video:{...Kt.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},Jt={...Kt,audio:{codec:`opus`},video:{...Kt.video,singleSlicePerFrame:!0}},Yt={kind:`cbr`,vbvSeconds:1},Xt={kind:`cap`,vbvSeconds:2},Zt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},Qt=16*1024*1024,$t=8,en=16,tn=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??Qt}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<$t)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<en)return null;let n=t.getBigUint64(this.cursor+$t);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<$t?(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 nn(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 rn(e){return!e||e===`none`||e===`copy`}async function an(e){let t=e.override;if(t!=null&&t!==``)return rn(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=rn(r)?null:r;return e.cache?.write(i),i}function on(e){return String(Math.round(e*1e3)/1e3)}function sn(e,t){return!Number.isFinite(t)||t<=0?e:e/t}function cn(e){let t=e.speed>0?e.speed:1;return t===1?`[0:v]fps=${on(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=${on(e.fps/t)},setpts=PTS/${t},fps=${on(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 ln(e){return[`-y`,`-v`,`error`,`-f`,`mp4`,`-i`,e.input??`pipe:0`,`-filter_complex`,cn(e),`-loop`,`0`,`-f`,`gif`,`pipe:1`]}var un=fe();function dn(e){let t=JSON.stringify(e,fn);return(0,un.createHash)(`sha256`).update(t??``).digest(`hex`)}function fn(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 pn(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var mn=`\0unset`;function hn(e){return{codec:e.codec,profile:e.profile??mn,level:e.level??mn,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??mn,tune:e.tune??mn,singleSlicePerFrame:e.singleSlicePerFrame===void 0?mn:String(e.singleSlicePerFrame)}}function gn(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function _n(e,t=pn(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:hn(e.encode.video),audio:gn(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??mn,pixelFormat:e.pixelFormat??mn,decodeHwAccel:e.decodeHwAccel??mn}}function vn(e,t=pn(e)){return`egress:${dn(_n(e,t))}`}function yn(e){let t=null;return()=>{if(t!==null)return t;let n=e();return t=n,n.catch(()=>{t===n&&(t=null)}),n}}var bn=`8.1.2-5`,xn=`https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${bn}`;function Sn(e){return`${xn}/jellyfin-ffmpeg_${bn}_portable_${e}-gpl.tar.xz`}Sn(`linux64`),Sn(`linuxarm64`),Sn(`macarm64`),Sn(`mac64`);var Cn=`CAMSTACK_FFMPEG_PATH`,wn=b([`singleton`,`device`,`widget`]),Tn=d({capName:l(),kind:wn,deviceId:a().optional(),reachable:S(),latencyMs:a(),error:l().optional()}),En=d({addonId:l(),caps:x(Tn).readonly(),widgets:x(Tn).readonly()}),Dn=d({nodeId:l(),addons:x(En).readonly()}),On=d({ok:S(),degraded:S(),checkedAt:l(),nodes:x(Dn).readonly(),summary:d({total:a(),reachable:a(),unreachable:a()})}),kn=`hub-only`;function An(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function jn(e){let t=An(e).placement;return t===`any-node`||t===`agent-only`}function Mn(e){return An(e).placement===`agent-only`}function Nn(e){return An(e).group}function Pn(e,t){return e.execution?.group??t}function Fn(e){return An(e).placement}function In(e){return e.execution?.isolate===!0}var Ln=`x-camstack-dataplane-secret`,Rn=[`grid-view`,`events-view`],zn=3e4,Bn=15e3,Vn=256*1024,Hn=d({url:l().min(1),hostNodeId:l().min(1),expiresAtMs:a().int().nonnegative(),declaredBytes:a().int().nonnegative().nullable()}),Un=b([`running`,`done`,`failed`,`cancelled`]),Wn=b([`adopted`,`already-adopted`,`failed`,`cancelled`]),Gn=d({childNativeId:l(),outcome:Wn,parentDeviceId:a().int().nonnegative().nullable(),accessoryCount:a().int().nonnegative(),error:l().nullable()}),Kn=d({jobId:l(),addonId:l(),integrationId:l(),state:Un,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:x(Gn).readonly(),startedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),qn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},Jn=b([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`]),Yn=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`],Xn=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`)})]),Zn=b([`no-provider`,`source-unreachable`,`device-disabled`]),Qn=b([`no-privacy-zones`]),$n=d({id:Jn,label:l(),costWhenOff:l(),available:S(),unavailableReason:Zn.optional(),warning:Qn.optional(),enabled:S(),authority:Xn}),er=d({deviceId:a().int(),switches:x($n).readonly(),fetchedAt:a()}),tr=`detection-pipeline`,nr=`audio-analysis`,rr=`privacy-mask`,ir=`pipeline-analytics`,ar=[`motion-detection`,tr,nr,ir,`scene-monitor`],or={"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:tr},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:rr},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:rr},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:nr},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:ir},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 sr(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 cr(e){return Yn.map(t=>{let n=or[t],r=sr(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 lr(e){return e.filter(e=>or[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function ur(e){let t=[],n=[];for(let r of Yn){let i=or[r];if(!i.countsAsSwitchedOff)continue;let a=sr(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var dr=`__camstack_redacted__`;function fr(e){return e.type===`password`?!0:`secret`in e&&e.secret===!0}function pr(e){let t=new Set;for(let n of gr(e))for(let e of _r(n))vr(e,t);return t}function mr(e){for(let t of gr(e))if(_r(t).length>0)return!0;return!1}function hr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function gr(e){if(!hr(e))return[];let t=e.sections;return Array.isArray(t)?t:[]}function _r(e){if(!hr(e))return[];let t=e.fields;return Array.isArray(t)?t:[]}function vr(e,t){if(!hr(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 _r(e))vr(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 _r(e))vr(n,t)}}var yr=3e4,br=6e4,xr=b([`confirmed`,`suppressed`,`exhausted-fallback`]),Sr=d({id:l(),at:a().int(),deviceId:a().int(),sourceTrackId:l(),className:l(),verdict:xr,reason:l().nullable(),attempts:a().int(),deferredForMs:a().int(),decidedOnCoastedFrame:S(),birthEvidenceAvailable:S(),decidedByBirthEvidence:S(),bestScore:a().nullable(),appliedMinConfidence:a().nullable(),firstSeen:a().int().nullable(),motionOnsetAt:a().int().nullable(),birthLatencyMs:a().int().nullable(),birthIndexInBurst:a().int().nullable()}),Cr=d({deviceId:a().int().optional(),since:a().int().optional(),verdict:xr.optional(),limit:a().int().min(1).max(5e3).optional()}),wr=5e3,Tr=d({id:l(),note:l(),deviceId:a().int(),sourceTrackId:l(),archivedAt:a().int(),trackStartedAt:a().int().nullable(),trackClass:l().nullable(),trackLabel:l().nullable()}),Er=d({deviceId:a().int().optional(),limit:a().int().min(1).max(1e3).optional()}),Dr=2e4,Or=5e3,kr=b([`same-subject`,`different-subjects`]),Ar=b([`before`,`after`]),jr=b([`mixed`,`not-a-subject`]),Mr=d({id:l(),deviceId:a().int(),leftTrackId:l(),rightTrackId:l(),leftSide:Ar.nullable(),rightSide:Ar.nullable(),relation:kr,presence:m(`continuous`).nullable(),leftStartedAt:a().int().nullable(),rightStartedAt:a().int().nullable(),createdAt:a().int(),updatedAt:a().int(),author:l().nullable()}),Nr=d({id:l(),deviceId:a().int(),sourceTrackId:l(),purity:jr,switchAtMs:a().int().nullable(),startedAt:a().int().nullable(),createdAt:a().int(),updatedAt:a().int(),author:l().nullable()}),Pr=d({deviceId:a().int(),trackId:l().min(1),otherTrackId:l().min(1),relation:kr,presence:m(`continuous`).optional(),trackSide:Ar.optional(),otherSide:Ar.optional()}),Fr=d({deviceId:a().int(),trackId:l().min(1),otherTrackId:l().min(1)}),Ir=d({cleared:S()}),Lr=d({deviceId:a().int(),trackId:l().min(1),purity:b([`pure`,`mixed`,`not-a-subject`]),switchAtMs:a().int().optional()}),Rr=d({purity:Nr.nullable()}),zr=d({deviceId:a().int(),trackId:l().optional(),since:a().int().optional(),until:a().int().optional(),limit:a().int().min(1).max(5e3).optional()}),Br=d({relations:x(Mr).readonly(),purities:x(Nr).readonly(),truncated:S()}),Vr=b([`unknown-track`,`cross-device`,`self-relation`,`contradiction`,`switch-outside-track`,`switch-needs-mixed`]),Hr={high:`High`,mid:`Mid`,low:`Low`};function Ur(e){return Hr[e]??e.charAt(0).toUpperCase()+e.slice(1)}function Wr(e){return(e.width??0)*(e.height??0)}function Gr(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:Wr(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 Kr(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function qr(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 w(e){return typeof e==`string`}function Jr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Yr(e){return w(e)&&e.trim()?{url:e}:Jr(e)&&w(e.url)&&e.url.trim()?{url:e.url,label:w(e.label)?e.label:void 0}:null}function Xr(e){let t=w(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=Yr(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=w(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:w(e.main_stream_name)?e.main_stream_name:void 0});let i=w(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:w(e.sub_stream_name)?e.sub_stream_name:void 0});let a=w(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:w(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function Zr(e){if(e.length===0)return{};let t=Gr(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 Qr={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},$r={debug:0,info:1,warn:2,error:3};function ei(e,t){return $r[e]<=$r[t]}var ti=b([`recording`,`events`]),ni=b([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),ri=b([`retention`,`quota`,`manual`,`operator`,`maintenance`,`orphaned-device`]),ii=d({id:l(),at:a(),domain:ti,op:ni,reason:ri,deviceId:a().nullable(),nodeId:l(),itemsAffected:a(),bytesReclaimed:a(),detail:l().nullable(),actor:l()}),ai=d({deviceId:a().optional(),limit:a().int().min(1).max(1e3).optional()}),T=b([`high`,`mid`,`low`]),oi=[`high`,`mid`,`low`],si=f([T,m(`auto`)]),ci=b([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),li=d({width:a().int().positive(),height:a().int().positive()}),ui=d({camStreamId:l().min(1),deviceId:a().int().nonnegative(),kind:ci,url:l().optional(),codec:l().optional(),resolution:li.optional(),fps:a().positive().optional(),label:l().optional(),deviceFeatures:x(l()).optional(),autoEligible:S().optional(),profileHint:T.optional(),metadata:v(l(),s()).optional()}),di=b([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),fi=d({deviceId:a().int().nonnegative(),profile:T,brokerId:l(),sourceCamStreamId:l().nullable(),status:di,resolution:li.optional(),codec:l().optional(),preBufferSec:a().nonnegative().optional(),errorMessage:l().optional()});function pi(e,t){return`${e}/${t}`}function mi(e,t){return`${e}/${t}`}function hi(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=T.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function gi(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>oi.indexOf(e.profile)-oi.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 _i=d({id:l(),label:l(),protocol:b([`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:T.optional()}),vi=d({type:l(),url:l(),videoCodec:l().optional(),audioCodec:l().optional(),metadata:v(l(),s()).readonly().optional()}),yi=d({type:b([`video`,`audio`]),data:y(Uint8Array),pts:a(),dts:a(),keyframe:S(),codec:l()}),bi=d({data:y(Uint8Array),width:a(),height:a(),format:b([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),timestamp:a()}),E=d({shmId:l(),slot:a().int().nonnegative(),seq:a().int().nonnegative(),width:a().int().positive(),height:a().int().positive(),format:b([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:a(),byteLength:a().int().nonnegative(),nodeId:l(),slotCount:a().int().positive()}),xi=b([`rgb`,`bgr`,`yuv420`,`gray`]),Si=d({brokerId:l(),format:xi,maxFps:a().positive().optional(),tag:l().optional()}),Ci=d({subscriptionId:l(),maxFps:a().nonnegative()}),wi=b(ge),Ti=d({data:y(Uint8Array),sampleRate:a().int().positive(),channels:a().int().positive(),timestamp:a(),format:wi.optional()}),Ei=d({brokerId:l(),tag:l().optional(),accept:x(wi).readonly().optional()}),Di=d({subscriptionId:l()}),Oi=b([`idle`,`connecting`,`streaming`,`error`,`stopped`]),ki=d({status:Oi,inputFps:a(),decodeFps:a(),encodedSubscribers:a(),decodedSubscribers:a(),uptimeMs:a(),bitrateKbps:a(),idrIntervalMs:a(),codec:l().optional(),totalBytes:a(),packetCount:a(),rtspClients:a(),pipeClients:a(),preBufferSec:a(),preBufferMs:a(),preBufferPackets:a(),decoderNodeId:l().nullable(),audio:d({codec:l(),sampleRate:a(),channels:a(),supported:S()}).nullable().optional(),audioMuted:S().optional(),audioMutedDropped:a().optional()}),Ai=d({profile:T,brokerId:l(),url:l(),mutedUrl:l(),enabled:S(),codec:l().optional(),resolution:li.optional()}),ji=d({id:l(),name:l(),category:l().optional(),description:l().optional(),icon:l().optional()}),Mi=[`person`,`vehicle`,`animal`,`package`],Ni=[`person`,`vehicle`,`animal`];function Pi(e){return Ni.some(t=>t===e)}var Fi=d({mapping:v(l(),b(Mi)),preserveOriginal:S()}),Ii={preMs:5e3,postMs:1e4},Li=a().int().min(0).max(6),Ri=/^([01]\d|2[0-3]):[0-5]\d$/,zi=b([`off`,`events`,`continuous`,`on-device-decision`]),Bi=b(Ni),Vi=e=>new Set(e).size===e.length,Hi=d({motion:S().optional(),audioThresholdDbfs:a().optional(),objectClasses:x(Bi).min(1).refine(Vi,{message:`objectClasses must not repeat a class`}).optional(),sensorDeviceIds:x(a().int().positive()).min(1).max(16).refine(Vi,{message:`sensorDeviceIds must not repeat a device`}).optional()}),Ui=b([`continuous`,`events`]),Wi=Hi,Gi=b([`on`,`muted`]),Ki=d({days:x(Li),start:l().regex(Ri),end:l().regex(Ri),mode:Ui,audio:Gi.optional(),triggers:Wi.optional(),preBufferSec:a().min(0).optional(),postBufferSec:a().min(0).optional()}),qi={postBufferSec:30};function Ji(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 Yi=qi.postBufferSec*1e3,Xi=d({maxAgeDays:a().min(0).optional(),maxSizeGb:a().min(0).optional()}),Zi=d({enabled:S(),mode:zi.optional(),profiles:x(T).optional(),segmentSeconds:a().int().positive().optional(),bands:x(Ki).default([]),deviceDecision:S().optional(),retention:Xi.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 $i=[`high`,`low`];function ea(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=>$i.includes(e));return n.length>0?n:[...e]}var ta=[`motion`,`audioThresholdDbfs`,`objectClasses`,`sensorDeviceIds`];function na(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ra(e){return na(e)&&na(e.triggers)&&e.triggers.deviceSignal===!0}function ia(e){let t=e.triggers;return na(t)?ta.some(e=>t[e]!==void 0):!1}function aa(e){let t=e.triggers;if(!na(t))return e;let{deviceSignal:n,...r}=t;return{...e,triggers:r}}function oa(e){let t={value:e,migrated:!1,strippedOnly:!1};if(!na(e)||!Array.isArray(e.bands)||!e.bands.some(ra))return t;let n=[];for(let t of e.bands){if(!ra(t)||!na(t)){n.push(t);continue}ia(t)&&n.push(aa(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 sa=b([`queued`,`running`,`done`,`failed`,`cancelled`]),ca=d({jobId:l(),state:sa,fromLocationId:l(),toLocationId:l(),deviceId:a().nullable(),entities:x(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()}),la=b([`recordings`,`recordingsLow`]),ua=d({fromLocationId:l(),toLocationId:l(),entities:x(b([`segments`])).optional(),footageClass:la.optional(),deviceId:a().int().optional(),profiles:x(l()).optional(),throttleMbps:a().min(1).max(1e3).optional(),sinceMs:a().int().optional()}),da=d({leaseId:l().min(1)}),fa=ua.extend({leaseId:l().min(1)}),pa=b([`move`,`seal`,`gallery`]),ma=d({toLocationId:l(),fromLocationId:l().optional(),throttleMbps:a().min(1).max(1e3).optional(),mode:pa.optional()}),ha=d({present:S(),rows:a().int().nonnegative().nullable()}),ga=d({media:ha,retrainFrames:ha,anyPresent:S(),total:a().int().nonnegative().nullable()}).nullable(),_a=ma.extend({leaseId:l().min(1)}),va=b([`recordings`,`recordingsLow`,`eventMedia`,`backups`,`galleryMedia`]),ya=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`}),ba=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(),xa=b([`blocking`,`nonBlocking`]),Sa=d({destinations:ya,sources:ba,throttleMbps:a().min(1).max(1e3).optional(),mode:xa.optional()}),Ca=b([`planning`,`sealing`,`pausing`,`moving`,`draining`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),wa=b([`pipeline`,`recorder`,`analytics`]),Ta=d({filesMoved:a().int().nonnegative(),filesTotal:a().int().nonnegative().nullable(),bytesMoved:a().int().nonnegative(),rowsReconciled:a().int().nonnegative().optional(),startedAt:a(),observedAt:a()}),Ea=d({storageClass:va,fromLocationId:l(),toLocationId:l(),freezeSource:S().optional(),moverJobId:l().nullable(),state:sa.nullable(),error:l().nullable(),progress:Ta.nullable()}),Da=d({jobId:l(),phase:Ca,mode:xa,destinations:ya,sources:ba,throttleMbps:a(),moves:x(Ea),pauseLeaseId:l().nullable(),pausedParticipants:x(wa),repointed:S(),cancelRequested:S(),startedAt:a(),updatedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),Oa=b([`sharesDeviceWithSource`,`deviceIdentityUnknown`,`unstampedEventMediaRows`,`blockingOnly`,`noMover`]),ka=d({code:Oa,storageClass:va,message:l()}),Aa=d({destinations:ya,sources:ba,mode:xa,moves:x(d({storageClass:va,fromLocationId:l(),toLocationId:l(),freezeSource:S().optional()})),findings:x(ka)}),ja=b([`footage`,`media`]),Ma=d({lane:ja,job:ca,migrationJobId:l().nullable(),observedAt:a()}),Na=d({storageClass:va,fromLocationId:l(),toLocationId:l(),items:a().int().nonnegative().nullable(),bytes:a().int().nonnegative().nullable()}),Pa=d({classes:x(va).min(1),throttleMbps:a().min(1).max(1e3).optional()}),Fa=d({fromLocationId:l().min(1),footageClass:la.optional()}),Ia=d({segments:a().int().nonnegative(),bytes:a().int().nonnegative()}).nullable(),La=d({locationId:l().min(1),apply:S().optional(),deviceId:a().int().positive().optional(),profiles:x(l().min(1)).optional()}),Ra=b([`location-unknown`,`source-writable`,`no-ledger`,`archive-unreadable`,`anchor-absent`,`anchor-unreadable`,`anchor-moved`]),za=b([`live-tail`,`listing-error`,`path-mismatch`,`durable-refused`]),Ba=d({"live-tail":a().int().nonnegative(),"listing-error":a().int().nonnegative(),"path-mismatch":a().int().nonnegative(),"durable-refused":a().int().nonnegative()}),Va=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()}),Ha=d({locationId:l(),applied:S(),refused:Ra.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:x(l()).readonly(),hoursSkipped:a().int().nonnegative(),skippedByReason:Ba,bounded:S(),byDevice:x(Va).readonly()}),Ua=d({rows:a().int().nonnegative()}).nullable(),Wa=d({toLocationId:l().min(1),fromLocationId:l().optional(),mode:pa.optional()}),Ga=b([`orphans`,`debug-media`,`ghost-ledger`,`done`,`failed`,`cancelled`]),Ka=d({includeDebugMedia:S().optional()}),qa=d({jobId:l(),phase:Ga,includeDebugMedia:S(),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:S(),startedAt:a(),updatedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),Ja=d({jobId:l().optional()}),Ya=[`face`,`plate`],Xa=[`face`,`plate`,`clip`,`custom`],Za=[`active`,`readonly`,`drain`,`disabled`],Qa=b(Za),$a=b([`normal`,`never`,`drain`]),eo=`readOnly`;function to(e){return e===`active`}function no(e){return e!==`disabled`}function ro(e){switch(e){case`active`:return`normal`;case`drain`:return`drain`;case`readonly`:case`disabled`:return`never`}}function io(e){return e.mode===void 0&&(e.config.readOnly===!0||e.enabled===!1)?`readonly`:null}function ao(e){return(oo(e.mode)?e.mode:void 0)??io(e)??`active`}function oo(e){return Za.some(t=>t===e)}function so(e){return to(ao(e))}function co(e){return no(ao(e))}function lo(e){return ro(ao(e))}function uo(e){if(!(`readOnly`in e))return e;let t={...e};return delete t[eo],t}function fo(e,t){return{...e,mode:t,enabled:to(t),config:uo(e.config)}}var po=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:v(l(),s()),nodeId:l().optional(),isSystem:S().default(!1),enabled:S().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()}),mo=d({isDefault:S().optional()});function ho(e){return so({...e,config:e.config??{}})}var go=1024**3;function _o(e){return Math.floor(e*go)}var vo=d({locationId:l(),startedAtMs:a(),startBytes:a(),bytesRemaining:a(),drained:S(),estimatedEmptyAtMs:a().nullable()}),O=f([po,l().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),yo=b([`local-path`,`cap-mediated`]),bo=`local-path`,xo=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:b([`single`,`multi`]),access:yo.optional(),defaultsTo:l().optional(),defaultRoot:b([`data`,`media`,`backup`]).optional()}),So=d({inputFps:a(),outputFps:a(),avgDecodeTimeMs:a(),droppedFrames:a(),lagMs:a().optional(),effectiveFps:a().optional(),adaptiveFps:a().optional()}),Co=d({codec:l(),maxFps:a().default(0),outputFormat:b([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]).default(`jpeg`),scale:a().default(1),width:a().optional(),height:a().optional(),deviceId:a().int().nonnegative().optional(),tag:l().optional(),frameSink:b([`callback`,`shm`]).default(`callback`),debug:S().optional()}),wo={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},To={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},Eo=[{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:wo},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:wo},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:wo},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:wo},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:wo},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:wo},{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:To},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:To},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:To},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:To},{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 Do(e){return Eo.find(t=>t.id===e)}var Oo=b([`info`,`warn`,`error`]),ko=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:Oo,perDevice:S()}),Ao=d({channel:l().min(1),armedUntilMs:a(),deviceIds:x(a().int()).readonly().nullable()}),jo=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}},Mo=class{gates=new Map;declare(e){let t=ko.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 jo(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}},No=null;function Po(){return No??=new Mo,No}function Fo(e){return Po().declare(e)}function Io(){No=null}var Lo=5e3;function Ro(e,t={}){let n=Po(),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 zo=1024,Bo=`other`;function Vo(e,t,n){return n===void 0?`${e}${t}`:`${e}${t}${n}`}var Ho=class{maxKeys;maxReasons;counters=new Map;refused=0;constructor(e=zo,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=Vo(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:Bo;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 Uo(e){return e.attempts<=0?null:(e.attempts-e.succeeded)/e.attempts}var Wo=`__unattributed__`,Go=`__root__`;function Ko(e){return e.addonId===null?e.classification===`root`?{key:Go,kind:`root`}:{key:Wo,kind:`unattributed`}:{key:e.addonId,kind:`addon`}}function qo(e){return Math.round(e*10)/10}function Jo(e,t){let n=new Map;for(let t of e){let{key:e,kind:r}=Ko(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?qo(n.main):null,i=n.splitKnown?qo(n.gc):null,a=qo(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 Yo(e,t){return e===null||t===null?null:e<t?e:t}function Xo(e,t){return e===null||t===null?null:e>t?e:t}function Zo(e,t,n){return{atMs:n,samples:e.samples+t.samples,cpuMainPercent:Xo(e.cpuMainPercent,t.cpuMainPercent),cpuMainPercentMin:Yo(e.cpuMainPercentMin,t.cpuMainPercentMin),cpuGcPercent:Xo(e.cpuGcPercent,t.cpuGcPercent),cpuGcPercentMin:Yo(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 Qo(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 $o(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}:Zo(a,i,e))}return[...r.values()].toSorted((e,t)=>e.atMs-t.atMs)}var es=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${ns(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function ts(e,t){return`${e}|${ns(t)}`}function ns(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function rs(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function is(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 as=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??os(),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(ts(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=ts(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&&rs(r.state)<=rs(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} (${ns(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&&is(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 es(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${ns(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(Xe(`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=ts(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} (${ns(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&&is(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} (${ns(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&is(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 os(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function ss(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function cs(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=ls(e,s);if(t)return a(t)}}return a(o[0])}function ls(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)=>_t(e.pixels,t.pixels,n))[0]?.entry}var us={upperHs:[0,32],upperV:[32,40],upperGrad:[40,48],lowerHs:[48,80],lowerV:[80,88],lowerGrad:[88,96]},ds=[`motion`,`objects`,`discarded`,`stationary`],fs=[`motion`,`objects`,`stationary`],ps={borderWidth:2,dashed:!0,dashPattern:[6,4],opacity:1,borderRadius:2};function ms(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 hs=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],gs={yolo26:`YOLO26`,"yolo26-seg":`YOLO26-seg`,yolov9:`YOLOv9`};function _s(e){return gs[e]??e.toUpperCase()}var vs={"yolo26-seg":`detection + masks, slightly heavier`},ys=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function bs(e,t){let n=_s(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(ys,``).trim();return r.length>0?r:t}function xs(e,t){let n=[];return t===`test`&&n.push(`Test`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function Ss(e){return hs.filter(t=>e.formats[t]!==void 0)}function Cs(e){let t=hs.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var ws=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],Ts=[`fp32`,`int8`];function Es(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:xs(t,n),formats:Ss(e),sizeMB:Cs(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?Ts.indexOf(e.precision)-Ts.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?bs(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=ws.indexOf(e.tier),r=ws.indexOf(t.tier);return n!==-1&&r!==-1?n-r:n===-1?r===-1?e.tier.localeCompare(t.tier):1:-1});let i=vs[e];n.push({family:e,label:_s(e),...i===void 0?{}:{hint:i},tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function Ds(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 Os(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 ks=/^object-clip(-[a-z0-9][a-z0-9-]*)?$/,As=d({textModelId:l().min(1),embeddingDim:a().int().positive(),vectorIndex:l().regex(ks),tokenizerFile:l().min(1),contextLength:a().int().positive(),padId:a().int().nonnegative(),searchMinScore:a().min(0).max(1)}),js=[`loose`,`balanced`,`strict`],Ms=b(js),Ns={loose:1,balanced:1.25,strict:1.5};function Ps(e,t){if(t.minScore!==void 0)return t.minScore;let n=Ns[t.strictness??`loose`];return Math.min(1,Math.round(e.searchMinScore*n*1e3)/1e3)}var Fs=[`animal-classifier`,`vehicle-classifier`,`package-detection`],Is=[`plate-detection`,`face-detection`],Ls=[`segmentation`],Rs=[...Fs,...Is,...Ls];function zs(e){return Rs.some(t=>t===e)}function Bs(e){return Fs.some(t=>t===e)}var Vs={"animal-classifier":[`bird`,`cat`,`cow`,`deer`,`dog`,`horse`,`sheep`,`squirrel`],"vehicle-classifier":[`Ambulance`,`Bicycle`,`Bus`,`Car`,`Motorcycle`,`Taxi`,`Truck`,`Van`],"package-detection":[`package`]},Hs={"animal-classifier":`animal`,"vehicle-classifier":`vehicle`,"package-detection":`package`},Us={"animal-classifier":{},"vehicle-classifier":{school_bus:`Bus`,garbage_truck:`Truck`},"package-detection":{}},Ws={"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}},Gs={"animal-classifier":!0,"vehicle-classifier":!0,"package-detection":!0,"plate-detection":!1,"face-detection":!1,segmentation:!0},Ks=`useRootModel`,qs=`labelLink`,Js=`detector-link:`;function Ys(e){return`${Js}${e}`}function Xs(e){if(e===void 0||!e.startsWith(`detector-link:`))return;let t=e.slice(14);return Bs(t)?t:void 0}function Zs(e,t){let n=Us[e][t];if(n!==void 0)return n;let r=t.toLowerCase();return Vs[e].find(e=>e.toLowerCase()===r)}function Qs(e,t){let n=[];if(t!==void 0)for(let r of Fs){let i={};for(let n of e){if(t.mapping[n]!==Hs[r])continue;let e=Zs(r,n);e!==void 0&&(i[n]=e)}let a=new Set(Object.values(i));if(a.size===0)continue;let o=Vs[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 Is){let t=Ws[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 $s=[`yolo-seg`];function ec(e){return e===void 0||!$s.includes(e)?[]:Ls.map(e=>({kind:`mask`,stepId:e}))}function tc(e,t){let n=e?.suppliesSteps??Qs(e!==void 0&&e.labels.length>0?e.labels.map(e=>e.id):t.labels,e?.classMap??t.classMap),r=ec(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 nc(e,t){return e?.find(e=>e.stepId===t)}function rc(e,t){let n=t?.[Ks];if(typeof n==`boolean`)return n;let r=t?.[qs];return r===`skip-when-filled`?!0:r===`run`?!1:Gs[e]}function ic(e){if(e.kind!==`crop`)return;let t=Ws[e.stepId].minRootInputPx;if(t!==void 0)return e.rootInputPx!==void 0&&e.rootInputPx>=t?void 0:`root-input-too-small`}function ac(e,t,n){let r=nc(n,e),i=rc(e,t),a=r===void 0?`root-does-not-declare`:ic(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 oc(e,t){let n=t?.enabledClasses;return!Array.isArray(n)||n.length===0?!0:n.some(t=>t===e)}function sc(e){return Ws[e].servedChildSteps}var cc=.9;function lc(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 uc={"animal-classifier":`animals`,"vehicle-classifier":`vehicles`,"package-detection":`packages`,"plate-detection":`plates`,"face-detection":`faces`,segmentation:`masks`};function dc(e){let t=uc[e.stepId];if(e.kind!==`label`)return t;let n=Vs[e.stepId].length;return n<=1?t:`${t} ${String(n-e.uncovered.length)}/${String(n)}`}function fc(e){return(e??[]).map(dc).join(` · `)}var pc=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],mc=d({url:l(),sizeMB:a(),isDirectory:S().optional(),files:x(l()).readonly().optional(),runtimes:x(b([`python`])).readonly().optional()}),hc=d({url:l(),filename:l(),sizeMB:a()}),gc=d({onnx:mc.optional(),coreml:mc.optional(),openvino:mc.optional(),tflite:mc.optional(),pt:mc.optional(),gguf:mc.optional()}),_c=d({family:l(),tier:l(),precision:b([`fp32`,`int8`]).optional(),optimization:b([`standard`,`test`]).optional(),resolution:a().int().positive().optional()}),vc=[`camstack`,`frigate`,`scrypted`,`custom`],yc=b(vc);function bc(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 xc=[`camstack-hf`,`third-party`,`built-in`],Sc=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:b(xc).optional(),nonCommercial:S().optional()})),Cc=p(`kind`,[d({kind:m(`label`),stepId:b(Fs),labelToEffect:v(l(),l()),uncovered:x(l()).readonly()}),d({kind:m(`crop`),stepId:b(Is),rootLabels:x(l()).readonly(),parentMacro:b([`vehicle`,`person`]),childClass:b([`plate`,`face`]),rootInputPx:a().int().positive().optional()}),d({kind:m(`mask`),stepId:b(Ls)})]),wc=d({id:l(),name:l(),description:l(),formats:gc,inputSize:d({width:a(),height:a()}),inputChannels:a().int().positive().optional(),labels:x(ji).readonly(),inputLayout:b([`nchw`,`nhwc`]).optional(),inputNormalization:b([`zero-one`,`imagenet`,`none`,`scrfd`]).optional(),outputProbabilities:S().optional(),preprocessMode:b([`letterbox`,`resize`]).optional(),postprocessor:g().optional(),defaultConfidence:a().min(0).max(1).optional(),defaultClassFloors:v(l(),a().min(0).max(1)).optional(),gpuInferencePrecision:b([`f32`,`f16`]).optional(),suppliedLabelFloors:v(l(),a().min(0).max(1)).optional(),faceAlignment:S().optional(),extraFiles:x(hc).readonly().optional(),legacy:S().optional(),metrics:d({map50:a().optional(),p95LatencyMs:v(l(),a()).optional()}).optional(),license:Sc.optional(),group:_c.optional(),provider:yc.optional(),classMap:Fi.optional(),suppliesSteps:x(Cc).readonly().optional(),clip:As.optional()}),Tc=p(`format`,[d({format:m(`openvino`),precisions:x(b([`fp16`,`int8`])).min(1).readonly()}),d({format:m(`coreml`)})]),Ec=d({id:l().regex(/^[a-zA-Z0-9._-]+$/),name:l(),labels:x(ji).readonly(),inputSize:d({width:a(),height:a()}),inputLayout:b([`nchw`,`nhwc`]).optional(),inputNormalization:b([`zero-one`,`imagenet`,`none`,`scrfd`]).optional(),preprocessMode:b([`letterbox`,`resize`]).optional(),outputFormat:b([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:S().optional(),classMap:Fi.optional()}),Dc=d({format:b(pc),precision:b([`fp16`,`int8`]).optional(),sizeMB:a(),validated:S(),files:x(l()).readonly()}),Oc=d({entry:wc,artifacts:x(Dc).readonly()});function kc(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function Ac(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function jc(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function Mc(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 Nc(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=kc(e.method);return jc(e.scopes,e.addonId,n)?{allowed:!0}:{allowed:!1,reason:`integration token holds no addon:${e.addonId}[${n}] grant`}}var Pc={contact:`entryOpen`,binary:`on`,switch:`on`,motion:`detected`,flood:`flooded`,gas:`detected`,smoke:`detected`,"carbon-monoxide":`detected`,vibration:`detected`,tamper:`tampered`},Fc={contact:`lastChangedAt`,binary:`lastChangedAt`,switch:`lastChangedAt`,motion:`lastDetectedAt`,flood:`lastChangedAt`,gas:`lastChangedAt`,smoke:`lastChangedAt`,"carbon-monoxide":`lastChangedAt`,vibration:`lastChangedAt`,tamper:`lastChangedAt`},Ic=Object.keys(Pc),Lc=[`sensor`,`switch`,`control`];function Rc(e){return Object.prototype.hasOwnProperty.call(Pc,e)}function zc(e,t){let n=Pc[e];if(n===void 0)return null;let r=t[n];return typeof r==`boolean`?r:null}function Bc(e,t){let n=Fc[e];if(n===void 0)return null;let r=t[n];return typeof r!=`number`||!Number.isFinite(r)||r<=0?null:r}var Vc=3e4;function Hc(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 Uc(e){let t=zc(e.capName,e.slice);return t===null?{edge:`none`,value:null,reason:Rc(e.capName)?`non-boolean-value`:`unknown-cap`}:Hc({level:t,changedAt:Bc(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 k=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},A=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}};function Wc(e){return e===`rose`||e===`count`}function j(e,t,n){if(typeof e!=`number`||!Number.isFinite(e))throw new A(`${t}: argument ${n+1} must be a finite number`);return e}function Gc(e,t,n){if(typeof e!=`string`)throw new A(`${t}: argument ${n+1} must be a string`);return e}function M(e,t){if(!Number.isFinite(e))throw new A(`${t}: produced a non-finite result`);return e}function Kc(e,t){return e.map((e,n)=>j(e,t,n))}function qc(e,t,n){if(typeof e!=`boolean`)throw new A(`${t}: argument ${n+1} must be a boolean`);return e}var Jc=/^[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/;function Yc(e){if(typeof e==`number`)return Number.isFinite(e)?e:null;if(typeof e!=`string`)return null;let t=e.trim();if(!Jc.test(t))return null;let n=Number(t);return Number.isFinite(n)?n:null}var Xc=2e3;function Zc(e,t,n,r,i,a){let o=qc(e,`rose`,0),s=typeof t==`number`&&Number.isFinite(t)?t:null,c=n===void 0?Xc:j(n,`rose`,2);if(c<0)throw new A(`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=Hc({level:o,changedAt:s,priorLevel:r.priorLevel,startedAtMs:a.startedAtMs,nowMs:a.nowMs,firstSightingFreshnessMs:Vc});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 $c(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 el=1/0,tl={min:{minArgs:1,maxArgs:el,apply:e=>M(Math.min(...Kc(e,`min`)),`min`)},max:{minArgs:1,maxArgs:el,apply:e=>M(Math.max(...Kc(e,`max`)),`max`)},abs:{minArgs:1,maxArgs:1,apply:e=>M(Math.abs(j(e[0],`abs`,0)),`abs`)},floor:{minArgs:1,maxArgs:1,apply:e=>M(Math.floor(j(e[0],`floor`,0)),`floor`)},ceil:{minArgs:1,maxArgs:1,apply:e=>M(Math.ceil(j(e[0],`ceil`,0)),`ceil`)},sqrt:{minArgs:1,maxArgs:1,apply:e=>M(Math.sqrt(j(e[0],`sqrt`,0)),`sqrt`)},round:{minArgs:1,maxArgs:2,apply:e=>{let t=j(e[0],`round`,0),n=e.length>1?Math.trunc(j(e[1],`round`,1)):0;if(n<0||n>100)throw new A(`round: digits must be between 0 and 100`);let r=10**n;return M(Math.round(t*r)/r,`round`)}},pow:{minArgs:2,maxArgs:2,apply:e=>M(j(e[0],`pow`,0)**j(e[1],`pow`,1),`pow`)},clamp:{minArgs:3,maxArgs:3,apply:e=>{let t=j(e[0],`clamp`,0),n=j(e[1],`clamp`,1),r=j(e[2],`clamp`,2);if(n>r)throw new A(`clamp: lower bound is greater than upper bound`);return M(Math.min(r,Math.max(n,t)),`clamp`)}},avg:{minArgs:1,maxArgs:el,apply:e=>{let t=Kc(e,`avg`);return M(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:el,apply:e=>M(Kc(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:el,apply:e=>{for(let t of e)if(t!==null)return t;return null}},age:{minArgs:2,maxArgs:2,apply:e=>M(j(e[0],`age`,0)-j(e[1],`age`,1),`age`)},convert:{minArgs:3,maxArgs:3,apply:(e,t)=>{let n=j(e[0],`convert`,0),r=Gc(e[1],`convert`,1).trim(),i=Gc(e[2],`convert`,2).trim();if(t.convert){let e=t.convert(n,r,i);if(e===null)throw new A(`convert: cannot convert '${r}' to '${i}'`);return M(e,`convert`)}if(r===i)return n;throw new A(`convert: unit conversion table not installed`)}},any:{minArgs:1,maxArgs:el,apply:e=>e.map((e,t)=>qc(e,`any`,t)).some(e=>e)},all:{minArgs:1,maxArgs:el,apply:e=>e.map((e,t)=>qc(e,`all`,t)).every(e=>e)},within:{minArgs:2,maxArgs:2,apply:(e,t)=>{let n=j(e[1],`within`,1);if(n<0)throw new A(`within: the window must not be negative`);let r=e[0];if(r===null)return!1;let i=j(r,`within`,0),a=t.now;if(a===void 0||!Number.isFinite(a))throw new A(`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=>Yc(e[0])},latest:{minArgs:1,maxArgs:el,apply:e=>{let t=e.flatMap((e,t)=>e===null?[]:[j(e,`latest`,t)]);return t.length===0?null:M(Math.max(...t),`latest`)}},rose:{minArgs:2,maxArgs:3,apply:()=>{throw new A(`rose: stateful evaluation context is required`)}},count:{minArgs:1,maxArgs:1,apply:()=>{throw new A(`count: stateful evaluation context is required`)}}},nl=Object.freeze(Object.assign(Object.create(null),tl)),rl=new Set(Object.keys(tl)),il=2048,al=4096,ol=/^[A-Za-z_][A-Za-z0-9_]*$/,sl=new Set([`now`,`true`,`false`,`null`]),cl=new Set([`true`,`false`,`null`]);function ll(e){return e>=`0`&&e<=`9`}function ul(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function dl(e){return ul(e)||ll(e)}function fl(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 ee,a as h,b as g,c as te,d as ne,f as re,g as _,h as ie,i as ae,j as v,k as oe,l as se,m as y,n as ce,o as le,p as b,r as ue,s as de,t as fe,u as pe,v as x,w as me,x as he,y as S}from"./__vite-browser-external-Cc3gW-QT.js";var ge=[`f32le`,`pcmu`,`pcma`];function _e(e){return typeof e==`string`&&ge.includes(e)}function ve(e){return e===`f32le`?4:1}function ye(e,t){if(t===`f32le`){let t=new Uint8Array(e.byteLength);return t.set(e),t}let n=t===`pcmu`?Se:Ce,r=new Float32Array(e.length);for(let t=0;t<e.length;t++)r[t]=n[e[t]];return new Uint8Array(r.buffer)}function be(){let e=new Float32Array(256);for(let t=0;t<256;t++){let n=~t&255,r=n&128?-1:1,i=n>>4&7;e[t]=r*((8*(n&15)+132<<i)-132)/32768}return e}function xe(){let e=new Float32Array(256);for(let t=0;t<256;t++){let n=t^85,r=n&128?1:-1,i=n>>4&7,a=n&15;e[t]=r*(i===0?16*a+8:16*a+264<<i-1)/32768}return e}var Se=be(),Ce=xe(),we=[`track`,`face`,`identity`,`plate`,`vehicle`,`scene`,`motion`,`object`,`audio`,`mosaic`],Te=new Set(we),Ee=/^\d+$/;function De(e){return Te.has(e)}function Oe(e){let t=e.split(`:`);if(t.length!==3&&t.length!==4)return null;let[n,r,i,a]=t;return n===void 0||!De(n)||r===void 0||r.length===0||i===void 0||i.length===0?null:a===void 0?{ownerType:n,ownerId:r,fileKind:i}:Ee.test(a)?{ownerType:n,ownerId:r,fileKind:i,timestampMs:Number(a)}:null}function ke(e){let t=`${e.ownerType}:${e.ownerId}:${e.fileKind}`;return e.timestampMs===void 0?t:`${t}:${e.timestampMs}`}var Ae=[`motion`,`object`,`audio`],je=b(Ae),Me=[...Ae,`track`],Ne=b(Me),Pe=new Set(Ae);function Fe(e){return Pe.has(e)}var C=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.PipelineAgentHwaccelChanged=`pipeline.agent-hwaccel-changed`,e.MotionAnalysis=`detection.motion-analysis`,e.MotionZonesRaw=`detection.motion-zones-raw`,e.MotionOnMotionChanged=`motion.on-motion-changed`,e.DetectionResult=`detection.result`,e.DetectionRaw=`detection.raw`,e.DetectionCameraNative=`detection.camera-native`,e.PipelineAudioInferenceResult=`pipeline.audio-inference-result`,e.DetectionPhaseTransition=`detection.phase-transition`,e.ProviderMotion=`provider.motion`,e.ProviderDetection=`provider.detection`,e.EnrichmentEmbeddingStored=`enrichment.embedding.stored`,e.EnrichmentSceneStateChanged=`enrichment.scene.state-changed`,e.EnrichmentActivitySummary=`enrichment.activity.summary`,e.PipelineAnalyticsTrackLifecycle=`pipeline-analytics.track-lifecycle`,e.PipelineAnalyticsTrackStarted=`pipeline-analytics.track-started`,e.PipelineAnalyticsTrackEnded=`pipeline-analytics.track-ended`,e.PipelineAnalyticsDetectionEvent=`pipeline-analytics.detection-event`,e.PipelineAnalyticsFrameTracked=`pipeline-analytics.frame-tracked`,e.PipelineAnalyticsStationaryChanged=`pipeline-analytics.stationary-changed`,e.PipelineAnalyticsPackageDelivered=`pipeline-analytics.package-delivered`,e.PipelineAnalyticsPackagePickedUp=`pipeline-analytics.package-picked-up`,e.PipelineAnalyticsFaceGalleryChanged=`pipeline-analytics.face-gallery-changed`,e.PipelineAnalyticsPlateGalleryChanged=`pipeline-analytics.plate-gallery-changed`,e.CameraStreamsProfileSlotsChanged=`camera-streams.onProfileSlotsChanged`,e.StreamOnline=`stream.online`,e.StreamOffline=`stream.offline`,e.NetworkTunnelStarted=`network.tunnel.started`,e.NetworkTunnelStopped=`network.tunnel.stopped`,e.LocalNetworkChanged=`network.local.changed`,e.MeshNetworkChanged=`network.mesh.changed`,e.BackupCompleted=`backup.completed`,e.BackupRunCompleted=`backup.run-completed`,e.BackupRestored=`backup.restored`,e.NotificationDispatched=`notification.dispatched`,e.NotificationFailed=`notification.failed`,e.DeviceUpdated=`device.updated`,e.DeviceOnline=`device.online`,e.DeviceOffline=`device.offline`,e.DeviceAwake=`device.awake`,e.DeviceSleeping=`device.sleeping`,e.RetentionCleanup=`retention.cleanup`,e.AddonsBulkUpdateProgress=`addons.bulk-update-progress`,e.AddonsJobProgress=`addons.job-progress`,e.AddonsJobLog=`addons.job-log`,e.AccessoriesChildVisibilityChanged=`accessories.onChildVisibilityChanged`,e.AccessoriesChanged=`accessories.onAccessoriesChanged`,e.ModelConvertProgress=`model-convert.progress`,e}({}),Ie=new Set([`device.native-shadow-changed`]);function Le(e){return Ie.has(e)}function Re(){let e=Object.values(C).filter(e=>typeof e==`string`);return[...new Set(e)].filter(e=>!Le(e)).toSorted()}var ze=[{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}],Be=Object.fromEntries(ze.map(e=>[e.id,e]));function Ve(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 He(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&&Ue(e.fields,t);return t}function Ue(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){Ue(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&&Ue(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 We(e){let t=new Map;for(let[n,r]of He(e))t.set(n,r.value??r.default);return t}function Ge(e,t){let n=He(e).get(t);return n===void 0?void 0:n.value??n.default}function Ke(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>qe(e,t))}))}}function qe(e,t){if(Ve(e))return e;if(e.type===`group`){let n=e.fields.map(e=>qe(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>qe(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?Je(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 Je(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 Ye(e,t){return e.category===t}function Xe(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 Ze(e,t){let n=t.ts??Date.now();e.emit(Xe(`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 Qe(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 $e(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 et(e,t){return`${e}@${$e(t)}`}function tt(e,t,n){return e[et(t,n)]}function nt(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?et(i,n):i]=a;return r}function rt(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=tt(e,i,n);t!==void 0&&(r[i]=t)}return r}var it=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(C.AddonStarted);let n=st(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(C.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 Ke(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=at(t.fields);n.length!==0&&i.push({...t,fields:n})}if(i.length===0)return null;let a=await this.resolveGlobalStore(e);return Ke({...n,sections:i},a)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=$e(e??this._ctx?.kernel?.localNodeId);return r.size>0?rt(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=$e(this._ctx?.kernel?.localNodeId),i=$e(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?nt(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(C.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=>ot(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?Ke(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{Ze(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=$e(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?tt(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 Qe({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 Qe({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 at(e){let t=[];for(let n of e){if(n.type===`group`){let e=at(n.fields);e.length>0&&t.push({...n,fields:e});continue}if(n.type===`sub-tabs`){let e=n.tabs.map(e=>({...e,fields:at(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 ot(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...ot(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...ot(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function st(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function ct(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=lt(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=dt(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 lt(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=ut(t.path,n);if(e!==null)return{route:t,params:e}}return null}function ut(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 dt(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 ft=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)}}}},pt=d({codec:b([`h264`,`h265`,`copy`]),profile:b([`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:b([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:b([`zerolatency`,`film`,`animation`]).optional(),singleSlicePerFrame:S().optional()}),mt=f([m(`passthrough`),d({codec:b([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:a().int().positive().optional(),sampleRateHz:a().int().positive().optional(),channels:f([m(1),m(2)]).optional()})]),ht=d({video:pt,audio:mt,inputArgs:x(l()).optional(),outputArgs:x(l()).optional()});function gt(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 _t(e,t,n){let r=e>=n;return r===t>=n?r?e-t:t-e:r?-1:1}function vt(e){let t=e.toLowerCase().replace(/[.\s-]/g,``);return t===`hevc`||t===`hvc1`||t===`hev1`?`h265`:t===`avc`||t===`avc1`?`h264`:t}function yt(e,t){if(t.length===0)return!0;if(e===void 0)return!1;let n=vt(e);return t.some(e=>vt(e)===n)}function bt(e,t){for(let n=0;n<t.length;n+=1)if(e.startsWith(t[n]))return n;return t.length}function xt(e,t){let n=e.filter(e=>t.allowTranscode||yt(e.codec,t.acceptCodecs));if(n.length===0)return null;let r=t.targetHeight,i=n.map(e=>({candidate:e,transcodes:!yt(e.codec,t.acceptCodecs),provider:bt(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:_t(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 St={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},Ct={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 wt(e){return[`-hide_banner`,`-loglevel`,e]}function Tt(e){return!e||e===`none`||e===`copy`}function Et(e,t){let n=[];if(Tt(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 Dt(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 Ot(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 kt(e,t){return e===void 0||!Tt(t)?``:`format=nv12,hwupload`}function At(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 jt(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?``:kt(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=[...Ot(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(...At(e)),e.bitstreamFilter!==void 0&&a.push(`-bsf:v`,e.bitstreamFilter),a}function Mt(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`,St[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 Nt(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 Pt(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var Ft=`+frag_keyframe+empty_moov+default_base_moof`;function It(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?Rt(e):[`-f`,e.container,`pipe:1`]}var Lt=.9;function Rt(e){return[`-movflags`,Ft,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*Lt*1e3))),`-f`,`mp4`,`pipe:1`]}function zt(e){return[`-map`,`0:a:0?`,...Mt(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:Ct[e.codec]),...Nt({url:e.rtpUrl,sdpFile:e.sdpFile})]}function Bt(e){return e.hwEncodeDevice===void 0?void 0:{device:e.hwEncodeDevice,decodeHwAccel:e.decodeHwAccel}}function Vt(e){let t=e.filterGraph??null,n=[...wt(e.logLevel),...e.hwEncodeDevice===void 0?[]:[`-vaapi_device`,e.hwEncodeDevice.renderNode],...Et(e.input,e.decodeHwAccel),...(e.extraInputs??[]).flatMap(t=>Et(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=Dt(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`,...jt(e.video,e.outputArgs,t,Bt(e)),...r,...e.outputArgs,...Nt(e.sink.video)]:[],o=e.sink.audio?[`-vn`,`-map`,i.audio??`0:a:0?`,...Mt(e.audio),...Nt(e.sink.audio)]:[];return[...n,...a,...o]}let s=Pt(e.sink)||e.audio.kind===`none`,c=Pt(e.sink)?[`-an`]:Mt(e.audio);return[...n,...a,...jt(e.video,e.outputArgs,t,Bt(e)),...r,...s?[]:o,...c,...e.outputArgs,...It(e.sink),...e.audioSidecar?zt(e.audioSidecar):[]]}var Ht={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 Ut(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||Tt(t)||t===`auto`)return r;let i=Ht[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function Wt(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 Gt(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:Ut(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:Wt(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var Kt={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`},qt={...Kt,video:{...Kt.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},Jt={...Kt,audio:{codec:`opus`},video:{...Kt.video,singleSlicePerFrame:!0}},Yt={kind:`cbr`,vbvSeconds:1},Xt={kind:`cap`,vbvSeconds:2},Zt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},Qt=16*1024*1024,$t=8,en=16,tn=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??Qt}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<$t)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<en)return null;let n=t.getBigUint64(this.cursor+$t);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<$t?(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 nn(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 rn(e){return!e||e===`none`||e===`copy`}async function an(e){let t=e.override;if(t!=null&&t!==``)return rn(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=rn(r)?null:r;return e.cache?.write(i),i}function on(e){return String(Math.round(e*1e3)/1e3)}function sn(e,t){return!Number.isFinite(t)||t<=0?e:e/t}function cn(e){let t=e.speed>0?e.speed:1;return t===1?`[0:v]fps=${on(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=${on(e.fps/t)},setpts=PTS/${t},fps=${on(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 ln(e){return[`-y`,`-v`,`error`,`-f`,`mp4`,`-i`,e.input??`pipe:0`,`-filter_complex`,cn(e),`-loop`,`0`,`-f`,`gif`,`pipe:1`]}var un=fe();function dn(e){let t=JSON.stringify(e,fn);return(0,un.createHash)(`sha256`).update(t??``).digest(`hex`)}function fn(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 pn(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var mn=`\0unset`;function hn(e){return{codec:e.codec,profile:e.profile??mn,level:e.level??mn,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??mn,tune:e.tune??mn,singleSlicePerFrame:e.singleSlicePerFrame===void 0?mn:String(e.singleSlicePerFrame)}}function gn(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function _n(e,t=pn(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:hn(e.encode.video),audio:gn(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??mn,pixelFormat:e.pixelFormat??mn,decodeHwAccel:e.decodeHwAccel??mn}}function vn(e,t=pn(e)){return`egress:${dn(_n(e,t))}`}function yn(e){let t=null;return()=>{if(t!==null)return t;let n=e();return t=n,n.catch(()=>{t===n&&(t=null)}),n}}var bn=`8.1.2-5`,xn=`https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v${bn}`;function Sn(e){return`${xn}/jellyfin-ffmpeg_${bn}_portable_${e}-gpl.tar.xz`}Sn(`linux64`),Sn(`linuxarm64`),Sn(`macarm64`),Sn(`mac64`);var Cn=`CAMSTACK_FFMPEG_PATH`,wn=b([`singleton`,`device`,`widget`]),Tn=d({capName:l(),kind:wn,deviceId:a().optional(),reachable:S(),latencyMs:a(),error:l().optional()}),En=d({addonId:l(),caps:x(Tn).readonly(),widgets:x(Tn).readonly()}),Dn=d({nodeId:l(),addons:x(En).readonly()}),On=d({ok:S(),degraded:S(),checkedAt:l(),nodes:x(Dn).readonly(),summary:d({total:a(),reachable:a(),unreachable:a()})}),kn=`hub-only`;function An(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function jn(e){let t=An(e).placement;return t===`any-node`||t===`agent-only`}function Mn(e){return An(e).placement===`agent-only`}function Nn(e){return An(e).group}function Pn(e,t){return e.execution?.group??t}function Fn(e){return An(e).placement}function In(e){return e.execution?.isolate===!0}var Ln=`x-camstack-dataplane-secret`,Rn=[`grid-view`,`events-view`],zn=3e4,Bn=15e3,Vn=256*1024,Hn=d({url:l().min(1),hostNodeId:l().min(1),expiresAtMs:a().int().nonnegative(),declaredBytes:a().int().nonnegative().nullable()}),Un=b([`running`,`done`,`failed`,`cancelled`]),Wn=b([`adopted`,`already-adopted`,`failed`,`cancelled`]),Gn=d({childNativeId:l(),outcome:Wn,parentDeviceId:a().int().nonnegative().nullable(),accessoryCount:a().int().nonnegative(),error:l().nullable()}),Kn=d({jobId:l(),addonId:l(),integrationId:l(),state:Un,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:x(Gn).readonly(),startedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),qn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},Jn=b([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`]),Yn=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`event-saving`,`recording`,`notifications`],Xn=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`)})]),Zn=b([`no-provider`,`source-unreachable`,`device-disabled`]),Qn=b([`no-privacy-zones`]),$n=d({id:Jn,label:l(),costWhenOff:l(),available:S(),unavailableReason:Zn.optional(),warning:Qn.optional(),enabled:S(),authority:Xn}),er=d({deviceId:a().int(),switches:x($n).readonly(),fetchedAt:a()}),tr=`detection-pipeline`,nr=`audio-analysis`,rr=`privacy-mask`,ir=`pipeline-analytics`,ar=[`motion-detection`,tr,nr,ir,`scene-monitor`],or={"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:tr},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:rr},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:rr},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:nr},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:ir},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 sr(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 cr(e){return Yn.map(t=>{let n=or[t],r=sr(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 lr(e){return e.filter(e=>or[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function ur(e){let t=[],n=[];for(let r of Yn){let i=or[r];if(!i.countsAsSwitchedOff)continue;let a=sr(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var dr=`__camstack_redacted__`;function fr(e){return e.type===`password`?!0:`secret`in e&&e.secret===!0}function pr(e){let t=new Set;for(let n of gr(e))for(let e of _r(n))vr(e,t);return t}function mr(e){for(let t of gr(e))if(_r(t).length>0)return!0;return!1}function hr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function gr(e){if(!hr(e))return[];let t=e.sections;return Array.isArray(t)?t:[]}function _r(e){if(!hr(e))return[];let t=e.fields;return Array.isArray(t)?t:[]}function vr(e,t){if(!hr(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 _r(e))vr(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 _r(e))vr(n,t)}}var yr=3e4,br=6e4,xr=b([`confirmed`,`suppressed`,`exhausted-fallback`]),Sr=d({id:l(),at:a().int(),deviceId:a().int(),sourceTrackId:l(),className:l(),verdict:xr,reason:l().nullable(),attempts:a().int(),deferredForMs:a().int(),decidedOnCoastedFrame:S(),birthEvidenceAvailable:S(),decidedByBirthEvidence:S(),bestScore:a().nullable(),appliedMinConfidence:a().nullable(),firstSeen:a().int().nullable(),motionOnsetAt:a().int().nullable(),birthLatencyMs:a().int().nullable(),birthIndexInBurst:a().int().nullable()}),Cr=d({deviceId:a().int().optional(),since:a().int().optional(),verdict:xr.optional(),limit:a().int().min(1).max(5e3).optional()}),wr=5e3,Tr=d({id:l(),note:l(),deviceId:a().int(),sourceTrackId:l(),archivedAt:a().int(),trackStartedAt:a().int().nullable(),trackClass:l().nullable(),trackLabel:l().nullable()}),Er=d({deviceId:a().int().optional(),limit:a().int().min(1).max(1e3).optional()}),Dr=2e4,Or=5e3,kr=b([`same-subject`,`different-subjects`]),Ar=b([`before`,`after`]),jr=b([`mixed`,`not-a-subject`]),Mr=d({id:l(),deviceId:a().int(),leftTrackId:l(),rightTrackId:l(),leftSide:Ar.nullable(),rightSide:Ar.nullable(),relation:kr,presence:m(`continuous`).nullable(),leftStartedAt:a().int().nullable(),rightStartedAt:a().int().nullable(),createdAt:a().int(),updatedAt:a().int(),author:l().nullable()}),Nr=d({id:l(),deviceId:a().int(),sourceTrackId:l(),purity:jr,switchAtMs:a().int().nullable(),startedAt:a().int().nullable(),createdAt:a().int(),updatedAt:a().int(),author:l().nullable()}),Pr=d({deviceId:a().int(),trackId:l().min(1),otherTrackId:l().min(1),relation:kr,presence:m(`continuous`).optional(),trackSide:Ar.optional(),otherSide:Ar.optional()}),Fr=d({deviceId:a().int(),trackId:l().min(1),otherTrackId:l().min(1)}),Ir=d({cleared:S()}),Lr=d({deviceId:a().int(),trackId:l().min(1),purity:b([`pure`,`mixed`,`not-a-subject`]),switchAtMs:a().int().optional()}),Rr=d({purity:Nr.nullable()}),zr=d({deviceId:a().int(),trackId:l().optional(),since:a().int().optional(),until:a().int().optional(),limit:a().int().min(1).max(5e3).optional()}),Br=d({relations:x(Mr).readonly(),purities:x(Nr).readonly(),truncated:S()}),Vr=b([`unknown-track`,`cross-device`,`self-relation`,`contradiction`,`switch-outside-track`,`switch-needs-mixed`]),Hr={high:`High`,mid:`Mid`,low:`Low`};function Ur(e){return Hr[e]??e.charAt(0).toUpperCase()+e.slice(1)}function Wr(e){return(e.width??0)*(e.height??0)}function Gr(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:Wr(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 Kr(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function qr(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 w(e){return typeof e==`string`}function Jr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Yr(e){return w(e)&&e.trim()?{url:e}:Jr(e)&&w(e.url)&&e.url.trim()?{url:e.url,label:w(e.label)?e.label:void 0}:null}function Xr(e){let t=w(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=Yr(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=w(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:w(e.main_stream_name)?e.main_stream_name:void 0});let i=w(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:w(e.sub_stream_name)?e.sub_stream_name:void 0});let a=w(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:w(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function Zr(e){if(e.length===0)return{};let t=Gr(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 Qr={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},$r={debug:0,info:1,warn:2,error:3};function ei(e,t){return $r[e]<=$r[t]}var ti=b([`recording`,`events`]),ni=b([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),ri=b([`retention`,`quota`,`manual`,`operator`,`maintenance`,`orphaned-device`]),ii=d({id:l(),at:a(),domain:ti,op:ni,reason:ri,deviceId:a().nullable(),nodeId:l(),itemsAffected:a(),bytesReclaimed:a(),detail:l().nullable(),actor:l()}),ai=d({deviceId:a().optional(),limit:a().int().min(1).max(1e3).optional()}),T=b([`high`,`mid`,`low`]),oi=[`high`,`mid`,`low`],si=f([T,m(`auto`)]),ci=b([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),li=d({width:a().int().positive(),height:a().int().positive()}),ui=d({camStreamId:l().min(1),deviceId:a().int().nonnegative(),kind:ci,url:l().optional(),codec:l().optional(),resolution:li.optional(),fps:a().positive().optional(),label:l().optional(),deviceFeatures:x(l()).optional(),autoEligible:S().optional(),profileHint:T.optional(),metadata:v(l(),s()).optional()}),di=b([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),fi=d({deviceId:a().int().nonnegative(),profile:T,brokerId:l(),sourceCamStreamId:l().nullable(),status:di,resolution:li.optional(),codec:l().optional(),preBufferSec:a().nonnegative().optional(),errorMessage:l().optional()});function pi(e,t){return`${e}/${t}`}function mi(e,t){return`${e}/${t}`}function hi(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=T.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function gi(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>oi.indexOf(e.profile)-oi.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 _i=d({id:l(),label:l(),protocol:b([`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:T.optional()}),vi=d({type:l(),url:l(),videoCodec:l().optional(),audioCodec:l().optional(),metadata:v(l(),s()).readonly().optional()}),yi=d({type:b([`video`,`audio`]),data:y(Uint8Array),pts:a(),dts:a(),keyframe:S(),codec:l()}),bi=d({data:y(Uint8Array),width:a(),height:a(),format:b([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),timestamp:a()}),E=d({shmId:l(),slot:a().int().nonnegative(),seq:a().int().nonnegative(),width:a().int().positive(),height:a().int().positive(),format:b([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:a(),byteLength:a().int().nonnegative(),nodeId:l(),slotCount:a().int().positive()}),xi=b([`rgb`,`bgr`,`yuv420`,`gray`]),Si=d({brokerId:l(),format:xi,maxFps:a().positive().optional(),tag:l().optional()}),Ci=d({subscriptionId:l(),maxFps:a().nonnegative()}),wi=b(ge),Ti=d({data:y(Uint8Array),sampleRate:a().int().positive(),channels:a().int().positive(),timestamp:a(),format:wi.optional()}),Ei=d({brokerId:l(),tag:l().optional(),accept:x(wi).readonly().optional()}),Di=d({subscriptionId:l()}),Oi=b([`idle`,`connecting`,`streaming`,`error`,`stopped`]),ki=d({status:Oi,inputFps:a(),decodeFps:a(),encodedSubscribers:a(),decodedSubscribers:a(),uptimeMs:a(),bitrateKbps:a(),idrIntervalMs:a(),codec:l().optional(),totalBytes:a(),packetCount:a(),rtspClients:a(),pipeClients:a(),preBufferSec:a(),preBufferMs:a(),preBufferPackets:a(),decoderNodeId:l().nullable(),audio:d({codec:l(),sampleRate:a(),channels:a(),supported:S()}).nullable().optional(),audioMuted:S().optional(),audioMutedDropped:a().optional()}),Ai=d({profile:T,brokerId:l(),url:l(),mutedUrl:l(),enabled:S(),codec:l().optional(),resolution:li.optional()}),ji=d({id:l(),name:l(),category:l().optional(),description:l().optional(),icon:l().optional()}),Mi=[`person`,`vehicle`,`animal`,`package`],Ni=[`person`,`vehicle`,`animal`];function Pi(e){return Ni.some(t=>t===e)}var Fi=d({mapping:v(l(),b(Mi)),preserveOriginal:S()}),Ii={preMs:5e3,postMs:1e4},Li=a().int().min(0).max(6),Ri=/^([01]\d|2[0-3]):[0-5]\d$/,zi=b([`off`,`events`,`continuous`,`on-device-decision`]),Bi=b(Ni),Vi=e=>new Set(e).size===e.length,Hi=d({motion:S().optional(),audioThresholdDbfs:a().optional(),objectClasses:x(Bi).min(1).refine(Vi,{message:`objectClasses must not repeat a class`}).optional(),sensorDeviceIds:x(a().int().positive()).min(1).max(16).refine(Vi,{message:`sensorDeviceIds must not repeat a device`}).optional()}),Ui=b([`continuous`,`events`]),Wi=Hi,Gi=b([`on`,`muted`]),Ki=d({days:x(Li),start:l().regex(Ri),end:l().regex(Ri),mode:Ui,audio:Gi.optional(),triggers:Wi.optional(),preBufferSec:a().min(0).optional(),postBufferSec:a().min(0).optional()}),qi={postBufferSec:30};function Ji(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 Yi=qi.postBufferSec*1e3,Xi=d({maxAgeDays:a().min(0).optional(),maxSizeGb:a().min(0).optional()}),Zi=d({enabled:S(),mode:zi.optional(),profiles:x(T).optional(),segmentSeconds:a().int().positive().optional(),bands:x(Ki).default([]),deviceDecision:S().optional(),retention:Xi.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 $i=[`high`,`low`];function ea(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=>$i.includes(e));return n.length>0?n:[...e]}var ta=[`motion`,`audioThresholdDbfs`,`objectClasses`,`sensorDeviceIds`];function na(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ra(e){return na(e)&&na(e.triggers)&&e.triggers.deviceSignal===!0}function ia(e){let t=e.triggers;return na(t)?ta.some(e=>t[e]!==void 0):!1}function aa(e){let t=e.triggers;if(!na(t))return e;let{deviceSignal:n,...r}=t;return{...e,triggers:r}}function oa(e){let t={value:e,migrated:!1,strippedOnly:!1};if(!na(e)||!Array.isArray(e.bands)||!e.bands.some(ra))return t;let n=[];for(let t of e.bands){if(!ra(t)||!na(t)){n.push(t);continue}ia(t)&&n.push(aa(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 sa=b([`queued`,`running`,`done`,`failed`,`cancelled`]),ca=d({jobId:l(),state:sa,fromLocationId:l(),toLocationId:l(),deviceId:a().nullable(),entities:x(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()}),la=b([`recordings`,`recordingsLow`]),ua=d({fromLocationId:l(),toLocationId:l(),entities:x(b([`segments`])).optional(),footageClass:la.optional(),deviceId:a().int().optional(),profiles:x(l()).optional(),throttleMbps:a().min(1).max(1e3).optional(),sinceMs:a().int().optional()}),da=d({leaseId:l().min(1)}),fa=ua.extend({leaseId:l().min(1)}),pa=b([`move`,`seal`,`gallery`]),ma=d({toLocationId:l(),fromLocationId:l().optional(),throttleMbps:a().min(1).max(1e3).optional(),mode:pa.optional()}),ha=d({present:S(),rows:a().int().nonnegative().nullable()}),ga=d({media:ha,retrainFrames:ha,anyPresent:S(),total:a().int().nonnegative().nullable()}).nullable(),_a=ma.extend({leaseId:l().min(1)}),va=b([`recordings`,`recordingsLow`,`eventMedia`,`backups`,`galleryMedia`]),ya=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`}),ba=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(),xa=b([`blocking`,`nonBlocking`]),Sa=d({destinations:ya,sources:ba,throttleMbps:a().min(1).max(1e3).optional(),mode:xa.optional()}),Ca=b([`planning`,`sealing`,`pausing`,`moving`,`draining`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),wa=b([`pipeline`,`recorder`,`analytics`]),Ta=d({filesMoved:a().int().nonnegative(),filesTotal:a().int().nonnegative().nullable(),bytesMoved:a().int().nonnegative(),rowsReconciled:a().int().nonnegative().optional(),startedAt:a(),observedAt:a()}),Ea=d({storageClass:va,fromLocationId:l(),toLocationId:l(),freezeSource:S().optional(),moverJobId:l().nullable(),state:sa.nullable(),error:l().nullable(),progress:Ta.nullable()}),Da=d({jobId:l(),phase:Ca,mode:xa,destinations:ya,sources:ba,throttleMbps:a(),moves:x(Ea),pauseLeaseId:l().nullable(),pausedParticipants:x(wa),repointed:S(),cancelRequested:S(),startedAt:a(),updatedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),Oa=b([`sharesDeviceWithSource`,`deviceIdentityUnknown`,`unstampedEventMediaRows`,`blockingOnly`,`noMover`]),ka=d({code:Oa,storageClass:va,message:l()}),Aa=d({destinations:ya,sources:ba,mode:xa,moves:x(d({storageClass:va,fromLocationId:l(),toLocationId:l(),freezeSource:S().optional()})),findings:x(ka)}),ja=b([`footage`,`media`]),Ma=d({lane:ja,job:ca,migrationJobId:l().nullable(),observedAt:a()}),Na=d({storageClass:va,fromLocationId:l(),toLocationId:l(),items:a().int().nonnegative().nullable(),bytes:a().int().nonnegative().nullable()}),Pa=d({classes:x(va).min(1),throttleMbps:a().min(1).max(1e3).optional()}),Fa=d({fromLocationId:l().min(1),footageClass:la.optional()}),Ia=d({segments:a().int().nonnegative(),bytes:a().int().nonnegative()}).nullable(),La=d({locationId:l().min(1),apply:S().optional(),deviceId:a().int().positive().optional(),profiles:x(l().min(1)).optional()}),Ra=b([`location-unknown`,`source-writable`,`no-ledger`,`archive-unreadable`,`anchor-absent`,`anchor-unreadable`,`anchor-moved`]),za=b([`live-tail`,`listing-error`,`path-mismatch`,`durable-refused`]),Ba=d({"live-tail":a().int().nonnegative(),"listing-error":a().int().nonnegative(),"path-mismatch":a().int().nonnegative(),"durable-refused":a().int().nonnegative()}),Va=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()}),Ha=d({locationId:l(),applied:S(),refused:Ra.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:x(l()).readonly(),hoursSkipped:a().int().nonnegative(),skippedByReason:Ba,bounded:S(),byDevice:x(Va).readonly()}),Ua=d({rows:a().int().nonnegative()}).nullable(),Wa=d({toLocationId:l().min(1),fromLocationId:l().optional(),mode:pa.optional()}),Ga=b([`orphans`,`debug-media`,`ghost-ledger`,`done`,`failed`,`cancelled`]),Ka=d({includeDebugMedia:S().optional()}),qa=d({jobId:l(),phase:Ga,includeDebugMedia:S(),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:S(),startedAt:a(),updatedAt:a(),finishedAt:a().nullable(),error:l().nullable()}),Ja=d({jobId:l().optional()}),Ya=[`face`,`plate`],Xa=[`face`,`plate`,`clip`,`custom`],Za=[`active`,`readonly`,`drain`,`disabled`],Qa=b(Za),$a=b([`normal`,`never`,`drain`]),eo=`readOnly`;function to(e){return e===`active`}function no(e){return e!==`disabled`}function ro(e){switch(e){case`active`:return`normal`;case`drain`:return`drain`;case`readonly`:case`disabled`:return`never`}}function io(e){return e.mode===void 0&&(e.config.readOnly===!0||e.enabled===!1)?`readonly`:null}function ao(e){return(oo(e.mode)?e.mode:void 0)??io(e)??`active`}function oo(e){return Za.some(t=>t===e)}function so(e){return to(ao(e))}function co(e){return no(ao(e))}function lo(e){return ro(ao(e))}function uo(e){if(!(`readOnly`in e))return e;let t={...e};return delete t[eo],t}function fo(e,t){return{...e,mode:t,enabled:to(t),config:uo(e.config)}}var po=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:v(l(),s()),nodeId:l().optional(),isSystem:S().default(!1),enabled:S().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()}),mo=d({isDefault:S().optional()});function ho(e){return so({...e,config:e.config??{}})}var go=1024**3;function _o(e){return Math.floor(e*go)}var vo=d({locationId:l(),startedAtMs:a(),startBytes:a(),bytesRemaining:a(),drained:S(),estimatedEmptyAtMs:a().nullable()}),O=f([po,l().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),yo=b([`local-path`,`cap-mediated`]),bo=`local-path`,xo=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:b([`single`,`multi`]),access:yo.optional(),defaultsTo:l().optional(),defaultRoot:b([`data`,`media`,`backup`]).optional()}),So=d({inputFps:a(),outputFps:a(),avgDecodeTimeMs:a(),droppedFrames:a(),lagMs:a().optional(),effectiveFps:a().optional(),adaptiveFps:a().optional()}),Co=d({codec:l(),maxFps:a().default(0),outputFormat:b([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]).default(`jpeg`),scale:a().default(1),width:a().optional(),height:a().optional(),deviceId:a().int().nonnegative().optional(),tag:l().optional(),frameSink:b([`callback`,`shm`]).default(`callback`),debug:S().optional()}),wo={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},To={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},Eo=[{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:wo},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:wo},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:wo},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:wo},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:wo},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:wo},{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:To},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:To},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:To},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:To},{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 Do(e){return Eo.find(t=>t.id===e)}var Oo=b([`info`,`warn`,`error`]),ko=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:Oo,perDevice:S()}),Ao=d({channel:l().min(1),armedUntilMs:a(),deviceIds:x(a().int()).readonly().nullable()}),jo=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}},Mo=class{gates=new Map;declare(e){let t=ko.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 jo(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}},No=null;function Po(){return No??=new Mo,No}function Fo(e){return Po().declare(e)}function Io(){No=null}var Lo=5e3;function Ro(e,t={}){let n=Po(),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 zo=1024,Bo=`other`;function Vo(e,t,n){return n===void 0?`${e}${t}`:`${e}${t}${n}`}var Ho=class{maxKeys;maxReasons;counters=new Map;refused=0;constructor(e=zo,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=Vo(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:Bo;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 Uo(e){return e.attempts<=0?null:(e.attempts-e.succeeded)/e.attempts}var Wo=`__unattributed__`,Go=`__root__`;function Ko(e){return e.addonId===null?e.classification===`root`?{key:Go,kind:`root`}:{key:Wo,kind:`unattributed`}:{key:e.addonId,kind:`addon`}}function qo(e){return Math.round(e*10)/10}function Jo(e,t){let n=new Map;for(let t of e){let{key:e,kind:r}=Ko(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?qo(n.main):null,i=n.splitKnown?qo(n.gc):null,a=qo(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 Yo(e,t){return e===null||t===null?null:e<t?e:t}function Xo(e,t){return e===null||t===null?null:e>t?e:t}function Zo(e,t,n){return{atMs:n,samples:e.samples+t.samples,cpuMainPercent:Xo(e.cpuMainPercent,t.cpuMainPercent),cpuMainPercentMin:Yo(e.cpuMainPercentMin,t.cpuMainPercentMin),cpuGcPercent:Xo(e.cpuGcPercent,t.cpuGcPercent),cpuGcPercentMin:Yo(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 Qo(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 $o(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}:Zo(a,i,e))}return[...r.values()].toSorted((e,t)=>e.atMs-t.atMs)}var es=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${ns(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function ts(e,t){return`${e}|${ns(t)}`}function ns(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function rs(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function is(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 as=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??os(),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(ts(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=ts(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&&rs(r.state)<=rs(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} (${ns(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&&is(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 es(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${ns(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(Xe(`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=ts(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} (${ns(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&&is(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} (${ns(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&is(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 os(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function ss(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function cs(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=ls(e,s);if(t)return a(t)}}return a(o[0])}function ls(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)=>_t(e.pixels,t.pixels,n))[0]?.entry}var us={upperHs:[0,32],upperV:[32,40],upperGrad:[40,48],lowerHs:[48,80],lowerV:[80,88],lowerGrad:[88,96]},ds=[`motion`,`objects`,`discarded`,`stationary`],fs=[`motion`,`objects`,`stationary`],ps={borderWidth:2,dashed:!0,dashPattern:[6,4],opacity:1,borderRadius:2};function ms(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 hs=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],gs={yolo26:`YOLO26`,"yolo26-seg":`YOLO26-seg`,yolov9:`YOLOv9`};function _s(e){return gs[e]??e.toUpperCase()}var vs={"yolo26-seg":`detection + masks, slightly heavier`},ys=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function bs(e,t){let n=_s(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(ys,``).trim();return r.length>0?r:t}function xs(e,t){let n=[];return t===`test`&&n.push(`Test`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function Ss(e){return hs.filter(t=>e.formats[t]!==void 0)}function Cs(e){let t=hs.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var ws=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],Ts=[`fp32`,`int8`];function Es(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:xs(t,n),formats:Ss(e),sizeMB:Cs(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?Ts.indexOf(e.precision)-Ts.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?bs(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=ws.indexOf(e.tier),r=ws.indexOf(t.tier);return n!==-1&&r!==-1?n-r:n===-1?r===-1?e.tier.localeCompare(t.tier):1:-1});let i=vs[e];n.push({family:e,label:_s(e),...i===void 0?{}:{hint:i},tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function Ds(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 Os(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 ks=/^object-clip(-[a-z0-9][a-z0-9-]*)?$/,As=d({textModelId:l().min(1),embeddingDim:a().int().positive(),vectorIndex:l().regex(ks),tokenizerFile:l().min(1),contextLength:a().int().positive(),padId:a().int().nonnegative(),searchMinScore:a().min(0).max(1)}),js=[`loose`,`balanced`,`strict`],Ms=b(js),Ns={loose:1,balanced:1.25,strict:1.5};function Ps(e,t){if(t.minScore!==void 0)return t.minScore;let n=Ns[t.strictness??`loose`];return Math.min(1,Math.round(e.searchMinScore*n*1e3)/1e3)}var Fs=[`animal-classifier`,`vehicle-classifier`,`package-detection`],Is=[`plate-detection`,`face-detection`],Ls=[`segmentation`],Rs=[...Fs,...Is,...Ls];function zs(e){return Rs.some(t=>t===e)}function Bs(e){return Fs.some(t=>t===e)}var Vs={"animal-classifier":[`bird`,`cat`,`cow`,`deer`,`dog`,`horse`,`sheep`,`squirrel`],"vehicle-classifier":[`Ambulance`,`Bicycle`,`Bus`,`Car`,`Motorcycle`,`Taxi`,`Truck`,`Van`],"package-detection":[`package`]},Hs={"animal-classifier":`animal`,"vehicle-classifier":`vehicle`,"package-detection":`package`},Us={"animal-classifier":{},"vehicle-classifier":{school_bus:`Bus`,garbage_truck:`Truck`},"package-detection":{}},Ws={"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}},Gs={"animal-classifier":!0,"vehicle-classifier":!0,"package-detection":!0,"plate-detection":!1,"face-detection":!1,segmentation:!0},Ks=`useRootModel`,qs=`labelLink`,Js=`detector-link:`;function Ys(e){return`${Js}${e}`}function Xs(e){if(e===void 0||!e.startsWith(`detector-link:`))return;let t=e.slice(14);return Bs(t)?t:void 0}function Zs(e,t){let n=Us[e][t];if(n!==void 0)return n;let r=t.toLowerCase();return Vs[e].find(e=>e.toLowerCase()===r)}function Qs(e,t){let n=[];if(t!==void 0)for(let r of Fs){let i={};for(let n of e){if(t.mapping[n]!==Hs[r])continue;let e=Zs(r,n);e!==void 0&&(i[n]=e)}let a=new Set(Object.values(i));if(a.size===0)continue;let o=Vs[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 Is){let t=Ws[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 $s=[`yolo-seg`];function ec(e){return e===void 0||!$s.includes(e)?[]:Ls.map(e=>({kind:`mask`,stepId:e}))}function tc(e,t){let n=e?.suppliesSteps??Qs(e!==void 0&&e.labels.length>0?e.labels.map(e=>e.id):t.labels,e?.classMap??t.classMap),r=ec(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 nc(e,t){return e?.find(e=>e.stepId===t)}function rc(e,t){let n=t?.[Ks];if(typeof n==`boolean`)return n;let r=t?.[qs];return r===`skip-when-filled`?!0:r===`run`?!1:Gs[e]}function ic(e){if(e.kind!==`crop`)return;let t=Ws[e.stepId].minRootInputPx;if(t!==void 0)return e.rootInputPx!==void 0&&e.rootInputPx>=t?void 0:`root-input-too-small`}function ac(e,t,n){let r=nc(n,e),i=rc(e,t),a=r===void 0?`root-does-not-declare`:ic(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 oc(e,t){let n=t?.enabledClasses;return!Array.isArray(n)||n.length===0?!0:n.some(t=>t===e)}function sc(e){return Ws[e].servedChildSteps}var cc=.9;function lc(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 uc={"animal-classifier":`animals`,"vehicle-classifier":`vehicles`,"package-detection":`packages`,"plate-detection":`plates`,"face-detection":`faces`,segmentation:`masks`};function dc(e){let t=uc[e.stepId];if(e.kind!==`label`)return t;let n=Vs[e.stepId].length;return n<=1?t:`${t} ${String(n-e.uncovered.length)}/${String(n)}`}function fc(e){return(e??[]).map(dc).join(` · `)}var pc=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],mc=d({url:l(),sizeMB:a(),isDirectory:S().optional(),files:x(l()).readonly().optional(),runtimes:x(b([`python`])).readonly().optional(),revision:l().min(1).optional()}),hc=d({url:l(),filename:l(),sizeMB:a()}),gc=d({onnx:mc.optional(),coreml:mc.optional(),openvino:mc.optional(),tflite:mc.optional(),pt:mc.optional(),gguf:mc.optional()}),_c=d({family:l(),tier:l(),precision:b([`fp32`,`int8`]).optional(),optimization:b([`standard`,`test`]).optional(),resolution:a().int().positive().optional()}),vc=[`camstack`,`frigate`,`scrypted`,`custom`],yc=b(vc);function bc(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 xc=[`camstack-hf`,`third-party`,`built-in`],Sc=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:b(xc).optional(),nonCommercial:S().optional()})),Cc=p(`kind`,[d({kind:m(`label`),stepId:b(Fs),labelToEffect:v(l(),l()),uncovered:x(l()).readonly()}),d({kind:m(`crop`),stepId:b(Is),rootLabels:x(l()).readonly(),parentMacro:b([`vehicle`,`person`]),childClass:b([`plate`,`face`]),rootInputPx:a().int().positive().optional()}),d({kind:m(`mask`),stepId:b(Ls)})]),wc=d({id:l(),name:l(),description:l(),formats:gc,inputSize:d({width:a(),height:a()}),inputChannels:a().int().positive().optional(),labels:x(ji).readonly(),inputLayout:b([`nchw`,`nhwc`]).optional(),inputNormalization:b([`zero-one`,`imagenet`,`none`,`scrfd`]).optional(),outputProbabilities:S().optional(),preprocessMode:b([`letterbox`,`resize`]).optional(),postprocessor:g().optional(),defaultConfidence:a().min(0).max(1).optional(),defaultClassFloors:v(l(),a().min(0).max(1)).optional(),gpuInferencePrecision:b([`f32`,`f16`]).optional(),suppliedLabelFloors:v(l(),a().min(0).max(1)).optional(),faceAlignment:S().optional(),extraFiles:x(hc).readonly().optional(),legacy:S().optional(),metrics:d({map50:a().optional(),p95LatencyMs:v(l(),a()).optional()}).optional(),license:Sc.optional(),group:_c.optional(),provider:yc.optional(),classMap:Fi.optional(),suppliesSteps:x(Cc).readonly().optional(),clip:As.optional()}),Tc=p(`format`,[d({format:m(`openvino`),precisions:x(b([`fp16`,`int8`])).min(1).readonly()}),d({format:m(`coreml`)})]),Ec=d({id:l().regex(/^[a-zA-Z0-9._-]+$/),name:l(),labels:x(ji).readonly(),inputSize:d({width:a(),height:a()}),inputLayout:b([`nchw`,`nhwc`]).optional(),inputNormalization:b([`zero-one`,`imagenet`,`none`,`scrfd`]).optional(),preprocessMode:b([`letterbox`,`resize`]).optional(),outputFormat:b([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:S().optional(),classMap:Fi.optional()}),Dc=d({format:b(pc),precision:b([`fp16`,`int8`]).optional(),sizeMB:a(),validated:S(),files:x(l()).readonly()}),Oc=d({entry:wc,artifacts:x(Dc).readonly()});function kc(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function Ac(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function jc(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function Mc(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 Nc(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=kc(e.method);return jc(e.scopes,e.addonId,n)?{allowed:!0}:{allowed:!1,reason:`integration token holds no addon:${e.addonId}[${n}] grant`}}var Pc={contact:`entryOpen`,binary:`on`,switch:`on`,motion:`detected`,flood:`flooded`,gas:`detected`,smoke:`detected`,"carbon-monoxide":`detected`,vibration:`detected`,tamper:`tampered`},Fc={contact:`lastChangedAt`,binary:`lastChangedAt`,switch:`lastChangedAt`,motion:`lastDetectedAt`,flood:`lastChangedAt`,gas:`lastChangedAt`,smoke:`lastChangedAt`,"carbon-monoxide":`lastChangedAt`,vibration:`lastChangedAt`,tamper:`lastChangedAt`},Ic=Object.keys(Pc),Lc=[`sensor`,`switch`,`control`];function Rc(e){return Object.prototype.hasOwnProperty.call(Pc,e)}function zc(e,t){let n=Pc[e];if(n===void 0)return null;let r=t[n];return typeof r==`boolean`?r:null}function Bc(e,t){let n=Fc[e];if(n===void 0)return null;let r=t[n];return typeof r!=`number`||!Number.isFinite(r)||r<=0?null:r}var Vc=3e4;function Hc(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 Uc(e){let t=zc(e.capName,e.slice);return t===null?{edge:`none`,value:null,reason:Rc(e.capName)?`non-boolean-value`:`unknown-cap`}:Hc({level:t,changedAt:Bc(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 k=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},A=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}};function Wc(e){return e===`rose`||e===`count`}function j(e,t,n){if(typeof e!=`number`||!Number.isFinite(e))throw new A(`${t}: argument ${n+1} must be a finite number`);return e}function Gc(e,t,n){if(typeof e!=`string`)throw new A(`${t}: argument ${n+1} must be a string`);return e}function M(e,t){if(!Number.isFinite(e))throw new A(`${t}: produced a non-finite result`);return e}function Kc(e,t){return e.map((e,n)=>j(e,t,n))}function qc(e,t,n){if(typeof e!=`boolean`)throw new A(`${t}: argument ${n+1} must be a boolean`);return e}var Jc=/^[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/;function Yc(e){if(typeof e==`number`)return Number.isFinite(e)?e:null;if(typeof e!=`string`)return null;let t=e.trim();if(!Jc.test(t))return null;let n=Number(t);return Number.isFinite(n)?n:null}var Xc=2e3;function Zc(e,t,n,r,i,a){let o=qc(e,`rose`,0),s=typeof t==`number`&&Number.isFinite(t)?t:null,c=n===void 0?Xc:j(n,`rose`,2);if(c<0)throw new A(`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=Hc({level:o,changedAt:s,priorLevel:r.priorLevel,startedAtMs:a.startedAtMs,nowMs:a.nowMs,firstSightingFreshnessMs:Vc});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 $c(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 el=1/0,tl={min:{minArgs:1,maxArgs:el,apply:e=>M(Math.min(...Kc(e,`min`)),`min`)},max:{minArgs:1,maxArgs:el,apply:e=>M(Math.max(...Kc(e,`max`)),`max`)},abs:{minArgs:1,maxArgs:1,apply:e=>M(Math.abs(j(e[0],`abs`,0)),`abs`)},floor:{minArgs:1,maxArgs:1,apply:e=>M(Math.floor(j(e[0],`floor`,0)),`floor`)},ceil:{minArgs:1,maxArgs:1,apply:e=>M(Math.ceil(j(e[0],`ceil`,0)),`ceil`)},sqrt:{minArgs:1,maxArgs:1,apply:e=>M(Math.sqrt(j(e[0],`sqrt`,0)),`sqrt`)},round:{minArgs:1,maxArgs:2,apply:e=>{let t=j(e[0],`round`,0),n=e.length>1?Math.trunc(j(e[1],`round`,1)):0;if(n<0||n>100)throw new A(`round: digits must be between 0 and 100`);let r=10**n;return M(Math.round(t*r)/r,`round`)}},pow:{minArgs:2,maxArgs:2,apply:e=>M(j(e[0],`pow`,0)**j(e[1],`pow`,1),`pow`)},clamp:{minArgs:3,maxArgs:3,apply:e=>{let t=j(e[0],`clamp`,0),n=j(e[1],`clamp`,1),r=j(e[2],`clamp`,2);if(n>r)throw new A(`clamp: lower bound is greater than upper bound`);return M(Math.min(r,Math.max(n,t)),`clamp`)}},avg:{minArgs:1,maxArgs:el,apply:e=>{let t=Kc(e,`avg`);return M(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:el,apply:e=>M(Kc(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:el,apply:e=>{for(let t of e)if(t!==null)return t;return null}},age:{minArgs:2,maxArgs:2,apply:e=>M(j(e[0],`age`,0)-j(e[1],`age`,1),`age`)},convert:{minArgs:3,maxArgs:3,apply:(e,t)=>{let n=j(e[0],`convert`,0),r=Gc(e[1],`convert`,1).trim(),i=Gc(e[2],`convert`,2).trim();if(t.convert){let e=t.convert(n,r,i);if(e===null)throw new A(`convert: cannot convert '${r}' to '${i}'`);return M(e,`convert`)}if(r===i)return n;throw new A(`convert: unit conversion table not installed`)}},any:{minArgs:1,maxArgs:el,apply:e=>e.map((e,t)=>qc(e,`any`,t)).some(e=>e)},all:{minArgs:1,maxArgs:el,apply:e=>e.map((e,t)=>qc(e,`all`,t)).every(e=>e)},within:{minArgs:2,maxArgs:2,apply:(e,t)=>{let n=j(e[1],`within`,1);if(n<0)throw new A(`within: the window must not be negative`);let r=e[0];if(r===null)return!1;let i=j(r,`within`,0),a=t.now;if(a===void 0||!Number.isFinite(a))throw new A(`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=>Yc(e[0])},latest:{minArgs:1,maxArgs:el,apply:e=>{let t=e.flatMap((e,t)=>e===null?[]:[j(e,`latest`,t)]);return t.length===0?null:M(Math.max(...t),`latest`)}},rose:{minArgs:2,maxArgs:3,apply:()=>{throw new A(`rose: stateful evaluation context is required`)}},count:{minArgs:1,maxArgs:1,apply:()=>{throw new A(`count: stateful evaluation context is required`)}}},nl=Object.freeze(Object.assign(Object.create(null),tl)),rl=new Set(Object.keys(tl)),il=2048,al=4096,ol=/^[A-Za-z_][A-Za-z0-9_]*$/,sl=new Set([`now`,`true`,`false`,`null`]),cl=new Set([`true`,`false`,`null`]);function ll(e){return e>=`0`&&e<=`9`}function ul(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function dl(e){return ul(e)||ll(e)}function fl(e){return e===` `||e===` `||e===`
|
|
3
3
|
`||e===`\r`||e===`\f`||e===`\v`}function pl(e){if(e.length>2048)throw new k(`expression too long (${e.length} > ${il} chars)`,0);let t=[],n=0,r=e.length;for(;n<r;){let i=e[n];if(fl(i)){n+=1;continue}if(ll(i)){let i=n;for(;n<r&&ll(e[n]);)n+=1;if(n<r&&e[n]===`.`){if(n+1>=r||!ll(e[n+1]))throw new k(`malformed number: decimal point needs a digit`,n);for(n+=1;n<r&&ll(e[n]);)n+=1}let a=e.slice(i,n),o=Number(a);if(!Number.isFinite(o))throw new k(`malformed number: '${a}'`,i);t.push({type:`number`,value:o,pos:i});continue}if(i===`'`||i===`"`){let a=i,o=n;n+=1;let s=``,c=!1;for(;n<r;){let t=e[n];if(t===`\\`){let t=n+1<r?e[n+1]:``;if(t===`\\`||t===`'`||t===`"`){s+=t,n+=2;continue}throw new k(`invalid string escape: '\\${t}'`,n)}if(t===a){c=!0,n+=1;break}s+=t,n+=1}if(!c)throw new k(`unterminated string literal`,o);t.push({type:`string`,value:s,pos:o});continue}if(ul(i)){let i=n;for(;n<r&&dl(e[n]);)n+=1;let a=e.slice(i,n);cl.has(a)?t.push({type:`keyword`,keyword:ml(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(hl(i)){t.push({type:`punct`,punct:i,pos:n}),n+=1;continue}throw new k(`unexpected character '${i}'`,n)}return t.push({type:`eof`,pos:r}),t}function ml(e){return e===`true`?`true`:e===`false`?`false`:`null`}function hl(e){return e===`(`||e===`)`||e===`,`||e===`?`||e===`:`||e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`!`||e===`<`||e===`>`}var gl={"||":1,"&&":2,"==":3,"!=":3,"<":4,"<=":4,">":4,">=":4,"+":5,"-":5,"*":6,"/":6,"%":6};function _l(e){return e===`&&`||e===`||`}function vl(e){return e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`==`||e===`!=`||e===`<`||e===`<=`||e===`>`||e===`>=`}var yl=class{tokens;pos=0;nodeCount=0;identifiers=new Set;callees=new Set;constructor(e){this.tokens=e}parse(){let e=this.parseTernary(),t=this.peek();if(t.type!==`eof`)throw new k(`unexpected trailing input`,t.pos);return{ast:e,identifiers:this.identifiers,callees:this.callees,nodeCount:this.nodeCount}}peek(){return this.tokens[this.pos]}next(){return this.tokens[this.pos++]}expectPunct(e){let t=this.peek();if(t.type!==`punct`||t.punct!==e)throw new k(`expected '${e}'`,t.pos);this.pos+=1}matchPunct(e){let t=this.peek();return t.type===`punct`&&t.punct===e?(this.pos+=1,!0):!1}countNode(){if(this.nodeCount+=1,this.nodeCount>256)throw new k(`expression too complex`,this.peek().pos)}parseTernary(){let e=this.parseBinary(1);if(this.matchPunct(`?`)){let t=this.parseTernary();this.expectPunct(`:`);let n=this.parseTernary();return this.countNode(),{kind:`conditional`,test:e,consequent:t,alternate:n}}return e}parseBinary(e){let t=this.parseUnary();for(;;){let n=this.peek();if(n.type!==`punct`)break;let r=gl[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(),_l(i))t={kind:`logical`,op:i,left:t,right:a};else if(vl(i))t={kind:`binary`,op:i,left:t,right:a};else throw new k(`unexpected operator '${i}'`,n.pos)}return t}parseUnary(){let e=this.peek();if(e.type===`punct`&&(e.punct===`!`||e.punct===`-`)){let t=e.punct;this.pos+=1;let n=this.parseUnary();return this.countNode(),{kind:`unary`,op:t,operand:n}}return this.parsePrimary()}parsePrimary(){let e=this.next();switch(e.type){case`number`:return this.countNode(),{kind:`literal`,value:e.value};case`string`:return this.countNode(),{kind:`literal`,value:e.value};case`keyword`:return this.countNode(),{kind:`literal`,value:e.keyword===`null`?null:e.keyword===`true`};case`identifier`:{let t=this.peek();return t.type===`punct`&&t.punct===`(`?this.parseCall(e.name,e.pos):(this.identifiers.add(e.name),this.countNode(),{kind:`identifier`,name:e.name})}case`punct`:if(e.punct===`(`){let e=this.parseTernary();return this.expectPunct(`)`),e}throw new k(`unexpected token '${e.punct}'`,e.pos);case`eof`:throw new k(`unexpected end of expression`,e.pos)}}parseCall(e,t){if(!rl.has(e))throw new k(`unknown function '${e}'`,t);this.expectPunct(`(`);let n=[];if(!this.matchPunct(`)`))for(;;){if(n.push(this.parseTernary()),n.length>16)throw new k(`too many arguments to '${e}'`,t);if(!this.matchPunct(`,`)){this.expectPunct(`)`);break}}return this.callees.add(e),this.countNode(),{kind:`call`,callee:e,args:n}}};function bl(e){return new yl(pl(e)).parse()}var xl=new Map;function Sl(e){let t=xl.get(e);if(t!==void 0)return xl.delete(e),xl.set(e,t),t;let n;try{n={ok:!0,parsed:bl(e)}}catch(e){n={ok:!1,error:e instanceof k?e.message:String(e)}}if(xl.set(e,n),xl.size>256){let e=xl.keys().next().value;e!==void 0&&xl.delete(e)}return n}function Cl(e){let t=Sl(e);if(t.ok)return t.parsed;throw new k(t.error)}function wl(e){return Sl(e)}var Tl=Object.freeze({});function El(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 Dl(e){return typeof e==`number`&&Number.isFinite(e)}function Ol(e){return!!e}function kl(e,t){if(!Number.isFinite(e))throw new A(`${t} produced a non-finite result`);return e}function Al(e){if(e.steps+=1,e.steps>e.maxSteps)throw new A(`expression evaluation step budget exceeded`)}function N(e,t){return`${e}/${t}`}function P(e,t,n){switch(Al(t),e.kind){case`literal`:return e.value;case`identifier`:if(!(e.name in t.scope))throw new A(`unknown identifier: ${e.name}`);return t.scope[e.name];case`unary`:return jl(e.op,P(e.operand,t,N(n,`operand`)));case`binary`:return Ml(e.op,P(e.left,t,N(n,`left`)),P(e.right,t,N(n,`right`)));case`logical`:{let r=P(e.left,t,N(n,`left`));return e.op===`&&`?Ol(r)?P(e.right,t,N(n,`right`)):r:Ol(r)?r:P(e.right,t,N(n,`right`))}case`conditional`:return Ol(P(e.test,t,N(n,`test`)))?P(e.consequent,t,N(n,`consequent`)):P(e.alternate,t,N(n,`alternate`));case`call`:{let r=e.args.map((e,r)=>P(e,t,N(n,`arg:${r}`)));return Nl(e.callee,r,n,t)}}}function jl(e,t){if(e===`!`)return!Ol(t);if(!Dl(t))throw new A(`unary "-" requires a finite number`);return kl(-t,`unary "-"`)}function Ml(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(Dl(t)&&Dl(n))return kl(t+n,`"+"`);throw new A(`"+" requires two numbers or two strings`);case`-`:case`*`:case`/`:case`%`:if(!Dl(t)||!Dl(n))throw new A(`"${e}" requires two finite numbers`);return kl(e===`-`?t-n:e===`*`?t*n:e===`/`?t/n:t%n,`"${e}"`);case`<`:case`<=`:case`>`:case`>=`:if(Dl(t)&&Dl(n)||typeof t==`string`&&typeof n==`string`)return e===`<`?t<n:e===`<=`?t<=n:e===`>`?t>n:t>=n;throw new A(`"${e}" requires two numbers or two strings`)}}function Nl(e,t,n,r){if(!Object.prototype.hasOwnProperty.call(nl,e))throw new A(`unknown function: ${e}`);let i=nl[e];if(t.length<i.minArgs||t.length>i.maxArgs)throw new A(`${e}: wrong number of arguments (${t.length})`);if(Wc(e)){if(r.invokeStateful===void 0)throw new A(`${e}: stateful evaluation context is required`);return r.invokeStateful({name:e,path:n,args:t})}return i.apply(t,r.hooks)}function Pl(e,t,n){return P(e,{scope:t,hooks:n?.hooks??Tl,maxSteps:n?.maxSteps??4096,...n?.invokeStateful===void 0?{}:{invokeStateful:n.invokeStateful},steps:0},`root`)}function Fl(){return{calls:new Map,acceptedEdgeAt:null,disarmRoseNext:!1}}function Il(e){return{calls:new Map([...e.calls].map(([e,t])=>[e,{...t}])),acceptedEdgeAt:e.acceptedEdgeAt,disarmRoseNext:e.disarmRoseNext}}function Ll(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 Zc(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),$c(e.args[0],i,n.currentOutput)}}}function Rl(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 zl(e){let t=Object.keys(e.bindings);if(t.length>32)return`too many bindings (${t.length} > 32)`;for(let e of t){if(!ol.test(e))return`invalid binding name '${e}'`;if(sl.has(e))return`binding name '${e}' is reserved`;if(rl.has(e))return`binding name '${e}' shadows a builtin function`}let n=wl(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 Bl(e,t,n,r){let i=wl(e);if(!i.ok)return{ok:!1,error:i.error};let a=El({...t,now:n}),o={...r?.hooks,now:n};try{return{ok:!0,value:Pl(i.parsed.ast,a,{...r,hooks:o})}}catch(e){return{ok:!1,error:e instanceof A?e.message:String(e)}}}var Vl=d({kind:m(`field`).optional(),sourceKey:l(),cap:l(),fieldPath:l()}),Hl=d({kind:m(`literal`),value:f([l(),a(),S(),ie()])}),Ul=d({kind:m(`global`),sourceStableId:l(),cap:l(),fieldPath:l()}),Wl=f([Vl,Hl,Ul]),Gl=d({expr:l().min(1).max(il),bindings:v(l().regex(ol),Wl)}).superRefine((e,t)=>{let n=zl(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),Kl=b([`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`contains`,`in`]),ql=d({kind:m(`condition`),deviceId:a().int().nonnegative(),cap:l().min(1),fieldPath:l().min(1),operator:Kl,value:f([l(),a(),S(),x(f([l(),a()]))])}),Jl=d({kind:m(`expression`),expr:l().min(1).max(il),bindings:v(l().regex(ol),Wl)}).superRefine((e,t)=>{let n=zl(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),Yl=me(()=>p(`kind`,[d({kind:m(`all`),children:x(Yl)}),d({kind:m(`any`),children:x(Yl)}),d({kind:m(`not`),child:Yl}),ql,Jl])),Xl=p(`kind`,[d({kind:m(`device-state`),deviceId:a().int().nonnegative(),cap:l().min(1),fieldPath:l().min(1),becomes:f([l(),a(),S()]).optional(),edge:S().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`)})]),Zl=p(`kind`,[d({kind:m(`wait`),seconds:a().min(0).max(300)}),d({kind:m(`cap`),deviceId:f([a().int(),x(a().int()).min(1),d({$var:l().min(1)})]),cap:l().min(1),method:l().min(1),args:v(l(),s()).optional()}),d({kind:m(`code`),code:l().min(1).max(2e4)})]),Ql=d({triggers:x(Xl),conditions:Yl.optional(),actions:x(Zl)});function $l(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return 1+$l(e.child);let t=e.children;if(t.length===0)return 1;let n=0;for(let e of t){let t=$l(e);t>n&&(n=t)}return 1+n}function eu(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return eu(e.child);let t=0;for(let n of e.children)t+=eu(n);return t}function tu(e){return e.kind===`condition`||e.kind===`expression`?!1:e.kind===`not`?tu(e.child):e.children.length===0?!0:e.children.some(tu)}function nu(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(tu(t))return`a condition group is empty — group existing rows instead of leaving a container to fill`;let e=$l(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=eu(t);if(n>32)return`conditions use ${n} leaves — the limit is 32`}return null}var ru=15e3;function F(e){return JSON.stringify(e)}function iu(e,t){switch(e.kind){case`all`:return`allOf([\n${e.children.map(e=>`${t} () => ${iu(e,`${t} `)}`).join(`,
|
|
4
4
|
`)}\n${t}])`;case`any`:return`anyOf([\n${e.children.map(e=>`${t} () => ${iu(e,`${t} `)}`).join(`,
|
|
5
5
|
`)}\n${t}])`;case`not`:return`notOf(() => ${iu(e.child,t)})`;case`condition`:return`leaf(${F(e.deviceId)}, ${F(e.cap)}, ${F(e.fieldPath)}, ${F(e.operator)}, ${F(e.value)})`;case`expression`:return`exprLeaf(${F(e.expr)}, ${F(e.bindings)})`}}function au(e,t){switch(e.kind){case`schedule`:return` // trigger ${t}: schedule — armed to the next minute boundary and
|
|
@@ -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}from"./player-overlays-
|
|
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}from"./player-overlays-BzWBMmxi.js";import{vd as u,yd as d}from"./src-ZWAjTIoO.js";t();var f={fromMs:null,toMs:null},p=36e5,m=24*p;function h(e,t){switch(e){case`24h`:return{fromMs:t-m,toMs:null};case`7d`:return{fromMs:t-7*m,toMs:null};case`30d`:return{fromMs:t-30*m,toMs:null};case`all`:return f}}function g(e){return e.fromMs!==null||e.toMs!==null}function _(e,t){return g(t)?e.filter(e=>!(t.fromMs!==null&&e.timestamp<t.fromMs||t.toMs!==null&&e.timestamp>t.toMs)):[...e]}function v(e,t){return t.size===0?[...e]:e.filter(e=>t.has(e.deviceId))}function y(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 b(e){if(!e)return null;let t=Date.parse(`${e}T00:00:00`);return Number.isNaN(t)?null:t}function x(e){if(!e)return null;let t=Date.parse(`${e}T23:59:59.999`);return Number.isNaN(t)?null:t}function S(e,t){if(!Number.isFinite(e)||e<=0)return`—`;let n=t-e;return n<6e4?`just now`:n<p?`${String(Math.floor(n/6e4))}m ago`:n<m?`${String(Math.floor(n/p))}h ago`:n<7*m?`${String(Math.floor(n/m))}d ago`:new Date(e).toLocaleDateString(void 0,{month:`short`,day:`numeric`})}function C(e){return!Number.isFinite(e)||e<=0?`—`:new Date(e).toLocaleTimeString(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function w(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 T(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 E=2;function D(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-E),i=Math.min(t-1,e+E);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 O({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,d=Math.min(e*r,t),f=D(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,`–`,d,` 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(u,{className:`h-3.5 w-3.5`})}),f.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 k({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 A=[{label:`24h`,value:`24h`},{label:`7d`,value:`7d`},{label:`30d`,value:`30d`},{label:`All`,value:`all`}];function j({onChange:e}){let[t,r]=i(`all`),[o,s]=i(``),[c,l]=i(``);function u(t){r(t),s(``),l(``),e(h(t,Date.now()))}function d(t,n){r(`custom`),s(t),l(n),e({fromMs:b(t),toMs:x(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:A.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 M=2.6;function N({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(M)})`:`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 P(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{O as a,y as c,C as d,S as f,k as i,v as l,N as n,T as o,w as p,j as r,f as s,P as t,_ as u};
|
package/dist/assets/{device-integration-icon-VckVIRV1.js → device-integration-icon-Bo1DZXF5.js}
RENAMED
|
@@ -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{A as t}from"./index-
|
|
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{A as t}from"./index-Bi_XNWNi.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-ZWAjTIoO.js";
|