@camstack/types 1.2.246 → 1.2.248

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.
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Source ids of a device COLLECTION that exactly one addon may mint (D625).
3
+ *
4
+ * A collection cap's picker treats its rows as peers, and that is right almost
5
+ * everywhere. It is wrong for exactly one thing: a DEFAULT that must be
6
+ * impossible to express otherwise.
7
+ *
8
+ * `recording`'s default is ours, always (the operator's ruling, 2026-09-24).
9
+ * The way that is made structural rather than a sort order is a RESERVED id:
10
+ * the absence of an operator choice MEANS `camstack`, so a surface never needs
11
+ * a "first row" fallback and there is nowhere to put one. `clip-sources.ts`
12
+ * ends with `?? sources[0]`, and `videoclips.listSources` on 592 answers the
13
+ * ONBOARD row first — for clips that fallback was argued for, for a timeline it
14
+ * would silently swap an 85 362 s bar for a 21 388 s one.
15
+ *
16
+ * A reserved id is only worth anything if nothing else can spell it, so it is
17
+ * enforced twice and neither is a paragraph:
18
+ *
19
+ * 1. `device-collection-dispatch.ts` DROPS a `listSources` row carrying a
20
+ * reserved id from any addon but its owner, naming the impostor in a log
21
+ * line with `tags: { deviceId }`. It drops the row rather than throwing:
22
+ * one lying provider must not empty a camera's picker.
23
+ * 2. `scripts/check-reserved-collection-sources.ts` fails CI on any package
24
+ * but the owner's that spells the id at all. It reads THIS table, so a new
25
+ * reservation is guarded the moment it is added here.
26
+ */
27
+ /** One reservation: `sourceId` on `capName` may be served only by `addonId`. */
28
+ export interface ReservedCollectionSource {
29
+ readonly capName: string;
30
+ readonly sourceId: string;
31
+ readonly addonId: string;
32
+ }
33
+ /**
34
+ * Every reserved (cap, source) pair in the system.
35
+ *
36
+ * KEEP THE LITERALS INLINE. The CI guard parses this array textually — it
37
+ * cannot execute TypeScript — so an entry built from an imported constant
38
+ * would be invisible to it, and a guard that reads the wrong surface is worse
39
+ * than none.
40
+ */
41
+ export declare const RESERVED_COLLECTION_SOURCES: readonly ReservedCollectionSource[];
42
+ /**
43
+ * The addon allowed to serve `sourceId` on `capName`, or `null` when the id is
44
+ * not reserved at all (which is the common case — most sources are peers).
45
+ */
46
+ export declare function reservedSourceOwner(capName: string, sourceId: string): string | null;
@@ -393,27 +393,66 @@ export declare const ClipStreamDialSchema: z.ZodObject<{
393
393
  }, z.core.$strip>;
394
394
  export type ClipStreamDial = z.infer<typeof ClipStreamDialSchema>;
395
395
  /**
396
- * The playback rates a clip can be DELIVERED at, ascending, always with `1`.
396
+ * The playback rates the broker can pace over media it HOLDS, ascending,
397
+ * always with `1` — and the WIDEST ladder there is. It is the domain the
398
+ * broker's `clampPlaybackRate` is derived from, at both ends.
397
399
  *
398
400
  * These are the BROKER's: it re-paces frames it has already demuxed — the
399
401
  * `MonotonicClock` divides source elapsed time by the factor and the pacer
400
- * pushes that much faster — so the domain is the recorded one, {0} ∪ [0.25, 4],
401
- * and this is the discrete ladder drawn from it. `1.5` is in it because a
402
- * re-pacer has no reason to refuse it.
403
- *
404
- * `8` and `16` are deliberately NOT here. They are the CAMERA's own
405
- * `<playSpeed>` (Reolink cmd-5 replay), a different mechanism, still unwired
406
- * (D597, D600) — a rate change there costs a new dial and a new stream, and
407
- * the camera's 8x would need a resample the clip audio path has no decoder
408
- * for. Offering them today accepts a rate and delivers 1x, which is the whole
409
- * defect this list exists to end (D612). When `playSpeed` IS wired its rates
410
- * join THIS array — a second list elsewhere is the second authority D62
411
- * forbids.
412
- *
413
- * Every entry must survive the broker's `clampPlaybackRate` unchanged: a set
414
- * that offers what the clamp then moves is the same lie one step later.
402
+ * pushes that much faster. `1.5` is in it because a re-pacer has no reason to
403
+ * refuse it.
404
+ *
405
+ * **`8` is here since D621, and it is the pacer's, not a camera's.** D620
406
+ * measured the thing that was assumed for a year and was never true: a
407
+ * Reolink `<playSpeed>` does not time-compress anything. At 1, 2, 4 and 8 the
408
+ * transfer is byte-identical — same 947 472 bytes, same 594 access units,
409
+ * same 39.855 s presentation span, same 624 AAC frames — and only the wall
410
+ * clock moves. It buys SUPPLY, never speed. So there was never a second
411
+ * mechanism to wire for 8×: there is one, this one, and what it needs is
412
+ * media in hand and a clamp that does not move the number.
413
+ *
414
+ * **`16` is deliberately NOT here, and will not join by widening this array.**
415
+ * The camera's `playSpeed 16` is not a rate at all but an I-frame-only MODE —
416
+ * measured on 592: 10 access units for a whole 36.3 s sub clip, 20 for the
417
+ * main twin at a 2 025 ms median spacing, and no audio track. That is
418
+ * different CONTENT, a stream of its own, and the honest broker-side twin of
419
+ * it would be a pacer that DROPS whole GOPs rather than one that pushes 16×
420
+ * the bitrate at a live WebRTC track. Neither exists. A `16` in this array
421
+ * today would be a rate accepted and delivered at 8 — D612's defect, which
422
+ * this list exists to end, one number further along.
423
+ *
424
+ * Every entry must survive the broker's `clampPlaybackRate` unchanged. Since
425
+ * D621 that is structural rather than a discipline: the clamp reads this
426
+ * array's own ends. What still has to be proved behaviourally — and is, in
427
+ * the broker's `clip-stream-feeder.spec` — is that the PACER really empties a
428
+ * clip `rate` times faster, because a clamp agreeing with a ladder is a
429
+ * constant compared against itself.
430
+ *
431
+ * Narrower ladders exist for transports whose SUPPLY is bounded; they are
432
+ * subsets of this one ({@link CLIP_STREAM_SOURCE_RATES},
433
+ * {@link CLIP_REALTIME_SOURCE_RATES}).
415
434
  */
