camstack 1.2.72 → 1.2.74

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.
@@ -14522,7 +14522,7 @@ function date4(params) {
14522
14522
  // ../../node_modules/zod/v4/classic/external.js
14523
14523
  config(en_default());
14524
14524
 
14525
- // ../types/dist/sleep-DAxSW8cv.mjs
14525
+ // ../types/dist/sleep-C1mz-ocE.mjs
14526
14526
  var WELL_KNOWN_TABS = [
14527
14527
  {
14528
14528
  id: "overview",
@@ -23717,6 +23717,8 @@ var NcSystemEventKindSchema = external_exports.enum([
23717
23717
  "device-offline",
23718
23718
  "device-disabled",
23719
23719
  "device-enabled",
23720
+ "device-battery-low",
23721
+ "device-battery-normal",
23720
23722
  "stream-online",
23721
23723
  "stream-offline",
23722
23724
  "node-online",
@@ -26467,6 +26469,17 @@ var KeyEventsForDeviceSchema = external_exports.object({
26467
26469
  deviceId: external_exports.number(),
26468
26470
  events: external_exports.array(KeyEventSchema).readonly()
26469
26471
  });
26472
+ var EventDensityBucketSchema = external_exports.object({
26473
+ bucketStart: external_exports.number(),
26474
+ motion: external_exports.number().int(),
26475
+ object: external_exports.number().int(),
26476
+ audio: external_exports.number().int()
26477
+ });
26478
+ var EventDensityForDeviceSchema = external_exports.object({
26479
+ deviceId: external_exports.number(),
26480
+ read: external_exports.enum(["read", "unreadable"]),
26481
+ buckets: external_exports.array(EventDensityBucketSchema).readonly()
26482
+ });
26470
26483
  var TrackedDetectionSchema = external_exports.object({
26471
26484
  trackId: external_exports.string(),
26472
26485
  className: external_exports.string(),
@@ -26804,12 +26817,31 @@ var pipelineAnalyticsCapability = {
26804
26817
  since: external_exports.number(),
26805
26818
  until: external_exports.number(),
26806
26819
  bucketMs: external_exports.number().int().positive()
26807
- }), external_exports.array(external_exports.object({
26808
- bucketStart: external_exports.number(),
26809
- motion: external_exports.number().int(),
26810
- object: external_exports.number().int(),
26811
- audio: external_exports.number().int()
26812
- })).readonly()),
26820
+ }), external_exports.array(EventDensityBucketSchema).readonly()),
26821
+ /**
26822
+ * The same histogram, for a SET of cameras, in one round trip.
26823
+ *
26824
+ * A multi-camera timeline (the tablet grid) re-asks this of every camera in
26825
+ * the grid on every day change — N browser → hub → post-analysis round
26826
+ * trips for N independent, already-indexed store queries. The queries are
26827
+ * unchanged and still run per camera (`densityByKind`, one per deviceId,
26828
+ * concurrently INSIDE the owner); only the transport collapses.
26829
+ *
26830
+ * Deliberately per-device rather than pre-merged: a timeline lane belongs
26831
+ * to a camera, and a caller that merged would have to un-merge.
26832
+ * `getEventDensity` stays for single-camera callers.
26833
+ *
26834
+ * Every requested id gets a row, marked — see
26835
+ * {@link EventDensityForDeviceSchema}. `deviceIds` is capped at
26836
+ * {@link EVENT_DENSITY_BATCH_MAX}, and an over-cap ask is refused rather
26837
+ * than truncated.
26838
+ */
26839
+ getEventDensityBatch: method(external_exports.object({
26840
+ deviceIds: external_exports.array(external_exports.number()).min(1).max(200),
26841
+ since: external_exports.number(),
26842
+ until: external_exports.number(),
26843
+ bucketMs: external_exports.number().int().positive()
26844
+ }), external_exports.array(EventDensityForDeviceSchema).readonly()),
26813
26845
  /**
26814
26846
  * @deprecated Prefer `pruneTracksBefore` — the track is the ROOT of the
26815
26847
  * analytics model and retention must cascade from it (design §5.1). This
@@ -36520,6 +36552,17 @@ var RecordingDaysSchema = external_exports.object({
36520
36552
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
36521
36553
  days: external_exports.array(external_exports.number())
36522
36554
  });
36555
+ var RecordingAvailabilityForDeviceSchema = external_exports.object({
36556
+ deviceId: external_exports.number(),
36557
+ read: external_exports.enum(["read", "unreadable"]),
36558
+ ranges: external_exports.array(RecordingRangeSchema).readonly()
36559
+ });
36560
+ var RecordingDaysForDeviceSchema = external_exports.object({
36561
+ deviceId: external_exports.number(),
36562
+ read: external_exports.enum(["read", "unreadable"]),
36563
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
36564
+ days: external_exports.array(external_exports.number()).readonly()
36565
+ });
36523
36566
  var RecordingManifestSchema = external_exports.object({
36524
36567
  deviceId: external_exports.number(),
36525
36568
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -36702,6 +36745,32 @@ var recordingCapability = {
36702
36745
  kind: "query",
36703
36746
  auth: "protected"
36704
36747
  }),
36748
+ /**
36749
+ * `getAvailability` for a SET of cameras, in one round trip.
36750
+ *
36751
+ * A multi-camera timeline re-asks availability for every camera in the grid
36752
+ * on every day change; fanned out that is one request per camera for N
36753
+ * independent calendar walks. The per-camera work is IDENTICAL (the same
36754
+ * `availabilityProfileFor` + `rangesIn`, run concurrently inside the
36755
+ * recorder) — only the transport collapses.
36756
+ *
36757
+ * `protected` for the same reason the singular method is: every id in
36758
+ * `deviceIds` is a device reference, so the F1 #3 gate refuses any camera
36759
+ * outside the caller's scope — one id out of scope refuses the CALL, it
36760
+ * does not quietly drop a row.
36761
+ *
36762
+ * Every requested id gets a row, marked — see
36763
+ * {@link RecordingAvailabilityForDeviceSchema}. `deviceIds` is capped at
36764
+ * {@link RECORDING_TIMELINE_BATCH_MAX} and an over-cap ask is refused.
36765
+ */
36766
+ getAvailabilityBatch: method(external_exports.object({
36767
+ deviceIds: external_exports.array(external_exports.number()).min(1).max(200),
36768
+ fromMs: external_exports.number(),
36769
+ toMs: external_exports.number()
36770
+ }), external_exports.array(RecordingAvailabilityForDeviceSchema).readonly(), {
36771
+ kind: "query",
36772
+ auth: "protected"
36773
+ }),
36705
36774
  /** Which calendar days in [fromMs,toMs) have ≥1 recorded segment, bucketed by
36706
36775
  * the client's local day (`tzOffsetMinutes` = minutes to add to UTC). Drives
36707
36776
  * the theater date-picker's day dots. */
@@ -36714,6 +36783,26 @@ var recordingCapability = {
36714
36783
  kind: "query",
36715
36784
  auth: "protected"
36716
36785
  }),
36786
+ /**
36787
+ * `getDaysWithRecordings` for a SET of cameras, in one round trip.
36788
+ *
36789
+ * The cheapest question in the product, asked once per camera per month
36790
+ * change. One directory read per day per camera at the owner, unchanged;
36791
+ * what collapses is the N requests it took to ask.
36792
+ *
36793
+ * Every requested id gets a row, marked — see
36794
+ * {@link RecordingDaysForDeviceSchema}. `deviceIds` is capped at
36795
+ * {@link RECORDING_TIMELINE_BATCH_MAX} and an over-cap ask is refused.
36796
+ */
36797
+ getDaysWithRecordingsBatch: method(external_exports.object({
36798
+ deviceIds: external_exports.array(external_exports.number()).min(1).max(200),
36799
+ fromMs: external_exports.number(),
36800
+ toMs: external_exports.number(),
36801
+ tzOffsetMinutes: external_exports.number()
36802
+ }), external_exports.array(RecordingDaysForDeviceSchema).readonly(), {
36803
+ kind: "query",
36804
+ auth: "protected"
36805
+ }),
36717
36806
  getPlaybackManifest: method(external_exports.object({
36718
36807
  deviceId: external_exports.number(),
36719
36808
  fromMs: external_exports.number(),
@@ -42300,6 +42389,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
42300
42389
  addonId: null,
42301
42390
  access: "view"
42302
42391
  },
42392
+ "pipelineAnalytics.getEventDensityBatch": {
42393
+ capName: "pipeline-analytics",
42394
+ capScope: "device",
42395
+ addonId: null,
42396
+ access: "view"
42397
+ },
42303
42398
  "pipelineAnalytics.getEventMedia": {
42304
42399
  capName: "pipeline-analytics",
42305
42400
  capScope: "device",
@@ -43422,12 +43517,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
43422
43517
  addonId: null,
43423
43518
  access: "view"
43424
43519
  },
43520
+ "recording.getAvailabilityBatch": {
43521
+ capName: "recording",
43522
+ capScope: "system",
43523
+ addonId: null,
43524
+ access: "view"
43525
+ },
43425
43526
  "recording.getDaysWithRecordings": {
43426
43527
  capName: "recording",
43427
43528
  capScope: "system",
43428
43529
  addonId: null,
43429
43530
  access: "view"
43430
43531
  },
43532
+ "recording.getDaysWithRecordingsBatch": {
43533
+ capName: "recording",
43534
+ capScope: "system",
43535
+ addonId: null,
43536
+ access: "view"
43537
+ },
43431
43538
  "recording.getDeviceConfig": {
43432
43539
  capName: "recording",
43433
43540
  capScope: "system",
@@ -46032,6 +46139,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
46032
46139
  form: "single",
46033
46140
  optional: false
46034
46141
  }],
46142
+ "pipelineAnalytics.getEventDensityBatch": [{
46143
+ name: "deviceIds",
46144
+ form: "array",
46145
+ optional: false
46146
+ }],
46035
46147
  "pipelineAnalytics.getEventMedia": [{
46036
46148
  name: "deviceId",
46037
46149
  form: "single",
@@ -46447,11 +46559,21 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
46447
46559
  form: "single",
46448
46560
  optional: false
46449
46561
  }],
46562
+ "recording.getAvailabilityBatch": [{
46563
+ name: "deviceIds",
46564
+ form: "array",
46565
+ optional: false
46566
+ }],
46450
46567
  "recording.getDaysWithRecordings": [{
46451
46568
  name: "deviceId",
46452
46569
  form: "single",
46453
46570
  optional: false
46454
46571
  }],
46572
+ "recording.getDaysWithRecordingsBatch": [{
46573
+ name: "deviceIds",
46574
+ form: "array",
46575
+ optional: false
46576
+ }],
46455
46577
  "recording.getDeviceConfig": [{
46456
46578
  name: "deviceId",
46457
46579
  form: "single",
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-CX4PX7YL.js";
4
+ } from "./chunk-U3GHKSOG.js";
5
5
  import "./chunk-LMMQX4CK.js";
6
6
 
7
7
  // src/cli.ts
@@ -38,7 +38,7 @@ async function runServe(args) {
38
38
  ...typeof values.data === "string" ? { data: values.data } : {}
39
39
  };
40
40
  Object.assign(process.env, buildServeEnv(opts));
41
- await import("./launcher-WAZ55ZSY.js");
41
+ await import("./launcher-MNT6I6VY.js");
42
42
  }
43
43
 
44
44
  // src/commands/agent.ts
@@ -83,7 +83,7 @@ async function runAgent(args) {
83
83
  ...typeof values.port === "string" ? { port: values.port } : {}
84
84
  };
85
85
  Object.assign(process.env, buildAgentEnv(opts));
86
- await import("./launcher-WAZ55ZSY.js");
86
+ await import("./launcher-MNT6I6VY.js");
87
87
  }
88
88
 
89
89
  // src/commands/setup.ts
@@ -1130,7 +1130,7 @@ function isUnknown(_value) {
1130
1130
  return true;
1131
1131
  }
1132
1132
  async function resolveServerInteractive(presetNamespace) {
1133
- const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-RIINNWGY.js");
1133
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-OD7ECRSD.js");
1134
1134
  if (presetNamespace) {
1135
1135
  const spinner4 = clack.spinner();
1136
1136
  spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
@@ -5,7 +5,7 @@ import {
5
5
  filterHubNodes,
6
6
  resolveHubFromDiscovered,
7
7
  runDiscover
8
- } from "./chunk-CX4PX7YL.js";
8
+ } from "./chunk-U3GHKSOG.js";
9
9
  import "./chunk-LMMQX4CK.js";
10
10
  export {
11
11
  DEFAULT_HUB_HTTPS_PORT,