@camstack/types 1.2.134 → 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.
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_event_category = require("./event-category-BaEgqJNv.js");
3
- const require_sleep = require("./sleep-DkBAyPva.js");
3
+ const require_sleep = require("./sleep-BwGJ_wL_.js");
4
4
  const require_canonical_hash = require("./canonical-hash-DNV8S5ET.js");
5
5
  const require_enums = require("./enums.js");
6
6
  const require_err_msg = require("./err-msg-COpsHMw2.js");
@@ -1832,7 +1832,8 @@ var OpsLogReasonSchema = zod.z.enum([
1832
1832
  "quota",
1833
1833
  "manual",
1834
1834
  "operator",
1835
- "maintenance"
1835
+ "maintenance",
1836
+ "orphaned-device"
1836
1837
  ]);
1837
1838
  /** One audit row, shared verbatim by both domains. */
1838
1839
  var OpsLogEntrySchema = zod.z.object({
@@ -10311,6 +10312,29 @@ var DevicePersistConfigPayloadSchema = zod.z.object({
10311
10312
  deviceId: zod.z.number(),
10312
10313
  data: zod.z.record(zod.z.string(), zod.z.unknown())
10313
10314
  });
10315
+ /** What a migration actually did, per switch. `unreachable` is a first-class
10316
+ * answer: a camera that could not be asked is not a camera that was silenced. */
10317
+ var MigrateSwitchOutcomeSchema = zod.z.enum([
10318
+ "off",
10319
+ "on",
10320
+ "not-offered",
10321
+ "unreachable"
10322
+ ]);
10323
+ var MigrateSwitchReportSchema = zod.z.object({
10324
+ deviceId: zod.z.number(),
10325
+ switchId: CameraSwitchIdSchema,
10326
+ outcome: MigrateSwitchOutcomeSchema,
10327
+ detail: zod.z.string().optional()
10328
+ });
10329
+ var MigrateDeviceResultSchema = zod.z.object({
10330
+ sourceId: zod.z.number(),
10331
+ targetId: zod.z.number(),
10332
+ switches: zod.z.array(MigrateSwitchReportSchema).readonly(),
10333
+ /** Switches that could NOT be turned off on the source. Empty is the only
10334
+ * value meaning the replaced hardware is quiet. */
10335
+ sourceStillLive: zod.z.array(CameraSwitchIdSchema).readonly(),
10336
+ swapped: zod.z.boolean()
10337
+ });
10314
10338
  var deviceManagerCapability = {
10315
10339
  name: "device-manager",
10316
10340
  scope: "system",
@@ -10325,6 +10349,33 @@ var deviceManagerCapability = {
10325
10349
  addonId: zod.z.string(),
10326
10350
  stableId: zod.z.string()
10327
10351
  }), zod.z.object({ id: zod.z.number() }), { kind: "mutation" }),
10352
+ /**
10353
+ * Replace a camera: the new hardware inherits the number the system knows.
10354
+ *
10355
+ * Everything general about a camera is keyed on the numeric id and nothing
10356
+ * else — the recording path on disk, the hour ledger, the media store, zone
10357
+ * ownership, and all four ecosystem exports. So a replacement moves the
10358
+ * NUMBER rather than the work, and the operator keeps their footage, their
10359
+ * rules and their integrations.
10360
+ *
10361
+ * Both cameras are switched off first, then the identities are exchanged
10362
+ * (children follow their parent), then the target — now answering on the
10363
+ * inherited number — is switched back on.
10364
+ *
10365
+ * **A switch that could not be written is REPORTED, not swallowed.** The
10366
+ * source is characteristically broken, and two of the eight switches write
10367
+ * the camera itself, so on a dead one they cannot be written at all.
10368
+ * `sourceStillLive` names what stayed live; empty is the only value that
10369
+ * means the old hardware is quiet. The migration proceeds either way —
10370
+ * refusing would refuse the case this exists for.
10371
+ */
10372
+ migrateDevice: require_sleep.method(zod.z.object({
10373
+ sourceId: zod.z.number(),
10374
+ targetId: zod.z.number()
10375
+ }), MigrateDeviceResultSchema, {
10376
+ kind: "mutation",
10377
+ auth: "admin"
10378
+ }),
10328
10379
  /** Register a device in the DB + in-memory registry. Called by DeviceManagerApi.register(). */
10329
10380
  registerDevice: require_sleep.method(DeviceRegisterPayloadSchema, zod.z.void(), { kind: "mutation" }),
10330
10381
  /** Remove a device from the DB + in-memory registry. Called by DeviceManagerApi.remove(). */
@@ -18777,6 +18828,49 @@ var KeyEventsForDeviceSchema = zod.z.object({
18777
18828
  deviceId: zod.z.number(),
18778
18829
  events: zod.z.array(KeyEventSchema).readonly()
18779
18830
  });
18831
+ /** One non-empty bucket of the timeline histogram. */
18832
+ var EventDensityBucketSchema = zod.z.object({
18833
+ bucketStart: zod.z.number(),
18834
+ motion: zod.z.number().int(),
18835
+ object: zod.z.number().int(),
18836
+ audio: zod.z.number().int()
18837
+ });
18838
+ /**
18839
+ * Most cameras one `getEventDensityBatch` may name.
18840
+ *
18841
+ * The same ceiling the sibling batches on this cap already carry
18842
+ * (`listEventKindsBatch`, `getKeyEventsBatch`): a tablet grid is tens of
18843
+ * cameras, never hundreds, and one call's answer is N × (window / bucketMs)
18844
+ * buckets crossing a process boundary.
18845
+ *
18846
+ * The ceiling is on the SCHEMA, not only on the caller. An over-eager ask is
18847
+ * REFUSED — never truncated to the first {@link EVENT_DENSITY_BATCH_MAX} ids,
18848
+ * because that answer is indistinguishable from a complete one and the caller
18849
+ * would never learn it asked too much. A caller with more cameras sends
18850
+ * ⌈n/max⌉ calls.
18851
+ */
18852
+ var EVENT_DENSITY_BATCH_MAX = 200;
18853
+ /**
18854
+ * One camera's row in a `getEventDensityBatch` answer.
18855
+ *
18856
+ * TWO facts, and the timeline draws them differently:
18857
+ *
18858
+ * - `read: 'read'` — the histogram for this camera. `buckets: []` is a real
18859
+ * claim: read, and nothing happened in the window.
18860
+ * - `read: 'unreadable'` — nobody could answer for this camera. `buckets` is
18861
+ * empty and that emptiness means NOTHING; the timeline must render unknown,
18862
+ * not quiet.
18863
+ *
18864
+ * Fanned out per camera the difference was free — one query rejected while the
18865
+ * others resolved — and collapsing to a batch is the exact moment it is lost
18866
+ * silently. Every requested id gets a row: a caller that asked for twelve and
18867
+ * got eleven cannot tell which one is missing, or that any is.
18868
+ */
18869
+ var EventDensityForDeviceSchema = zod.z.object({
18870
+ deviceId: zod.z.number(),
18871
+ read: zod.z.enum(["read", "unreadable"]),
18872
+ buckets: zod.z.array(EventDensityBucketSchema).readonly()
18873
+ });
18780
18874
  var TrackedDetectionSchema = zod.z.object({
18781
18875
  trackId: zod.z.string(),
18782
18876
  className: zod.z.string(),
@@ -19177,12 +19271,31 @@ var pipelineAnalyticsCapability = {
19177
19271
  since: zod.z.number(),
19178
19272
  until: zod.z.number(),
19179
19273
  bucketMs: zod.z.number().int().positive()
19180
- }), zod.z.array(zod.z.object({
19181
- bucketStart: zod.z.number(),
19182
- motion: zod.z.number().int(),
19183
- object: zod.z.number().int(),
19184
- audio: zod.z.number().int()
19185
- })).readonly()),
19274
+ }), zod.z.array(EventDensityBucketSchema).readonly()),
19275
+ /**
19276
+ * The same histogram, for a SET of cameras, in one round trip.
19277
+ *
19278
+ * A multi-camera timeline (the tablet grid) re-asks this of every camera in
19279
+ * the grid on every day change — N browser → hub → post-analysis round
19280
+ * trips for N independent, already-indexed store queries. The queries are
19281
+ * unchanged and still run per camera (`densityByKind`, one per deviceId,
19282
+ * concurrently INSIDE the owner); only the transport collapses.
19283
+ *
19284
+ * Deliberately per-device rather than pre-merged: a timeline lane belongs
19285
+ * to a camera, and a caller that merged would have to un-merge.
19286
+ * `getEventDensity` stays for single-camera callers.
19287
+ *
19288
+ * Every requested id gets a row, marked — see
19289
+ * {@link EventDensityForDeviceSchema}. `deviceIds` is capped at
19290
+ * {@link EVENT_DENSITY_BATCH_MAX}, and an over-cap ask is refused rather
19291
+ * than truncated.
19292
+ */
19293
+ getEventDensityBatch: require_sleep.method(zod.z.object({
19294
+ deviceIds: zod.z.array(zod.z.number()).min(1).max(200),
19295
+ since: zod.z.number(),
19296
+ until: zod.z.number(),
19297
+ bucketMs: zod.z.number().int().positive()
19298
+ }), zod.z.array(EventDensityForDeviceSchema).readonly()),
19186
19299
  /**
19187
19300
  * @deprecated Prefer `pruneTracksBefore` — the track is the ROOT of the
19188
19301
  * analytics model and retention must cascade from it (design §5.1). This
@@ -31113,6 +31226,54 @@ var RecordingDaysSchema = zod.z.object({
31113
31226
  /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
31114
31227
  days: zod.z.array(zod.z.number())
31115
31228
  });
31229
+ /**
31230
+ * Most cameras one `getAvailabilityBatch` / `getDaysWithRecordingsBatch` may
31231
+ * name.
31232
+ *
31233
+ * Matches the ceiling the per-camera batches elsewhere in the system carry
31234
+ * (`pipelineAnalytics.getKeyEventsBatch`, `sceneMonitor.listScenesBatch`): a
31235
+ * grid is tens of cameras, never hundreds, and each id costs the recorder one
31236
+ * calendar walk whose answer crosses a process boundary.
31237
+ *
31238
+ * The ceiling is on the SCHEMA. An over-eager ask is REFUSED, never truncated
31239
+ * to the first {@link RECORDING_TIMELINE_BATCH_MAX} ids — a truncated answer
31240
+ * looks exactly like a complete one, and the caller would draw an empty
31241
+ * timeline for the cameras it never learned were dropped.
31242
+ */
31243
+ var RECORDING_TIMELINE_BATCH_MAX = 200;
31244
+ /**
31245
+ * One camera's row in a `getAvailabilityBatch` answer.
31246
+ *
31247
+ * `ranges` is EXACTLY what `getAvailability` returns for that camera — the
31248
+ * batch collapses the transport, not the work — plus the one thing the singular
31249
+ * method never had to say:
31250
+ *
31251
+ * - `read: 'read'` — answered. `ranges: []` means "read, and this camera has
31252
+ * no footage in the window", which is a real claim.
31253
+ * - `read: 'unreadable'` — the recorder could not answer for this camera (its
31254
+ * calendar rung threw, its location is unmounted). `ranges` is empty and
31255
+ * that emptiness means NOTHING.
31256
+ *
31257
+ * A timeline that renders the second as the first tells an operator there is no
31258
+ * footage when the truth is that nobody looked.
31259
+ */
31260
+ var RecordingAvailabilityForDeviceSchema = zod.z.object({
31261
+ deviceId: zod.z.number(),
31262
+ read: zod.z.enum(["read", "unreadable"]),
31263
+ ranges: zod.z.array(RecordingRangeSchema).readonly()
31264
+ });
31265
+ /**
31266
+ * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
31267
+ * {@link RecordingAvailabilityForDeviceSchema}: `days: []` on a `'read'` row is
31268
+ * "no footage in this month", `read: 'unreadable'` is "nobody could look", and
31269
+ * the date-picker's day dots must not spell them the same.
31270
+ */
31271
+ var RecordingDaysForDeviceSchema = zod.z.object({
31272
+ deviceId: zod.z.number(),
31273
+ read: zod.z.enum(["read", "unreadable"]),
31274
+ /** Local-midnight epochs (UTC ms) of days that have ≥1 recorded segment. */
31275
+ days: zod.z.array(zod.z.number()).readonly()
31276
+ });
31116
31277
  var RecordingManifestSchema = zod.z.object({
31117
31278
  deviceId: zod.z.number(),
31118
31279
  /** Local filesystem path to the master playlist; null when no recording exists for the requested range. */
@@ -31358,6 +31519,32 @@ var recordingCapability = {
31358
31519
  kind: "query",
31359
31520
  auth: "protected"
31360
31521
  }),
31522
+ /**
31523
+ * `getAvailability` for a SET of cameras, in one round trip.
31524
+ *
31525
+ * A multi-camera timeline re-asks availability for every camera in the grid
31526
+ * on every day change; fanned out that is one request per camera for N
31527
+ * independent calendar walks. The per-camera work is IDENTICAL (the same
31528
+ * `availabilityProfileFor` + `rangesIn`, run concurrently inside the
31529
+ * recorder) — only the transport collapses.
31530
+ *
31531
+ * `protected` for the same reason the singular method is: every id in
31532
+ * `deviceIds` is a device reference, so the F1 #3 gate refuses any camera
31533
+ * outside the caller's scope — one id out of scope refuses the CALL, it
31534
+ * does not quietly drop a row.
31535
+ *
31536
+ * Every requested id gets a row, marked — see
31537
+ * {@link RecordingAvailabilityForDeviceSchema}. `deviceIds` is capped at
31538
+ * {@link RECORDING_TIMELINE_BATCH_MAX} and an over-cap ask is refused.
31539
+ */
31540
+ getAvailabilityBatch: require_sleep.method(zod.z.object({
31541
+ deviceIds: zod.z.array(zod.z.number()).min(1).max(200),
31542
+ fromMs: zod.z.number(),
31543
+ toMs: zod.z.number()
31544
+ }), zod.z.array(RecordingAvailabilityForDeviceSchema).readonly(), {
31545
+ kind: "query",
31546
+ auth: "protected"
31547
+ }),
31361
31548
  /** Which calendar days in [fromMs,toMs) have ≥1 recorded segment, bucketed by
31362
31549
  * the client's local day (`tzOffsetMinutes` = minutes to add to UTC). Drives
31363
31550
  * the theater date-picker's day dots. */
@@ -31370,6 +31557,26 @@ var recordingCapability = {
31370
31557
  kind: "query",
31371
31558
  auth: "protected"
31372
31559
  }),
