@camstack/addon-pipeline 1.2.80 → 1.2.81
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/{addon-utils-C4Cge0S0.js → addon-utils-CQFlZXSn.js} +1 -1
- package/dist/audio-analyzer/index.js +2 -2
- package/dist/audio-analyzer/index.mjs +1 -1
- package/dist/detection-pipeline/index.js +4 -4
- package/dist/detection-pipeline/index.mjs +2 -2
- package/dist/{dist-ZSiUDGzf.js → dist-B57MztMq.js} +143 -11
- package/dist/{dist-Bf1SE1Ew.mjs → dist-DGp0dRiq.mjs} +126 -12
- package/dist/{event-loop-stall-monitor-CjWfos2b.mjs → event-loop-stall-monitor-8vYH44kg.mjs} +1 -1
- package/dist/{event-loop-stall-monitor-VcDGoua3.js → event-loop-stall-monitor-DPA6Pu_h.js} +1 -1
- package/dist/{lazy-sharp-CC4WNiKY.js → lazy-sharp-BMgRSV9x.js} +1 -1
- package/dist/motion-wasm/index.js +2 -2
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/pipeline-runner/index.js +26 -4
- package/dist/pipeline-runner/index.mjs +25 -3
- package/dist/recorder/index.js +2 -2
- package/dist/recorder/index.mjs +1 -1
- package/dist/session-decode/decode-worker-child.js +2 -2
- package/dist/session-decode/decode-worker-child.mjs +1 -1
- package/dist/stream-broker/_stub.js +1 -1
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-B1oVjQLS.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-Cb8ynph1.mjs} +2 -2
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B2scqOH7.mjs +26 -0
- package/dist/stream-broker/{hostInit-D_m-NYyr.mjs → hostInit-GJipMxBe.mjs} +2 -2
- package/dist/stream-broker/index.js +224 -1
- package/dist/stream-broker/index.mjs +224 -1
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/dist/{worker-protocol-KDfFzKgT.js → worker-protocol-4L4SbSAo.js} +1 -1
- package/dist/{worker-protocol-p66oO1xL.mjs → worker-protocol-_e84lGuR.mjs} +1 -1
- package/package.json +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BjDv7QMq.mjs +0 -26
|
@@ -2,9 +2,9 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
5
|
+
const require_dist = require("../dist-B57MztMq.js");
|
|
6
6
|
const require_node_topology_platform = require("../node-topology-platform-CFZ7F4xW.js");
|
|
7
|
-
const require_addon_utils = require("../addon-utils-
|
|
7
|
+
const require_addon_utils = require("../addon-utils-CQFlZXSn.js");
|
|
8
8
|
let node_path = require("node:path");
|
|
9
9
|
node_path = require_dist.__toESM(node_path);
|
|
10
10
|
let node_fs = require("node:fs");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as __require } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { D as audioAnalyzerCapability, E as audioAnalysisCapability, U as mapAudioLabelToMacro, h as HF_BASE_URL, ht as hydrateSchema, it as errMsg, n as AUDIO_BACKEND_CHOICES, s as DEFAULT_AUDIO_ANALYZER_CONFIG, ut as BaseAddon } from "../dist-DGp0dRiq.mjs";
|
|
3
3
|
import { t as pickNodePlatformArch } from "../node-topology-platform-BkR_k6WT.mjs";
|
|
4
4
|
import { i as downloadFile } from "../addon-utils-A2S9D7pu.mjs";
|
|
5
5
|
import * as path$1 from "node:path";
|
|
@@ -2,11 +2,11 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
6
|
-
const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-
|
|
7
|
-
const require_lazy_sharp = require("../lazy-sharp-
|
|
5
|
+
const require_dist = require("../dist-B57MztMq.js");
|
|
6
|
+
const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-DPA6Pu_h.js");
|
|
7
|
+
const require_lazy_sharp = require("../lazy-sharp-BMgRSV9x.js");
|
|
8
8
|
const require_node_topology_platform = require("../node-topology-platform-CFZ7F4xW.js");
|
|
9
|
-
const require_addon_utils = require("../addon-utils-
|
|
9
|
+
const require_addon_utils = require("../addon-utils-CQFlZXSn.js");
|
|
10
10
|
let sharp = require("sharp");
|
|
11
11
|
sharp = require_dist.__toESM(sharp);
|
|
12
12
|
let node_child_process = require("node:child_process");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __require } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { $ as
|
|
3
|
-
import { a as getDefaultModelForFormat, c as getStepDefinition, i as ALL_STEPS, l as resolveModelForFormat, n as startEventLoopStallMonitor, o as getDefaultModelForFormatFromDef, r as ALL_PIPELINE_STEPS, s as getStep } from "../event-loop-stall-monitor-
|
|
2
|
+
import { $ as runtimeDevices$1, B as enumerateInferenceDevices, Ct as sleep, Ft as EventCategory, J as pipelineExecutorCapability, L as detectionPipelineCapability, M as defaultDeviceFor$1, Nt as string, Pt as union, Tt as array, V as evaluateZoneRules, bt as parseJsonUnknown, d as DEVICE_BACKEND_TO_FORMAT, ht as hydrateSchema, it as errMsg, jt as object, mt as createEvent, nt as supportedRuntimes$1, t as APPLE_SA_TO_MACRO, ut as BaseAddon, w as YAMNET_TO_MACRO, yt as nodePin } from "../dist-DGp0dRiq.mjs";
|
|
3
|
+
import { a as getDefaultModelForFormat, c as getStepDefinition, i as ALL_STEPS, l as resolveModelForFormat, n as startEventLoopStallMonitor, o as getDefaultModelForFormatFromDef, r as ALL_PIPELINE_STEPS, s as getStep } from "../event-loop-stall-monitor-8vYH44kg.mjs";
|
|
4
4
|
import { t as getSharp } from "../lazy-sharp-6oymT_yf.mjs";
|
|
5
5
|
import { t as pickNodePlatformArch } from "../node-topology-platform-BkR_k6WT.mjs";
|
|
6
6
|
import { a as ensureModel, o as isModelDownloaded, r as deleteModelFromDisk } from "../addon-utils-A2S9D7pu.mjs";
|
|
@@ -22806,6 +22806,25 @@ var BatteryStatusSchema = object({
|
|
|
22806
22806
|
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
22807
22807
|
lastUpdated: number(),
|
|
22808
22808
|
/**
|
|
22809
|
+
* Ms epoch of the last time the device PROVED it was reachable — a
|
|
22810
|
+
* completed firmware round-trip, an observed wake, or an inbound push
|
|
22811
|
+
* (firmware event, email). `0`/absent = never since this slice was born.
|
|
22812
|
+
*
|
|
22813
|
+
* This is the ONLY input that separates "asleep" from "gone", and it is
|
|
22814
|
+
* fed exclusively by PASSIVE signals: nothing may write it by reaching
|
|
22815
|
+
* for the radio, because a poll that confirms reachability is the same
|
|
22816
|
+
* poll that drains the battery. See {@link deriveBatteryPresence} — the
|
|
22817
|
+
* single derivation every consumer must use; no surface computes its own.
|
|
22818
|
+
*
|
|
22819
|
+
* It is deliberately NOT a clock in the
|
|
22820
|
+
* `scripts/check-runtime-state-durability.ts` sense: it is the
|
|
22821
|
+
* observation itself, and it is the only thing a 30-hour silence is
|
|
22822
|
+
* visible in. Writers quantise it (see `CONTACT_WRITE_QUANTUM_MS` in the
|
|
22823
|
+
* Reolink provider) so a value that means "recently" cannot cost a
|
|
22824
|
+
* SQLite commit per round-trip.
|
|
22825
|
+
*/
|
|
22826
|
+
lastContactAt: number().optional(),
|
|
22827
|
+
/**
|
|
22809
22828
|
* True when the source is a BINARY low-battery indicator (HA
|
|
22810
22829
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
22811
22830
|
* charge level — `percentage` is then a coarse stand-in (100 = normal,
|
|
@@ -22814,17 +22833,84 @@ var BatteryStatusSchema = object({
|
|
|
22814
22833
|
*/
|
|
22815
22834
|
binary: boolean().optional()
|
|
22816
22835
|
});
|
|
22817
|
-
|
|
22818
|
-
|
|
22819
|
-
|
|
22820
|
-
|
|
22821
|
-
|
|
22822
|
-
|
|
22823
|
-
|
|
22824
|
-
|
|
22825
|
-
|
|
22826
|
-
|
|
22827
|
-
|
|
22836
|
+
var batteryCapability = {
|
|
22837
|
+
name: "battery",
|
|
22838
|
+
scope: "device",
|
|
22839
|
+
deviceNative: true,
|
|
22840
|
+
mode: "singleton",
|
|
22841
|
+
deviceTypes: [
|
|
22842
|
+
DeviceType.Camera,
|
|
22843
|
+
DeviceType.Sensor,
|
|
22844
|
+
DeviceType.Button,
|
|
22845
|
+
DeviceType.Switch
|
|
22846
|
+
],
|
|
22847
|
+
methods: {
|
|
22848
|
+
/**
|
|
22849
|
+
* Explicitly wake the camera from low-power sleep ahead of a
|
|
22850
|
+
* streaming session start. Consumers that initiate a stream
|
|
22851
|
+
* against a sleeping battery cam (HomeKit Secure Video, Alexa
|
|
22852
|
+
* RTCSession, snapshot wrappers) call this with a short timeout
|
|
22853
|
+
* before establishing the media pipeline — the broker's own
|
|
22854
|
+
* passive wake-on-dial works but adds 5–7 seconds to first-frame,
|
|
22855
|
+
* during which the consumer renders a black screen. Pre-waking
|
|
22856
|
+
* compresses that gap.
|
|
22857
|
+
*
|
|
22858
|
+
* Returns `awoke: true` when the firmware acknowledged the wake
|
|
22859
|
+
* before `timeoutMs`. Returns `awoke: false` when it timed out OR
|
|
22860
|
+
* the cap surface is unavailable (no Baichuan / firmware
|
|
22861
|
+
* channel); the caller should still attempt the stream — the
|
|
22862
|
+
* passive broker wake remains as fallback.
|
|
22863
|
+
*/
|
|
22864
|
+
wakeForStream: method(object({
|
|
22865
|
+
deviceId: number(),
|
|
22866
|
+
/** Bound on the wait. Sensible range 3000–10000ms. */
|
|
22867
|
+
timeoutMs: number().int().min(500).max(3e4).default(8e3)
|
|
22868
|
+
}), object({
|
|
22869
|
+
awoke: boolean(),
|
|
22870
|
+
durationMs: number()
|
|
22871
|
+
}), { kind: "mutation" }) },
|
|
22872
|
+
events: {
|
|
22873
|
+
/**
|
|
22874
|
+
* Emitted whenever the cached status changes (firmware push OR
|
|
22875
|
+
* poll observes a delta). The DeviceEventPropagator mirrors this
|
|
22876
|
+
* event on the parent chain — subscribing to a camera's source
|
|
22877
|
+
* receives battery events from child accessories automatically.
|
|
22878
|
+
*/
|
|
22879
|
+
onStatusChanged: { data: object({
|
|
22880
|
+
deviceId: number(),
|
|
22881
|
+
status: BatteryStatusSchema
|
|
22882
|
+
}) } },
|
|
22883
|
+
status: {
|
|
22884
|
+
schema: BatteryStatusSchema,
|
|
22885
|
+
kind: "push",
|
|
22886
|
+
empty: {
|
|
22887
|
+
percentage: 0,
|
|
22888
|
+
charging: "none",
|
|
22889
|
+
sleeping: false,
|
|
22890
|
+
lastUpdated: 0
|
|
22891
|
+
}
|
|
22892
|
+
},
|
|
22893
|
+
/**
|
|
22894
|
+
* Runtime-state slice — every provider that registers this cap
|
|
22895
|
+
* stores the same shape under `device.runtimeState[battery]`.
|
|
22896
|
+
* Cross-provider uniformity: a Reolink Argus, a Frigate sensor
|
|
22897
|
+
* proxy, an ONVIF battery cam all read/write the same keys.
|
|
22898
|
+
* Consumers (BatteryBadge, snapshot wrapper sleep gate) read once
|
|
22899
|
+
* via `device.runtimeState.getCapState('battery')` regardless of
|
|
22900
|
+
* the underlying driver.
|
|
22901
|
+
*/
|
|
22902
|
+
runtimeState: BatteryStatusSchema,
|
|
22903
|
+
/**
|
|
22904
|
+
* Runtime-state durability: **restored** — a sleeping battery camera may not report for hours; the restored percentage is the only thing the UI and the sleep gate have. Zero churn once `lastUpdated` is excluded — 526 writes, 0 value changes, in 25 minutes.
|
|
22905
|
+
*
|
|
22906
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22907
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22908
|
+
*/
|
|
22909
|
+
durability: "restored",
|
|
22910
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22911
|
+
* whether persisting is worth a SQLite commit. */
|
|
22912
|
+
volatileStateFields: ["lastUpdated"]
|
|
22913
|
+
};
|
|
22828
22914
|
object({
|
|
22829
22915
|
on: boolean(),
|
|
22830
22916
|
/** Ms epoch of the last transition. 0 if never observed. */
|
|
@@ -27235,6 +27321,16 @@ var CamStreamDescriptorSchema = object({
|
|
|
27235
27321
|
/** Transport-specific opaque metadata (e.g. rfc4571 SDP). */
|
|
27236
27322
|
metadata: record(string(), unknown()).optional()
|
|
27237
27323
|
});
|
|
27324
|
+
object({
|
|
27325
|
+
/** The descriptors as last built from a real camera response. Never a guess:
|
|
27326
|
+
* a failed or refused build writes NOTHING, so a restored catalog is always
|
|
27327
|
+
* one the camera itself once produced. */
|
|
27328
|
+
descriptors: array(CamStreamDescriptorSchema),
|
|
27329
|
+
/** Ms epoch of the build that produced {@link descriptors}. Lets the wake
|
|
27330
|
+
* path decide whether the camera's own awake window is worth spending on a
|
|
27331
|
+
* re-read. */
|
|
27332
|
+
lastFetchedAt: number()
|
|
27333
|
+
});
|
|
27238
27334
|
DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), array(CamStreamDescriptorSchema).readonly());
|
|
27239
27335
|
/** One of the camera's stream profiles. */
|
|
27240
27336
|
var StreamProfileSchema = _enum([
|
|
@@ -28119,6 +28215,24 @@ AccessoryKind.Siren, AccessoryKind.Floodlight, AccessoryKind.Spotlight, Accessor
|
|
|
28119
28215
|
DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
|
|
28120
28216
|
new Set(Object.values(DeviceType));
|
|
28121
28217
|
DeviceFeature.BatteryOperated;
|
|
28218
|
+
/**
|
|
28219
|
+
* THE derivation. One crop rectangle, one presence verdict — see D52 for why
|
|
28220
|
+
* this repo insists a derived value has exactly one implementation.
|
|
28221
|
+
*
|
|
28222
|
+
* `undefined` status ⇒ `sleeping`. A device with no slice has made no claim,
|
|
28223
|
+
* and the caller decides separately whether it is even battery-operated
|
|
28224
|
+
* (`DeviceFeature.BatteryOperated`); this function never answers that
|
|
28225
|
+
* question, only what a battery device is doing.
|
|
28226
|
+
*/
|
|
28227
|
+
function deriveBatteryPresence(input) {
|
|
28228
|
+
const status = input.status;
|
|
28229
|
+
if (!status) return "sleeping";
|
|
28230
|
+
if (status.sleeping !== true) return "awake";
|
|
28231
|
+
const lastContactAt = status.lastContactAt;
|
|
28232
|
+
if (typeof lastContactAt !== "number" || lastContactAt <= 0) return "sleeping";
|
|
28233
|
+
const budget = input.unreachableAfterMs ?? 216e5;
|
|
28234
|
+
return input.nowMs - lastContactAt > budget ? "unreachable" : "sleeping";
|
|
28235
|
+
}
|
|
28122
28236
|
Object.freeze({
|
|
28123
28237
|
"accessories.setChildHidden": {
|
|
28124
28238
|
capName: "accessories",
|
|
@@ -36460,6 +36574,12 @@ Object.defineProperty(exports, "BaseAddon", {
|
|
|
36460
36574
|
return BaseAddon;
|
|
36461
36575
|
}
|
|
36462
36576
|
});
|
|
36577
|
+
Object.defineProperty(exports, "BatteryStatusSchema", {
|
|
36578
|
+
enumerable: true,
|
|
36579
|
+
get: function() {
|
|
36580
|
+
return BatteryStatusSchema;
|
|
36581
|
+
}
|
|
36582
|
+
});
|
|
36463
36583
|
Object.defineProperty(exports, "CAM_PROFILE_ORDER", {
|
|
36464
36584
|
enumerable: true,
|
|
36465
36585
|
get: function() {
|
|
@@ -36652,6 +36772,12 @@ Object.defineProperty(exports, "audioAnalyzerCapability", {
|
|
|
36652
36772
|
return audioAnalyzerCapability;
|
|
36653
36773
|
}
|
|
36654
36774
|
});
|
|
36775
|
+
Object.defineProperty(exports, "batteryCapability", {
|
|
36776
|
+
enumerable: true,
|
|
36777
|
+
get: function() {
|
|
36778
|
+
return batteryCapability;
|
|
36779
|
+
}
|
|
36780
|
+
});
|
|
36655
36781
|
Object.defineProperty(exports, "boolean", {
|
|
36656
36782
|
enumerable: true,
|
|
36657
36783
|
get: function() {
|
|
@@ -36700,6 +36826,12 @@ Object.defineProperty(exports, "defineCustomActions", {
|
|
|
36700
36826
|
return defineCustomActions;
|
|
36701
36827
|
}
|
|
36702
36828
|
});
|
|
36829
|
+
Object.defineProperty(exports, "deriveBatteryPresence", {
|
|
36830
|
+
enumerable: true,
|
|
36831
|
+
get: function() {
|
|
36832
|
+
return deriveBatteryPresence;
|
|
36833
|
+
}
|
|
36834
|
+
});
|
|
36703
36835
|
Object.defineProperty(exports, "deriveDetailCropRect", {
|
|
36704
36836
|
enumerable: true,
|
|
36705
36837
|
get: function() {
|
|
@@ -22783,6 +22783,25 @@ var BatteryStatusSchema = object({
|
|
|
22783
22783
|
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
22784
22784
|
lastUpdated: number(),
|
|
22785
22785
|
/**
|
|
22786
|
+
* Ms epoch of the last time the device PROVED it was reachable — a
|
|
22787
|
+
* completed firmware round-trip, an observed wake, or an inbound push
|
|
22788
|
+
* (firmware event, email). `0`/absent = never since this slice was born.
|
|
22789
|
+
*
|
|
22790
|
+
* This is the ONLY input that separates "asleep" from "gone", and it is
|
|
22791
|
+
* fed exclusively by PASSIVE signals: nothing may write it by reaching
|
|
22792
|
+
* for the radio, because a poll that confirms reachability is the same
|
|
22793
|
+
* poll that drains the battery. See {@link deriveBatteryPresence} — the
|
|
22794
|
+
* single derivation every consumer must use; no surface computes its own.
|
|
22795
|
+
*
|
|
22796
|
+
* It is deliberately NOT a clock in the
|
|
22797
|
+
* `scripts/check-runtime-state-durability.ts` sense: it is the
|
|
22798
|
+
* observation itself, and it is the only thing a 30-hour silence is
|
|
22799
|
+
* visible in. Writers quantise it (see `CONTACT_WRITE_QUANTUM_MS` in the
|
|
22800
|
+
* Reolink provider) so a value that means "recently" cannot cost a
|
|
22801
|
+
* SQLite commit per round-trip.
|
|
22802
|
+
*/
|
|
22803
|
+
lastContactAt: number().optional(),
|
|
22804
|
+
/**
|
|
22786
22805
|
* True when the source is a BINARY low-battery indicator (HA
|
|
22787
22806
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
22788
22807
|
* charge level — `percentage` is then a coarse stand-in (100 = normal,
|
|
@@ -22791,17 +22810,84 @@ var BatteryStatusSchema = object({
|
|
|
22791
22810
|
*/
|
|
22792
22811
|
binary: boolean().optional()
|
|
22793
22812
|
});
|
|
22794
|
-
|
|
22795
|
-
|
|
22796
|
-
|
|
22797
|
-
|
|
22798
|
-
|
|
22799
|
-
|
|
22800
|
-
|
|
22801
|
-
|
|
22802
|
-
|
|
22803
|
-
|
|
22804
|
-
|
|
22813
|
+
var batteryCapability = {
|
|
22814
|
+
name: "battery",
|
|
22815
|
+
scope: "device",
|
|
22816
|
+
deviceNative: true,
|
|
22817
|
+
mode: "singleton",
|
|
22818
|
+
deviceTypes: [
|
|
22819
|
+
DeviceType.Camera,
|
|
22820
|
+
DeviceType.Sensor,
|
|
22821
|
+
DeviceType.Button,
|
|
22822
|
+
DeviceType.Switch
|
|
22823
|
+
],
|
|
22824
|
+
methods: {
|
|
22825
|
+
/**
|
|
22826
|
+
* Explicitly wake the camera from low-power sleep ahead of a
|
|
22827
|
+
* streaming session start. Consumers that initiate a stream
|
|
22828
|
+
* against a sleeping battery cam (HomeKit Secure Video, Alexa
|
|
22829
|
+
* RTCSession, snapshot wrappers) call this with a short timeout
|
|
22830
|
+
* before establishing the media pipeline — the broker's own
|
|
22831
|
+
* passive wake-on-dial works but adds 5–7 seconds to first-frame,
|
|
22832
|
+
* during which the consumer renders a black screen. Pre-waking
|
|
22833
|
+
* compresses that gap.
|
|
22834
|
+
*
|
|
22835
|
+
* Returns `awoke: true` when the firmware acknowledged the wake
|
|
22836
|
+
* before `timeoutMs`. Returns `awoke: false` when it timed out OR
|
|
22837
|
+
* the cap surface is unavailable (no Baichuan / firmware
|
|
22838
|
+
* channel); the caller should still attempt the stream — the
|
|
22839
|
+
* passive broker wake remains as fallback.
|
|
22840
|
+
*/
|
|
22841
|
+
wakeForStream: method(object({
|
|
22842
|
+
deviceId: number(),
|
|
22843
|
+
/** Bound on the wait. Sensible range 3000–10000ms. */
|
|
22844
|
+
timeoutMs: number().int().min(500).max(3e4).default(8e3)
|
|
22845
|
+
}), object({
|
|
22846
|
+
awoke: boolean(),
|
|
22847
|
+
durationMs: number()
|
|
22848
|
+
}), { kind: "mutation" }) },
|
|
22849
|
+
events: {
|
|
22850
|
+
/**
|
|
22851
|
+
* Emitted whenever the cached status changes (firmware push OR
|
|
22852
|
+
* poll observes a delta). The DeviceEventPropagator mirrors this
|
|
22853
|
+
* event on the parent chain — subscribing to a camera's source
|
|
22854
|
+
* receives battery events from child accessories automatically.
|
|
22855
|
+
*/
|
|
22856
|
+
onStatusChanged: { data: object({
|
|
22857
|
+
deviceId: number(),
|
|
22858
|
+
status: BatteryStatusSchema
|
|
22859
|
+
}) } },
|
|
22860
|
+
status: {
|
|
22861
|
+
schema: BatteryStatusSchema,
|
|
22862
|
+
kind: "push",
|
|
22863
|
+
empty: {
|
|
22864
|
+
percentage: 0,
|
|
22865
|
+
charging: "none",
|
|
22866
|
+
sleeping: false,
|
|
22867
|
+
lastUpdated: 0
|
|
22868
|
+
}
|
|
22869
|
+
},
|
|
22870
|
+
/**
|
|
22871
|
+
* Runtime-state slice — every provider that registers this cap
|
|
22872
|
+
* stores the same shape under `device.runtimeState[battery]`.
|
|
22873
|
+
* Cross-provider uniformity: a Reolink Argus, a Frigate sensor
|
|
22874
|
+
* proxy, an ONVIF battery cam all read/write the same keys.
|
|
22875
|
+
* Consumers (BatteryBadge, snapshot wrapper sleep gate) read once
|
|
22876
|
+
* via `device.runtimeState.getCapState('battery')` regardless of
|
|
22877
|
+
* the underlying driver.
|
|
22878
|
+
*/
|
|
22879
|
+
runtimeState: BatteryStatusSchema,
|
|
22880
|
+
/**
|
|
22881
|
+
* Runtime-state durability: **restored** — a sleeping battery camera may not report for hours; the restored percentage is the only thing the UI and the sleep gate have. Zero churn once `lastUpdated` is excluded — 526 writes, 0 value changes, in 25 minutes.
|
|
22882
|
+
*
|
|
22883
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
22884
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
22885
|
+
*/
|
|
22886
|
+
durability: "restored",
|
|
22887
|
+
/** Clock fields: written, but excluded from the compare that decides
|
|
22888
|
+
* whether persisting is worth a SQLite commit. */
|
|
22889
|
+
volatileStateFields: ["lastUpdated"]
|
|
22890
|
+
};
|
|
22805
22891
|
object({
|
|
22806
22892
|
on: boolean(),
|
|
22807
22893
|
/** Ms epoch of the last transition. 0 if never observed. */
|
|
@@ -27212,6 +27298,16 @@ var CamStreamDescriptorSchema = object({
|
|
|
27212
27298
|
/** Transport-specific opaque metadata (e.g. rfc4571 SDP). */
|
|
27213
27299
|
metadata: record(string(), unknown()).optional()
|
|
27214
27300
|
});
|
|
27301
|
+
object({
|
|
27302
|
+
/** The descriptors as last built from a real camera response. Never a guess:
|
|
27303
|
+
* a failed or refused build writes NOTHING, so a restored catalog is always
|
|
27304
|
+
* one the camera itself once produced. */
|
|
27305
|
+
descriptors: array(CamStreamDescriptorSchema),
|
|
27306
|
+
/** Ms epoch of the build that produced {@link descriptors}. Lets the wake
|
|
27307
|
+
* path decide whether the camera's own awake window is worth spending on a
|
|
27308
|
+
* re-read. */
|
|
27309
|
+
lastFetchedAt: number()
|
|
27310
|
+
});
|
|
27215
27311
|
DeviceType.Camera, method(object({ deviceId: number().int().nonnegative() }), array(CamStreamDescriptorSchema).readonly());
|
|
27216
27312
|
/** One of the camera's stream profiles. */
|
|
27217
27313
|
var StreamProfileSchema = _enum([
|
|
@@ -28096,6 +28192,24 @@ AccessoryKind.Siren, AccessoryKind.Floodlight, AccessoryKind.Spotlight, Accessor
|
|
|
28096
28192
|
DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
|
|
28097
28193
|
new Set(Object.values(DeviceType));
|
|
28098
28194
|
DeviceFeature.BatteryOperated;
|
|
28195
|
+
/**
|
|
28196
|
+
* THE derivation. One crop rectangle, one presence verdict — see D52 for why
|
|
28197
|
+
* this repo insists a derived value has exactly one implementation.
|
|
28198
|
+
*
|
|
28199
|
+
* `undefined` status ⇒ `sleeping`. A device with no slice has made no claim,
|
|
28200
|
+
* and the caller decides separately whether it is even battery-operated
|
|
28201
|
+
* (`DeviceFeature.BatteryOperated`); this function never answers that
|
|
28202
|
+
* question, only what a battery device is doing.
|
|
28203
|
+
*/
|
|
28204
|
+
function deriveBatteryPresence(input) {
|
|
28205
|
+
const status = input.status;
|
|
28206
|
+
if (!status) return "sleeping";
|
|
28207
|
+
if (status.sleeping !== true) return "awake";
|
|
28208
|
+
const lastContactAt = status.lastContactAt;
|
|
28209
|
+
if (typeof lastContactAt !== "number" || lastContactAt <= 0) return "sleeping";
|
|
28210
|
+
const budget = input.unreachableAfterMs ?? 216e5;
|
|
28211
|
+
return input.nowMs - lastContactAt > budget ? "unreachable" : "sleeping";
|
|
28212
|
+
}
|
|
28099
28213
|
Object.freeze({
|
|
28100
28214
|
"accessories.setChildHidden": {
|
|
28101
28215
|
capName: "accessories",
|
|
@@ -36407,4 +36521,4 @@ function enumerateInferenceDevices(hw) {
|
|
|
36407
36521
|
return out;
|
|
36408
36522
|
}
|
|
36409
36523
|
//#endregion
|
|
36410
|
-
export {
|
|
36524
|
+
export { runtimeDevices as $, createHwAccelCache as A, number as At, enumerateInferenceDevices as B, RingBuffer as C, sleep as Ct, audioAnalyzerCapability as D, discriminatedUnion as Dt, audioAnalysisCapability as E, boolean as Et, deriveDetailCropRect as F, EventCategory as Ft, motionDetectionCapability as G, hfModelUrl as H, deriveRecordingMode as I, pipelineExecutorCapability as J, pickDetailCropConvention as K, detectionPipelineCapability as L, defaultDeviceFor as M, record as Mt, defineCustomActions as N, string as Nt, batteryCapability as O, lazy as Ot, deriveBatteryPresence as P, union as Pt, resolveEgressDecodeHwAccel as Q, egressTranscodeSharingKey as R, RecordingConfigSchema as S, selectAssignedProfileSlots as St, addonWidgetsSourceCapability as T, array as Tt, mapAudioLabelToMacro as U, evaluateZoneRules as V, maskUrlCredentials as W, recordingCapability as X, pipelineRunnerCapability as Y, recordingExportCapability as Z, NativeLeaseSettingsSchema as _, makeProfileBrokerId as _t, COCO_80_LABELS as a, AUDIO_PRESETS as at, RATE_CONTROL_TIGHT as b, parseJsonUnknown as bt, DEFAULT_DETAIL_CROP_CONVENTION as c, invocationFromEncodeProfile as ct, DEVICE_BACKEND_TO_FORMAT as d, CAM_PROFILE_ORDER as dt, storageEvictableCapability as et, EVENT_PAD_MS as f, DeviceFeature as ft, NativeLeaseAdmissionSchema as g, isEvent as gt, HF_BASE_URL as h, hydrateSchema as ht, BatteryStatusSchema as i, errMsg as it, customAction as j, object as jt, cameraStreamsCapability as k, literal as kt, DEFAULT_EVENTS_BAND_BUFFER_SEC as l, isSoftwareDecode as lt, ExportRecordSchema as m, createEvent as mt, AUDIO_BACKEND_CHOICES as n, supportedRuntimes as nt, COCO_TO_MACRO as o, Fmp4BoxSplitter as ot, EncodeProfileSchema as p, DeviceType as pt, pickNativeLeaseOverride as q, AUDIO_MACRO_LABELS as r, webrtcSessionCapability as rt, DEFAULT_AUDIO_ANALYZER_CONFIG as s, buildFfmpegArgs as st, APPLE_SA_TO_MACRO as t, streamBrokerCapability as tt, DEFAULT_NATIVE_LEASE_SETTINGS as u, BaseAddon as ut, OpsLogEntrySchema as v, makeSourceBrokerId as vt, YAMNET_TO_MACRO as w, _enum as wt, RECORDING_EXPORT_MAX_READ_BYTES as x, parseProfileBrokerId as xt, RATE_CONTROL_RELAXED as y, nodePin as yt, egressTransportFromRequest as z };
|
package/dist/{event-loop-stall-monitor-CjWfos2b.mjs → event-loop-stall-monitor-8vYH44kg.mjs}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { H as hfModelUrl, a as COCO_80_LABELS, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-DGp0dRiq.mjs";
|
|
2
2
|
import { PerformanceObserver } from "node:perf_hooks";
|
|
3
3
|
//#region src/detection-pipeline/registry/model-catalogs.ts
|
|
4
4
|
var HF_REPO = "camstack/camstack-models";
|
|
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
6
|
-
const require_lazy_sharp = require("../lazy-sharp-
|
|
5
|
+
const require_dist = require("../dist-B57MztMq.js");
|
|
6
|
+
const require_lazy_sharp = require("../lazy-sharp-BMgRSV9x.js");
|
|
7
7
|
let node_path = require("node:path");
|
|
8
8
|
let node_fs = require("node:fs");
|
|
9
9
|
//#region src/motion-wasm/wasm-motion-detector.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { G as motionDetectionCapability, V as evaluateZoneRules, ht as hydrateSchema, pt as DeviceType, ut as BaseAddon } from "../dist-DGp0dRiq.mjs";
|
|
2
2
|
import { t as getSharp } from "../lazy-sharp-6oymT_yf.mjs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { readFileSync } from "node:fs";
|
|
@@ -2,11 +2,11 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
6
|
-
const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-
|
|
7
|
-
const require_worker_protocol = require("../worker-protocol-
|
|
5
|
+
const require_dist = require("../dist-B57MztMq.js");
|
|
6
|
+
const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-DPA6Pu_h.js");
|
|
7
|
+
const require_worker_protocol = require("../worker-protocol-4L4SbSAo.js");
|
|
8
8
|
const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
|
|
9
|
-
const require_lazy_sharp = require("../lazy-sharp-
|
|
9
|
+
const require_lazy_sharp = require("../lazy-sharp-BMgRSV9x.js");
|
|
10
10
|
const require_remote_restream = require("../remote-restream-BYbAsgUf.js");
|
|
11
11
|
let sharp = require("sharp");
|
|
12
12
|
sharp = require_dist.__toESM(sharp);
|
|
@@ -4350,6 +4350,12 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends require_dist.BaseAdd
|
|
|
4350
4350
|
nodeId = "unknown";
|
|
4351
4351
|
metricsSnapshotTimer = null;
|
|
4352
4352
|
unsubMotionEvents = null;
|
|
4353
|
+
/** Devices we have positively observed reporting `battery.sleeping: true`.
|
|
4354
|
+
* Absent = unknown or awake; both mean "do not gate" (D49). Fed only by
|
|
4355
|
+
* `BatteryOnStatusChanged`, so consulting it costs nothing and can never
|
|
4356
|
+
* wake the camera it protects. See `enqueueOccupancyBurst`. */
|
|
4357
|
+
sleepingBatteryDevices = /* @__PURE__ */ new Set();
|
|
4358
|
+
unsubBatteryEvents = null;
|
|
4353
4359
|
/** Last analyzer-detected state per device — gates the
|
|
4354
4360
|
* `MotionOnMotionChanged` emit in `runMotionAnalysis` to transitions
|
|
4355
4361
|
* only (otherwise we'd emit on every analyzer frame). */
|
|
@@ -4557,6 +4563,13 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends require_dist.BaseAdd
|
|
|
4557
4563
|
if (!attachment.config.motionSources.includes(source)) return;
|
|
4558
4564
|
this.runner?.reportMotion(deviceId, data.detected, source, data.regions ? [...data.regions] : void 0);
|
|
4559
4565
|
});
|
|
4566
|
+
if (this.ctx.eventBus) this.unsubBatteryEvents = this.ctx.eventBus.subscribe({ category: require_dist.EventCategory.BatteryOnStatusChanged }, (event) => {
|
|
4567
|
+
const data = event.data;
|
|
4568
|
+
const deviceId = data.deviceId;
|
|
4569
|
+
if (typeof deviceId !== "number") return;
|
|
4570
|
+
if (data.status?.sleeping === true) this.sleepingBatteryDevices.add(deviceId);
|
|
4571
|
+
else this.sleepingBatteryDevices.delete(deviceId);
|
|
4572
|
+
});
|
|
4560
4573
|
this.metricsSnapshotTimer = setInterval(() => this.emitMetricsSnapshot(), METRICS_SNAPSHOT_INTERVAL_MS);
|
|
4561
4574
|
return {
|
|
4562
4575
|
providers: [{
|
|
@@ -4590,6 +4603,11 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends require_dist.BaseAdd
|
|
|
4590
4603
|
this.unsubMotionEvents();
|
|
4591
4604
|
this.unsubMotionEvents = null;
|
|
4592
4605
|
}
|
|
4606
|
+
if (this.unsubBatteryEvents) {
|
|
4607
|
+
this.unsubBatteryEvents();
|
|
4608
|
+
this.unsubBatteryEvents = null;
|
|
4609
|
+
}
|
|
4610
|
+
this.sleepingBatteryDevices.clear();
|
|
4593
4611
|
this.lastAnalyzerDetected.clear();
|
|
4594
4612
|
this.packageGovernor.reset();
|
|
4595
4613
|
this.packageGateSkips.clear();
|
|
@@ -6660,6 +6678,10 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends require_dist.BaseAdd
|
|
|
6660
6678
|
* parallel decoder dials.
|
|
6661
6679
|
*/
|
|
6662
6680
|
enqueueOccupancyBurst(deviceId, frames) {
|
|
6681
|
+
if (this.sleepingBatteryDevices.has(deviceId)) {
|
|
6682
|
+
this.ctx.logger.debug("occupancy recheck skipped — battery camera is sleeping", { tags: { deviceId } });
|
|
6683
|
+
return;
|
|
6684
|
+
}
|
|
6663
6685
|
this.occupancyFrames.set(deviceId, frames);
|
|
6664
6686
|
if (this.occupancyBurstInFlight.has(deviceId) || this.occupancyQueued.has(deviceId)) return;
|
|
6665
6687
|
this.occupancyQueued.add(deviceId);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { At as
|
|
2
|
-
import { c as getStepDefinition, t as attributeStall } from "../event-loop-stall-monitor-
|
|
3
|
-
import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-
|
|
1
|
+
import { At as number, Et as boolean, F as deriveDetailCropRect, Ft as EventCategory, K as pickDetailCropConvention, N as defineCustomActions, Nt as string, Ot as lazy, Tt as array, Y as pipelineRunnerCapability, c as DEFAULT_DETAIL_CROP_CONVENTION, d as DEVICE_BACKEND_TO_FORMAT, it as errMsg, j as customAction, jt as object, kt as literal, mt as createEvent, q as pickNativeLeaseOverride, ut as BaseAddon, wt as _enum, yt as nodePin } from "../dist-DGp0dRiq.mjs";
|
|
2
|
+
import { c as getStepDefinition, t as attributeStall } from "../event-loop-stall-monitor-8vYH44kg.mjs";
|
|
3
|
+
import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-_e84lGuR.mjs";
|
|
4
4
|
import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
|
|
5
5
|
import { t as getSharp } from "../lazy-sharp-6oymT_yf.mjs";
|
|
6
6
|
import { i as withDetectionIntent, n as profileForStreamId, t as isRemoteRestream } from "../remote-restream-Ci7RXNGb.mjs";
|
|
@@ -4343,6 +4343,12 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends BaseAddon {
|
|
|
4343
4343
|
nodeId = "unknown";
|
|
4344
4344
|
metricsSnapshotTimer = null;
|
|
4345
4345
|
unsubMotionEvents = null;
|
|
4346
|
+
/** Devices we have positively observed reporting `battery.sleeping: true`.
|
|
4347
|
+
* Absent = unknown or awake; both mean "do not gate" (D49). Fed only by
|
|
4348
|
+
* `BatteryOnStatusChanged`, so consulting it costs nothing and can never
|
|
4349
|
+
* wake the camera it protects. See `enqueueOccupancyBurst`. */
|
|
4350
|
+
sleepingBatteryDevices = /* @__PURE__ */ new Set();
|
|
4351
|
+
unsubBatteryEvents = null;
|
|
4346
4352
|
/** Last analyzer-detected state per device — gates the
|
|
4347
4353
|
* `MotionOnMotionChanged` emit in `runMotionAnalysis` to transitions
|
|
4348
4354
|
* only (otherwise we'd emit on every analyzer frame). */
|
|
@@ -4550,6 +4556,13 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends BaseAddon {
|
|
|
4550
4556
|
if (!attachment.config.motionSources.includes(source)) return;
|
|
4551
4557
|
this.runner?.reportMotion(deviceId, data.detected, source, data.regions ? [...data.regions] : void 0);
|
|
4552
4558
|
});
|
|
4559
|
+
if (this.ctx.eventBus) this.unsubBatteryEvents = this.ctx.eventBus.subscribe({ category: EventCategory.BatteryOnStatusChanged }, (event) => {
|
|
4560
|
+
const data = event.data;
|
|
4561
|
+
const deviceId = data.deviceId;
|
|
4562
|
+
if (typeof deviceId !== "number") return;
|
|
4563
|
+
if (data.status?.sleeping === true) this.sleepingBatteryDevices.add(deviceId);
|
|
4564
|
+
else this.sleepingBatteryDevices.delete(deviceId);
|
|
4565
|
+
});
|
|
4553
4566
|
this.metricsSnapshotTimer = setInterval(() => this.emitMetricsSnapshot(), METRICS_SNAPSHOT_INTERVAL_MS);
|
|
4554
4567
|
return {
|
|
4555
4568
|
providers: [{
|
|
@@ -4583,6 +4596,11 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends BaseAddon {
|
|
|
4583
4596
|
this.unsubMotionEvents();
|
|
4584
4597
|
this.unsubMotionEvents = null;
|
|
4585
4598
|
}
|
|
4599
|
+
if (this.unsubBatteryEvents) {
|
|
4600
|
+
this.unsubBatteryEvents();
|
|
4601
|
+
this.unsubBatteryEvents = null;
|
|
4602
|
+
}
|
|
4603
|
+
this.sleepingBatteryDevices.clear();
|
|
4586
4604
|
this.lastAnalyzerDetected.clear();
|
|
4587
4605
|
this.packageGovernor.reset();
|
|
4588
4606
|
this.packageGateSkips.clear();
|
|
@@ -6653,6 +6671,10 @@ var PipelineRunnerAddon = class PipelineRunnerAddon extends BaseAddon {
|
|
|
6653
6671
|
* parallel decoder dials.
|
|
6654
6672
|
*/
|
|
6655
6673
|
enqueueOccupancyBurst(deviceId, frames) {
|
|
6674
|
+
if (this.sleepingBatteryDevices.has(deviceId)) {
|
|
6675
|
+
this.ctx.logger.debug("occupancy recheck skipped — battery camera is sleeping", { tags: { deviceId } });
|
|
6676
|
+
return;
|
|
6677
|
+
}
|
|
6656
6678
|
this.occupancyFrames.set(deviceId, frames);
|
|
6657
6679
|
if (this.occupancyBurstInFlight.has(deviceId) || this.occupancyQueued.has(deviceId)) return;
|
|
6658
6680
|
this.occupancyQueued.add(deviceId);
|
package/dist/recorder/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
const require_dist = require("../dist-
|
|
1
|
+
const require_dist = require("../dist-B57MztMq.js");
|
|
2
2
|
const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
|
|
3
|
-
const require_addon_utils = require("../addon-utils-
|
|
3
|
+
const require_addon_utils = require("../addon-utils-CQFlZXSn.js");
|
|
4
4
|
let node_crypto = require("node:crypto");
|
|
5
5
|
let node_child_process = require("node:child_process");
|
|
6
6
|
let node_path = require("node:path");
|
package/dist/recorder/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { At as
|
|
1
|
+
import { At as number, Ft as EventCategory, I as deriveRecordingMode, Mt as record, Nt as string, S as RecordingConfigSchema, St as selectAssignedProfileSlots, Tt as array, X as recordingCapability, Z as recordingExportCapability, et as storageEvictableCapability, f as EVENT_PAD_MS, ht as hydrateSchema, it as errMsg, jt as object, l as DEFAULT_EVENTS_BAND_BUFFER_SEC, m as ExportRecordSchema, pt as DeviceType, ut as BaseAddon, v as OpsLogEntrySchema, x as RECORDING_EXPORT_MAX_READ_BYTES, yt as nodePin } from "../dist-DGp0dRiq.mjs";
|
|
2
2
|
import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
|
|
3
3
|
import { n as createFileDataPlaneHandler, s as parseRangeHeader, t as contentTypeFor } from "../addon-utils-A2S9D7pu.mjs";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_worker_protocol = require("../worker-protocol-
|
|
3
|
-
const require_lazy_sharp = require("../lazy-sharp-
|
|
2
|
+
const require_worker_protocol = require("../worker-protocol-4L4SbSAo.js");
|
|
3
|
+
const require_lazy_sharp = require("../lazy-sharp-BMgRSV9x.js");
|
|
4
4
|
//#region src/session-decode/color-conversion.ts
|
|
5
5
|
/**
|
|
6
6
|
* Explicit YUV→RGB colorspace/range resolution for the session-decode worker.
|