416
435
  export declare const CLIP_BROKER_PACED_RATES: readonly number[];
436
+ /**
437
+ * The rates a provider-STREAMED clip can be delivered at — a subset of
438
+ * {@link CLIP_BROKER_PACED_RATES}, and frozen below it on purpose (D621).
439
+ *
440
+ * A `stream` clip's media does not exist yet: it arrives on a socket from the
441
+ * camera while the pacer consumes it. The pacer takes `rate` seconds of media
442
+ * per second of wall clock, so the ceiling is whatever the SOURCE supplies,
443
+ * and that is a measurement per vendor rather than a preference.
444
+ *
445
+ * Reolink, the one provider on this envelope, was measured on 592
446
+ * (2026-09-23, D620): with the `<ReplaySeek>` that 0.11.1 sends before every
447
+ * replay, a sub clip arrives at **1.2×** and a main twin at **1.37×**. The
448
+ * ladder below is therefore ALREADY beyond this transport above 1 — the D612
449
+ * defect returned through a door nobody opened — and D620 fixed the repair
450
+ * order: the supply first, the ladder after. So this array does not move with
451
+ * the broker's, and it does not gain `8`; what it gains, when the library
452
+ * forwards a `<playSpeed>` large enough to feed the rate being paced over it,
453
+ * is the right to be widened on a measurement rather than shortened on one.
454
+ */
455
+ export declare const CLIP_STREAM_SOURCE_RATES: readonly number[];
417
456
  /**
418
457
  * The rates a REALTIME-BOUND stream can be delivered at.
419
458
  *
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Which devices a camera's LINKED set resolves to — the pure rules, with no
3
+ * store and no provider context.
4
+ *
5
+ * They live in `@camstack/types` rather than in the device-manager builtin
6
+ * because two surfaces need the SAME answer and a second copy would be a
7
+ * second definition of what a room contains: the hub's boot backfill, and the
8
+ * admin UI's per-room rebuild. Moving them here also keeps that button a
9
+ * framework-free change — a new cap method would only reach a node through a
10
+ * published `@camstack/server` and a restart (D16), which is not what a
11
+ * convenience button is worth.
12
+ */
13
+ import { DeviceType } from './device-type.js';
14
+ /** The device fields the pure resolver consumes (subset of `DeviceInfo`). */
15
+ export interface LinkCandidate {
16
+ readonly id: number;
17
+ readonly parentDeviceId: number | null;
18
+ readonly location: string | null;
19
+ readonly type: DeviceType;
20
+ /**
21
+ * The child identity a container's stored pick is matched against. A NOT
22
+ * NULL column, so `slim` carries it — which is the whole reason the pick is
23
+ * keyed on it (see `ContainerChildRef.stableId`).
24
+ */
25
+ readonly stableId: string;
26
+ /** The container's own operator pick, when one was made. */
27
+ readonly primaryChildEntityId?: string | null;
28
+ /**
29
+ * The child's `DeviceRole`. Ranked ABOVE `type` when a container picks the
30
+ * child it stands for, because `DeviceType` cannot tell a door contact from a
31
+ * battery reading — Home Assistant maps both to `Sensor`. A first-class meta
32
+ * column, so `slim` carries it.
33
+ */
34
+ readonly role?: string | null | undefined;
35
+ /** Operator-facing name — used for the namesake tiebreak. Also a column. */
36
+ readonly name?: string;
37
+ }
38
+ /**
39
+ * Resolve one candidate id to the ids it should actually contribute to a
40
+ * linked set: itself, unless it is a CONTAINER, in which case its own
41
+ * children (recursively expanded the same way — a container-of-containers
42
+ * is vanishingly unlikely per `DeviceType.Container`'s contract, but this
43
+ * costs nothing to handle). `visited` guards a pathological parent-cycle in
44
+ * persisted data from recursing forever; a candidate already on the current
45
+ * expansion path is dropped rather than re-expanded.
46
+ *
47
+ * This is the STRUCTURAL, location-independent way a container's child
48
+ * becomes reachable: the device-tree "children of the camera" rule and a
49
+ * persisted manual pick are parentDeviceId chains, never location-based —
50
+ * a container named there is excluded by expanding into whatever it
51
+ * actually contains, regardless of what its (or its children's) `location`
52
+ * column holds.
53
+ */
54
+ export declare function expandContainer(id: number, byId: ReadonlyMap<number, LinkCandidate>, byParent: ReadonlyMap<number, readonly LinkCandidate[]>, visited: ReadonlySet<number>, out: Set<number>): void;
55
+ /**
56
+ * What the retired `auto` mode (pre-D356) added beyond the device-tree
57
+ * children: every non-container candidate sharing the camera's location, a
58
+ * container child standing in for its container's PRIMARY child.
59
+ *
60
+ * Two callers, both WRITERS, never the read path: the one-shot boot backfill
61
+ * that materialises it into the manual list
62
+ * (`linked-devices-manual-backfill.ts`), and the admin UI's per-room rebuild.
63
+ * Both ask "what does this room contain", and a second copy of the answer is
64
+ * how two surfaces start disagreeing about a room.
65
+ *
66
+ * A camera with NO location answers `[]`. A caller that would WRITE that must
67
+ * refuse instead: emptying a list because nobody set the room is the silent
68
+ * drop D391 names.
69
+ */
70
+ export declare function legacyAutoLinkIds(params: {
71
+ readonly selfId: number;
72
+ readonly selfLocation: string | null;
73
+ readonly candidates: readonly LinkCandidate[];
74
+ }): readonly number[];
@@ -45,7 +45,6 @@ import type { deviceOpsCapability } from '../capabilities/device-ops.cap.js';
45
45
  import type { deviceProviderCapability } from '../capabilities/device-provider.cap.js';
