@camstack/addon-admin-ui 1.2.86 → 1.2.87
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/{AddLocationWizard-CVvsaNYx.js → AddLocationWizard-ClWHdX1D.js} +1 -1
- package/dist/assets/{AddonCollectionPage-JA8tzL7q.js → AddonCollectionPage-CCm-n_-k.js} +1 -1
- package/dist/assets/{Addons-BOYMP0uf.js → Addons-CNQu3idA.js} +1 -1
- package/dist/assets/{AdminTabs-B-UL_iuP.js → AdminTabs-Ya-WafVI.js} +1 -1
- package/dist/assets/{AiProfiles-DI31JvyZ.js → AiProfiles-G8ohU36w.js} +1 -1
- package/dist/assets/{BrokerForm-CFTyH54D.js → BrokerForm-Cja9Cp03.js} +1 -1
- package/dist/assets/{Build-BP0Mx9FT.js → Build-BUwpX-xq.js} +1 -1
- package/dist/assets/{Capabilities-BvxWbN6u.js → Capabilities-CzxtAA9j.js} +1 -1
- package/dist/assets/{CapabilityBadges-DjOvNnpp.js → CapabilityBadges-BVAXgYuj.js} +1 -1
- package/dist/assets/{Cluster-CsEHMgVp.js → Cluster-C3WY-Tom.js} +1 -1
- package/dist/assets/{Data-Bt2o6J7H.js → Data-DP4AzN8W.js} +1 -1
- package/dist/assets/{DetectionIntelligence-CeunXPtW.js → DetectionIntelligence-Dm0ZECMd.js} +1 -1
- package/dist/assets/{DeviceAggregateSection-DLNzCtMs.js → DeviceAggregateSection-aUgWgamW.js} +1 -1
- package/dist/assets/{DeviceDetail-DCh8ydpY.js → DeviceDetail-BoKKas-k.js} +1 -1
- package/dist/assets/{Devices-fMM-N9UK.js → Devices-BVC0zPbb.js} +1 -1
- package/dist/assets/{EmbedPlayerPage-D8LRITOt.js → EmbedPlayerPage-BwM49mOX.js} +1 -1
- package/dist/assets/{Events-Drj6ybP0.js → Events-X4Lovw2K.js} +1 -1
- package/dist/assets/{FormBuilder-ChyOUw_O.js → FormBuilder-CgtfU1VA.js} +1 -1
- package/dist/assets/{Identity-kjnupMGz.js → Identity-C2TOQEJq.js} +1 -1
- package/dist/assets/{IntegrationDetail-683FxnPV.js → IntegrationDetail-3MgmsFlC.js} +1 -1
- package/dist/assets/{Integrations-BAa7Hx8I.js → Integrations-AQCeGcvO.js} +1 -1
- package/dist/assets/{Integrations-Bvz5KiZt.js → Integrations-CE6i7W5X.js} +1 -1
- package/dist/assets/{Logs-CPMTc4WW.js → Logs-C1e0vFcW.js} +1 -1
- package/dist/assets/{MotionZonesSettings-DhO5kuER.js → MotionZonesSettings-AZZ7Vac3.js} +1 -1
- package/dist/assets/{MyAccess-C5kfikXk.js → MyAccess-oAGUI1mc.js} +1 -1
- package/dist/assets/{Network-DBtVDYGt.js → Network-BLaNQAjB.js} +1 -1
- package/dist/assets/{NodeAddonsSettingsPanel-BdP5wGIu.js → NodeAddonsSettingsPanel-B1Cyvbcv.js} +1 -1
- package/dist/assets/{NodeInferenceDevices-CubcmlvI.js → NodeInferenceDevices-CkoeBXMD.js} +1 -1
- package/dist/assets/{Notifications-DBH3QGle.js → Notifications-D2ro0AxS.js} +1 -1
- package/dist/assets/{Pipeline-DgZbCwcO.js → Pipeline-BvxT4V4g.js} +1 -1
- package/dist/assets/{Plates-DiVTWUKg.js → Plates-TsHHlZDi.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings-zKU6VZ4G.js → PrivacyMaskSettings-BxIYztmC.js} +1 -1
- package/dist/assets/{ProviderIcon-JxmOoO_O.js → ProviderIcon-BBJFc8mr.js} +1 -1
- package/dist/assets/{Recordings-DTGdM6Ip.js → Recordings-CYIFqOWF.js} +1 -1
- package/dist/assets/{ScanNetworkModal-DkqUu2Xc.js → ScanNetworkModal-BQIyP8Qh.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-DZucoVrl.js → SceneMonitorEditor-ZOTjS5Og.js} +1 -1
- package/dist/assets/{Scenes-DMSYbhd1.js → Scenes-DDemjEwK.js} +1 -1
- package/dist/assets/{Settings-olnTIAze.js → Settings-BJydhDaq.js} +1 -1
- package/dist/assets/{Showroom-CdPGD4R4.js → Showroom-Di_0Md3V.js} +1 -1
- package/dist/assets/{Terminal-Ck0I64eZ.js → Terminal-CIo6IaUC.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-BpY1fOVD.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-C91lgIiF.js} +1 -1
- package/dist/assets/{bell-ring-BgQsFN7F.js → bell-ring-0co0yj8J.js} +1 -1
- package/dist/assets/{boxes-BnOBLNz5.js → boxes-CKu64rZy.js} +1 -1
- package/dist/assets/{build-cluster-graph-BwHdP82z.js → build-cluster-graph-BWmowgwv.js} +1 -1
- package/dist/assets/circle-check-big-BPF9MiQz.js +1 -0
- package/dist/assets/{circle-x-DAqnOyA6.js → circle-x-_qOKhKMV.js} +1 -1
- package/dist/assets/clock-DoS4fxPG.js +1 -0
- package/dist/assets/{copy-Dl5E5of_.js → copy-CE9Wp04n.js} +1 -1
- package/dist/assets/{debounced-invalidate-BIRVvqvY.js → debounced-invalidate-CfnWx62K.js} +1 -1
- package/dist/assets/{dist-CUfLXJC3.js → dist-CcR-lswN.js} +1 -1
- package/dist/assets/{dist-C2l22cSJ.js → dist-D6EYui_h.js} +1 -1
- package/dist/assets/{download-AfoMEWCf.js → download-mZ1OYsqe.js} +1 -1
- package/dist/assets/{face-bbox-BFT7iMc1.js → face-bbox-Y-X13UcQ.js} +1 -1
- package/dist/assets/{hard-drive-C9zTEogy.js → hard-drive-D6z2TCCh.js} +1 -1
- package/dist/assets/{hostInit-Cw_l9Xfz.js → hostInit-Dr0x9nND.js} +1 -1
- package/dist/assets/{index-vZPXzSPK.js → index-CoX6Kh_l.js} +3 -3
- package/dist/assets/{key-round-sF-8oSo7.js → key-round-CegkgxO2.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-8f39d7c2.js → mf-entry-bootstrap-0-e3818a6f.js} +2 -2
- package/dist/assets/{pencil-DsWgW1cM.js → pencil-CCyVFYXA.js} +1 -1
- package/dist/assets/play-DCoy3WUZ.js +1 -0
- package/dist/assets/{player-overlays-BGbLKvcn.js → player-overlays-BCuyatPp.js} +1 -1
- package/dist/assets/plus-D-xjJ9wd.js +1 -0
- package/dist/assets/power-ChfUL_0y.js +1 -0
- package/dist/assets/{radio-CWn4dw9L.js → radio-DvHOeyw2.js} +1 -1
- package/dist/assets/{refresh-cw-Cly4MRhi.js → refresh-cw-CvqUZLg2.js} +1 -1
- package/dist/assets/remoteEntry-C4Nbi34r.js +1 -0
- package/dist/assets/rotate-ccw-CwngHzIQ.js +1 -0
- package/dist/assets/rotate-cw-pPP0LEo9.js +1 -0
- package/dist/assets/search-Cvti5PjG.js +1 -0
- package/dist/assets/{send-yaKZ1tHd.js → send-DRex-kWD.js} +1 -1
- package/dist/assets/{server-CLOtA1S4.js → server-DSkdRu09.js} +1 -1
- package/dist/assets/square-B3jj9vzX.js +1 -0
- package/dist/assets/{square-check-big-DsiPGDCA.js → square-check-big-BbcMGYFH.js} +1 -1
- package/dist/assets/{src-Buv5KpAz.js → src-BmCjCFGO.js} +3 -3
- package/dist/assets/{src-CQVcBp6b.js → src-D8hsVOc6.js} +1 -1
- package/dist/assets/{star-fUCw1hyi.js → star-BT_oUHvU.js} +1 -1
- package/dist/assets/{undo-2-DXcExZt9.js → undo-2-D7QQycip.js} +1 -1
- package/dist/assets/{upload-CLT-rIe6.js → upload-D5h4xcC3.js} +1 -1
- package/dist/assets/{use-scenes-feed-CvesyXw2.js → use-scenes-feed-DcfGN5ks.js} +1 -1
- package/dist/assets/useEventInvalidation-DCo7fWEj.js +1 -0
- package/dist/assets/{video-CFtTGKiz.js → video--sYC3ys-.js} +1 -1
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BwIIU_83.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-DBBIBnMR.js} +2 -2
- package/dist/assets/{wifi-Glpx3AkR.js → wifi-Wacew_4h.js} +1 -1
- package/dist/assets/{zap-aTn3GS-l.js → zap-CrjJ004P.js} +1 -1
- package/dist/index.html +5 -5
- package/dist/server/addon.js +11 -2
- package/package.json +1 -1
- package/dist/assets/circle-check-big-FvfSWrhR.js +0 -1
- package/dist/assets/clock-BpmU9WHJ.js +0 -1
- package/dist/assets/play-BkPr3HPj.js +0 -1
- package/dist/assets/plus-zSkh3oEn.js +0 -1
- package/dist/assets/power-C4yi0usE.js +0 -1
- package/dist/assets/remoteEntry-BwhR6qpk.js +0 -1
- package/dist/assets/rotate-ccw-D0bM0VXI.js +0 -1
- package/dist/assets/rotate-cw-CNTEn7nJ.js +0 -1
- package/dist/assets/search-Bq3ZLayo.js +0 -1
- package/dist/assets/square-BlSn3fsr.js +0 -1
- package/dist/assets/useEventInvalidation-B-Cb5-ry.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/__vite-browser-external-B6qJ4svC.js","assets/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-zJ_50EbN.js";import{A as r,C as i,D as a,E as o,F as s,M as c,N as l,O as u,P as d,S as f,T as ee,_ as p,a as te,b as ne,c as re,d as ie,f as m,g as ae,h,i as oe,j as g,k as se,l as ce,m as le,n as ue,o as de,p as _,r as fe,s as pe,t as me,u as he,v,w as y,x as b,y as x}from"./__vite-browser-external-B6qJ4svC.js";var ge=function(e){return e.SystemBoot=`system.boot`,e.SystemAddonsReady=`system.addons-ready`,e.SystemRestarting=`system.restarting`,e.SystemRestartCompleted=`system.restart-completed`,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.RecordingStarted=`recording.started`,e.RecordingStopped=`recording.stopped`,e.RecordingError=`recording.error`,e.RecordingHealthDegraded=`recording.health.degraded`,e.RecordingStorageCritical=`recording.storage.critical`,e.RecordingSegmentWritten=`recording.segment.written`,e.RecordingPolicyFallback=`recording.policy.fallback`,e.RecordingRetentionCompleted=`recording.retention.completed`,e.RecordingExportProgress=`recording.export.progress`,e.RecordingExportCompleted=`recording.export.completed`,e.RecordingExportFailed=`recording.export.failed`,e.DetectionEvent=`detection.event`,e.SessionTrackNew=`session.track.new`,e.SessionTrackExpired=`session.track.expired`,e.BenchmarkProgress=`benchmark.progress`,e.PlatformProbePhase=`platform-probe.phase`,e.PipelineProgress=`pipeline.progress`,e.PipelineTrace=`pipeline.trace`,e.PipelineInferenceResult=`pipeline.inference-result`,e.PipelineCameraAssigned=`pipeline.camera-assigned`,e.PipelineCameraUnassigned=`pipeline.camera-unassigned`,e.PipelineNodeInferenceUnavailable=`pipeline.node-inference-unavailable`,e.PipelineDetectionBlind=`pipeline.detection-blind`,e.PipelineCameraUpdated=`pipeline.camera-updated`,e.PipelineIngestOwnerChanged=`pipeline.ingest-owner-changed`,e.PipelineRunnerLoadSnapshot=`pipeline.runner-load-snapshot`,e.PipelineCameraMetricsSnapshot=`pipeline.camera-metrics-snapshot`,e.StreamBrokerMetricsSnapshot=`stream-broker.metrics-snapshot`,e.StreamBrokerOnCamStreamDemand=`stream-broker.onCamStreamDemand`,e.StreamBrokerOnCamStreamIdle=`stream-broker.onCamStreamIdle`,e.StreamBrokerOnRequestStreamSourceRefresh=`stream-broker.onRequestStreamSourceRefresh`,e.StreamParamsChanged=`stream-params.changed`,e.DeviceStateChanged=`device.state-changed`,e.ZoneAnalyticsOccupancyChanged=`zone-analytics.occupancy-changed`,e.BatteryOnStatusChanged=`battery.onStatusChanged`,e.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.FrigateLiveEvent=`frigate.live-event`,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.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}({}),_e=[{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:`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}],ve=Object.fromEntries(_e.map(e=>[e.id,e]));function ye(e){return e.type===`separator`||e.type===`info`||e.type===`qr-code`||e.type===`button`||e.type===`object-array`||e.type===`widget`||e.type===`addon-action-button`||e.type===`device-action-button`}function be(e){let t=new Map;if(typeof e!=`object`||!e)return t;let n=e.sections;if(!Array.isArray(n))return t;for(let e of n)typeof e==`object`&&e&&xe(e.fields,t);return t}function xe(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){xe(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&&xe(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 Se(e){let t=new Map;for(let[n,r]of be(e))t.set(n,r.value??r.default);return t}function Ce(e,t){let n=be(e).get(t);return n===void 0?void 0:n.value??n.default}function we(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Te(e,t))}))}}function Te(e,t){if(ye(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Te(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Te(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?Ee(e)===`string`?``:null:i:e.multiple.itemDefault,a=Math.max(e.multiple.min,t.length),o=[];for(let e=0;e<a;e++)o.push(e<t.length?t[e]:n);return{...e,value:o}}let a=r===void 0?i===void 0?null:i:r,o=e.type===`textarea`&&e.isJson&&typeof a==`object`&&a?JSON.stringify(a,null,2):a;return{...e,value:o}}function Ee(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 De(e,t){return e.category===t}function Oe(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 ke(e,t){let n=t.ts??Date.now();e.emit(Oe(`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 Ae(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 je(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 Me(e,t){return`${e}@${je(t)}`}function Ne(e,t,n){return e[Me(t,n)]}function Pe(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?Me(i,n):i]=a;return r}function Fe(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=Ne(e,i,n);t!==void 0&&(r[i]=t)}return r}var Ie=class{_ctx=null;_config;_readinessGeneration=typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14);_registeredCapNames=[];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(ge.AddonStarted);let n=Re(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(ge.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}async getGlobalSettings(e,t,n){let r=this.globalSettingsSchema(t);if(!r)return{sections:[]};let i=await this.resolveGlobalStore(n,t);return we(r,e?{...i,...e}:i)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=je(e??this._ctx?.kernel?.localNodeId);return r.size>0?Fe(n,r,i):n}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=je(this._ctx?.kernel?.localNodeId),i=je(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?Pe(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(ge.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=>Le(e.fields)):[]);return this._perNodeKeysCache.set(t,i),i}maybeAutoRestart(e,t){if(!t)return;let n=new Set;for(let e of t.sections)for(let t of e.fields)t.type===`separator`||t.type===`info`||t.requiresRestart&&n.add(t.key);if(n.size===0||!Object.keys(e).some(e=>n.has(e)))return;let r=this._ctx;if(!r)return;let i=r.id;setImmediate(()=>{r.api.addons?.restartAddon?.mutate({addonId:i}).then(()=>{r.logger.info(`addon auto-restart triggered by restart-required setting change`,{meta:{changedFields:Object.keys(e).filter(e=>n.has(e))}})}).catch(e=>{r.logger.error(`addon auto-restart failed`,{meta:{error:e instanceof Error?e.message:String(e)}})})})}async getDeviceSettings(e){let t=this.deviceSettingsSchema();return t?we(t,await this._ctx?.settings?.readDeviceStore(e)??{}):{sections:[]}}async updateDeviceSettings(e,t){await this._ctx?.settings?.writeDeviceStore(e,t)}_subscriptions=[];watchCapability(e,t){let n=new Set(Array.isArray(e)?e:[e]);this.subscribe({category:`system.ready-state`},e=>{let r=e.data;if(typeof r.capName!=`string`||!n.has(r.capName)||r.scope?.type!==`node`)return;let i=r.scope.nodeId;if(typeof i!=`string`||i.length===0)return;let a=r.capName;r.state===`down`?t.onDown?.(i,a):r.state===`ready`&&t.onReady?.(i,a)})}subscribe(e,t){let n=this.ctx.eventBus.subscribe(e,t);this._subscriptions.push(n)}emitLifecycle(e,t){try{let n=this._ctx;if(!n)return;n.eventBus.emit({id:`${n.id}-${Date.now()}`,timestamp:new Date,source:{type:`addon`,id:n.id,nodeId:n.kernel.localNodeId??`hub`},category:e,data:{addonId:n.id,...t}})}catch{}}emitReadinessForProviders(e){let t=this._ctx;if(!t||this._registeredCapNames.length===0)return;let n=t.kernel?.localNodeId??`hub`,r=n.includes(`/`)?n.split(`/`)[0]:n;for(let n of this._registeredCapNames)try{ke(t.eventBus,{capName:n,scope:{type:`node`,nodeId:r},state:e,generation:this._readinessGeneration,sourceNodeId:r})}catch{}}async resolveModelsDir(){let{join:t}=await n(async()=>{let{join:t}=await import(`./__vite-browser-external-B6qJ4svC.js`).then(t=>e(t.t()));return{join:t}},__vite__mapDeps([0,1])),{promises:r}=await n(async()=>{let{promises:t}=await import(`./__vite-browser-external-B6qJ4svC.js`).then(t=>e(t.t()));return{promises:t}},__vite__mapDeps([0,1])),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=je(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?Ne(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 Ae({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 Ae({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{return await e.readAddonStore()??{}}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._ctx?.logger?.warn?.(`readAddonStore: settings-store unavailable after retries — using defaults`,{meta:{error:n instanceof Error?n.message:String(n)}}),{}}};function Le(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...Le(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...Le(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function Re(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function ze(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=Be(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=He(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 Be(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=Ve(t.path,n);if(e!==null)return{route:t,params:e}}return null}function Ve(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 He(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 Ue=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)}}}},We=a({codec:m([`h264`,`h265`,`copy`]),profile:m([`baseline`,`main`,`high`]).optional(),level:g().optional(),width:o().int().positive().optional(),height:o().int().positive().optional(),fps:o().positive().optional(),bitrateKbps:o().int().positive().optional(),gopFrames:o().int().positive().optional(),bf:o().int().min(0).optional(),preset:m([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:m([`zerolatency`,`film`,`animation`]).optional()}),Ge=l([y(`passthrough`),a({codec:m([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:o().int().positive().optional(),sampleRateHz:o().int().positive().optional(),channels:l([y(1),y(2)]).optional()})]),Ke=a({video:We,audio:Ge,inputArgs:p(g()).optional(),outputArgs:p(g()).optional()});function qe(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`}}var Je={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},Ye={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 Xe(e){return[`-hide_banner`,`-loglevel`,e]}function Ze(e){return!e||e===`none`||e===`copy`}function Qe(e,t){let n=[];if(Ze(t)||n.push(`-hwaccel`,String(t)),e.extraArgs?.length&&n.push(...e.extraArgs),e.analyzeDurationUs!==void 0&&n.push(`-analyzeduration`,String(e.analyzeDurationUs)),e.probeSizeBytes!==void 0&&n.push(`-probesize`,String(e.probeSizeBytes)),e.fflags?.length)for(let t of e.fflags)n.push(`-fflags`,t);return e.rtspTransport&&n.push(`-rtsp_transport`,e.rtspTransport),n.push(`-i`,e.url),n}function $e(e,t){return!e||t.some(e=>e===`-vf`)?[]:e.mode===`exact`?[`-vf`,`scale=${e.width}:${e.height}`]:[`-vf`,`scale='min(${e.width},iw)':'min(${e.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2`]}function et(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 tt(e,t){if(e.kind===`copy`)return[`-c:v`,`copy`,...e.bitstreamFilter?[`-bsf:v`,e.bitstreamFilter]:[]];let n=[...$e(e.scale,t),`-c:v`,e.encoder];return e.preset!==void 0&&n.push(`-preset`,e.preset),e.tune!==void 0&&n.push(`-tune`,e.tune),e.profile!==void 0&&n.push(`-profile:v`,e.profile),e.level!==void 0&&n.push(`-level`,e.level),e.pixelFormat!==void 0&&n.push(`-pix_fmt`,e.pixelFormat),e.fps!==void 0&&n.push(`-r`,String(e.fps)),e.gopFrames!==void 0&&n.push(`-g`,String(e.gopFrames)),e.forceKeyFramesSeconds!==void 0&&n.push(`-force_key_frames`,`expr:gte(t,n_forced*${e.forceKeyFramesSeconds})`),e.bf!==void 0&&n.push(`-bf`,String(e.bf)),n.push(...et(e)),e.bitstreamFilter!==void 0&&n.push(`-bsf:v`,e.bitstreamFilter),n}function nt(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`,Je[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 rt(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 it(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var at=`+frag_keyframe+empty_moov+default_base_moof`;function ot(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?ct(e):[`-f`,e.container,`pipe:1`]}var st=.9;function ct(e){return[`-movflags`,at,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*st*1e3))),`-f`,`mp4`,`pipe:1`]}function lt(e){return[`-map`,`0:a:0?`,...nt(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:Ye[e.codec]),...rt({url:e.rtpUrl,sdpFile:e.sdpFile})]}function ut(e){let t=[...Xe(e.logLevel),...Qe(e.input,e.decodeHwAccel)],n=e.threadCount>0?[`-threads`,String(e.threadCount)]:[];if(e.sink.kind===`rtp-outputs`){let r=e.sink.video?[`-an`,`-map`,`0:v:0`,...tt(e.video,e.outputArgs),...n,...e.outputArgs,...rt(e.sink.video)]:[],i=e.sink.audio?[`-vn`,`-map`,`0:a:0?`,...nt(e.audio),...rt(e.sink.audio)]:[];return[...t,...r,...i]}let r=it(e.sink)?[`-an`]:nt(e.audio),i=ot(e.sink);return[...t,...tt(e.video,e.outputArgs),...n,...r,...e.outputArgs,...i,...e.audioSidecar?lt(e.audioSidecar):[]]}var dt={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 ft(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||Ze(t)||t===`auto`)return r;let i=dt[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function pt(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 mt(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:ft(i,e.decodeHwAccel,e.hardwareEncoders===!0),scale:r,...t.preset===void 0?{}:{preset:t.preset},...t.tune===void 0?{}:{tune:t.tune},...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:pt(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var ht={video:{codec:`h264`,profile:`baseline`,level:`3.1`,width:1280,height:720,fps:25,bitrateKbps:2500,gopFrames:25,bf:0,preset:`veryfast`,tune:`zerolatency`},audio:`passthrough`},gt={...ht,video:{...ht.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},_t={...ht,audio:{codec:`opus`}},vt={kind:`cbr`,vbvSeconds:1},yt={kind:`cap`,vbvSeconds:2},bt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},xt=16*1024*1024,St=8,Ct=16,wt=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??xt}get fault(){return this.faultReason}get pendingBytes(){return this.buffer.length-this.unitStart}get discardedInterstitialTypes(){return[...this.interstitial]}push(e){return this.faultReason!==null||e.length===0?[]:(this.append(e),this.pendingBytes>this.maxUnitBytes?this.fail(`a single fMP4 unit exceeded ${this.maxUnitBytes} bytes — this stream is not fragmented`):this.drainBoxes())}append(e){if(this.buffer.length===0){this.buffer=e.slice();return}let t=new Uint8Array(this.buffer.length+e.length);t.set(this.buffer,0),t.set(e,this.buffer.length),this.buffer=t}drainBoxes(){let e=[];for(;;){let t=this.readHeader();if(this.faultReason!==null)return e;if(t===null||this.cursor+t.totalBytes>this.buffer.length)break;let n=this.cursor,r=n+t.totalBytes;this.cursor=r;let i=this.consumeBox(t.type,n,r);if(this.faultReason!==null)return e;i!==null&&e.push(i)}return this.compact(),e}consumeBox(e,t,n){if(this.state===`init`){if(e!==`moof`)return null;if(t===this.unitStart)return this.fail(`a moof arrived before any initialisation box — there is no ftyp/moov to send`),null;let n=this.emit(`init`,this.unitStart,t);return this.unitStart=t,this.state=`fragment`,n}if(this.state===`idle`)return e===`moof`?(this.unitStart=t,this.state=`fragment`,null):(this.interstitial.add(e),this.unitStart=n,null);if(e!==`mdat`)return null;let r=this.emit(`fragment`,this.unitStart,n);return this.unitStart=n,this.state=`idle`,r}readHeader(){let e=this.buffer.length-this.cursor;if(e<St)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<Ct)return null;let n=t.getBigUint64(this.cursor+St);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<St?(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 Tt(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 Et(e){return!e||e===`none`||e===`copy`}async function Dt(e){let t=e.override;if(t!=null&&t!==``)return Et(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=Et(r)?null:r;return e.cache?.write(i),i}var Ot=me();function kt(e){let t=JSON.stringify(e,At);return(0,Ot.createHash)(`sha256`).update(t??``).digest(`hex`)}function At(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 jt(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var Mt=`\0unset`;function Nt(e){return{codec:e.codec,profile:e.profile??Mt,level:e.level??Mt,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??Mt,tune:e.tune??Mt}}function Pt(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function Ft(e,t=jt(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:Nt(e.encode.video),audio:Pt(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??Mt,pixelFormat:e.pixelFormat??Mt,decodeHwAccel:e.decodeHwAccel??Mt}}function It(e,t=jt(e)){return`egress:${kt(Ft(e,t))}`}var Lt=m([`singleton`,`device`,`widget`]),Rt=a({capName:g(),kind:Lt,deviceId:o().optional(),reachable:v(),latencyMs:o(),error:g().optional()}),zt=a({addonId:g(),caps:p(Rt).readonly(),widgets:p(Rt).readonly()}),Bt=a({nodeId:g(),addons:p(zt).readonly()}),Vt=a({ok:v(),degraded:v(),checkedAt:g(),nodes:p(Bt).readonly(),summary:a({total:o(),reachable:o(),unreachable:o()})}),Ht=`hub-only`;function Ut(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function Wt(e){let t=Ut(e).placement;return t===`any-node`||t===`agent-only`}function Gt(e){return Ut(e).placement===`agent-only`}function Kt(e){return Ut(e).group}function qt(e,t){return e.execution?.group??t}function Jt(e){return Ut(e).placement}function Yt(e){return e.execution?.isolate===!0}var Xt=`x-camstack-dataplane-secret`,Zt=m([`running`,`done`,`failed`,`cancelled`]),Qt=m([`adopted`,`already-adopted`,`failed`,`cancelled`]),$t=a({childNativeId:g(),outcome:Qt,parentDeviceId:o().int().nonnegative().nullable(),accessoryCount:o().int().nonnegative(),error:g().nullable()}),en=a({jobId:g(),addonId:g(),integrationId:g(),state:Zt,total:o().int().nonnegative(),processed:o().int().nonnegative(),adopted:o().int().nonnegative(),alreadyAdopted:o().int().nonnegative(),failed:o().int().nonnegative(),accessoriesCreated:o().int().nonnegative(),currentChildNativeId:g().nullable(),results:p($t).readonly(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),tn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},nn=m([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`]),rn=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`],an=b(`kind`,[a({kind:y(`device-disabled`)}),a({kind:y(`wrapper-binding`),capName:g()}),a({kind:y(`recording-config`)}),a({kind:y(`notification-mute`)}),a({kind:y(`camera-audio`),capName:g()}),a({kind:y(`camera-mask`),capName:g()}),a({kind:y(`broker-audio-mute`)})]),on=m([`no-provider`,`source-unreachable`,`not-configured`]),sn=a({id:nn,label:g(),costWhenOff:g(),available:v(),unavailableReason:on.optional(),enabled:v(),authority:an}),cn=a({deviceId:o().int(),switches:p(sn).readonly(),fetchedAt:o()}),ln=`detection-pipeline`,un=`audio-analysis`,dn=`privacy-mask`,fn={"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:ln},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:dn},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:dn},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:un},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 pn(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:`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:`source-unreachable`}:e.supported?e.configuredRegions===null||e.enabled===null?{available:!1,enabled:!1,unavailableReason:`source-unreachable`}:e.configuredRegions===0?{available:!1,enabled:!1,unavailableReason:`not-configured`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!1,unavailableReason:`no-provider`}}case`broker-audio-mute`:{let e=t.brokerAudio;return e===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!e.muted}}}}function mn(e){return rn.map(t=>{let n=fn[t],r=pn(n,e);return{id:n.id,label:n.label,costWhenOff:n.costWhenOff,available:r.available,...r.unavailableReason===void 0?{}:{unavailableReason:r.unavailableReason},enabled:r.enabled,authority:n.authority}})}function hn(e){return e.filter(e=>fn[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function gn(e){let t=[],n=[];for(let r of rn){let i=fn[r];if(!i.countsAsSwitchedOff)continue;let a=pn(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var _n={high:`High`,mid:`Mid`,low:`Low`};function vn(e){return _n[e]??e.charAt(0).toUpperCase()+e.slice(1)}function yn(e){return(e.width??0)*(e.height??0)}function bn(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:yn(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 xn(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function Sn(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 S(e){return typeof e==`string`}function Cn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wn(e){return S(e)&&e.trim()?{url:e}:Cn(e)&&S(e.url)&&e.url.trim()?{url:e.url,label:S(e.label)?e.label:void 0}:null}function Tn(e){let t=S(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=wn(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=S(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:S(e.main_stream_name)?e.main_stream_name:void 0});let i=S(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:S(e.sub_stream_name)?e.sub_stream_name:void 0});let a=S(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:S(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function En(e){if(e.length===0)return{};let t=bn(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 Dn={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},On={debug:0,info:1,warn:2,error:3};function kn(e,t){return On[e]<=On[t]}var An=m([`recording`,`events`]),jn=m([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),Mn=m([`retention`,`quota`,`manual`,`operator`,`maintenance`]),Nn=a({id:g(),at:o(),domain:An,op:jn,reason:Mn,deviceId:o().nullable(),nodeId:g(),itemsAffected:o(),bytesReclaimed:o(),detail:g().nullable(),actor:g()}),Pn=a({deviceId:o().optional(),limit:o().int().min(1).max(1e3).optional()}),C=m([`high`,`mid`,`low`]),Fn=[`high`,`mid`,`low`],In=m([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),Ln=a({width:o().int().positive(),height:o().int().positive()}),Rn=a({camStreamId:g().min(1),deviceId:o().int().nonnegative(),kind:In,url:g().optional(),codec:g().optional(),resolution:Ln.optional(),fps:o().positive().optional(),label:g().optional(),deviceFeatures:p(g()).optional(),autoEligible:v().optional(),metadata:r(g(),d()).optional()}),zn=m([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),Bn=a({deviceId:o().int().nonnegative(),profile:C,brokerId:g(),sourceCamStreamId:g().nullable(),status:zn,resolution:Ln.optional(),codec:g().optional(),preBufferSec:o().nonnegative().optional(),errorMessage:g().optional()});function Vn(e,t){return`${e}/${t}`}function Hn(e,t){return`${e}/${t}`}function Un(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=C.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function Wn(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>Fn.indexOf(e.profile)-Fn.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 Gn=a({id:g(),label:g(),protocol:m([`rtsp`,`rtmp`,`annexb`,`http-mjpeg`,`webrtc`,`custom`]),url:g().optional(),resolution:a({width:o(),height:o()}).readonly().optional(),fps:o().optional(),bitrate:o().optional(),codec:g().optional(),profileHint:C.optional()}),Kn=a({type:g(),url:g(),videoCodec:g().optional(),audioCodec:g().optional(),metadata:r(g(),d()).readonly().optional()}),qn=a({type:m([`video`,`audio`]),data:_(Uint8Array),pts:o(),dts:o(),keyframe:v(),codec:g()}),Jn=a({data:_(Uint8Array),width:o(),height:o(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),timestamp:o()}),w=a({shmId:g(),slot:o().int().nonnegative(),seq:o().int().nonnegative(),width:o().int().positive(),height:o().int().positive(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:o(),byteLength:o().int().nonnegative(),nodeId:g(),slotCount:o().int().positive()}),Yn=m([`rgb`,`bgr`,`yuv420`,`gray`]),Xn=a({brokerId:g(),format:Yn,maxFps:o().positive().optional(),tag:g().optional()}),Zn=a({subscriptionId:g(),maxFps:o().nonnegative()}),Qn=a({data:_(Uint8Array),sampleRate:o().int().positive(),channels:o().int().positive(),timestamp:o()}),$n=a({brokerId:g(),tag:g().optional()}),er=a({subscriptionId:g()}),tr=m([`idle`,`connecting`,`streaming`,`error`,`stopped`]),nr=a({status:tr,inputFps:o(),decodeFps:o(),encodedSubscribers:o(),decodedSubscribers:o(),uptimeMs:o(),bitrateKbps:o(),idrIntervalMs:o(),codec:g().optional(),totalBytes:o(),packetCount:o(),rtspClients:o(),pipeClients:o(),preBufferSec:o(),preBufferMs:o(),preBufferPackets:o(),decoderNodeId:g().nullable(),audio:a({codec:g(),sampleRate:o(),channels:o(),supported:v()}).nullable().optional(),audioMuted:v().optional(),audioMutedDropped:o().optional()}),rr=a({profile:C,brokerId:g(),url:g(),mutedUrl:g(),enabled:v(),codec:g().optional(),resolution:Ln.optional()}),ir={preMs:5e3,postMs:1e4},ar=o().int().min(0).max(6),or=/^([01]\d|2[0-3]):[0-5]\d$/,sr=m([`off`,`events`,`continuous`]),cr=a({motion:v().optional(),audioThresholdDbfs:o().optional()}),lr=m([`continuous`,`events`]),ur=cr,dr=a({days:p(ar),start:g().regex(or),end:g().regex(or),mode:lr,triggers:ur.optional(),preBufferSec:o().min(0).optional(),postBufferSec:o().min(0).optional()}),fr={preBufferSec:15,postBufferSec:30},pr=fr.postBufferSec*1e3,mr=a({maxAgeDays:o().min(0).optional(),maxSizeGb:o().min(0).optional()}),hr=m([`minimal`,`low`,`standard`,`high`,`max`]),gr=`standard`,_r={minimal:{tileWidth:240,tileHeight:135,quality:55},low:{tileWidth:320,tileHeight:180,quality:60},standard:{tileWidth:480,tileHeight:270,quality:72},high:{tileWidth:640,tileHeight:360,quality:80},max:{tileWidth:960,tileHeight:540,quality:85}},vr={minimal:`Minimal (240p)`,low:`Low (320p)`,standard:`Standard (480p)`,high:`High (640p)`,max:`Max (960p)`},yr=[`minimal`,`low`,`standard`,`high`,`max`];function br(e){return _r[e??`standard`]}var xr=a({enabled:v(),mode:sr.optional(),profiles:p(C).optional(),segmentSeconds:o().int().positive().optional(),bands:p(dr).default([]),retention:mr.optional(),scrubThumbnails:hr.optional()}).strict();function Sr(e){return!e.enabled||e.bands.length===0?`off`:e.bands.some(e=>e.mode===`continuous`)?`continuous`:`events`}var Cr=[`high`,`low`];function wr(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=>Cr.includes(e));return n.length>0?n:[...e]}var Tr=m([`queued`,`running`,`done`,`failed`,`cancelled`]),Er=a({jobId:g(),state:Tr,fromLocationId:g(),toLocationId:g(),deviceId:o().nullable(),entities:p(g()),filesMoved:o().int(),bytesMoved:o().int(),filesTotal:o().int().nullable(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Dr=m([`recordings`,`recordingsLow`]),Or=a({fromLocationId:g(),toLocationId:g(),entities:p(m([`segments`])).optional(),footageClass:Dr.optional(),deviceId:o().int().optional(),profiles:p(g()).optional(),throttleMbps:o().min(1).max(1e3).optional(),sinceMs:o().int().optional()}),T=a({leaseId:g().min(1)}),kr=Or.extend({leaseId:g().min(1)}),Ar=a({toLocationId:g(),throttleMbps:o().min(1).max(1e3).optional()}),jr=Ar.extend({leaseId:g().min(1)}),Mr=m([`recordings`,`recordingsLow`,`eventMedia`]),Nr=a({recordings:g().min(1).optional(),recordingsLow:g().min(1).optional(),eventMedia:g().min(1).optional()}).refine(e=>Object.keys(e).length>0,{message:`select at least one storage class`}),Pr=a({destinations:Nr,throttleMbps:o().min(1).max(1e3).optional()}),Fr=m([`planning`,`pausing`,`moving`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),Ir=m([`pipeline`,`recorder`,`analytics`]),Lr=a({storageClass:Mr,fromLocationId:g(),toLocationId:g(),moverJobId:g().nullable(),state:Tr.nullable(),error:g().nullable()}),Rr=a({jobId:g(),phase:Fr,destinations:Nr,throttleMbps:o(),moves:p(Lr),pauseLeaseId:g().nullable(),pausedParticipants:p(Ir),repointed:v(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),zr=a({destinations:Nr,moves:p(a({storageClass:Mr,fromLocationId:g(),toLocationId:g()}))}),Br=[`face`,`plate`],Vr=[`face`,`plate`,`clip`,`custom`],Hr=g().regex(/^[a-z][a-zA-Z0-9-]*$/),E=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),type:g(),displayName:g().min(1),providerId:g().min(1),config:r(g(),d()),nodeId:g().optional(),isDefault:v().default(!1),isSystem:v().default(!1),enabled:v().optional(),capacity:a({totalBytes:o(),availableBytes:o()}).nullable().optional(),createdAt:o(),updatedAt:o()}),D=l([Hr,g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),Ur=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*$/,{message:`id must start with a lowercase letter and contain only letters, digits, or hyphens`}),displayName:g().min(1,{message:`displayName must not be empty`}),description:g().optional(),cardinality:m([`single`,`multi`]),defaultsTo:g().optional(),defaultRoot:m([`data`,`media`,`backup`]).optional()}),Wr=a({inputFps:o(),outputFps:o(),avgDecodeTimeMs:o(),droppedFrames:o(),lagMs:o().optional(),effectiveFps:o().optional(),adaptiveFps:o().optional()}),Gr=a({codec:g(),maxFps:o().default(0),outputFormat:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]).default(`jpeg`),scale:o().default(1),width:o().optional(),height:o().optional(),deviceId:o().int().nonnegative().optional(),tag:g().optional(),frameSink:m([`callback`,`shm`]).default(`callback`),debug:v().optional()}),Kr={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},qr={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},Jr=[{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:Kr},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Kr},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Kr},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Kr},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Kr},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Kr},{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:qr},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:qr},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:qr},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:qr},{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 Yr(e){return Jr.find(t=>t.id===e)}var Xr=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${Qr(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function Zr(e,t){return`${e}|${Qr(t)}`}function Qr(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function $r(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function ei(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 ti=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??ni(),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(Zr(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=Zr(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&&$r(r.state)<=$r(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} (${Qr(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&&ei(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 Xr(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${Qr(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(Oe(`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=Zr(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} (${Qr(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&&ei(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} (${Qr(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&ei(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 ni(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function ri(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function ii(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=ai(e,s);if(t)return a(t)}}return a(o[0])}function ai(e,t){let n=t.width*t.height,r,i;for(let t of e){if(t.resolution===void 0)continue;let e=t.resolution.width*t.resolution.height;e>=n?(!r||e<r.pixels)&&(r={entry:t,pixels:e}):(!i||e>i.pixels)&&(i={entry:t,pixels:e})}return r?.entry??i?.entry}var oi=a({id:g(),name:g(),category:g().optional(),description:g().optional(),icon:g().optional()}),si=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],ci={yolo26:`YOLO26`,yolov9:`YOLOv9`};function li(e){return ci[e]??e.toUpperCase()}var ui=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function di(e,t){let n=li(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(ui,``).trim();return r.length>0?r:t}function fi(e,t){let n=[];return t===`fast`&&n.push(`Fast`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function pi(e){return si.filter(t=>e.formats[t]!==void 0)}function mi(e){let t=si.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var hi=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],gi=[`fp32`,`int8`];function _i(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:fi(t,n),formats:pi(e),sizeMB:mi(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?gi.indexOf(e.precision)-gi.indexOf(t.precision):e.optimization===`fast`?1:-1:(t.resolution??1/0)-(e.resolution??1/0)),a=r.find(e=>e.precision===`fp32`&&e.optimization===`standard`)??r[0];if(a===void 0)continue;let o=i.find(e=>e.id===a.modelId);t.push({tier:n,label:o?di(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=hi.indexOf(e.tier),r=hi.indexOf(t.tier);return n!==-1&&r!==-1?n-r:n===-1?r===-1?e.tier.localeCompare(t.tier):1:-1}),n.push({family:e,label:li(e),tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function vi(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 yi(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 bi=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],xi=a({url:g(),sizeMB:o(),isDirectory:v().optional(),files:p(g()).readonly().optional(),runtimes:p(m([`node`,`python`])).readonly().optional()}),Si=a({url:g(),filename:g(),sizeMB:o()}),Ci=a({onnx:xi.optional(),coreml:xi.optional(),openvino:xi.optional(),tflite:xi.optional(),pt:xi.optional(),gguf:xi.optional()}),wi=a({family:g(),tier:g(),precision:m([`fp32`,`int8`]).optional(),optimization:m([`standard`,`fast`]).optional(),resolution:o().int().positive().optional()}),Ti=a({id:g(),name:g(),description:g(),formats:Ci,inputSize:a({width:o(),height:o()}),inputChannels:o().int().positive().optional(),labels:p(oi).readonly(),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`]).optional(),outputProbabilities:v().optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),postprocessor:x().optional(),faceAlignment:v().optional(),extraFiles:p(Si).readonly().optional(),legacy:v().optional(),metrics:a({map50:o().optional(),p95LatencyMs:r(g(),o()).optional()}).optional(),license:g().optional(),group:wi.optional()}),Ei=b(`format`,[a({format:y(`openvino`),precisions:p(m([`fp16`,`int8`])).min(1).readonly()}),a({format:y(`coreml`)})]),Di=a({id:g().regex(/^[a-zA-Z0-9._-]+$/),name:g(),labels:p(oi).readonly(),inputSize:a({width:o(),height:o()}),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`]).optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),outputFormat:m([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:v().optional()}),Oi=a({format:m(bi),precision:m([`fp16`,`int8`]).optional(),sizeMB:o(),validated:v(),files:p(g()).readonly()}),ki=a({entry:Ti,artifacts:p(Oi).readonly()});function Ai(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function ji(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function Mi(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function Ni(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 Pi(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=Ai(e.method);return Mi(e.scopes,e.addonId,n)?{allowed:!0}:{allowed:!1,reason:`integration token holds no addon:${e.addonId}[${n}] grant`}}var O=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},k=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}};function A(e,t,n){if(typeof e!=`number`||!Number.isFinite(e))throw new k(`${t}: argument ${n+1} must be a finite number`);return e}function Fi(e,t,n){if(typeof e!=`string`)throw new k(`${t}: argument ${n+1} must be a string`);return e}function j(e,t){if(!Number.isFinite(e))throw new k(`${t}: produced a non-finite result`);return e}function Ii(e,t){return e.map((e,n)=>A(e,t,n))}var Li=1/0,Ri={min:{minArgs:1,maxArgs:Li,apply:e=>j(Math.min(...Ii(e,`min`)),`min`)},max:{minArgs:1,maxArgs:Li,apply:e=>j(Math.max(...Ii(e,`max`)),`max`)},abs:{minArgs:1,maxArgs:1,apply:e=>j(Math.abs(A(e[0],`abs`,0)),`abs`)},floor:{minArgs:1,maxArgs:1,apply:e=>j(Math.floor(A(e[0],`floor`,0)),`floor`)},ceil:{minArgs:1,maxArgs:1,apply:e=>j(Math.ceil(A(e[0],`ceil`,0)),`ceil`)},sqrt:{minArgs:1,maxArgs:1,apply:e=>j(Math.sqrt(A(e[0],`sqrt`,0)),`sqrt`)},round:{minArgs:1,maxArgs:2,apply:e=>{let t=A(e[0],`round`,0),n=e.length>1?Math.trunc(A(e[1],`round`,1)):0;if(n<0||n>100)throw new k(`round: digits must be between 0 and 100`);let r=10**n;return j(Math.round(t*r)/r,`round`)}},pow:{minArgs:2,maxArgs:2,apply:e=>j(A(e[0],`pow`,0)**A(e[1],`pow`,1),`pow`)},clamp:{minArgs:3,maxArgs:3,apply:e=>{let t=A(e[0],`clamp`,0),n=A(e[1],`clamp`,1),r=A(e[2],`clamp`,2);if(n>r)throw new k(`clamp: lower bound is greater than upper bound`);return j(Math.min(r,Math.max(n,t)),`clamp`)}},avg:{minArgs:1,maxArgs:Li,apply:e=>{let t=Ii(e,`avg`);return j(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:Li,apply:e=>j(Ii(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:Li,apply:e=>{for(let t of e)if(t!==null)return t;return null}},age:{minArgs:2,maxArgs:2,apply:e=>j(A(e[0],`age`,0)-A(e[1],`age`,1),`age`)},convert:{minArgs:3,maxArgs:3,apply:(e,t)=>{let n=A(e[0],`convert`,0),r=Fi(e[1],`convert`,1).trim(),i=Fi(e[2],`convert`,2).trim();if(t.convert){let e=t.convert(n,r,i);if(e===null)throw new k(`convert: cannot convert '${r}' to '${i}'`);return j(e,`convert`)}if(r===i)return n;throw new k(`convert: unit conversion table not installed`)}}},zi=Object.freeze(Object.assign(Object.create(null),Ri)),Bi=new Set(Object.keys(Ri)),Vi=2048,Hi=4096,Ui=/^[A-Za-z_][A-Za-z0-9_]*$/,Wi=new Set([`now`,`true`,`false`,`null`]),Gi=new Set([`true`,`false`,`null`]);function Ki(e){return e>=`0`&&e<=`9`}function qi(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function Ji(e){return qi(e)||Ki(e)}function Yi(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-zJ_50EbN.js";import{A as r,C as i,D as a,E as o,F as s,M as c,N as l,O as u,P as d,S as f,T as ee,_ as p,a as te,b as ne,c as re,d as ie,f as m,g as ae,h,i as oe,j as g,k as se,l as ce,m as le,n as ue,o as de,p as _,r as fe,s as pe,t as me,u as he,v,w as y,x as b,y as x}from"./__vite-browser-external-B6qJ4svC.js";var ge=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.RecordingStarted=`recording.started`,e.RecordingStopped=`recording.stopped`,e.RecordingError=`recording.error`,e.RecordingHealthDegraded=`recording.health.degraded`,e.RecordingStorageCritical=`recording.storage.critical`,e.RecordingSegmentWritten=`recording.segment.written`,e.RecordingPolicyFallback=`recording.policy.fallback`,e.RecordingRetentionCompleted=`recording.retention.completed`,e.RecordingExportProgress=`recording.export.progress`,e.RecordingExportCompleted=`recording.export.completed`,e.RecordingExportFailed=`recording.export.failed`,e.DetectionEvent=`detection.event`,e.SessionTrackNew=`session.track.new`,e.SessionTrackExpired=`session.track.expired`,e.BenchmarkProgress=`benchmark.progress`,e.PlatformProbePhase=`platform-probe.phase`,e.PipelineProgress=`pipeline.progress`,e.PipelineTrace=`pipeline.trace`,e.PipelineInferenceResult=`pipeline.inference-result`,e.PipelineCameraAssigned=`pipeline.camera-assigned`,e.PipelineCameraUnassigned=`pipeline.camera-unassigned`,e.PipelineNodeInferenceUnavailable=`pipeline.node-inference-unavailable`,e.PipelineDetectionBlind=`pipeline.detection-blind`,e.PipelineCameraUpdated=`pipeline.camera-updated`,e.PipelineIngestOwnerChanged=`pipeline.ingest-owner-changed`,e.PipelineRunnerLoadSnapshot=`pipeline.runner-load-snapshot`,e.PipelineCameraMetricsSnapshot=`pipeline.camera-metrics-snapshot`,e.StreamBrokerMetricsSnapshot=`stream-broker.metrics-snapshot`,e.StreamBrokerOnCamStreamDemand=`stream-broker.onCamStreamDemand`,e.StreamBrokerOnCamStreamIdle=`stream-broker.onCamStreamIdle`,e.StreamBrokerOnRequestStreamSourceRefresh=`stream-broker.onRequestStreamSourceRefresh`,e.StreamParamsChanged=`stream-params.changed`,e.DeviceStateChanged=`device.state-changed`,e.ZoneAnalyticsOccupancyChanged=`zone-analytics.occupancy-changed`,e.BatteryOnStatusChanged=`battery.onStatusChanged`,e.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.FrigateLiveEvent=`frigate.live-event`,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.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}({}),_e=[{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:`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}],ve=Object.fromEntries(_e.map(e=>[e.id,e]));function ye(e){return e.type===`separator`||e.type===`info`||e.type===`qr-code`||e.type===`button`||e.type===`object-array`||e.type===`widget`||e.type===`addon-action-button`||e.type===`device-action-button`}function be(e){let t=new Map;if(typeof e!=`object`||!e)return t;let n=e.sections;if(!Array.isArray(n))return t;for(let e of n)typeof e==`object`&&e&&xe(e.fields,t);return t}function xe(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){xe(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&&xe(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 Se(e){let t=new Map;for(let[n,r]of be(e))t.set(n,r.value??r.default);return t}function Ce(e,t){let n=be(e).get(t);return n===void 0?void 0:n.value??n.default}function we(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Te(e,t))}))}}function Te(e,t){if(ye(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Te(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Te(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?Ee(e)===`string`?``:null:i:e.multiple.itemDefault,a=Math.max(e.multiple.min,t.length),o=[];for(let e=0;e<a;e++)o.push(e<t.length?t[e]:n);return{...e,value:o}}let a=r===void 0?i===void 0?null:i:r,o=e.type===`textarea`&&e.isJson&&typeof a==`object`&&a?JSON.stringify(a,null,2):a;return{...e,value:o}}function Ee(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 De(e,t){return e.category===t}function Oe(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 ke(e,t){let n=t.ts??Date.now();e.emit(Oe(`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 Ae(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 je(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 Me(e,t){return`${e}@${je(t)}`}function Ne(e,t,n){return e[Me(t,n)]}function Pe(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?Me(i,n):i]=a;return r}function Fe(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=Ne(e,i,n);t!==void 0&&(r[i]=t)}return r}var Ie=class{_ctx=null;_config;_readinessGeneration=typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14);_registeredCapNames=[];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(ge.AddonStarted);let n=Re(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(ge.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}async getGlobalSettings(e,t,n){let r=this.globalSettingsSchema(t);if(!r)return{sections:[]};let i=await this.resolveGlobalStore(n,t);return we(r,e?{...i,...e}:i)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=je(e??this._ctx?.kernel?.localNodeId);return r.size>0?Fe(n,r,i):n}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=je(this._ctx?.kernel?.localNodeId),i=je(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?Pe(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(ge.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=>Le(e.fields)):[]);return this._perNodeKeysCache.set(t,i),i}maybeAutoRestart(e,t){if(!t)return;let n=new Set;for(let e of t.sections)for(let t of e.fields)t.type===`separator`||t.type===`info`||t.requiresRestart&&n.add(t.key);if(n.size===0||!Object.keys(e).some(e=>n.has(e)))return;let r=this._ctx;if(!r)return;let i=r.id;setImmediate(()=>{r.api.addons?.restartAddon?.mutate({addonId:i}).then(()=>{r.logger.info(`addon auto-restart triggered by restart-required setting change`,{meta:{changedFields:Object.keys(e).filter(e=>n.has(e))}})}).catch(e=>{r.logger.error(`addon auto-restart failed`,{meta:{error:e instanceof Error?e.message:String(e)}})})})}async getDeviceSettings(e){let t=this.deviceSettingsSchema();return t?we(t,await this._ctx?.settings?.readDeviceStore(e)??{}):{sections:[]}}async updateDeviceSettings(e,t){await this._ctx?.settings?.writeDeviceStore(e,t)}_subscriptions=[];watchCapability(e,t){let n=new Set(Array.isArray(e)?e:[e]);this.subscribe({category:`system.ready-state`},e=>{let r=e.data;if(typeof r.capName!=`string`||!n.has(r.capName)||r.scope?.type!==`node`)return;let i=r.scope.nodeId;if(typeof i!=`string`||i.length===0)return;let a=r.capName;r.state===`down`?t.onDown?.(i,a):r.state===`ready`&&t.onReady?.(i,a)})}subscribe(e,t){let n=this.ctx.eventBus.subscribe(e,t);this._subscriptions.push(n)}emitLifecycle(e,t){try{let n=this._ctx;if(!n)return;n.eventBus.emit({id:`${n.id}-${Date.now()}`,timestamp:new Date,source:{type:`addon`,id:n.id,nodeId:n.kernel.localNodeId??`hub`},category:e,data:{addonId:n.id,...t}})}catch{}}emitReadinessForProviders(e){let t=this._ctx;if(!t||this._registeredCapNames.length===0)return;let n=t.kernel?.localNodeId??`hub`,r=n.includes(`/`)?n.split(`/`)[0]:n;for(let n of this._registeredCapNames)try{ke(t.eventBus,{capName:n,scope:{type:`node`,nodeId:r},state:e,generation:this._readinessGeneration,sourceNodeId:r})}catch{}}async resolveModelsDir(){let{join:t}=await n(async()=>{let{join:t}=await import(`./__vite-browser-external-B6qJ4svC.js`).then(t=>e(t.t()));return{join:t}},__vite__mapDeps([0,1])),{promises:r}=await n(async()=>{let{promises:t}=await import(`./__vite-browser-external-B6qJ4svC.js`).then(t=>e(t.t()));return{promises:t}},__vite__mapDeps([0,1])),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=je(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?Ne(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 Ae({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 Ae({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{return await e.readAddonStore()??{}}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._ctx?.logger?.warn?.(`readAddonStore: settings-store unavailable after retries — using defaults`,{meta:{error:n instanceof Error?n.message:String(n)}}),{}}};function Le(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...Le(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...Le(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function Re(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function ze(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=Be(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=He(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 Be(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=Ve(t.path,n);if(e!==null)return{route:t,params:e}}return null}function Ve(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 He(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 Ue=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)}}}},We=a({codec:m([`h264`,`h265`,`copy`]),profile:m([`baseline`,`main`,`high`]).optional(),level:g().optional(),width:o().int().positive().optional(),height:o().int().positive().optional(),fps:o().positive().optional(),bitrateKbps:o().int().positive().optional(),gopFrames:o().int().positive().optional(),bf:o().int().min(0).optional(),preset:m([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:m([`zerolatency`,`film`,`animation`]).optional()}),Ge=l([y(`passthrough`),a({codec:m([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:o().int().positive().optional(),sampleRateHz:o().int().positive().optional(),channels:l([y(1),y(2)]).optional()})]),Ke=a({video:We,audio:Ge,inputArgs:p(g()).optional(),outputArgs:p(g()).optional()});function qe(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`}}var Je={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},Ye={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 Xe(e){return[`-hide_banner`,`-loglevel`,e]}function Ze(e){return!e||e===`none`||e===`copy`}function Qe(e,t){let n=[];if(Ze(t)||n.push(`-hwaccel`,String(t)),e.extraArgs?.length&&n.push(...e.extraArgs),e.analyzeDurationUs!==void 0&&n.push(`-analyzeduration`,String(e.analyzeDurationUs)),e.probeSizeBytes!==void 0&&n.push(`-probesize`,String(e.probeSizeBytes)),e.fflags?.length)for(let t of e.fflags)n.push(`-fflags`,t);return e.rtspTransport&&n.push(`-rtsp_transport`,e.rtspTransport),n.push(`-i`,e.url),n}function $e(e,t){return!e||t.some(e=>e===`-vf`)?[]:e.mode===`exact`?[`-vf`,`scale=${e.width}:${e.height}`]:[`-vf`,`scale='min(${e.width},iw)':'min(${e.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2`]}function et(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 tt(e,t){if(e.kind===`copy`)return[`-c:v`,`copy`,...e.bitstreamFilter?[`-bsf:v`,e.bitstreamFilter]:[]];let n=[...$e(e.scale,t),`-c:v`,e.encoder];return e.preset!==void 0&&n.push(`-preset`,e.preset),e.tune!==void 0&&n.push(`-tune`,e.tune),e.profile!==void 0&&n.push(`-profile:v`,e.profile),e.level!==void 0&&n.push(`-level`,e.level),e.pixelFormat!==void 0&&n.push(`-pix_fmt`,e.pixelFormat),e.fps!==void 0&&n.push(`-r`,String(e.fps)),e.gopFrames!==void 0&&n.push(`-g`,String(e.gopFrames)),e.forceKeyFramesSeconds!==void 0&&n.push(`-force_key_frames`,`expr:gte(t,n_forced*${e.forceKeyFramesSeconds})`),e.bf!==void 0&&n.push(`-bf`,String(e.bf)),n.push(...et(e)),e.bitstreamFilter!==void 0&&n.push(`-bsf:v`,e.bitstreamFilter),n}function nt(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`,Je[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 rt(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 it(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var at=`+frag_keyframe+empty_moov+default_base_moof`;function ot(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?ct(e):[`-f`,e.container,`pipe:1`]}var st=.9;function ct(e){return[`-movflags`,at,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*st*1e3))),`-f`,`mp4`,`pipe:1`]}function lt(e){return[`-map`,`0:a:0?`,...nt(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:Ye[e.codec]),...rt({url:e.rtpUrl,sdpFile:e.sdpFile})]}function ut(e){let t=[...Xe(e.logLevel),...Qe(e.input,e.decodeHwAccel)],n=e.threadCount>0?[`-threads`,String(e.threadCount)]:[];if(e.sink.kind===`rtp-outputs`){let r=e.sink.video?[`-an`,`-map`,`0:v:0`,...tt(e.video,e.outputArgs),...n,...e.outputArgs,...rt(e.sink.video)]:[],i=e.sink.audio?[`-vn`,`-map`,`0:a:0?`,...nt(e.audio),...rt(e.sink.audio)]:[];return[...t,...r,...i]}let r=it(e.sink)?[`-an`]:nt(e.audio),i=ot(e.sink);return[...t,...tt(e.video,e.outputArgs),...n,...r,...e.outputArgs,...i,...e.audioSidecar?lt(e.audioSidecar):[]]}var dt={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 ft(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||Ze(t)||t===`auto`)return r;let i=dt[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function pt(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 mt(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:ft(i,e.decodeHwAccel,e.hardwareEncoders===!0),scale:r,...t.preset===void 0?{}:{preset:t.preset},...t.tune===void 0?{}:{tune:t.tune},...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:pt(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var ht={video:{codec:`h264`,profile:`baseline`,level:`3.1`,width:1280,height:720,fps:25,bitrateKbps:2500,gopFrames:25,bf:0,preset:`veryfast`,tune:`zerolatency`},audio:`passthrough`},gt={...ht,video:{...ht.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},_t={...ht,audio:{codec:`opus`}},vt={kind:`cbr`,vbvSeconds:1},yt={kind:`cap`,vbvSeconds:2},bt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},xt=16*1024*1024,St=8,Ct=16,wt=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??xt}get fault(){return this.faultReason}get pendingBytes(){return this.buffer.length-this.unitStart}get discardedInterstitialTypes(){return[...this.interstitial]}push(e){return this.faultReason!==null||e.length===0?[]:(this.append(e),this.pendingBytes>this.maxUnitBytes?this.fail(`a single fMP4 unit exceeded ${this.maxUnitBytes} bytes — this stream is not fragmented`):this.drainBoxes())}append(e){if(this.buffer.length===0){this.buffer=e.slice();return}let t=new Uint8Array(this.buffer.length+e.length);t.set(this.buffer,0),t.set(e,this.buffer.length),this.buffer=t}drainBoxes(){let e=[];for(;;){let t=this.readHeader();if(this.faultReason!==null)return e;if(t===null||this.cursor+t.totalBytes>this.buffer.length)break;let n=this.cursor,r=n+t.totalBytes;this.cursor=r;let i=this.consumeBox(t.type,n,r);if(this.faultReason!==null)return e;i!==null&&e.push(i)}return this.compact(),e}consumeBox(e,t,n){if(this.state===`init`){if(e!==`moof`)return null;if(t===this.unitStart)return this.fail(`a moof arrived before any initialisation box — there is no ftyp/moov to send`),null;let n=this.emit(`init`,this.unitStart,t);return this.unitStart=t,this.state=`fragment`,n}if(this.state===`idle`)return e===`moof`?(this.unitStart=t,this.state=`fragment`,null):(this.interstitial.add(e),this.unitStart=n,null);if(e!==`mdat`)return null;let r=this.emit(`fragment`,this.unitStart,n);return this.unitStart=n,this.state=`idle`,r}readHeader(){let e=this.buffer.length-this.cursor;if(e<St)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<Ct)return null;let n=t.getBigUint64(this.cursor+St);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<St?(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 Tt(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 Et(e){return!e||e===`none`||e===`copy`}async function Dt(e){let t=e.override;if(t!=null&&t!==``)return Et(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=Et(r)?null:r;return e.cache?.write(i),i}var Ot=me();function kt(e){let t=JSON.stringify(e,At);return(0,Ot.createHash)(`sha256`).update(t??``).digest(`hex`)}function At(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 jt(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var Mt=`\0unset`;function Nt(e){return{codec:e.codec,profile:e.profile??Mt,level:e.level??Mt,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??Mt,tune:e.tune??Mt}}function Pt(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function Ft(e,t=jt(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:Nt(e.encode.video),audio:Pt(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??Mt,pixelFormat:e.pixelFormat??Mt,decodeHwAccel:e.decodeHwAccel??Mt}}function It(e,t=jt(e)){return`egress:${kt(Ft(e,t))}`}var Lt=m([`singleton`,`device`,`widget`]),Rt=a({capName:g(),kind:Lt,deviceId:o().optional(),reachable:v(),latencyMs:o(),error:g().optional()}),zt=a({addonId:g(),caps:p(Rt).readonly(),widgets:p(Rt).readonly()}),Bt=a({nodeId:g(),addons:p(zt).readonly()}),Vt=a({ok:v(),degraded:v(),checkedAt:g(),nodes:p(Bt).readonly(),summary:a({total:o(),reachable:o(),unreachable:o()})}),Ht=`hub-only`;function Ut(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function Wt(e){let t=Ut(e).placement;return t===`any-node`||t===`agent-only`}function Gt(e){return Ut(e).placement===`agent-only`}function Kt(e){return Ut(e).group}function qt(e,t){return e.execution?.group??t}function Jt(e){return Ut(e).placement}function Yt(e){return e.execution?.isolate===!0}var Xt=`x-camstack-dataplane-secret`,Zt=m([`running`,`done`,`failed`,`cancelled`]),Qt=m([`adopted`,`already-adopted`,`failed`,`cancelled`]),$t=a({childNativeId:g(),outcome:Qt,parentDeviceId:o().int().nonnegative().nullable(),accessoryCount:o().int().nonnegative(),error:g().nullable()}),en=a({jobId:g(),addonId:g(),integrationId:g(),state:Zt,total:o().int().nonnegative(),processed:o().int().nonnegative(),adopted:o().int().nonnegative(),alreadyAdopted:o().int().nonnegative(),failed:o().int().nonnegative(),accessoriesCreated:o().int().nonnegative(),currentChildNativeId:g().nullable(),results:p($t).readonly(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),tn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},nn=m([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`]),rn=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`],an=b(`kind`,[a({kind:y(`device-disabled`)}),a({kind:y(`wrapper-binding`),capName:g()}),a({kind:y(`recording-config`)}),a({kind:y(`notification-mute`)}),a({kind:y(`camera-audio`),capName:g()}),a({kind:y(`camera-mask`),capName:g()}),a({kind:y(`broker-audio-mute`)})]),on=m([`no-provider`,`source-unreachable`,`not-configured`]),sn=a({id:nn,label:g(),costWhenOff:g(),available:v(),unavailableReason:on.optional(),enabled:v(),authority:an}),cn=a({deviceId:o().int(),switches:p(sn).readonly(),fetchedAt:o()}),ln=`detection-pipeline`,un=`audio-analysis`,dn=`privacy-mask`,fn={"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:ln},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:dn},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:dn},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:un},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 pn(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:`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:`source-unreachable`}:e.supported?e.configuredRegions===null||e.enabled===null?{available:!1,enabled:!1,unavailableReason:`source-unreachable`}:e.configuredRegions===0?{available:!1,enabled:!1,unavailableReason:`not-configured`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!1,unavailableReason:`no-provider`}}case`broker-audio-mute`:{let e=t.brokerAudio;return e===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!e.muted}}}}function mn(e){return rn.map(t=>{let n=fn[t],r=pn(n,e);return{id:n.id,label:n.label,costWhenOff:n.costWhenOff,available:r.available,...r.unavailableReason===void 0?{}:{unavailableReason:r.unavailableReason},enabled:r.enabled,authority:n.authority}})}function hn(e){return e.filter(e=>fn[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function gn(e){let t=[],n=[];for(let r of rn){let i=fn[r];if(!i.countsAsSwitchedOff)continue;let a=pn(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var _n={high:`High`,mid:`Mid`,low:`Low`};function vn(e){return _n[e]??e.charAt(0).toUpperCase()+e.slice(1)}function yn(e){return(e.width??0)*(e.height??0)}function bn(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:yn(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 xn(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function Sn(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 S(e){return typeof e==`string`}function Cn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wn(e){return S(e)&&e.trim()?{url:e}:Cn(e)&&S(e.url)&&e.url.trim()?{url:e.url,label:S(e.label)?e.label:void 0}:null}function Tn(e){let t=S(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=wn(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=S(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:S(e.main_stream_name)?e.main_stream_name:void 0});let i=S(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:S(e.sub_stream_name)?e.sub_stream_name:void 0});let a=S(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:S(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function En(e){if(e.length===0)return{};let t=bn(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 Dn={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},On={debug:0,info:1,warn:2,error:3};function kn(e,t){return On[e]<=On[t]}var An=m([`recording`,`events`]),jn=m([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),Mn=m([`retention`,`quota`,`manual`,`operator`,`maintenance`]),Nn=a({id:g(),at:o(),domain:An,op:jn,reason:Mn,deviceId:o().nullable(),nodeId:g(),itemsAffected:o(),bytesReclaimed:o(),detail:g().nullable(),actor:g()}),Pn=a({deviceId:o().optional(),limit:o().int().min(1).max(1e3).optional()}),C=m([`high`,`mid`,`low`]),Fn=[`high`,`mid`,`low`],In=m([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),Ln=a({width:o().int().positive(),height:o().int().positive()}),Rn=a({camStreamId:g().min(1),deviceId:o().int().nonnegative(),kind:In,url:g().optional(),codec:g().optional(),resolution:Ln.optional(),fps:o().positive().optional(),label:g().optional(),deviceFeatures:p(g()).optional(),autoEligible:v().optional(),metadata:r(g(),d()).optional()}),zn=m([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),Bn=a({deviceId:o().int().nonnegative(),profile:C,brokerId:g(),sourceCamStreamId:g().nullable(),status:zn,resolution:Ln.optional(),codec:g().optional(),preBufferSec:o().nonnegative().optional(),errorMessage:g().optional()});function Vn(e,t){return`${e}/${t}`}function Hn(e,t){return`${e}/${t}`}function Un(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=C.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function Wn(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>Fn.indexOf(e.profile)-Fn.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 Gn=a({id:g(),label:g(),protocol:m([`rtsp`,`rtmp`,`annexb`,`http-mjpeg`,`webrtc`,`custom`]),url:g().optional(),resolution:a({width:o(),height:o()}).readonly().optional(),fps:o().optional(),bitrate:o().optional(),codec:g().optional(),profileHint:C.optional()}),Kn=a({type:g(),url:g(),videoCodec:g().optional(),audioCodec:g().optional(),metadata:r(g(),d()).readonly().optional()}),qn=a({type:m([`video`,`audio`]),data:_(Uint8Array),pts:o(),dts:o(),keyframe:v(),codec:g()}),Jn=a({data:_(Uint8Array),width:o(),height:o(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),timestamp:o()}),w=a({shmId:g(),slot:o().int().nonnegative(),seq:o().int().nonnegative(),width:o().int().positive(),height:o().int().positive(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:o(),byteLength:o().int().nonnegative(),nodeId:g(),slotCount:o().int().positive()}),Yn=m([`rgb`,`bgr`,`yuv420`,`gray`]),Xn=a({brokerId:g(),format:Yn,maxFps:o().positive().optional(),tag:g().optional()}),Zn=a({subscriptionId:g(),maxFps:o().nonnegative()}),Qn=a({data:_(Uint8Array),sampleRate:o().int().positive(),channels:o().int().positive(),timestamp:o()}),$n=a({brokerId:g(),tag:g().optional()}),er=a({subscriptionId:g()}),tr=m([`idle`,`connecting`,`streaming`,`error`,`stopped`]),nr=a({status:tr,inputFps:o(),decodeFps:o(),encodedSubscribers:o(),decodedSubscribers:o(),uptimeMs:o(),bitrateKbps:o(),idrIntervalMs:o(),codec:g().optional(),totalBytes:o(),packetCount:o(),rtspClients:o(),pipeClients:o(),preBufferSec:o(),preBufferMs:o(),preBufferPackets:o(),decoderNodeId:g().nullable(),audio:a({codec:g(),sampleRate:o(),channels:o(),supported:v()}).nullable().optional(),audioMuted:v().optional(),audioMutedDropped:o().optional()}),rr=a({profile:C,brokerId:g(),url:g(),mutedUrl:g(),enabled:v(),codec:g().optional(),resolution:Ln.optional()}),ir={preMs:5e3,postMs:1e4},ar=o().int().min(0).max(6),or=/^([01]\d|2[0-3]):[0-5]\d$/,sr=m([`off`,`events`,`continuous`]),cr=a({motion:v().optional(),audioThresholdDbfs:o().optional()}),lr=m([`continuous`,`events`]),ur=cr,dr=a({days:p(ar),start:g().regex(or),end:g().regex(or),mode:lr,triggers:ur.optional(),preBufferSec:o().min(0).optional(),postBufferSec:o().min(0).optional()}),fr={preBufferSec:15,postBufferSec:30},pr=fr.postBufferSec*1e3,mr=a({maxAgeDays:o().min(0).optional(),maxSizeGb:o().min(0).optional()}),hr=m([`minimal`,`low`,`standard`,`high`,`max`]),gr=`standard`,_r={minimal:{tileWidth:240,tileHeight:135,quality:55},low:{tileWidth:320,tileHeight:180,quality:60},standard:{tileWidth:480,tileHeight:270,quality:72},high:{tileWidth:640,tileHeight:360,quality:80},max:{tileWidth:960,tileHeight:540,quality:85}},vr={minimal:`Minimal (240p)`,low:`Low (320p)`,standard:`Standard (480p)`,high:`High (640p)`,max:`Max (960p)`},yr=[`minimal`,`low`,`standard`,`high`,`max`];function br(e){return _r[e??`standard`]}var xr=a({enabled:v(),mode:sr.optional(),profiles:p(C).optional(),segmentSeconds:o().int().positive().optional(),bands:p(dr).default([]),retention:mr.optional(),scrubThumbnails:hr.optional()}).strict();function Sr(e){return!e.enabled||e.bands.length===0?`off`:e.bands.some(e=>e.mode===`continuous`)?`continuous`:`events`}var Cr=[`high`,`low`];function wr(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=>Cr.includes(e));return n.length>0?n:[...e]}var Tr=m([`queued`,`running`,`done`,`failed`,`cancelled`]),Er=a({jobId:g(),state:Tr,fromLocationId:g(),toLocationId:g(),deviceId:o().nullable(),entities:p(g()),filesMoved:o().int(),bytesMoved:o().int(),filesTotal:o().int().nullable(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Dr=m([`recordings`,`recordingsLow`]),Or=a({fromLocationId:g(),toLocationId:g(),entities:p(m([`segments`])).optional(),footageClass:Dr.optional(),deviceId:o().int().optional(),profiles:p(g()).optional(),throttleMbps:o().min(1).max(1e3).optional(),sinceMs:o().int().optional()}),T=a({leaseId:g().min(1)}),kr=Or.extend({leaseId:g().min(1)}),Ar=a({toLocationId:g(),throttleMbps:o().min(1).max(1e3).optional()}),jr=Ar.extend({leaseId:g().min(1)}),Mr=m([`recordings`,`recordingsLow`,`eventMedia`]),Nr=a({recordings:g().min(1).optional(),recordingsLow:g().min(1).optional(),eventMedia:g().min(1).optional()}).refine(e=>Object.keys(e).length>0,{message:`select at least one storage class`}),Pr=a({destinations:Nr,throttleMbps:o().min(1).max(1e3).optional()}),Fr=m([`planning`,`pausing`,`moving`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),Ir=m([`pipeline`,`recorder`,`analytics`]),Lr=a({storageClass:Mr,fromLocationId:g(),toLocationId:g(),moverJobId:g().nullable(),state:Tr.nullable(),error:g().nullable()}),Rr=a({jobId:g(),phase:Fr,destinations:Nr,throttleMbps:o(),moves:p(Lr),pauseLeaseId:g().nullable(),pausedParticipants:p(Ir),repointed:v(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),zr=a({destinations:Nr,moves:p(a({storageClass:Mr,fromLocationId:g(),toLocationId:g()}))}),Br=[`face`,`plate`],Vr=[`face`,`plate`,`clip`,`custom`],Hr=g().regex(/^[a-z][a-zA-Z0-9-]*$/),E=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),type:g(),displayName:g().min(1),providerId:g().min(1),config:r(g(),d()),nodeId:g().optional(),isDefault:v().default(!1),isSystem:v().default(!1),enabled:v().optional(),capacity:a({totalBytes:o(),availableBytes:o()}).nullable().optional(),createdAt:o(),updatedAt:o()}),D=l([Hr,g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),Ur=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*$/,{message:`id must start with a lowercase letter and contain only letters, digits, or hyphens`}),displayName:g().min(1,{message:`displayName must not be empty`}),description:g().optional(),cardinality:m([`single`,`multi`]),defaultsTo:g().optional(),defaultRoot:m([`data`,`media`,`backup`]).optional()}),Wr=a({inputFps:o(),outputFps:o(),avgDecodeTimeMs:o(),droppedFrames:o(),lagMs:o().optional(),effectiveFps:o().optional(),adaptiveFps:o().optional()}),Gr=a({codec:g(),maxFps:o().default(0),outputFormat:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]).default(`jpeg`),scale:o().default(1),width:o().optional(),height:o().optional(),deviceId:o().int().nonnegative().optional(),tag:g().optional(),frameSink:m([`callback`,`shm`]).default(`callback`),debug:v().optional()}),Kr={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},qr={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},Jr=[{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:Kr},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Kr},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Kr},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Kr},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Kr},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Kr},{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:qr},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:qr},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:qr},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:qr},{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 Yr(e){return Jr.find(t=>t.id===e)}var Xr=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${Qr(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function Zr(e,t){return`${e}|${Qr(t)}`}function Qr(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function $r(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function ei(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 ti=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??ni(),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(Zr(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=Zr(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&&$r(r.state)<=$r(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} (${Qr(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&&ei(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 Xr(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${Qr(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(Oe(`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=Zr(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} (${Qr(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&&ei(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} (${Qr(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&ei(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 ni(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function ri(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function ii(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=ai(e,s);if(t)return a(t)}}return a(o[0])}function ai(e,t){let n=t.width*t.height,r,i;for(let t of e){if(t.resolution===void 0)continue;let e=t.resolution.width*t.resolution.height;e>=n?(!r||e<r.pixels)&&(r={entry:t,pixels:e}):(!i||e>i.pixels)&&(i={entry:t,pixels:e})}return r?.entry??i?.entry}var oi=a({id:g(),name:g(),category:g().optional(),description:g().optional(),icon:g().optional()}),si=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],ci={yolo26:`YOLO26`,yolov9:`YOLOv9`};function li(e){return ci[e]??e.toUpperCase()}var ui=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function di(e,t){let n=li(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(ui,``).trim();return r.length>0?r:t}function fi(e,t){let n=[];return t===`fast`&&n.push(`Fast`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function pi(e){return si.filter(t=>e.formats[t]!==void 0)}function mi(e){let t=si.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var hi=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],gi=[`fp32`,`int8`];function _i(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:fi(t,n),formats:pi(e),sizeMB:mi(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?gi.indexOf(e.precision)-gi.indexOf(t.precision):e.optimization===`fast`?1:-1:(t.resolution??1/0)-(e.resolution??1/0)),a=r.find(e=>e.precision===`fp32`&&e.optimization===`standard`)??r[0];if(a===void 0)continue;let o=i.find(e=>e.id===a.modelId);t.push({tier:n,label:o?di(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=hi.indexOf(e.tier),r=hi.indexOf(t.tier);return n!==-1&&r!==-1?n-r:n===-1?r===-1?e.tier.localeCompare(t.tier):1:-1}),n.push({family:e,label:li(e),tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function vi(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 yi(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 bi=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],xi=a({url:g(),sizeMB:o(),isDirectory:v().optional(),files:p(g()).readonly().optional(),runtimes:p(m([`node`,`python`])).readonly().optional()}),Si=a({url:g(),filename:g(),sizeMB:o()}),Ci=a({onnx:xi.optional(),coreml:xi.optional(),openvino:xi.optional(),tflite:xi.optional(),pt:xi.optional(),gguf:xi.optional()}),wi=a({family:g(),tier:g(),precision:m([`fp32`,`int8`]).optional(),optimization:m([`standard`,`fast`]).optional(),resolution:o().int().positive().optional()}),Ti=a({id:g(),name:g(),description:g(),formats:Ci,inputSize:a({width:o(),height:o()}),inputChannels:o().int().positive().optional(),labels:p(oi).readonly(),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`]).optional(),outputProbabilities:v().optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),postprocessor:x().optional(),faceAlignment:v().optional(),extraFiles:p(Si).readonly().optional(),legacy:v().optional(),metrics:a({map50:o().optional(),p95LatencyMs:r(g(),o()).optional()}).optional(),license:g().optional(),group:wi.optional()}),Ei=b(`format`,[a({format:y(`openvino`),precisions:p(m([`fp16`,`int8`])).min(1).readonly()}),a({format:y(`coreml`)})]),Di=a({id:g().regex(/^[a-zA-Z0-9._-]+$/),name:g(),labels:p(oi).readonly(),inputSize:a({width:o(),height:o()}),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`]).optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),outputFormat:m([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:v().optional()}),Oi=a({format:m(bi),precision:m([`fp16`,`int8`]).optional(),sizeMB:o(),validated:v(),files:p(g()).readonly()}),ki=a({entry:Ti,artifacts:p(Oi).readonly()});function Ai(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function ji(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function Mi(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function Ni(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 Pi(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=Ai(e.method);return Mi(e.scopes,e.addonId,n)?{allowed:!0}:{allowed:!1,reason:`integration token holds no addon:${e.addonId}[${n}] grant`}}var O=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},k=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}};function A(e,t,n){if(typeof e!=`number`||!Number.isFinite(e))throw new k(`${t}: argument ${n+1} must be a finite number`);return e}function Fi(e,t,n){if(typeof e!=`string`)throw new k(`${t}: argument ${n+1} must be a string`);return e}function j(e,t){if(!Number.isFinite(e))throw new k(`${t}: produced a non-finite result`);return e}function Ii(e,t){return e.map((e,n)=>A(e,t,n))}var Li=1/0,Ri={min:{minArgs:1,maxArgs:Li,apply:e=>j(Math.min(...Ii(e,`min`)),`min`)},max:{minArgs:1,maxArgs:Li,apply:e=>j(Math.max(...Ii(e,`max`)),`max`)},abs:{minArgs:1,maxArgs:1,apply:e=>j(Math.abs(A(e[0],`abs`,0)),`abs`)},floor:{minArgs:1,maxArgs:1,apply:e=>j(Math.floor(A(e[0],`floor`,0)),`floor`)},ceil:{minArgs:1,maxArgs:1,apply:e=>j(Math.ceil(A(e[0],`ceil`,0)),`ceil`)},sqrt:{minArgs:1,maxArgs:1,apply:e=>j(Math.sqrt(A(e[0],`sqrt`,0)),`sqrt`)},round:{minArgs:1,maxArgs:2,apply:e=>{let t=A(e[0],`round`,0),n=e.length>1?Math.trunc(A(e[1],`round`,1)):0;if(n<0||n>100)throw new k(`round: digits must be between 0 and 100`);let r=10**n;return j(Math.round(t*r)/r,`round`)}},pow:{minArgs:2,maxArgs:2,apply:e=>j(A(e[0],`pow`,0)**A(e[1],`pow`,1),`pow`)},clamp:{minArgs:3,maxArgs:3,apply:e=>{let t=A(e[0],`clamp`,0),n=A(e[1],`clamp`,1),r=A(e[2],`clamp`,2);if(n>r)throw new k(`clamp: lower bound is greater than upper bound`);return j(Math.min(r,Math.max(n,t)),`clamp`)}},avg:{minArgs:1,maxArgs:Li,apply:e=>{let t=Ii(e,`avg`);return j(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:Li,apply:e=>j(Ii(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:Li,apply:e=>{for(let t of e)if(t!==null)return t;return null}},age:{minArgs:2,maxArgs:2,apply:e=>j(A(e[0],`age`,0)-A(e[1],`age`,1),`age`)},convert:{minArgs:3,maxArgs:3,apply:(e,t)=>{let n=A(e[0],`convert`,0),r=Fi(e[1],`convert`,1).trim(),i=Fi(e[2],`convert`,2).trim();if(t.convert){let e=t.convert(n,r,i);if(e===null)throw new k(`convert: cannot convert '${r}' to '${i}'`);return j(e,`convert`)}if(r===i)return n;throw new k(`convert: unit conversion table not installed`)}}},zi=Object.freeze(Object.assign(Object.create(null),Ri)),Bi=new Set(Object.keys(Ri)),Vi=2048,Hi=4096,Ui=/^[A-Za-z_][A-Za-z0-9_]*$/,Wi=new Set([`now`,`true`,`false`,`null`]),Gi=new Set([`true`,`false`,`null`]);function Ki(e){return e>=`0`&&e<=`9`}function qi(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function Ji(e){return qi(e)||Ki(e)}function Yi(e){return e===` `||e===` `||e===`
|
|
3
3
|
`||e===`\r`||e===`\f`||e===`\v`}function Xi(e){if(e.length>2048)throw new O(`expression too long (${e.length} > ${Vi} chars)`,0);let t=[],n=0,r=e.length;for(;n<r;){let i=e[n];if(Yi(i)){n+=1;continue}if(Ki(i)){let i=n;for(;n<r&&Ki(e[n]);)n+=1;if(n<r&&e[n]===`.`){if(n+1>=r||!Ki(e[n+1]))throw new O(`malformed number: decimal point needs a digit`,n);for(n+=1;n<r&&Ki(e[n]);)n+=1}let a=e.slice(i,n),o=Number(a);if(!Number.isFinite(o))throw new O(`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 O(`invalid string escape: '\\${t}'`,n)}if(t===a){c=!0,n+=1;break}s+=t,n+=1}if(!c)throw new O(`unterminated string literal`,o);t.push({type:`string`,value:s,pos:o});continue}if(qi(i)){let i=n;for(;n<r&&Ji(e[n]);)n+=1;let a=e.slice(i,n);Gi.has(a)?t.push({type:`keyword`,keyword:Zi(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(Qi(i)){t.push({type:`punct`,punct:i,pos:n}),n+=1;continue}throw new O(`unexpected character '${i}'`,n)}return t.push({type:`eof`,pos:r}),t}function Zi(e){return e===`true`?`true`:e===`false`?`false`:`null`}function Qi(e){return e===`(`||e===`)`||e===`,`||e===`?`||e===`:`||e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`!`||e===`<`||e===`>`}var $i={"||":1,"&&":2,"==":3,"!=":3,"<":4,"<=":4,">":4,">=":4,"+":5,"-":5,"*":6,"/":6,"%":6};function ea(e){return e===`&&`||e===`||`}function ta(e){return e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`==`||e===`!=`||e===`<`||e===`<=`||e===`>`||e===`>=`}var na=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 O(`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 O(`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 O(`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=$i[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(),ea(i))t={kind:`logical`,op:i,left:t,right:a};else if(ta(i))t={kind:`binary`,op:i,left:t,right:a};else throw new O(`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 O(`unexpected token '${e.punct}'`,e.pos);case`eof`:throw new O(`unexpected end of expression`,e.pos)}}parseCall(e,t){if(!Bi.has(e))throw new O(`unknown function '${e}'`,t);this.expectPunct(`(`);let n=[];if(!this.matchPunct(`)`))for(;;){if(n.push(this.parseTernary()),n.length>16)throw new O(`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 ra(e){return new na(Xi(e)).parse()}var ia=new Map;function aa(e){let t=ia.get(e);if(t!==void 0)return ia.delete(e),ia.set(e,t),t;let n;try{n={ok:!0,parsed:ra(e)}}catch(e){n={ok:!1,error:e instanceof O?e.message:String(e)}}if(ia.set(e,n),ia.size>256){let e=ia.keys().next().value;e!==void 0&&ia.delete(e)}return n}function oa(e){let t=aa(e);if(t.ok)return t.parsed;throw new O(t.error)}function sa(e){return aa(e)}var ca=Object.freeze({});function la(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 ua(e){return typeof e==`number`&&Number.isFinite(e)}function da(e){return!!e}function fa(e,t){if(!Number.isFinite(e))throw new k(`${t} produced a non-finite result`);return e}function pa(e){if(e.steps+=1,e.steps>e.maxSteps)throw new k(`expression evaluation step budget exceeded`)}function M(e,t){switch(pa(t),e.kind){case`literal`:return e.value;case`identifier`:if(!(e.name in t.scope))throw new k(`unknown identifier: ${e.name}`);return t.scope[e.name];case`unary`:return ma(e.op,M(e.operand,t));case`binary`:return ha(e.op,M(e.left,t),M(e.right,t));case`logical`:{let n=M(e.left,t);return e.op===`&&`?da(n)?M(e.right,t):n:da(n)?n:M(e.right,t)}case`conditional`:return da(M(e.test,t))?M(e.consequent,t):M(e.alternate,t);case`call`:return ga(e.callee,e.args.map(e=>M(e,t)),t.hooks)}}function ma(e,t){if(e===`!`)return!da(t);if(!ua(t))throw new k(`unary "-" requires a finite number`);return fa(-t,`unary "-"`)}function ha(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(ua(t)&&ua(n))return fa(t+n,`"+"`);throw new k(`"+" requires two numbers or two strings`);case`-`:case`*`:case`/`:case`%`:if(!ua(t)||!ua(n))throw new k(`"${e}" requires two finite numbers`);return fa(e===`-`?t-n:e===`*`?t*n:e===`/`?t/n:t%n,`"${e}"`);case`<`:case`<=`:case`>`:case`>=`:if(ua(t)&&ua(n)||typeof t==`string`&&typeof n==`string`)return e===`<`?t<n:e===`<=`?t<=n:e===`>`?t>n:t>=n;throw new k(`"${e}" requires two numbers or two strings`)}}function ga(e,t,n){if(!Object.prototype.hasOwnProperty.call(zi,e))throw new k(`unknown function: ${e}`);let r=zi[e];if(t.length<r.minArgs||t.length>r.maxArgs)throw new k(`${e}: wrong number of arguments (${t.length})`);return r.apply(t,n)}function _a(e,t,n){return M(e,{scope:t,hooks:n?.hooks??ca,maxSteps:n?.maxSteps??4096,steps:0})}function va(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 ya(e){let t=Object.keys(e.bindings);if(t.length>32)return`too many bindings (${t.length} > 32)`;for(let e of t){if(!Ui.test(e))return`invalid binding name '${e}'`;if(Wi.has(e))return`binding name '${e}' is reserved`;if(Bi.has(e))return`binding name '${e}' shadows a builtin function`}let n=sa(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 ba(e,t,n,r){let i=sa(e);if(!i.ok)return{ok:!1,error:i.error};let a=la({...t,now:n});try{return{ok:!0,value:_a(i.parsed.ast,a,r)}}catch(e){return{ok:!1,error:e instanceof k?e.message:String(e)}}}var xa=a({kind:y(`field`).optional(),sourceKey:g(),cap:g(),fieldPath:g()}),Sa=a({kind:y(`literal`),value:l([g(),o(),v(),le()])}),Ca=a({kind:y(`global`),sourceStableId:g(),cap:g(),fieldPath:g()}),wa=l([xa,Sa,Ca]),Ta=a({expr:g().min(1).max(Vi),bindings:r(g().regex(Ui),wa)}).superRefine((e,t)=>{let n=ya(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),Ea=m([`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`contains`,`in`]),Da=a({kind:y(`condition`),deviceId:o().int().nonnegative(),cap:g().min(1),fieldPath:g().min(1),operator:Ea,value:l([g(),o(),v(),p(l([g(),o()]))])}),Oa=a({kind:y(`expression`),expr:g().min(1).max(Vi),bindings:r(g().regex(Ui),wa)}).superRefine((e,t)=>{let n=ya(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),ka=i(()=>b(`kind`,[a({kind:y(`all`),children:p(ka)}),a({kind:y(`any`),children:p(ka)}),a({kind:y(`not`),child:ka}),Da,Oa])),Aa=b(`kind`,[a({kind:y(`device-state`),deviceId:o().int().nonnegative(),cap:g().min(1),fieldPath:g().min(1),becomes:l([g(),o(),v()]).optional(),edge:v().optional(),forMs:o().int().min(0).max(864e5).optional(),debounceMs:o().int().min(0).max(6e5).optional()}),a({kind:y(`device-event`),category:g().min(1),deviceId:o().int().nonnegative().optional()}),a({kind:y(`schedule`),cron:g().min(1).max(120)}),a({kind:y(`manual`)})]),ja=b(`kind`,[a({kind:y(`wait`),seconds:o().min(0).max(300)}),a({kind:y(`cap`),deviceId:l([o().int(),a({$var:g().min(1)})]),cap:g().min(1),method:g().min(1),args:r(g(),d()).optional()}),a({kind:y(`code`),code:g().min(1).max(2e4)})]),Ma=a({triggers:p(Aa),conditions:ka.optional(),actions:p(ja)});function Na(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return 1+Na(e.child);let t=e.children;if(t.length===0)return 1;let n=0;for(let e of t){let t=Na(e);t>n&&(n=t)}return 1+n}function Pa(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return Pa(e.child);let t=0;for(let n of e.children)t+=Pa(n);return t}function Fa(e){return e.kind===`condition`||e.kind===`expression`?!1:e.kind===`not`?Fa(e.child):e.children.length===0?!0:e.children.some(Fa)}function Ia(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(Fa(t))return`a condition group is empty — group existing rows instead of leaving a container to fill`;let e=Na(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=Pa(t);if(n>32)return`conditions use ${n} leaves — the limit is 32`}return null}var La=15e3;function N(e){return JSON.stringify(e)}function Ra(e,t){switch(e.kind){case`all`:return`allOf([\n${e.children.map(e=>`${t} () => ${Ra(e,`${t} `)}`).join(`,
|
|
4
4
|
`)}\n${t}])`;case`any`:return`anyOf([\n${e.children.map(e=>`${t} () => ${Ra(e,`${t} `)}`).join(`,
|
|
5
5
|
`)}\n${t}])`;case`not`:return`notOf(() => ${Ra(e.child,t)})`;case`condition`:return`leaf(${N(e.deviceId)}, ${N(e.cap)}, ${N(e.fieldPath)}, ${N(e.operator)}, ${N(e.value)})`;case`expression`:return`exprLeaf(${N(e.expr)}, ${N(e.bindings)})`}}function za(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}from"./index-
|
|
1
|
+
import{K as e}from"./index-CoX6Kh_l.js";var t=e(`star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{K as e}from"./index-
|
|
1
|
+
import{K as e}from"./index-CoX6Kh_l.js";var t=e(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{K as e}from"./index-
|
|
1
|
+
import{K as e}from"./index-CoX6Kh_l.js";var t=e(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{Z as t}from"./player-overlays-
|
|
1
|
+
import{i as e}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{Z as t}from"./player-overlays-BCuyatPp.js";import"./src-BmCjCFGO.js";var n=3e4;function r(r){let i=t(),a=e({queries:r.map(e=>({queryKey:[`scenes-feed`,e],staleTime:n,refetchInterval:n,retry:!1,queryFn:async()=>({deviceId:e,monitors:(await i.trpcClient.sceneMonitor.listScenes.query({deviceId:e})).monitors})}))});return{results:a.flatMap(e=>e.data===void 0?[]:[e.data]),isLoading:a.some(e=>e.isLoading),unreachableCount:a.filter(e=>e.isError).length}}export{r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./src-BmCjCFGO.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{K as e}from"./index-
|
|
1
|
+
import{K as e}from"./index-CoX6Kh_l.js";var t=e(`mic`,[[`path`,{d:`M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z`,key:`131961`}],[`path`,{d:`M19 10v2a7 7 0 0 1-14 0v-2`,key:`1vc78b`}],[`line`,{x1:`12`,x2:`12`,y1:`19`,y2:`22`,key:`x3vr5v`}]]),n=e(`video`,[[`path`,{d:`m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5`,key:`ftymec`}],[`rect`,{x:`2`,y:`6`,width:`14`,height:`12`,rx:`2`,key:`158x01`}]]);export{t as n,n as t};
|