camstack 1.2.135 → 1.2.136

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.
@@ -27110,7 +27110,17 @@ var EventDensityBucketSchema = external_exports.object({
27110
27110
  bucketStart: external_exports.number(),
27111
27111
  motion: external_exports.number().int(),
27112
27112
  object: external_exports.number().int(),
27113
- audio: external_exports.number().int()
27113
+ audio: external_exports.number().int(),
27114
+ /**
27115
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
27116
+ * as opposed to `audio`, which is their COUNT (D431).
27117
+ *
27118
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
27119
+ * measured", which is not the same claim as silence, and a lane that cannot
27120
+ * tell them apart paints a quiet hour at full scale — which is exactly what
27121
+ * the count-on-a-level-meter did.
27122
+ */
27123
+ audioDbfs: external_exports.number().optional()
27114
27124
  });
27115
27125
  var EventDensityForDeviceSchema = external_exports.object({
27116
27126
  deviceId: external_exports.number(),
@@ -37795,7 +37805,23 @@ var RecordingRangeSchema = external_exports.object({
37795
37805
  });
37796
37806
  var RecordingAvailabilitySchema = external_exports.object({
37797
37807
  deviceId: external_exports.number(),
37798
- ranges: external_exports.array(RecordingRangeSchema)
37808
+ ranges: external_exports.array(RecordingRangeSchema),
37809
+ /**
37810
+ * Every profile this camera has footage in — not only the one `ranges`
37811
+ * describes (D433).
37812
+ *
37813
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
37814
+ * and enumerating all of them triples the directory reads for a bar that
37815
+ * would look identical. But the answer used to say nothing about that, so a
37816
+ * caller asking "what can I export?" read the single preferred profile as
37817
+ * the only one that exists — on this deployment every camera records `high`
37818
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
37819
+ * UI could not see it.
37820
+ *
37821
+ * Cheap: it is the same shallow directory read the profile CHOICE already
37822
+ * makes. Ask for a specific profile's ranges with the `profile` input.
37823
+ */
37824
+ profilesWithFootage: external_exports.array(external_exports.string())
37799
37825
  });
37800
37826
  var RecordingDaysSchema = external_exports.object({
37801
37827
  deviceId: external_exports.number(),
@@ -37805,7 +37831,11 @@ var RecordingDaysSchema = external_exports.object({
37805
37831
  var RecordingAvailabilityForDeviceSchema = external_exports.object({
37806
37832
  deviceId: external_exports.number(),
37807
37833
  read: external_exports.enum(["read", "unreadable"]),
37808
- ranges: external_exports.array(RecordingRangeSchema).readonly()
37834
+ ranges: external_exports.array(RecordingRangeSchema).readonly(),
37835
+ /** Same field, same meaning, as the singular answer (D433). A row that
37836
+ * dropped it would tell a grid caller the archive holds one profile.
37837
+ * Empty on an `'unreadable'` row: nobody looked. */
37838
+ profilesWithFootage: external_exports.array(external_exports.string()).readonly()
37809
37839
  });
37810
37840
  var RecordingDaysForDeviceSchema = external_exports.object({
37811
37841
  deviceId: external_exports.number(),
@@ -38020,7 +38050,14 @@ var recordingCapability = {
38020
38050
  getAvailability: method(external_exports.object({
38021
38051
  deviceId: external_exports.number(),
38022
38052
  fromMs: external_exports.number(),
38023
- toMs: external_exports.number()
38053
+ toMs: external_exports.number(),
38054
+ /**
38055
+ * Answer for THIS profile instead of the preferred one (D433). Absent
38056
+ * keeps the timeline's behaviour — one bar, one profile, one set of
38057
+ * reads. `profilesWithFootage` on the answer says what may be asked
38058
+ * for.
38059
+ */
38060
+ profile: external_exports.string().optional()
38024
38061
  }), RecordingAvailabilitySchema, {
38025
38062
  kind: "query",
38026
38063
  auth: "protected"
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-LMISNMUF.js";
4
+ } from "./chunk-XZJ7JATD.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-CGCHY5QF.js");
41
+ await import("./launcher-SY5BQXD2.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-CGCHY5QF.js");
86
+ await import("./launcher-SY5BQXD2.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-R4IJGYTA.js");
1133
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-3BUZVVZ3.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-LMISNMUF.js";
8
+ } from "./chunk-XZJ7JATD.js";
9
9
  import "./chunk-LMMQX4CK.js";
10
10
  export {
11
11
  DEFAULT_HUB_HTTPS_PORT,
@@ -23633,9 +23633,9 @@ var require_zod = __commonJS({
23633
23633
  }
23634
23634
  });
23635
23635
 
23636
- // ../system/dist/dist-DYWqXngV.js
23637
- var require_dist_DYWqXngV = __commonJS({
23638
- "../system/dist/dist-DYWqXngV.js"(exports) {
23636
+ // ../system/dist/dist-C85OOASj.js
23637
+ var require_dist_C85OOASj = __commonJS({
23638
+ "../system/dist/dist-C85OOASj.js"(exports) {
23639
23639
  "use strict";
23640
23640
  var zod = require_zod();
23641
23641
  var EventCategory = /* @__PURE__ */ (function(EventCategory2) {
@@ -37878,7 +37878,17 @@ var require_dist_DYWqXngV = __commonJS({
37878
37878
  bucketStart: zod.z.number(),
37879
37879
  motion: zod.z.number().int(),
37880
37880
  object: zod.z.number().int(),
37881
- audio: zod.z.number().int()
37881
+ audio: zod.z.number().int(),
37882
+ /**
37883
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
37884
+ * as opposed to `audio`, which is their COUNT (D431).
37885
+ *
37886
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
37887
+ * measured", which is not the same claim as silence, and a lane that cannot
37888
+ * tell them apart paints a quiet hour at full scale — which is exactly what
37889
+ * the count-on-a-level-meter did.
37890
+ */
37891
+ audioDbfs: zod.z.number().optional()
37882
37892
  });
37883
37893
  var EventDensityForDeviceSchema = zod.z.object({
37884
37894
  deviceId: zod.z.number(),
@@ -48386,7 +48396,23 @@ var require_dist_DYWqXngV = __commonJS({
48386
48396
  });
48387
48397
  var RecordingAvailabilitySchema = zod.z.object({
48388
48398
  deviceId: zod.z.number(),
48389
- ranges: zod.z.array(RecordingRangeSchema)
48399
+ ranges: zod.z.array(RecordingRangeSchema),
48400
+ /**
48401
+ * Every profile this camera has footage in — not only the one `ranges`
48402
+ * describes (D433).
48403
+ *
48404
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
48405
+ * and enumerating all of them triples the directory reads for a bar that
48406
+ * would look identical. But the answer used to say nothing about that, so a
48407
+ * caller asking "what can I export?" read the single preferred profile as
48408
+ * the only one that exists — on this deployment every camera records `high`
48409
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
48410
+ * UI could not see it.
48411
+ *
48412
+ * Cheap: it is the same shallow directory read the profile CHOICE already
48413
+ * makes. Ask for a specific profile's ranges with the `profile` input.
48414
+ */
48415
+ profilesWithFootage: zod.z.array(zod.z.string())
48390
48416
  });
48391
48417
  var RecordingDaysSchema = zod.z.object({
48392
48418
  deviceId: zod.z.number(),
@@ -48396,7 +48422,11 @@ var require_dist_DYWqXngV = __commonJS({
48396
48422
  var RecordingAvailabilityForDeviceSchema = zod.z.object({
48397
48423
  deviceId: zod.z.number(),
48398
48424
  read: zod.z.enum(["read", "unreadable"]),
48399
- ranges: zod.z.array(RecordingRangeSchema).readonly()
48425
+ ranges: zod.z.array(RecordingRangeSchema).readonly(),
48426
+ /** Same field, same meaning, as the singular answer (D433). A row that
48427
+ * dropped it would tell a grid caller the archive holds one profile.
48428
+ * Empty on an `'unreadable'` row: nobody looked. */
48429
+ profilesWithFootage: zod.z.array(zod.z.string()).readonly()
48400
48430
  });
48401
48431
  var RecordingDaysForDeviceSchema = zod.z.object({
48402
48432
  deviceId: zod.z.number(),
@@ -48611,7 +48641,14 @@ var require_dist_DYWqXngV = __commonJS({
48611
48641
  getAvailability: method(zod.z.object({
48612
48642
  deviceId: zod.z.number(),
48613
48643
  fromMs: zod.z.number(),
48614
- toMs: zod.z.number()
48644
+ toMs: zod.z.number(),
48645
+ /**
48646
+ * Answer for THIS profile instead of the preferred one (D433). Absent
48647
+ * keeps the timeline's behaviour — one bar, one profile, one set of
48648
+ * reads. `profilesWithFootage` on the answer says what may be asked
48649
+ * for.
48650
+ */
48651
+ profile: zod.z.string().optional()
48615
48652
  }), RecordingAvailabilitySchema, {
48616
48653
  kind: "query",
48617
48654
  auth: "protected"
@@ -61487,7 +61524,7 @@ var require_alerts_addon = __commonJS({
61487
61524
  [Symbol.toStringTag]: { value: "Module" }
61488
61525
  });
61489
61526
  require_chunk_Cek0wNdY();
61490
- var require_dist10 = require_dist_DYWqXngV();
61527
+ var require_dist10 = require_dist_C85OOASj();
61491
61528
  function selectExpired(alerts, cutoffMs) {
61492
61529
  return alerts.filter((a) => a.createdAt < cutoffMs).sort((a, b) => a.createdAt - b.createdAt).map((a) => a.id);
61493
61530
  }
@@ -62306,7 +62343,7 @@ var require_console_logging = __commonJS({
62306
62343
  [Symbol.toStringTag]: { value: "Module" }
62307
62344
  });
62308
62345
  require_chunk_Cek0wNdY();
62309
- var require_dist10 = require_dist_DYWqXngV();
62346
+ var require_dist10 = require_dist_C85OOASj();
62310
62347
  var require_formatter = require_formatter_DqAKDlvN();
62311
62348
  var LEVEL_RANK = {
62312
62349
  debug: 0,
@@ -62400,7 +62437,7 @@ var require_core_blocks_addon = __commonJS({
62400
62437
  "use strict";
62401
62438
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
62402
62439
  var require_chunk = require_chunk_Cek0wNdY();
62403
- var require_dist10 = require_dist_DYWqXngV();
62440
+ var require_dist10 = require_dist_C85OOASj();
62404
62441
  var node_crypto = __require("crypto");
62405
62442
  var node_fs_promises = __require("fs/promises");
62406
62443
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -63297,11 +63334,11 @@ var require_core_blocks = __commonJS({
63297
63334
  }
63298
63335
  });
63299
63336
 
63300
- // ../system/dist/retired-settings-keys-CXLIB19R.js
63301
- var require_retired_settings_keys_CXLIB19R = __commonJS({
63302
- "../system/dist/retired-settings-keys-CXLIB19R.js"(exports) {
63337
+ // ../system/dist/retired-settings-keys-Dfj9LA-i.js
63338
+ var require_retired_settings_keys_Dfj9LA_i = __commonJS({
63339
+ "../system/dist/retired-settings-keys-Dfj9LA-i.js"(exports) {
63303
63340
  "use strict";
63304
- var require_dist10 = require_dist_DYWqXngV();
63341
+ var require_dist10 = require_dist_C85OOASj();
63305
63342
  function settingsStoreIsAuthoritativeHere(env) {
63306
63343
  const raw = (env["CAMSTACK_ROLE"] ?? "").trim().toLowerCase();
63307
63344
  return raw === "" || raw === "hub";
@@ -65536,8 +65573,8 @@ var require_device_manager_addon = __commonJS({
65536
65573
  [Symbol.toStringTag]: { value: "Module" }
65537
65574
  });
65538
65575
  require_chunk_Cek0wNdY();
65539
- var require_dist10 = require_dist_DYWqXngV();
65540
- var require_retired_settings_keys = require_retired_settings_keys_CXLIB19R();
65576
+ var require_dist10 = require_dist_C85OOASj();
65577
+ var require_retired_settings_keys = require_retired_settings_keys_Dfj9LA_i();
65541
65578
  var node_crypto = __require("crypto");
65542
65579
  var _camstack_types_node = require_node();
65543
65580
  var JOB_HISTORY = 20;
@@ -71162,7 +71199,7 @@ var require_hub_forwarder = __commonJS({
71162
71199
  [Symbol.toStringTag]: { value: "Module" }
71163
71200
  });
71164
71201
  require_chunk_Cek0wNdY();
71165
- var require_dist10 = require_dist_DYWqXngV();
71202
+ var require_dist10 = require_dist_C85OOASj();
71166
71203
  var require_formatter = require_formatter_DqAKDlvN();
71167
71204
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
71168
71205
  var HubForwarderDestination = class {
@@ -71299,7 +71336,7 @@ var require_liveness_monitor_addon = __commonJS({
71299
71336
  "use strict";
71300
71337
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
71301
71338
  require_chunk_Cek0wNdY();
71302
- var require_dist10 = require_dist_DYWqXngV();
71339
+ var require_dist10 = require_dist_C85OOASj();
71303
71340
  var NO_DEVICES = "liveness:no-devices";
71304
71341
  var ALL_OFFLINE = "liveness:all-devices-offline";
71305
71342
  var NO_FOOTAGE_PREFIX = "liveness:no-footage:";
@@ -71495,7 +71532,7 @@ var require_local_auth_addon = __commonJS({
71495
71532
  [Symbol.toStringTag]: { value: "Module" }
71496
71533
  });
71497
71534
  var require_chunk = require_chunk_Cek0wNdY();
71498
- var require_dist10 = require_dist_DYWqXngV();
71535
+ var require_dist10 = require_dist_C85OOASj();
71499
71536
  var node_crypto = __require("crypto");
71500
71537
  node_crypto = require_chunk.__toESM(node_crypto);
71501
71538
  var crypto$1 = __require("crypto");
@@ -79308,7 +79345,7 @@ var require_loki_logging = __commonJS({
79308
79345
  [Symbol.toStringTag]: { value: "Module" }
79309
79346
  });
79310
79347
  require_chunk_Cek0wNdY();
79311
- var require_dist10 = require_dist_DYWqXngV();
79348
+ var require_dist10 = require_dist_C85OOASj();
79312
79349
  function sanitizeLabelName(raw) {
79313
79350
  const replaced = raw.replaceAll(/[^a-zA-Z0-9_]/g, "_");
79314
79351
  return /^[a-zA-Z_]/.test(replaced) ? replaced : `_${replaced}`;
@@ -79873,7 +79910,7 @@ var require_native_metrics_addon = __commonJS({
79873
79910
  [Symbol.toStringTag]: { value: "Module" }
79874
79911
  });
79875
79912
  var require_chunk = require_chunk_Cek0wNdY();
79876
- var require_dist10 = require_dist_DYWqXngV();
79913
+ var require_dist10 = require_dist_C85OOASj();
79877
79914
  var node_fs_promises = __require("fs/promises");
79878
79915
  var node_child_process = __require("child_process");
79879
79916
  var node_util = __require("util");
@@ -82457,7 +82494,7 @@ var require_filesystem_storage_addon = __commonJS({
82457
82494
  [Symbol.toStringTag]: { value: "Module" }
82458
82495
  });
82459
82496
  var require_chunk = require_chunk_Cek0wNdY();
82460
- var require_dist10 = require_dist_DYWqXngV();
82497
+ var require_dist10 = require_dist_C85OOASj();
82461
82498
  var node_crypto = __require("crypto");
82462
82499
  var node_fs_promises = __require("fs/promises");
82463
82500
  var node_path = __require("path");
@@ -83573,8 +83610,8 @@ var require_sqlite_settings_addon = __commonJS({
83573
83610
  [Symbol.toStringTag]: { value: "Module" }
83574
83611
  });
83575
83612
  var require_chunk = require_chunk_Cek0wNdY();
83576
- var require_dist10 = require_dist_DYWqXngV();
83577
- var require_retired_settings_keys = require_retired_settings_keys_CXLIB19R();
83613
+ var require_dist10 = require_dist_C85OOASj();
83614
+ var require_retired_settings_keys = require_retired_settings_keys_Dfj9LA_i();
83578
83615
  var node_crypto = __require("crypto");
83579
83616
  var node_fs = __require("fs");
83580
83617
  var node_module = __require("module");
@@ -86078,7 +86115,7 @@ var require_storage_orchestrator_addon = __commonJS({
86078
86115
  [Symbol.toStringTag]: { value: "Module" }
86079
86116
  });
86080
86117
  var require_chunk = require_chunk_Cek0wNdY();
86081
- var require_dist10 = require_dist_DYWqXngV();
86118
+ var require_dist10 = require_dist_C85OOASj();
86082
86119
  var require_hub_cap_forward = require_hub_cap_forward_DmHNjbB0();
86083
86120
  var zod = require_zod();
86084
86121
  var node_crypto = __require("crypto");
@@ -89728,7 +89765,7 @@ var require_system_config_addon = __commonJS({
89728
89765
  [Symbol.toStringTag]: { value: "Module" }
89729
89766
  });
89730
89767
  require_chunk_Cek0wNdY();
89731
- var require_dist10 = require_dist_DYWqXngV();
89768
+ var require_dist10 = require_dist_C85OOASj();
89732
89769
  var SECTION_TITLES = {
89733
89770
  server: "Server",
89734
89771
  auth: "Authentication"
@@ -107789,7 +107826,7 @@ var require_winston_logging = __commonJS({
107789
107826
  [Symbol.toStringTag]: { value: "Module" }
107790
107827
  });
107791
107828
  var require_chunk = require_chunk_Cek0wNdY();
107792
- var require_dist10 = require_dist_DYWqXngV();
107829
+ var require_dist10 = require_dist_C85OOASj();
107793
107830
  var require_formatter = require_formatter_DqAKDlvN();
107794
107831
  var node_path = __require("path");
107795
107832
  node_path = require_chunk.__toESM(node_path);
@@ -132498,7 +132535,7 @@ var require_dist3 = __commonJS({
132498
132535
  "use strict";
132499
132536
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
132500
132537
  var require_chunk = require_chunk_Cek0wNdY();
132501
- var require_dist10 = require_dist_DYWqXngV();
132538
+ var require_dist10 = require_dist_C85OOASj();
132502
132539
  var require_builtins_alerts_alerts_addon = require_alerts_addon();
132503
132540
  require_alerts();
132504
132541
  var require_formatter = require_formatter_DqAKDlvN();
@@ -228610,7 +228647,17 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
228610
228647
  bucketStart: zod.z.number(),
228611
228648
  motion: zod.z.number().int(),
228612
228649
  object: zod.z.number().int(),
228613
- audio: zod.z.number().int()
228650
+ audio: zod.z.number().int(),
228651
+ /**
228652
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
228653
+ * as opposed to `audio`, which is their COUNT (D431).
228654
+ *
228655
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
228656
+ * measured", which is not the same claim as silence, and a lane that cannot
228657
+ * tell them apart paints a quiet hour at full scale — which is exactly what
228658
+ * the count-on-a-level-meter did.
228659
+ */
228660
+ audioDbfs: zod.z.number().optional()
228614
228661
  });
228615
228662
  var EVENT_DENSITY_BATCH_MAX = 200;
228616
228663
  var EventDensityForDeviceSchema = zod.z.object({
@@ -239461,7 +239508,23 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
239461
239508
  });
239462
239509
  var RecordingAvailabilitySchema = zod.z.object({
239463
239510
  deviceId: zod.z.number(),
239464
- ranges: zod.z.array(RecordingRangeSchema)
239511
+ ranges: zod.z.array(RecordingRangeSchema),
239512
+ /**
239513
+ * Every profile this camera has footage in — not only the one `ranges`
239514
+ * describes (D433).
239515
+ *
239516
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
239517
+ * and enumerating all of them triples the directory reads for a bar that
239518
+ * would look identical. But the answer used to say nothing about that, so a
239519
+ * caller asking "what can I export?" read the single preferred profile as
239520
+ * the only one that exists — on this deployment every camera records `high`
239521
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
239522
+ * UI could not see it.
239523
+ *
239524
+ * Cheap: it is the same shallow directory read the profile CHOICE already
239525
+ * makes. Ask for a specific profile's ranges with the `profile` input.
239526
+ */
239527
+ profilesWithFootage: zod.z.array(zod.z.string())
239465
239528
  });
239466
239529
  var RecordingDaysSchema = zod.z.object({
239467
239530
  deviceId: zod.z.number(),
@@ -239472,7 +239535,11 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
239472
239535
  var RecordingAvailabilityForDeviceSchema = zod.z.object({
239473
239536
  deviceId: zod.z.number(),
239474
239537
  read: zod.z.enum(["read", "unreadable"]),
239475
- ranges: zod.z.array(RecordingRangeSchema).readonly()
239538
+ ranges: zod.z.array(RecordingRangeSchema).readonly(),
239539
+ /** Same field, same meaning, as the singular answer (D433). A row that
239540
+ * dropped it would tell a grid caller the archive holds one profile.
239541
+ * Empty on an `'unreadable'` row: nobody looked. */
239542
+ profilesWithFootage: zod.z.array(zod.z.string()).readonly()
239476
239543
  });
239477
239544
  var RecordingDaysForDeviceSchema = zod.z.object({
239478
239545
  deviceId: zod.z.number(),
@@ -239687,7 +239754,14 @@ ${recipe.triggers.map((t, i) => emitTrigger(t, i)).join("\n\n")}
239687
239754
  getAvailability: require_sleep.method(zod.z.object({
239688
239755
  deviceId: zod.z.number(),
239689
239756
  fromMs: zod.z.number(),
239690
- toMs: zod.z.number()
239757
+ toMs: zod.z.number(),
239758
+ /**
239759
+ * Answer for THIS profile instead of the preferred one (D433). Absent
239760
+ * keeps the timeline's behaviour — one bar, one profile, one set of
239761
+ * reads. `profilesWithFootage` on the answer says what may be asked
239762
+ * for.
239763
+ */
239764
+ profile: zod.z.string().optional()
239691
239765
  }), RecordingAvailabilitySchema, {
239692
239766
  kind: "query",
239693
239767
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "camstack",
3
- "version": "1.2.135",
3
+ "version": "1.2.136",
4
4
  "description": "CLI tool for managing and running CamStack server",
5
5
  "keywords": [
6
6
  "camstack",