46
46
  import type { deviceStateCapability } from '../capabilities/device-state.cap.js';
47
47
  import type { embeddingEncoderCapability } from '../capabilities/embedding-encoder.cap.js';
48
- import type { eventsCapability } from '../capabilities/events.cap.js';
49
48
  import type { faceGalleryCapability } from '../capabilities/face-gallery.cap.js';
50
49
  import type { failureContributionCapability } from '../capabilities/failure-contribution.cap.js';
51
50
  import type { fanControlCapability } from '../capabilities/fan-control.cap.js';
@@ -94,6 +93,7 @@ import type { privacyMaskCapability } from '../capabilities/privacy-mask.cap.js'
94
93
  import type { ptzAutotrackCapability } from '../capabilities/ptz-autotrack.cap.js';
95
94
  import type { ptzCapability } from '../capabilities/ptz.cap.js';
96
95
  import type { rebootCapability } from '../capabilities/reboot.cap.js';
96
+ import type { recordingArchiveCapability } from '../capabilities/recording-archive.cap.js';
97
97
  import type { recordingExportCapability } from '../capabilities/recording-export.cap.js';
98
98
  import type { recordingOnboardCapability } from '../capabilities/recording-onboard.cap.js';
99
99
  import type { recordingSignalCapability } from '../capabilities/recording-signal.cap.js';
@@ -3054,34 +3054,6 @@ export type AppRouter = TrpcCoreRouter<{
3054
3054
  meta: object;
3055
3055
  }>;
3056
3056
  }>>;
