@camstack/addon-pipeline 1.2.118 → 1.2.120

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/{addon-utils-DJSN5h8c.js → addon-utils-MH-YN_oH.js} +1 -1
  2. package/dist/audio-analyzer/index.js +3 -3
  3. package/dist/audio-analyzer/index.mjs +2 -2
  4. package/dist/detection-pipeline/index.js +171 -167
  5. package/dist/detection-pipeline/index.mjs +169 -165
  6. package/dist/{dist-B763E61Y.mjs → dist-CmqBKO-v.mjs} +100 -4
  7. package/dist/{dist-BkO76jAp.js → dist-CvpyuIHg.js} +105 -3
  8. package/dist/{event-loop-stall-monitor-28f4R0JN.js → event-loop-stall-monitor-BOHxP7W6.js} +1 -1
  9. package/dist/{event-loop-stall-monitor-CYEvvp2Z.mjs → event-loop-stall-monitor-kh4gmJ-6.mjs} +1 -1
  10. package/dist/{lazy-sharp-BaPl5mRa.js → lazy-sharp-BzJLgOw9.js} +1 -1
  11. package/dist/motion-wasm/index.js +2 -2
  12. package/dist/motion-wasm/index.mjs +1 -1
  13. package/dist/pipeline-runner/index.js +12 -14
  14. package/dist/pipeline-runner/index.mjs +11 -13
  15. package/dist/{process-memory-CK3FnKyZ.mjs → process-memory-C2vefk7-.mjs} +1 -1
  16. package/dist/{process-memory-BCQJFZZg.js → process-memory-U6kkHBR7.js} +1 -1
  17. package/dist/recorder/index.js +2 -2
  18. package/dist/recorder/index.mjs +1 -1
  19. package/dist/segment-demux-js-CTgNaQTI.js +7310 -0
  20. package/dist/segment-demux-js-xjK1LW_t.mjs +7288 -0
  21. package/dist/session-decode/decode-worker-child.js +2 -2
  22. package/dist/session-decode/decode-worker-child.mjs +1 -1
  23. package/dist/stream-broker/_stub.js +2 -2
  24. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CxgvfkxP.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BdP-MWLF.mjs} +2 -2
  25. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Cs8bmrWP.mjs +26 -0
  26. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BAMyzCWw.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-D-NFPV_g.mjs} +1 -1
  27. package/dist/stream-broker/demux-worker-child.js +46 -0
  28. package/dist/stream-broker/demux-worker-child.mjs +47 -0
  29. package/dist/stream-broker/{hostInit-CTkpxp3w.mjs → hostInit-zKdlTmuo.mjs} +2 -2
  30. package/dist/stream-broker/index.js +381 -7405
  31. package/dist/stream-broker/index.mjs +382 -7403
  32. package/dist/stream-broker/remoteEntry.js +1 -1
  33. package/dist/{worker-protocol-D_2QaXYr.mjs → worker-protocol-CElzXfEW.mjs} +1 -1
  34. package/dist/{worker-protocol-owR7WMRP.js → worker-protocol-DGYGCx9K.js} +1 -1
  35. package/package.json +1 -1
  36. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CL6Lgzdj.mjs +0 -26
@@ -9173,6 +9173,25 @@ var ModelVariantGroupSchema = object({
9173
9173
  */
9174
9174
  resolution: number().int().positive().optional()
9175
9175
  });