31560
+ /**
31561
+ * `getDaysWithRecordings` for a SET of cameras, in one round trip.
31562
+ *
31563
+ * The cheapest question in the product, asked once per camera per month
31564
+ * change. One directory read per day per camera at the owner, unchanged;
31565
+ * what collapses is the N requests it took to ask.
31566
+ *
31567
+ * Every requested id gets a row, marked — see
31568
+ * {@link RecordingDaysForDeviceSchema}. `deviceIds` is capped at
31569
+ * {@link RECORDING_TIMELINE_BATCH_MAX} and an over-cap ask is refused.
31570
+ */
31571
+ getDaysWithRecordingsBatch: require_sleep.method(zod.z.object({
31572
+ deviceIds: zod.z.array(zod.z.number()).min(1).max(200),
31573
+ fromMs: zod.z.number(),
31574
+ toMs: zod.z.number(),
31575
+ tzOffsetMinutes: zod.z.number()
31576
+ }), zod.z.array(RecordingDaysForDeviceSchema).readonly(), {
31577
+ kind: "query",
31578
+ auth: "protected"
31579
+ }),
31373
31580
  getPlaybackManifest: require_sleep.method(zod.z.object({
31374
31581
  deviceId: zod.z.number(),
31375
31582
  fromMs: zod.z.number(),
@@ -40248,6 +40455,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
40248
40455
  addonId: null,
40249
40456
  access: "view"
40250
40457
  },
40458
+ "deviceManager.migrateDevice": {
40459
+ capName: "device-manager",
40460
+ capScope: "system",
40461
+ addonId: null,
40462
+ access: "create"
40463
+ },
40251
40464
  "deviceManager.persistConfig": {
40252
40465
  capName: "device-manager",
40253
40466
  capScope: "system",
@@ -41982,6 +42195,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
41982
42195
  addonId: null,
41983
42196
  access: "view"
41984
42197
  },
42198
+ "pipelineAnalytics.getEventDensityBatch": {
42199
+ capName: "pipeline-analytics",
42200
+ capScope: "device",
42201
+ addonId: null,
42202
+ access: "view"
42203
+ },
41985
42204
  "pipelineAnalytics.getEventMedia": {
41986
42205
  capName: "pipeline-analytics",
41987
42206
  capScope: "device",
@@ -43104,12 +43323,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
43104
43323
  addonId: null,
43105
43324
  access: "view"
43106
43325
  },
43326
+ "recording.getAvailabilityBatch": {
43327
+ capName: "recording",
43328
+ capScope: "system",
43329
+ addonId: null,
43330
+ access: "view"
43331
+ },
43107
43332
  "recording.getDaysWithRecordings": {
43108
43333
  capName: "recording",
43109
43334
  capScope: "system",
43110
43335
  addonId: null,
43111
43336
  access: "view"
43112
43337
  },
43338
+ "recording.getDaysWithRecordingsBatch": {
43339
+ capName: "recording",
43340
+ capScope: "system",
43341
+ addonId: null,
43342
+ access: "view"
43343
+ },
43113
43344
  "recording.getDeviceConfig": {
43114
43345
  capName: "recording",
43115
43346
  capScope: "system",
@@ -45977,6 +46208,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
45977
46208
  form: "single",
45978
46209
  optional: false
45979
46210
  }],
46211
+ "pipelineAnalytics.getEventDensityBatch": [{
46212
+ name: "deviceIds",
46213
+ form: "array",
46214
+ optional: false
46215
+ }],
45980
46216
  "pipelineAnalytics.getEventMedia": [{
45981
46217
  name: "deviceId",
45982
46218
  form: "single",
@@ -46392,11 +46628,21 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
46392
46628
  form: "single",
46393
46629
  optional: false
46394
46630
  }],
46631
+ "recording.getAvailabilityBatch": [{
46632
+ name: "deviceIds",
46633
+ form: "array",
46634
+ optional: false
46635
+ }],
46395
46636
  "recording.getDaysWithRecordings": [{
46396
46637
  name: "deviceId",
46397
46638
  form: "single",
46398
46639
  optional: false
46399
46640
  }],
46641
+ "recording.getDaysWithRecordingsBatch": [{
46642
+ name: "deviceIds",
46643
+ form: "array",
46644
+ optional: false
46645
+ }],
46400
46646
  "recording.getDeviceConfig": [{
46401
46647
  name: "deviceId",
46402
46648
  form: "single",
@@ -46928,7 +47174,9 @@ var SYSTEM_SCOPE_DEVICE_METHODS = [
46928
47174
  "plateGallery.listPlates",
46929
47175
  "recording.deleteFootprint",
46930
47176
  "recording.getAvailability",
47177
+ "recording.getAvailabilityBatch",
46931
47178
  "recording.getDaysWithRecordings",
47179
+ "recording.getDaysWithRecordingsBatch",
46932
47180
  "recording.getDeviceConfig",
46933
47181
  "recording.getPlaybackManifest",
46934
47182
  "recording.listOpsLog",
@@ -47571,6 +47819,7 @@ function createSystemProxy(api) {
47571
47819
  },
47572
47820
  deviceManager: {
47573
47821
  allocateDeviceId: (input) => dispatch("deviceManager", "allocateDeviceId", "mutation", input),
47822
+ migrateDevice: (input) => dispatch("deviceManager", "migrateDevice", "mutation", input),
47574
47823
  registerDevice: (input) => dispatch("deviceManager", "registerDevice", "mutation", input),
47575
47824
  removeDevice: (input) => dispatch("deviceManager", "removeDevice", "mutation", input),
47576
47825
  persistConfig: (input) => dispatch("deviceManager", "persistConfig", "mutation", input),
@@ -47859,6 +48108,8 @@ function createSystemProxy(api) {
47859
48108
  unassignPlates: (input) => dispatch("plateGallery", "unassignPlates", "mutation", input)
47860
48109
  },
47861
48110
  recording: {
48111
+ getAvailabilityBatch: (input) => dispatch("recording", "getAvailabilityBatch", "query", input),
48112
+ getDaysWithRecordingsBatch: (input) => dispatch("recording", "getDaysWithRecordingsBatch", "query", input),
47862
48113
  getStorageUsage: (input) => dispatch("recording", "getStorageUsage", "query", input),
47863
48114
  listOpsLog: (input) => dispatch("recording", "listOpsLog", "query", input),
47864
48115
  pauseForStorageMigration: (input) => dispatch("recording", "pauseForStorageMigration", "mutation", input),
@@ -52260,6 +52511,7 @@ exports.DisposerChain = require_sleep.DisposerChain;
52260
52511
  exports.DoorbellPressEventSchema = DoorbellPressEventSchema;
52261
52512
  exports.DoorbellStatusSchema = DoorbellStatusSchema;
52262
52513
  exports.EVENTFUL_CAP_NAMES = EVENTFUL_CAP_NAMES;
52514
+ exports.EVENT_DENSITY_BATCH_MAX = EVENT_DENSITY_BATCH_MAX;
52263
52515
  exports.EVENT_KIND_BY_CAP = EVENT_KIND_BY_CAP;
52264
52516
  exports.EVENT_PAD_MS = EVENT_PAD_MS;
52265
52517
  exports.EVENT_TAXONOMY = EVENT_TAXONOMY;
@@ -52282,6 +52534,8 @@ exports.EnrichedWidgetMetadataSchema = EnrichedWidgetMetadataSchema;
52282
52534
  exports.EnumSensorDateTimeFormatSchema = EnumSensorDateTimeFormatSchema;
52283
52535
  exports.EnumSensorStatusSchema = EnumSensorStatusSchema;
52284
52536
  exports.EventCategory = require_event_category.EventCategory;
52537
+ exports.EventDensityBucketSchema = EventDensityBucketSchema;
52538
+ exports.EventDensityForDeviceSchema = EventDensityForDeviceSchema;
52285
52539
  exports.EventEmitterStatusSchema = EventEmitterStatusSchema;
52286
52540
  exports.EventFireSchema = EventFireSchema;
52287
52541
  exports.EventItemSchema = EventItemSchema;
@@ -52691,6 +52945,7 @@ exports.REACHABILITY_POLL_INTERVAL_MS = REACHABILITY_POLL_INTERVAL_MS;
52691
52945
  exports.REACHABILITY_PROBE_TIMEOUT_MS = REACHABILITY_PROBE_TIMEOUT_MS;
52692
52946
  exports.RECOGNITION_TYPES = RECOGNITION_TYPES;
52693
52947
  exports.RECORDING_EXPORT_MAX_READ_BYTES = RECORDING_EXPORT_MAX_READ_BYTES;
52948
+ exports.RECORDING_TIMELINE_BATCH_MAX = RECORDING_TIMELINE_BATCH_MAX;
52694
52949
  exports.REDACTED_SECRET = REDACTED_SECRET;
52695
52950
  exports.RESERVED_BINDING_NAMES = RESERVED_BINDING_NAMES;
52696
52951
  exports.RESTORED_CAP_NAMES = RESTORED_CAP_NAMES;
@@ -52707,11 +52962,13 @@ exports.ReadinessRegistry = require_sleep.ReadinessRegistry;
52707
52962
  exports.ReadinessTimeoutError = require_sleep.ReadinessTimeoutError;
52708
52963
  exports.RecentTracksPageSchema = RecentTracksPageSchema;
52709
52964
  exports.RecentTracksQueryInput = RecentTracksQueryInput;
52965
+ exports.RecordingAvailabilityForDeviceSchema = RecordingAvailabilityForDeviceSchema;
52710
52966
  exports.RecordingAvailabilitySchema = RecordingAvailabilitySchema;
52711
52967
  exports.RecordingBandModeSchema = RecordingBandModeSchema;
52712
52968
  exports.RecordingBandSchema = RecordingBandSchema;
52713
52969
  exports.RecordingBandTriggersSchema = RecordingBandTriggersSchema;
52714
52970
  exports.RecordingConfigSchema = RecordingConfigSchema;
52971
+ exports.RecordingDaysForDeviceSchema = RecordingDaysForDeviceSchema;
52715
52972
  exports.RecordingDaysSchema = RecordingDaysSchema;
52716
52973
  exports.RecordingDeviceUsageSchema = RecordingDeviceUsageSchema;
52717
52974
  exports.RecordingLocationUsageSchema = RecordingLocationUsageSchema;