3057
- events: TRPCBuiltRouter<{
3058
- ctx: TrpcContext;
3059
- meta: object;
3060
- errorShape: AugmentedErrorShape;
3061
- transformer: true;
3062
- }, TRPCDecorateCreateRouterOptions<{
3063
- getEvents: TRPCQueryProcedure<{
3064
- input: {
3065
- [x: string]: unknown;
3066
- } & z.input<typeof eventsCapability.methods.getEvents.input>;
3067
- output: z.infer<typeof eventsCapability.methods.getEvents.output>;
3068
- meta: object;
3069
- }>;
3070
- getEventThumbnail: TRPCQueryProcedure<{
3071
- input: {
3072
- [x: string]: unknown;
3073
- } & z.input<typeof eventsCapability.methods.getEventThumbnail.input>;
3074
- output: z.infer<typeof eventsCapability.methods.getEventThumbnail.output>;
3075
- meta: object;
3076
- }>;
3077
- getEventClipUrl: TRPCQueryProcedure<{
3078
- input: {
3079
- [x: string]: unknown;
3080
- } & z.input<typeof eventsCapability.methods.getEventClipUrl.input>;
3081
- output: z.infer<typeof eventsCapability.methods.getEventClipUrl.output>;
3082
- meta: object;
3083
- }>;
3084
- }>>;
3085
3057
  faceGallery: TRPCBuiltRouter<{
3086
3058
  ctx: TrpcContext;
3087
3059
  meta: object;
@@ -6836,6 +6808,48 @@ export type AppRouter = TrpcCoreRouter<{
6836
6808
  meta: object;
6837
6809
  errorShape: AugmentedErrorShape;
6838
6810
  transformer: true;
6811
+ }, TRPCDecorateCreateRouterOptions<{
6812
+ listSources: TRPCQueryProcedure<{
6813
+ input: {
6814
+ [x: string]: unknown;
6815
+ } & z.input<typeof recordingCapability.methods.listSources.input>;
6816
+ output: z.infer<typeof recordingCapability.methods.listSources.output>;
6817
+ meta: object;
6818
+ }>;
6819
+ getAvailability: TRPCQueryProcedure<{
6820
+ input: {
6821
+ [x: string]: unknown;
6822
+ } & z.input<typeof recordingCapability.methods.getAvailability.input>;
6823
+ output: z.infer<typeof recordingCapability.methods.getAvailability.output>;
6824
+ meta: object;
6825
+ }>;
6826
+ getDaysWithRecordings: TRPCQueryProcedure<{
6827
+ input: {
6828
+ [x: string]: unknown;
6829
+ } & z.input<typeof recordingCapability.methods.getDaysWithRecordings.input>;
6830
+ output: z.infer<typeof recordingCapability.methods.getDaysWithRecordings.output>;
6831
+ meta: object;
6832
+ }>;
6833
+ getPlayback: TRPCQueryProcedure<{
6834
+ input: {
6835
+ [x: string]: unknown;
6836
+ } & z.input<typeof recordingCapability.methods.getPlayback.input>;
6837
+ output: z.infer<typeof recordingCapability.methods.getPlayback.output>;
6838
+ meta: object;
6839
+ }>;
6840
+ getPlaybackOptions: TRPCQueryProcedure<{
6841
+ input: {
6842
+ [x: string]: unknown;
6843
+ } & z.input<typeof recordingCapability.methods.getPlaybackOptions.input>;
6844
+ output: z.infer<typeof recordingCapability.methods.getPlaybackOptions.output>;
6845
+ meta: object;
6846
+ }>;
6847
+ }>>;
6848
+ recordingArchive: TRPCBuiltRouter<{
6849
+ ctx: TrpcContext;
6850
+ meta: object;
6851
+ errorShape: AugmentedErrorShape;
6852
+ transformer: true;
6839
6853
  }, TRPCDecorateCreateRouterOptions<{
6840
6854
  getStatus: TRPCQueryProcedure<{
6841
6855
  input: {
@@ -6865,235 +6879,214 @@ export type AppRouter = TrpcCoreRouter<{
6865
6879
  output: z.infer<typeof DEVICE_SETTINGS_CONTRIBUTION_METHODS.applyDeviceSettingsPatch.output>;
6866
6880
  meta: object;
6867
6881
  }>;
6868
- getAvailability: TRPCQueryProcedure<{
6869
- input: {
6870
- [x: string]: unknown;
6871
- } & z.input<typeof recordingCapability.methods.getAvailability.input>;
6872
- output: z.infer<typeof recordingCapability.methods.getAvailability.output>;
6873
- meta: object;
6874
- }>;
6875
6882
  getAvailabilityBatch: TRPCQueryProcedure<{
6876
6883
  input: {
6877
6884
  [x: string]: unknown;
6878
- } & z.input<typeof recordingCapability.methods.getAvailabilityBatch.input>;
6879
- output: z.infer<typeof recordingCapability.methods.getAvailabilityBatch.output>;
6880
- meta: object;
6881
- }>;
6882
- getDaysWithRecordings: TRPCQueryProcedure<{
6883
- input: {
6884
- [x: string]: unknown;
6885
- } & z.input<typeof recordingCapability.methods.getDaysWithRecordings.input>;
6886
- output: z.infer<typeof recordingCapability.methods.getDaysWithRecordings.output>;
6885
+ } & z.input<typeof recordingArchiveCapability.methods.getAvailabilityBatch.input>;
6886
+ output: z.infer<typeof recordingArchiveCapability.methods.getAvailabilityBatch.output>;
6887
6887
  meta: object;
6888
6888
  }>;
6889
6889
  getDaysWithRecordingsBatch: TRPCQueryProcedure<{
6890
6890
  input: {
6891
6891
  [x: string]: unknown;
6892
- } & z.input<typeof recordingCapability.methods.getDaysWithRecordingsBatch.input>;
6893
- output: z.infer<typeof recordingCapability.methods.getDaysWithRecordingsBatch.output>;
6894
- meta: object;
6895
- }>;
6896
- getPlaybackManifest: TRPCQueryProcedure<{
6897
- input: {
6898
- [x: string]: unknown;
6899
- } & z.input<typeof recordingCapability.methods.getPlaybackManifest.input>;
6900
- output: z.infer<typeof recordingCapability.methods.getPlaybackManifest.output>;
6892
+ } & z.input<typeof recordingArchiveCapability.methods.getDaysWithRecordingsBatch.input>;
6893
+ output: z.infer<typeof recordingArchiveCapability.methods.getDaysWithRecordingsBatch.output>;
6901
6894
  meta: object;
6902
6895
  }>;
6903
6896
  getStorageUsage: TRPCQueryProcedure<{
6904
6897
  input: {
6905
6898
  [x: string]: unknown;
6906
- } & z.input<typeof recordingCapability.methods.getStorageUsage.input>;
6907
- output: z.infer<typeof recordingCapability.methods.getStorageUsage.output>;
6899
+ } & z.input<typeof recordingArchiveCapability.methods.getStorageUsage.input>;
6900
+ output: z.infer<typeof recordingArchiveCapability.methods.getStorageUsage.output>;
6908
6901
  meta: object;
6909
6902
  }>;
6910
6903
  getDeviceConfig: TRPCQueryProcedure<{
6911
6904
  input: {
6912
6905
  [x: string]: unknown;
6913
- } & z.input<typeof recordingCapability.methods.getDeviceConfig.input>;
6914
- output: z.infer<typeof recordingCapability.methods.getDeviceConfig.output>;
6906
+ } & z.input<typeof recordingArchiveCapability.methods.getDeviceConfig.input>;
6907
+ output: z.infer<typeof recordingArchiveCapability.methods.getDeviceConfig.output>;
6915
6908
  meta: object;
6916
6909
  }>;