9176
+ var ModelProviderIdSchema = _enum([
9177
+ "camstack",
9178
+ "frigate",
9179
+ "scrypted",
9180
+ "custom"
9181
+ ]);
9182
+ /**
9183
+ * Resolve a catalog entry's picker provider. An explicit stamp always wins;
9184
+ * otherwise Frigate/Scrypted are recognised from id prefix or description.
9185
+ * Unstamped BYO registry rows fall through to `custom`. Family `yolov9` is
9186
+ * NOT a Scrypted signal — CamStack ships that family too.
9187
+ */
9188
+ function inferModelProvider(entry) {
9189
+ if (entry.provider !== void 0) return entry.provider;
9190
+ const haystack = `${entry.id} ${entry.description ?? ""}`;
9191
+ if (/scrypted/i.test(haystack)) return "scrypted";
9192
+ if (/frigate/i.test(haystack)) return "frigate";
9193
+ return "custom";
9194
+ }
9176
9195
  var ModelCatalogEntrySchema = object({
9177
9196
  id: string(),
9178
9197
  name: string(),
@@ -9270,6 +9289,12 @@ var ModelCatalogEntrySchema = object({
9270
9289
  */
9271
9290
  group: ModelVariantGroupSchema.optional(),
9272
9291
  /**
9292
+ * Catalog source for the pipeline stepper's provider-first picker. Absent on
9293
+ * built-in CamStack entries (treated as `camstack`) and on registry rows
9294
+ * persisted before this field existed (`inferModelProvider` fills those).
9295
+ */
9296
+ provider: ModelProviderIdSchema.optional(),
9297
+ /**
9273
9298
  * Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
9274
9299
  * applies (Frigate / COCO public catalog). Set on a custom model whose raw
9275
9300
  * labels already ARE the CamStack macros (Scrypted identity map).
@@ -18660,6 +18685,46 @@ var RecentTracksPageSchema = object({
18660
18685
  /** Cursor for the next page, or null when this page is the last. */
18661
18686
  nextCursor: string().nullable()
18662
18687
  });
18688
+ var LIST_GROUPS_DEFAULT_LIMIT = 40;
18689
+ var LIST_GROUPS_MAX_LIMIT = 100;
18690
+ var AnalyticsGroupRecordSchema = object({
18691
+ id: string(),
18692
+ deviceId: number().int(),
18693
+ openedAt: number().int(),
18694
+ closedAt: number().int(),
18695
+ timestamp: number().int(),
18696
+ memberCount: number().int(),
18697
+ memberTrackIds: array(string()).readonly(),
18698
+ className: string(),
18699
+ classes: array(string()).readonly(),
18700
+ /** Relative event-media path, or null when the group has no picture yet. */
18701
+ mediaUrl: string().nullable(),
18702
+ singleton: boolean()
18703
+ });
18704
+ var AnalyticsGroupMemberSchema = object({
18705
+ trackId: string(),
18706
+ deviceId: number().int(),
18707
+ className: string(),
18708
+ firstSeen: number().int(),
18709
+ lastSeen: number().int(),
18710
+ mediaUrl: string().nullable()
18711
+ });
18712
+ var AnalyticsGroupDetailSchema = AnalyticsGroupRecordSchema.extend({ members: array(AnalyticsGroupMemberSchema).readonly() });
18713
+ var ListGroupsQueryInput = object({
18714
+ /** Devices to merge. An empty array yields `{ groups: [], nextCursor: null }`. */
18715
+ deviceIds: array(number()),
18716
+ /** Window lower bound on `closedAt` (inclusive). */
18717
+ since: number().optional(),
18718
+ /** Window upper bound on `openedAt` (inclusive). */
18719
+ until: number().optional(),
18720
+ limit: number().int().min(1).max(LIST_GROUPS_MAX_LIMIT).default(LIST_GROUPS_DEFAULT_LIMIT),
18721
+ /** Opaque continuation cursor from a previous page's `nextCursor`. */
18722
+ cursor: string().optional()
18723
+ });
18724
+ var ListGroupsPageSchema = object({
18725
+ groups: array(AnalyticsGroupRecordSchema).readonly(),
18726
+ nextCursor: string().nullable()
18727
+ });
18663
18728
  var KeyEventQueryInput = object({
18664
18729
  deviceId: number(),
18665
18730
  /** Window lower bound (track firstSeen ≥ since). */
@@ -18883,7 +18948,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
18883
18948
  * stationary registry). Default false: the timeline lists passages,
18884
18949
  * not parking records (operator decision, 2026-08-15). */
18885
18950
  includeStationary: boolean().optional()
18886
- }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(object({ deviceId: number() }), _void(), {
18951
+ }), array(TrackSchema).readonly()), method(RecentTracksQueryInput, RecentTracksPageSchema), method(ListGroupsQueryInput, ListGroupsPageSchema), method(object({
18952
+ deviceId: number(),
18953
+ groupId: string().min(1)
18954
+ }), AnalyticsGroupDetailSchema.nullable()), method(object({ deviceId: number() }), _void(), {
18887
18955
  kind: "mutation",
18888
18956
  auth: "admin"
18889
18957
  }), method(DeviceEventQueryInput, array(MotionEventSchema).readonly()), method(ObjectEventQueryInput, array(ObjectEventSchema).readonly()), method(DeviceEventQueryInput, array(AudioEventSchema).readonly()), method(object({ deviceId: number() }), array(EventKindDescriptorSchema).readonly()), method(object({ deviceIds: array(number()).min(1).max(200) }), array(EventKindsForDeviceSchema).readonly()), method(object({
@@ -19193,7 +19261,8 @@ var PipelineModelOptionSchema = object({
19193
19261
  sizeMB: number()
19194
19262
  })),
19195
19263
  group: ModelVariantGroupSchema.optional(),
19196
- legacy: boolean().optional()
19264
+ legacy: boolean().optional(),
19265
+ provider: ModelProviderIdSchema.optional()
19197
19266
  });
19198
19267
  var ConfigFieldBridge = custom();
19199
19268
  var PipelineAddonSchemaSchema = object({
@@ -26233,7 +26302,12 @@ var PlateInfoSchema = object({
26233
26302
  plateBbox: BoundingBoxSchema.optional(),
26234
26303
  /** keyFrame parity: MediaStore key of the track's native-resolution key frame. */
26235
26304
  keyFrameMediaKey: string().optional(),
26236
- base64: string().optional()
26305
+ base64: string().optional(),
26306
+ /**
26307
+ * Same crop as a data-plane URL. `getPlateByTrack` returns this and
26308
+ * never inlines JPEG; `listPlates` still inlines for the admin-ui.
26309
+ */
26310
+ cropUrl: string().optional()
26237
26311
  });
26238
26312
  var MediaFileLiteSchema = object({
26239
26313
  key: string(),
@@ -31875,6 +31949,12 @@ Object.freeze({
31875
31949
  addonId: null,
31876
31950
  access: "view"
31877
31951
  },
31952
+ "pipelineAnalytics.getGroup": {
31953
+ capName: "pipeline-analytics",
31954
+ capScope: "device",
31955
+ addonId: null,
31956
+ access: "view"
31957
+ },
31878
31958
  "pipelineAnalytics.getKeyEvents": {
31879
31959
  capName: "pipeline-analytics",
31880
31960
  capScope: "device",
@@ -31959,6 +32039,12 @@ Object.freeze({
31959
32039
  addonId: null,
31960
32040
  access: "view"
31961
32041
  },
32042
+ "pipelineAnalytics.listGroups": {
32043
+ capName: "pipeline-analytics",
32044
+ capScope: "device",
32045
+ addonId: null,
32046
+ access: "view"
32047
+ },
31962
32048
  "pipelineAnalytics.listOpsLog": {
31963
32049
  capName: "pipeline-analytics",
31964
32050
  capScope: "device",
@@ -35378,6 +35464,11 @@ Object.freeze({
35378
35464
  form: "single",
35379
35465
  optional: false
35380
35466
  }],
35467
+ "pipelineAnalytics.getGroup": [{
35468
+ name: "deviceId",
35469
+ form: "single",
35470
+ optional: false
35471
+ }],
35381
35472
  "pipelineAnalytics.getKeyEvents": [{
35382
35473
  name: "deviceId",
35383
35474
  form: "single",
@@ -35433,6 +35524,11 @@ Object.freeze({
35433
35524
  form: "array",
35434
35525
  optional: false
35435
35526
  }],
35527
+ "pipelineAnalytics.listGroups": [{
35528
+ name: "deviceIds",
35529
+ form: "array",
35530
+ optional: false
35531
+ }],
35436
35532
  "pipelineAnalytics.listOpsLog": [{
35437
35533
  name: "deviceId",
35438
35534
  form: "single",
@@ -38103,6 +38199,12 @@ Object.defineProperty(exports, "hydrateSchema", {
38103
38199
  return hydrateSchema;
38104
38200
  }
38105
38201
  });
38202
+ Object.defineProperty(exports, "inferModelProvider", {
38203
+ enumerable: true,
38204
+ get: function() {
38205
+ return inferModelProvider;
38206
+ }
38207
+ });
38106
38208
  Object.defineProperty(exports, "invocationFromEncodeProfile", {
38107
38209
  enumerable: true,
38108
38210
  get: function() {
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-BkO76jAp.js");
1
+ const require_dist = require("./dist-CvpyuIHg.js");
2
2
  let node_crypto = require("node:crypto");
3
3
  let node_perf_hooks = require("node:perf_hooks");
4
4
  //#region src/detection-pipeline/registry/model-catalogs.ts
@@ -1,4 +1,4 @@
1
- import { K as hfModelUrl, a as COCO_80_LABELS, j as audioKindId, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-B763E61Y.mjs";
1
+ import { K as hfModelUrl, a as COCO_80_LABELS, j as audioKindId, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-CmqBKO-v.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { PerformanceObserver } from "node:perf_hooks";
4
4
  //#region src/detection-pipeline/registry/model-catalogs.ts
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-BkO76jAp.js");
1
+ const require_dist = require("./dist-CvpyuIHg.js");
2
2
  let node_url = require("node:url");
3
3
  let node_module = require("node:module");
4
4
  let node_path = require("node:path");
@@ -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-BkO76jAp.js");
6
- const require_lazy_sharp = require("../lazy-sharp-BaPl5mRa.js");
5
+ const require_dist = require("../dist-CvpyuIHg.js");
6
+ const require_lazy_sharp = require("../lazy-sharp-BzJLgOw9.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 { Et as hydrateSchema, G as evaluateZoneRules, Y as motionDetectionCapability, wt as DeviceType, xt as BaseAddon } from "../dist-B763E61Y.mjs";
1
+ import { Dt as hydrateSchema, G as evaluateZoneRules, St as BaseAddon, Tt as DeviceType, X as motionDetectionCapability } from "../dist-CmqBKO-v.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-BkO76jAp.js");
6
- const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-28f4R0JN.js");
7
- const require_worker_protocol = require("../worker-protocol-owR7WMRP.js");
5
+ const require_dist = require("../dist-CvpyuIHg.js");
6
+ const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-BOHxP7W6.js");
7
+ const require_worker_protocol = require("../worker-protocol-DGYGCx9K.js");
8
8
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
9
- const require_lazy_sharp = require("../lazy-sharp-BaPl5mRa.js");
9
+ const require_lazy_sharp = require("../lazy-sharp-BzJLgOw9.js");
10
10
  const require_restream_intent = require("../restream-intent-Cv9x3jmu.js");
11
11
  const require_remote_restream = require("../remote-restream-CO36Sr30.js");
12
12
  let sharp = require("sharp");
@@ -3130,16 +3130,14 @@ var PACKAGE_DETECTION_STEP_ID = "package-detection";
3130
3130
  /**
3131
3131
  * Burst: 5 runs, 5s apart — 0s, 5s, 10s, 15s, 20s after the settle edge.
3132
3132
  *
3133
- * Sized against the two downstream numbers it has to satisfy, both pinned by
3134
- * `scripts/check-package-promotion-satisfiable.ts`:
3135
- *
3136
- * - `PACKAGE_STILLNESS_ROUND_GAP_MS` (5 000) the spacing must be ≥ this or
3137
- * the runs collapse into one round;
3138
- * - `packageDropDwellSec` (15s default) the burst SPAN
3139
- * (`(burstCount - 1) × burstIntervalMs` = 20s) must clear the dwell, or the
3140
- * burst ends before the parcel has been still long enough to count and the
3141
- * delivery falls back to the poll. 20s over 15s is one whole run of margin,
3142
- * which is what absorbs a dropped analyzer frame.
3133
+ * Sized as a SAFETY NET when the operator raises `packageDropDwellSec` above
3134
+ * zero: the burst SPAN (`(burstCount - 1) × burstIntervalMs` = 20s) must
3135
+ * clear that dwell, or the delivery falls back to the 45 s poll. Promotion
3136
+ * itself counts FRAMES (`packageDropMinFrames`, default 3), so a single
3137
+ * settle session that sees the box three times is enough when dwell is 0 —
3138
+ * the 15 s dwell plus a 5 s round-gap missed a real parcel on device 615
3139
+ * (2026-08-24 13:40). The relation is pinned by
3140
+ * `scripts/check-package-promotion-satisfiable.ts`.
3143
3141
  *
3144
3142
  * Cost: 5 extra inferences per motion episode, on cameras with an active
3145
3143
  * package zone only (the caller consults this governor only while the
@@ -1,6 +1,6 @@
1
- import { At as nodePin, Bt as literal, F as customAction, Ft as _enum, Ht as object, It as array, Kt as EventCategory, L as defineCustomActions, Lt as boolean, Tt as createEvent, Vt as number, Wt as string, et as pickDetailCropConvention, ht as errMsg, p as DEVICE_BACKEND_TO_FORMAT, rt as pipelineRunnerCapability, tt as pickNativeLeaseOverride, u as DEFAULT_DETAIL_CROP_CONVENTION, xt as BaseAddon, z as deriveDetailCropRect, zt as lazy } from "../dist-B763E61Y.mjs";
2
- import { i as resolveFrameViewGeometry, r as localFrameRegistry, t as attributeStall, u as getStepDefinition } from "../event-loop-stall-monitor-CYEvvp2Z.mjs";
3
- import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-D_2QaXYr.mjs";
1
+ import { Bt as lazy, Et as createEvent, F as customAction, Gt as string, Ht as number, It as _enum, L as defineCustomActions, Lt as array, Rt as boolean, St as BaseAddon, Ut as object, Vt as literal, gt as errMsg, it as pipelineRunnerCapability, jt as nodePin, nt as pickNativeLeaseOverride, p as DEVICE_BACKEND_TO_FORMAT, qt as EventCategory, tt as pickDetailCropConvention, u as DEFAULT_DETAIL_CROP_CONVENTION, z as deriveDetailCropRect } from "../dist-CmqBKO-v.mjs";
2
+ import { i as resolveFrameViewGeometry, r as localFrameRegistry, t as attributeStall, u as getStepDefinition } from "../event-loop-stall-monitor-kh4gmJ-6.mjs";
3
+ import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-CElzXfEW.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 { n as withDetectionIntent } from "../restream-intent-B4BXZra7.mjs";
@@ -3123,16 +3123,14 @@ var PACKAGE_DETECTION_STEP_ID = "package-detection";
3123
3123
  /**
3124
3124
  * Burst: 5 runs, 5s apart — 0s, 5s, 10s, 15s, 20s after the settle edge.
3125
3125
  *
3126
- * Sized against the two downstream numbers it has to satisfy, both pinned by
3127
- * `scripts/check-package-promotion-satisfiable.ts`:
3128
- *
3129
- * - `PACKAGE_STILLNESS_ROUND_GAP_MS` (5 000) the spacing must be ≥ this or
3130
- * the runs collapse into one round;
3131
- * - `packageDropDwellSec` (15s default) the burst SPAN
3132
- * (`(burstCount - 1) × burstIntervalMs` = 20s) must clear the dwell, or the
3133
- * burst ends before the parcel has been still long enough to count and the
3134
- * delivery falls back to the poll. 20s over 15s is one whole run of margin,
3135
- * which is what absorbs a dropped analyzer frame.
3126
+ * Sized as a SAFETY NET when the operator raises `packageDropDwellSec` above
3127
+ * zero: the burst SPAN (`(burstCount - 1) × burstIntervalMs` = 20s) must
3128
+ * clear that dwell, or the delivery falls back to the 45 s poll. Promotion
3129
+ * itself counts FRAMES (`packageDropMinFrames`, default 3), so a single
3130
+ * settle session that sees the box three times is enough when dwell is 0 —
3131
+ * the 15 s dwell plus a 5 s round-gap missed a real parcel on device 615
3132
+ * (2026-08-24 13:40). The relation is pinned by
3133
+ * `scripts/check-package-promotion-satisfiable.ts`.
3136
3134
  *
3137
3135
  * Cost: 5 extra inferences per motion episode, on cameras with an active
3138
3136
  * package zone only (the caller consults this governor only while the
@@ -1,4 +1,4 @@
1
- import { Z as parseProcStatus } from "./dist-B763E61Y.mjs";
1
+ import { Q as parseProcStatus } from "./dist-CmqBKO-v.mjs";
2
2
  import { execFile } from "node:child_process";
3
3
  import * as fs from "node:fs";
4
4
  //#region src/shared/node-topology-platform.ts
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-BkO76jAp.js");
1
+ const require_dist = require("./dist-CvpyuIHg.js");
2
2
  let node_child_process = require("node:child_process");
3
3
  let node_fs = require("node:fs");
4
4
  node_fs = require_dist.__toESM(node_fs);
@@ -1,7 +1,7 @@
1
- const require_dist = require("../dist-BkO76jAp.js");
1
+ const require_dist = require("../dist-CvpyuIHg.js");
2
2
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
3
3
  const require_restream_intent = require("../restream-intent-Cv9x3jmu.js");
4
- const require_addon_utils = require("../addon-utils-DJSN5h8c.js");
4
+ const require_addon_utils = require("../addon-utils-MH-YN_oH.js");
5
5
  const require_retire_root_keys = require("../retire-root-keys-KE6D6Xh_.js");
6
6
  let node_crypto = require("node:crypto");
7
7
  let node_child_process = require("node:child_process");
@@ -1,4 +1,4 @@
1
- import { At as nodePin, B as deriveRecordingMode, Ct as DeviceFeature, Et as hydrateSchema, Ht as object, Kt as EventCategory, M as batteryCapability, Nt as selectAssignedProfileSlots, R as deriveBatteryPresence, T as RecordingConfigSchema, Ut as record, Vt as number, Wt as string, at as recordingExportCapability, b as OpsLogEntrySchema, d as DEFAULT_EVENTS_BAND_BUFFER_SEC, dt as storageEvictableCapability, g as ExportRecordSchema, ht as errMsg, i as BatteryStatusSchema, it as recordingCapability, lt as resolveRecordingProfiles, m as EVENT_PAD_MS, w as RECORDING_EXPORT_MAX_READ_BYTES, wt as DeviceType, xt as BaseAddon } from "../dist-B763E61Y.mjs";
1
+ import { B as deriveRecordingMode, Dt as hydrateSchema, Gt as string, Ht as number, M as batteryCapability, Pt as selectAssignedProfileSlots, R as deriveBatteryPresence, St as BaseAddon, T as RecordingConfigSchema, Tt as DeviceType, Ut as object, Wt as record, at as recordingCapability, b as OpsLogEntrySchema, d as DEFAULT_EVENTS_BAND_BUFFER_SEC, ft as storageEvictableCapability, g as ExportRecordSchema, gt as errMsg, i as BatteryStatusSchema, jt as nodePin, m as EVENT_PAD_MS, ot as recordingExportCapability, qt as EventCategory, ut as resolveRecordingProfiles, w as RECORDING_EXPORT_MAX_READ_BYTES, wt as DeviceFeature } from "../dist-CmqBKO-v.mjs";
2
2
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
3
3
  import { r as withRecordingIntent } from "../restream-intent-B4BXZra7.mjs";
4
4
  import { n as createFileDataPlaneHandler, s as parseRangeHeader, t as contentTypeFor } from "../addon-utils-CgBCF-mE.mjs";