6917
6910
  locateSegment: TRPCQueryProcedure<{
6918
6911
  input: {
6919
6912
  [x: string]: unknown;
6920
- } & z.input<typeof recordingCapability.methods.locateSegment.input>;
6921
- output: z.infer<typeof recordingCapability.methods.locateSegment.output>;
6913
+ } & z.input<typeof recordingArchiveCapability.methods.locateSegment.input>;
6914
+ output: z.infer<typeof recordingArchiveCapability.methods.locateSegment.output>;
6922
6915
  meta: object;
6923
6916
  }>;
6924
6917
  readSegmentBytes: TRPCQueryProcedure<{
6925
6918
  input: {
6926
6919
  [x: string]: unknown;
6927
- } & z.input<typeof recordingCapability.methods.readSegmentBytes.input>;
6928
- output: z.infer<typeof recordingCapability.methods.readSegmentBytes.output>;
6920
+ } & z.input<typeof recordingArchiveCapability.methods.readSegmentBytes.input>;
6921
+ output: z.infer<typeof recordingArchiveCapability.methods.readSegmentBytes.output>;
6929
6922
  meta: object;
6930
6923
  }>;
6931
6924
  readGopBytes: TRPCQueryProcedure<{
6932
6925
  input: {
6933
6926
  [x: string]: unknown;
6934
- } & z.input<typeof recordingCapability.methods.readGopBytes.input>;
6935
- output: z.infer<typeof recordingCapability.methods.readGopBytes.output>;
6927
+ } & z.input<typeof recordingArchiveCapability.methods.readGopBytes.input>;
6928
+ output: z.infer<typeof recordingArchiveCapability.methods.readGopBytes.output>;
6936
6929
  meta: object;
6937
6930
  }>;
6938
6931
  readWindowBytes: TRPCQueryProcedure<{
6939
6932
  input: {
6940
6933
  [x: string]: unknown;
6941
- } & z.input<typeof recordingCapability.methods.readWindowBytes.input>;
6942
- output: z.infer<typeof recordingCapability.methods.readWindowBytes.output>;
6934
+ } & z.input<typeof recordingArchiveCapability.methods.readWindowBytes.input>;
6935
+ output: z.infer<typeof recordingArchiveCapability.methods.readWindowBytes.output>;
6943
6936
  meta: object;
6944
6937
  }>;
6945
6938
  setDeviceConfig: TRPCMutationProcedure<{
6946
6939
  input: {
6947
6940
  [x: string]: unknown;
6948
- } & z.input<typeof recordingCapability.methods.setDeviceConfig.input>;
6949
- output: z.infer<typeof recordingCapability.methods.setDeviceConfig.output>;
6941
+ } & z.input<typeof recordingArchiveCapability.methods.setDeviceConfig.input>;
6942
+ output: z.infer<typeof recordingArchiveCapability.methods.setDeviceConfig.output>;
6950
6943
  meta: object;
6951
6944
  }>;
6952
6945
  rescanStorage: TRPCMutationProcedure<{
6953
6946
  input: {
6954
6947
  [x: string]: unknown;
6955
- } & z.input<typeof recordingCapability.methods.rescanStorage.input>;
6956
- output: z.infer<typeof recordingCapability.methods.rescanStorage.output>;
6948
+ } & z.input<typeof recordingArchiveCapability.methods.rescanStorage.input>;
6949
+ output: z.infer<typeof recordingArchiveCapability.methods.rescanStorage.output>;
6957
6950
  meta: object;
6958
6951
  }>;
6959
6952
  pruneFootage: TRPCMutationProcedure<{
6960
6953
  input: {
6961
6954
  [x: string]: unknown;
6962
- } & z.input<typeof recordingCapability.methods.pruneFootage.input>;
6963
- output: z.infer<typeof recordingCapability.methods.pruneFootage.output>;
6955
+ } & z.input<typeof recordingArchiveCapability.methods.pruneFootage.input>;
6956
+ output: z.infer<typeof recordingArchiveCapability.methods.pruneFootage.output>;
6964
6957
  meta: object;
6965
6958
  }>;
6966
6959
  deleteFootprint: TRPCMutationProcedure<{
6967
6960
  input: {
6968
6961
  [x: string]: unknown;
6969
- } & z.input<typeof recordingCapability.methods.deleteFootprint.input>;
6970
- output: z.infer<typeof recordingCapability.methods.deleteFootprint.output>;
6962
+ } & z.input<typeof recordingArchiveCapability.methods.deleteFootprint.input>;
6963
+ output: z.infer<typeof recordingArchiveCapability.methods.deleteFootprint.output>;
6971
6964
  meta: object;
6972
6965
  }>;
6973
6966
  listOpsLog: TRPCQueryProcedure<{
6974
6967
  input: {
6975
6968
  [x: string]: unknown;
6976
- } & z.input<typeof recordingCapability.methods.listOpsLog.input>;
6977
- output: z.infer<typeof recordingCapability.methods.listOpsLog.output>;
6969
+ } & z.input<typeof recordingArchiveCapability.methods.listOpsLog.input>;
6970
+ output: z.infer<typeof recordingArchiveCapability.methods.listOpsLog.output>;
6978
6971
  meta: object;
6979
6972
  }>;
6980
6973
  renderGif: TRPCMutationProcedure<{
6981
6974
  input: {
6982
6975
  [x: string]: unknown;
6983
- } & z.input<typeof recordingCapability.methods.renderGif.input>;
6984
- output: z.infer<typeof recordingCapability.methods.renderGif.output>;
6976
+ } & z.input<typeof recordingArchiveCapability.methods.renderGif.input>;
6977
+ output: z.infer<typeof recordingArchiveCapability.methods.renderGif.output>;
6985
6978
  meta: object;
6986
6979
  }>;
6987
6980
  renderClip: TRPCMutationProcedure<{
6988
6981
  input: {
6989
6982
  [x: string]: unknown;
6990
- } & z.input<typeof recordingCapability.methods.renderClip.input>;
6991
- output: z.infer<typeof recordingCapability.methods.renderClip.output>;
6983
+ } & z.input<typeof recordingArchiveCapability.methods.renderClip.input>;
6984
+ output: z.infer<typeof recordingArchiveCapability.methods.renderClip.output>;
6992
6985
  meta: object;
6993
6986
  }>;
6994
6987
  pauseForStorageMigration: TRPCMutationProcedure<{
6995
6988
  input: {
6996
6989
  [x: string]: unknown;
6997
- } & z.input<typeof recordingCapability.methods.pauseForStorageMigration.input>;
6998
- output: z.infer<typeof recordingCapability.methods.pauseForStorageMigration.output>;
6990
+ } & z.input<typeof recordingArchiveCapability.methods.pauseForStorageMigration.input>;
6991
+ output: z.infer<typeof recordingArchiveCapability.methods.pauseForStorageMigration.output>;
6999
6992
  meta: object;
7000
6993
  }>;
7001
6994
  resumeForStorageMigration: TRPCMutationProcedure<{
7002
6995
  input: {
7003
6996
  [x: string]: unknown;
7004
- } & z.input<typeof recordingCapability.methods.resumeForStorageMigration.input>;
7005
- output: z.infer<typeof recordingCapability.methods.resumeForStorageMigration.output>;
6997
+ } & z.input<typeof recordingArchiveCapability.methods.resumeForStorageMigration.input>;
6998
+ output: z.infer<typeof recordingArchiveCapability.methods.resumeForStorageMigration.output>;
7006
6999
  meta: object;
7007
7000
  }>;
7008
7001
  refreshStorageLocationsForMigration: TRPCMutationProcedure<{
7009
7002
  input: {
7010
7003
  [x: string]: unknown;
7011
- } & z.input<typeof recordingCapability.methods.refreshStorageLocationsForMigration.input>;
7012
- output: z.infer<typeof recordingCapability.methods.refreshStorageLocationsForMigration.output>;
7004
+ } & z.input<typeof recordingArchiveCapability.methods.refreshStorageLocationsForMigration.input>;
7005
+ output: z.infer<typeof recordingArchiveCapability.methods.refreshStorageLocationsForMigration.output>;
7013
7006
  meta: object;
7014
7007
  }>;
7015
7008
  startStorageMigrationMove: TRPCMutationProcedure<{
7016
7009
  input: {
7017
7010
  [x: string]: unknown;
7018
- } & z.input<typeof recordingCapability.methods.startStorageMigrationMove.input>;
7019
- output: z.infer<typeof recordingCapability.methods.startStorageMigrationMove.output>;
7011
+ } & z.input<typeof recordingArchiveCapability.methods.startStorageMigrationMove.input>;
7012
+ output: z.infer<typeof recordingArchiveCapability.methods.startStorageMigrationMove.output>;
7020
7013
  meta: object;
7021
7014
  }>;
7022
7015
  getStorageMigrationMoveStatus: TRPCQueryProcedure<{
7023
7016
  input: {
7024
7017
  [x: string]: unknown;
7025
- } & z.input<typeof recordingCapability.methods.getStorageMigrationMoveStatus.input>;
7026
- output: z.infer<typeof recordingCapability.methods.getStorageMigrationMoveStatus.output>;
7018
+ } & z.input<typeof recordingArchiveCapability.methods.getStorageMigrationMoveStatus.input>;
7019
+ output: z.infer<typeof recordingArchiveCapability.methods.getStorageMigrationMoveStatus.output>;
7027
7020
  meta: object;
7028
7021
  }>;
7029
7022
  cancelStorageMigrationMove: TRPCMutationProcedure<{
7030
7023
  input: {
7031
7024
  [x: string]: unknown;
7032
- } & z.input<typeof recordingCapability.methods.cancelStorageMigrationMove.input>;
7033
- output: z.infer<typeof recordingCapability.methods.cancelStorageMigrationMove.output>;
7025
+ } & z.input<typeof recordingArchiveCapability.methods.cancelStorageMigrationMove.input>;
7026
+ output: z.infer<typeof recordingArchiveCapability.methods.cancelStorageMigrationMove.output>;
7034
7027
  meta: object;
7035
7028
  }>;
7036
7029
  relocateFootage: TRPCMutationProcedure<{
7037
7030
  input: {
7038
7031
  [x: string]: unknown;
7039
- } & z.input<typeof recordingCapability.methods.relocateFootage.input>;
7040
- output: z.infer<typeof recordingCapability.methods.relocateFootage.output>;
7032
+ } & z.input<typeof recordingArchiveCapability.methods.relocateFootage.input>;
7033
+ output: z.infer<typeof recordingArchiveCapability.methods.relocateFootage.output>;
7041
7034
  meta: object;
7042
7035
  }>;
7043
7036
  listRelocateJobs: TRPCQueryProcedure<{
7044
7037
  input: {
7045
7038
  [x: string]: unknown;
7046
- } & z.input<typeof recordingCapability.methods.listRelocateJobs.input>;
7047
- output: z.infer<typeof recordingCapability.methods.listRelocateJobs.output>;
7039
+ } & z.input<typeof recordingArchiveCapability.methods.listRelocateJobs.input>;
7040
+ output: z.infer<typeof recordingArchiveCapability.methods.listRelocateJobs.output>;
7048
7041
  meta: object;
7049
7042
  }>;
7050
7043
  getRelocateResidue: TRPCQueryProcedure<{
7051
7044
  input: {
7052
7045
  [x: string]: unknown;
7053
- } & z.input<typeof recordingCapability.methods.getRelocateResidue.input>;
7054
- output: z.infer<typeof recordingCapability.methods.getRelocateResidue.output>;
7046
+ } & z.input<typeof recordingArchiveCapability.methods.getRelocateResidue.input>;
7047
+ output: z.infer<typeof recordingArchiveCapability.methods.getRelocateResidue.output>;
7055
7048
  meta: object;
7056
7049
  }>;
7057
7050
  reconcileLedgerAgainstDisk: TRPCMutationProcedure<{
7058
7051
  input: {
7059
7052
  [x: string]: unknown;
7060
- } & z.input<typeof recordingCapability.methods.reconcileLedgerAgainstDisk.input>;
7061
- output: z.infer<typeof recordingCapability.methods.reconcileLedgerAgainstDisk.output>;
7053
+ } & z.input<typeof recordingArchiveCapability.methods.reconcileLedgerAgainstDisk.input>;
7054
+ output: z.infer<typeof recordingArchiveCapability.methods.reconcileLedgerAgainstDisk.output>;
7062
7055
  meta: object;
7063
7056
  }>;
7064
7057
  cancelRelocateJob: TRPCMutationProcedure<{
7065
7058
  input: {
7066
7059
  [x: string]: unknown;
7067
- } & z.input<typeof recordingCapability.methods.cancelRelocateJob.input>;
7068
- output: z.infer<typeof recordingCapability.methods.cancelRelocateJob.output>;
7060
+ } & z.input<typeof recordingArchiveCapability.methods.cancelRelocateJob.input>;
7061
+ output: z.infer<typeof recordingArchiveCapability.methods.cancelRelocateJob.output>;
7069
7062
  meta: object;
7070
7063
  }>;
7071
7064
  planStorageRebalance: TRPCQueryProcedure<{
7072
7065
  input: {
7073
7066
  [x: string]: unknown;
7074
- } & z.input<typeof recordingCapability.methods.planStorageRebalance.input>;
7075
- output: z.infer<typeof recordingCapability.methods.planStorageRebalance.output>;
7067
+ } & z.input<typeof recordingArchiveCapability.methods.planStorageRebalance.input>;
7068
+ output: z.infer<typeof recordingArchiveCapability.methods.planStorageRebalance.output>;
7076
7069
  meta: object;
7077
7070
  }>;
7078
7071
  startStorageRebalance: TRPCMutationProcedure<{
7079
7072
  input: {
7080
7073
  [x: string]: unknown;
7081
- } & z.input<typeof recordingCapability.methods.startStorageRebalance.input>;
7082
- output: z.infer<typeof recordingCapability.methods.startStorageRebalance.output>;
7074
+ } & z.input<typeof recordingArchiveCapability.methods.startStorageRebalance.input>;
7075
+ output: z.infer<typeof recordingArchiveCapability.methods.startStorageRebalance.output>;
7083
7076
  meta: object;
7084
7077
  }>;
7085
7078
  getPlacement: TRPCQueryProcedure<{
7086
7079
  input: {
7087
7080
  [x: string]: unknown;
7088
- } & z.input<typeof recordingCapability.methods.getPlacement.input>;
7089
- output: z.infer<typeof recordingCapability.methods.getPlacement.output>;
7081
+ } & z.input<typeof recordingArchiveCapability.methods.getPlacement.input>;
7082
+ output: z.infer<typeof recordingArchiveCapability.methods.getPlacement.output>;
7090
7083
  meta: object;
7091
7084
  }>;
7092
7085
  setDevicePlacement: TRPCMutationProcedure<{
7093
7086
  input: {
7094
7087
  [x: string]: unknown;
7095
- } & z.input<typeof recordingCapability.methods.setDevicePlacement.input>;
7096
- output: z.infer<typeof recordingCapability.methods.setDevicePlacement.output>;
7088
+ } & z.input<typeof recordingArchiveCapability.methods.setDevicePlacement.input>;
7089
+ output: z.infer<typeof recordingArchiveCapability.methods.setDevicePlacement.output>;
7097
7090
  meta: object;
7098
7091
  }>;
7099
7092
  }>>;
@@ -54,7 +54,7 @@ import type { PressureSensorStatusSchema } from '../capabilities/pressure-sensor
54
54
  import type { PrivacyMaskStatusSchema } from '../capabilities/privacy-mask.cap.js';
55
55
  import type { PtzStatusSchema } from '../capabilities/ptz.cap.js';
56
56
  import type { PtzAutotrackStatusSchema } from '../capabilities/ptz-autotrack.cap.js';
57
- import type { RecordingStatusSchema } from '../capabilities/recording.cap.js';
57
+ import type { recordingArchiveCapability } from '../capabilities/recording-archive.cap.js';
58
58
  import type { RecordingOnboardStatusSchema } from '../capabilities/recording-onboard.cap.js';
59
59
  import type { RecordingSignalStatusSchema } from '../capabilities/recording-signal.cap.js';
60
60
  import type { SceneMonitorStatusSchema } from '../capabilities/scene-monitor.cap.js';
@@ -132,7 +132,7 @@ export type CapStatusTypeMap = {
132
132
  readonly 'privacy-mask': z.infer<typeof PrivacyMaskStatusSchema>;
133
133
  readonly 'ptz': z.infer<typeof PtzStatusSchema>;
134
134
  readonly 'ptz-autotrack': z.infer<typeof PtzAutotrackStatusSchema>;
135
- readonly 'recording': z.infer<typeof RecordingStatusSchema>;
135
+ readonly 'recording-archive': z.infer<(typeof recordingArchiveCapability)['status']['schema']>;
136
136
  readonly 'recording-onboard': z.infer<typeof RecordingOnboardStatusSchema>;
137
137
  readonly 'recording-signal': z.infer<typeof RecordingSignalStatusSchema>;
138
138
  readonly 'scene-monitor': z.infer<typeof SceneMonitorStatusSchema>;
@@ -157,4 +157,4 @@ export type CapNameWithStatus = keyof CapStatusTypeMap;
157
157
  * aggregator to enumerate caps whose `status` should be polled +
158
158
  * streamed via `subscribeDeviceStatusAggregate`.
159
159
  */
160
- export declare const CAP_NAMES_WITH_STATUS: readonly ["accessories", "air-quality-sensor", "alarm-panel", "ambient-light-sensor", "automation-control", "battery", "binary", "brightness", "broker", "camera-credentials", "carbon-monoxide", "climate-control", "color", "connectivity", "consumables", "contact", "control", "cover", "day-night", "device-adoption", "device-discovery", "device-export", "device-status", "doorbell", "enum-sensor", "event-emitter", "fan-control", "feature-probe", "flood", "gas", "humidifier", "humidity-sensor", "image", "image-settings", "intercom", "lawn-mower-control", "lock-control", "media-player", "motion", "motion-trigger", "motion-zones", "mqtt-broker", "native-object-detection", "navigation", "network-link", "notifier", "numeric-sensor", "osd", "pet-feeder", "power-meter", "presence", "pressure-sensor", "privacy-mask", "ptz", "ptz-autotrack", "recording", "recording-onboard", "recording-signal", "scene-monitor", "script-runner", "smoke", "snapshot", "stream-params", "switch", "tamper", "temperature-sensor", "update", "vacuum-control", "valve", "vibration", "water-heater", "weather"];
160
+ export declare const CAP_NAMES_WITH_STATUS: readonly ["accessories", "air-quality-sensor", "alarm-panel", "ambient-light-sensor", "automation-control", "battery", "binary", "brightness", "broker", "camera-credentials", "carbon-monoxide", "climate-control", "color", "connectivity", "consumables", "contact", "control", "cover", "day-night", "device-adoption", "device-discovery", "device-export", "device-status", "doorbell", "enum-sensor", "event-emitter", "fan-control", "feature-probe", "flood", "gas", "humidifier", "humidity-sensor", "image", "image-settings", "intercom", "lawn-mower-control", "lock-control", "media-player", "motion", "motion-trigger", "motion-zones", "mqtt-broker", "native-object-detection", "navigation", "network-link", "notifier", "numeric-sensor", "osd", "pet-feeder", "power-meter", "presence", "pressure-sensor", "privacy-mask", "ptz", "ptz-autotrack", "recording-archive", "recording-onboard", "recording-signal", "scene-monitor", "script-runner", "smoke", "snapshot", "stream-params", "switch", "tamper", "temperature-sensor", "update", "vacuum-control", "valve", "vibration", "water-heater", "weather"];