@camstack/types 1.2.60 → 1.2.62

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.
@@ -180,7 +180,7 @@ export { type IPtzProvider, PtzMoveCommandSchema, type PtzOptions, PtzOptionsSch
180
180
  export { type IPtzAutotrackProvider, type PtzAutotrackRuntimeState, PtzAutotrackRuntimeStateSchema, type PtzAutotrackSettings, PtzAutotrackSettingsSchema, type PtzAutotrackStatus, PtzAutotrackStatusSchema, type PtzAutotrackTargetOption, PtzAutotrackTargetOptionSchema, ptzAutotrackCapability, } from './ptz-autotrack.cap.js';
181
181
  export { type IRebootProvider, rebootCapability } from './reboot.cap.js';
182
182
  export { type IRecordingProvider, type LocateSegmentResult, LocateSegmentResultSchema, type ReadGopBytesResult, ReadGopBytesResultSchema, type ReadSegmentBytesResult, ReadSegmentBytesResultSchema, type RecordingAvailability, RecordingAvailabilitySchema, type RecordingDays, RecordingDaysSchema, type RecordingDeviceUsage, RecordingDeviceUsageSchema, type RecordingLocationUsage, RecordingLocationUsageSchema, type RecordingManifest, RecordingManifestSchema, RecordingRangeSchema, type RecordingStatus, RecordingStatusSchema, type RecordingStorageUsage, RecordingStorageUsageSchema, recordingCapability, } from './recording.cap.js';
183
- export { type ExportDownload, ExportDownloadSchema, type ExportOptions, ExportOptionsSchema, type ExportRecord, ExportRecordSchema, ExportSpeedSchema, type ExportState, ExportStateSchema, ExportTimelapseSchema, type IRecordingExportProvider, recordingExportCapability, } from './recording-export.cap.js';
183
+ export { EXPORT_DENSE_MAX_RANGES, RECORDING_EXPORT_MAX_READ_BYTES, type ExportBytes, ExportBytesSchema, type ExportDense, type ExportDenseRange, ExportDenseRangeSchema, ExportDenseSchema, type ExportDownload, ExportDownloadSchema, type ExportOptions, ExportOptionsSchema, type ExportRecord, ExportRecordSchema, ExportSpeedSchema, type ExportState, ExportStateSchema, ExportTimelapseSchema, type IRecordingExportProvider, recordingExportCapability, } from './recording-export.cap.js';
184
184
  export { type ISceneMonitorProvider, type SceneCheck, SceneCheckSchema, type SceneCondition, SceneConditionSchema, type SceneMonitor, SceneMonitorSchema, type SceneMonitorState, SceneMonitorStateSchema, type SceneMonitorStatus, SceneMonitorStatusSchema, type SceneReference, SceneReferenceSchema, sceneMonitorCapability, } from './scene-monitor.cap.js';
185
185
  export { type ZoneRule, type ZoneRuleMode, ZoneRuleModeEnum, ZoneRuleSchema, type ZoneRules, ZoneRulesArraySchema, } from './schemas/zone-rule.js';
186
186
  export { type IScriptRunnerProvider, type ScriptRunnerStatus, ScriptRunnerStatusSchema, scriptRunnerCapability, } from './script-runner.cap.js';
@@ -1146,6 +1146,10 @@ export declare const pipelineOrchestratorCapability: {
1146
1146
  }, z.core.$strip>>>;
1147
1147
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
1148
1148
  /**
1149
+ * @deprecated The aggregate switch group is being withdrawn
1150
+ * ([D113](../../../../docs/decisions/adr-0113.md)). Build nothing new on
1151
+ * this pair; read the authority directly.
1152
+ *
1149
1153
  * The whole per-camera function switch group, DERIVED — never a stored
1150
1154
  * list ([D61](../../../../docs/decisions/adr-0067.md)).
1151
1155
  *
@@ -1159,6 +1163,16 @@ export declare const pipelineOrchestratorCapability: {
1159
1163
  * `auth: 'view'` deliberately — a NON-admin must be able to see that a
1160
1164
  * camera is quiet because somebody switched it off. Only the mutation is
1161
1165
  * admin-gated.
1166
+ *
1167
+ * **Removal plan.** It stays and it KEEPS WORKING while shipped viewers
1168
+ * (v1.0.305) and the admin UI still call it — removing it now is a broken
1169
+ * app on a device nobody can redeploy from here. It is served by a thin
1170
+ * shim over the same authorities (`camera-switch-service.ts`), so the
1171
+ * behaviour of the pair is the behaviour of the authorities by
1172
+ * construction. It is deleted once every surface reaches its own
1173
+ * component's options and the last caller is gone. Nothing on this server
1174
+ * reads it: `CameraStatus.switchedOff` is composed from the authorities
1175
+ * directly via `composeSwitchedOff`.
1162
1176
  */
1163
1177
  readonly getCameraSwitches: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
1164
1178
  deviceId: z.ZodNumber;
@@ -1206,6 +1220,10 @@ export declare const pipelineOrchestratorCapability: {
1206
1220
  fetchedAt: z.ZodNumber;
1207
1221
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
1208
1222
  /**
1223
+ * @deprecated See {@link getCameraSwitches}. Write the authority — the
1224
+ * wrapper binding, `RecordingConfig.enabled`, the notification mute — not
1225
+ * this ([D113](../../../../docs/decisions/adr-0113.md)).
1226
+ *
1209
1227
  * Flip ONE switch, routed to its existing authority.
1210
1228
  *
1211
1229
  * Never writes a parallel map: `recording` patches `RecordingConfig.enabled`
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `recordingExport` cap — render a footage time range into a single downloadable
2
+ * `recording-export` cap — render a footage time range into a single downloadable
3
3
  * MP4 (regular / accelerated / decelerated / timelapse, ± audio), kept for a
4
4
  * bounded lifetime with a durable history, auto-expiry, and optional
5
5
  * delete-after-download.
@@ -16,10 +16,56 @@ import { z } from 'zod';
16
16
  import { type InferProvider } from './capability-definition.js';
17
17
  /** Playback-speed multiplier for the render (1 = realtime). */
18
18
  export declare const ExportSpeedSchema: z.ZodNumber;
19
+ /**
20
+ * One dense interval, in SECONDS FROM THE EXPORT'S OWN `fromMs`.
21
+ *
22
+ * Relative and not absolute epoch on purpose: the renderer's frame-select
23
+ * expression sees ffmpeg's `t`, which starts at 0 for the export's source
24
+ * playlist. Handing it absolute epochs would make every call site responsible
25
+ * for the same subtraction, and the one that forgot would emit a filter that
26
+ * selects nothing — silently, as a uniform timelapse.
27
+ */
28
+ export declare const ExportDenseRangeSchema: z.ZodObject<{
29
+ fromSec: z.ZodNumber;
30
+ toSec: z.ZodNumber;
31
+ }, z.core.$strip>;
32
+ export type ExportDenseRange = z.infer<typeof ExportDenseRangeSchema>;
33
+ /**
34
+ * Hard ceiling on dense ranges in ONE render.
35
+ *
36
+ * The ranges become terms of a single ffmpeg `select` expression, so the count
37
+ * is the length of a command-line argument. The producer (the timelapse
38
+ * scheduler) coalesces and then falls back to the base cadence alone rather
39
+ * than trimming — a truncated range list is a video that quietly omits the
40
+ * evening.
41
+ */
42
+ export declare const EXPORT_DENSE_MAX_RANGES = 200;
43
+ /**
44
+ * Dense-interval overlay for a timelapse: sample at `dense.everyMs` INSIDE the
45
+ * listed ranges and at the base `everyMs` everywhere else.
46
+ *
47
+ * `everyMs` must be strictly smaller than the base cadence — a dense rate that
48
+ * is not denser renders a uniform timelapse the operator believes is two-rate.
49
+ */
50
+ export declare const ExportDenseSchema: z.ZodObject<{
51
+ everyMs: z.ZodNumber;
52
+ ranges: z.ZodArray<z.ZodObject<{
53
+ fromSec: z.ZodNumber;
54
+ toSec: z.ZodNumber;
55
+ }, z.core.$strip>>;
56
+ }, z.core.$strip>;
57
+ export type ExportDense = z.infer<typeof ExportDenseSchema>;
19
58
  /** Timelapse cadence — sample one source frame per `everyMs`, output at `outputFps`. */
20
59
  export declare const ExportTimelapseSchema: z.ZodObject<{
21
60
  everyMs: z.ZodNumber;
22
61
  outputFps: z.ZodOptional<z.ZodNumber>;
62
+ dense: z.ZodOptional<z.ZodObject<{
63
+ everyMs: z.ZodNumber;
64
+ ranges: z.ZodArray<z.ZodObject<{
65
+ fromSec: z.ZodNumber;
66
+ toSec: z.ZodNumber;
67
+ }, z.core.$strip>>;
68
+ }, z.core.$strip>>;
23
69
  }, z.core.$strip>;
24
70
  /**
25
71
  * Render options. `speed` and `timelapse` are mutually exclusive. `includeAudio`
@@ -32,6 +78,13 @@ export declare const ExportOptionsSchema: z.ZodObject<{
32
78
  timelapse: z.ZodOptional<z.ZodObject<{
33
79
  everyMs: z.ZodNumber;
34
80
  outputFps: z.ZodOptional<z.ZodNumber>;
81
+ dense: z.ZodOptional<z.ZodObject<{
82
+ everyMs: z.ZodNumber;
83
+ ranges: z.ZodArray<z.ZodObject<{
84
+ fromSec: z.ZodNumber;
85
+ toSec: z.ZodNumber;
86
+ }, z.core.$strip>>;
87
+ }, z.core.$strip>>;
35
88
  }, z.core.$strip>>;
36
89
  includeAudio: z.ZodBoolean;
37
90
  maxLifeMs: z.ZodNumber;
@@ -60,6 +113,13 @@ export declare const ExportRecordSchema: z.ZodObject<{
60
113
  timelapse: z.ZodOptional<z.ZodObject<{
61
114
  everyMs: z.ZodNumber;
62
115
  outputFps: z.ZodOptional<z.ZodNumber>;
116
+ dense: z.ZodOptional<z.ZodObject<{
117
+ everyMs: z.ZodNumber;
118
+ ranges: z.ZodArray<z.ZodObject<{
119
+ fromSec: z.ZodNumber;
120
+ toSec: z.ZodNumber;
121
+ }, z.core.$strip>>;
122
+ }, z.core.$strip>>;
63
123
  }, z.core.$strip>>;
64
124
  includeAudio: z.ZodBoolean;
65
125
  maxLifeMs: z.ZodNumber;
@@ -90,8 +150,40 @@ export declare const ExportDownloadSchema: z.ZodObject<{
90
150
  endpoints: z.ZodArray<z.ZodString>;
91
151
  }, z.core.$strip>;
92
152
  export type ExportDownload = z.infer<typeof ExportDownloadSchema>;
153
+ /**
154
+ * Hard ceiling on ONE {@link recordingExportCapability} byte read — 50 MiB.
155
+ *
156
+ * Two independent reasons land on the same number, which is why it is this one
157
+ * and not a rounder guess:
158
+ *
159
+ * - **Nobody would accept more.** The roomiest byte cap any notifier backend
160
+ * declares is telegram's 50 MiB, and the degrade engine DROPS an over-cap
161
+ * attachment outright rather than degrading it to a link. Bytes above this
162
+ * are read, encoded and moved to be thrown away at the last step.
163
+ * - **The envelope is unary.** A base64 payload is held whole, ~1.33× its
164
+ * size, in the provider AND in the caller — on a hub this repo has already
165
+ * OOM'd once (D9/D18). A bounded on-demand read at human speed is the shape
166
+ * those records permit; an unbounded one is the shape they forbid.
167
+ *
168
+ * Above it the provider REFUSES with a log line rather than truncating: half a
169
+ * video is worse than a notification that says there is no attachment.
170
+ */
171
+ export declare const RECORDING_EXPORT_MAX_READ_BYTES: number;
172
+ /**
173
+ * A finished export's bytes, inline.
174
+ *
175
+ * `bytes` is the DECODED length — the number the caller bounds and logs
176
+ * against, so nobody has to infer it from the base64 length.
177
+ */
178
+ export declare const ExportBytesSchema: z.ZodObject<{
179
+ base64: z.ZodString;
180
+ contentType: z.ZodString;
181
+ name: z.ZodString;
182
+ bytes: z.ZodNumber;
183
+ }, z.core.$strip>;
184
+ export type ExportBytes = z.infer<typeof ExportBytesSchema>;
93
185
  export declare const recordingExportCapability: {
94
- readonly name: "recordingExport";
186
+ readonly name: "recording-export";
95
187
  readonly scope: "system";
96
188
  readonly mode: "singleton";
97
189
  readonly methods: {
@@ -107,6 +199,13 @@ export declare const recordingExportCapability: {
107
199
  timelapse: z.ZodOptional<z.ZodObject<{
108
200
  everyMs: z.ZodNumber;
109
201
  outputFps: z.ZodOptional<z.ZodNumber>;
202
+ dense: z.ZodOptional<z.ZodObject<{
203
+ everyMs: z.ZodNumber;
204
+ ranges: z.ZodArray<z.ZodObject<{
205
+ fromSec: z.ZodNumber;
206
+ toSec: z.ZodNumber;
207
+ }, z.core.$strip>>;
208
+ }, z.core.$strip>>;
110
209
  }, z.core.$strip>>;
111
210
  includeAudio: z.ZodBoolean;
112
211
  maxLifeMs: z.ZodNumber;
@@ -124,6 +223,13 @@ export declare const recordingExportCapability: {
124
223
  timelapse: z.ZodOptional<z.ZodObject<{
125
224
  everyMs: z.ZodNumber;
126
225
  outputFps: z.ZodOptional<z.ZodNumber>;
226
+ dense: z.ZodOptional<z.ZodObject<{
227
+ everyMs: z.ZodNumber;
228
+ ranges: z.ZodArray<z.ZodObject<{
229
+ fromSec: z.ZodNumber;
230
+ toSec: z.ZodNumber;
231
+ }, z.core.$strip>>;
232
+ }, z.core.$strip>>;
127
233
  }, z.core.$strip>>;
128
234
  includeAudio: z.ZodBoolean;
129
235
  maxLifeMs: z.ZodNumber;
@@ -161,6 +267,13 @@ export declare const recordingExportCapability: {
161
267
  timelapse: z.ZodOptional<z.ZodObject<{
162
268
  everyMs: z.ZodNumber;
163
269
  outputFps: z.ZodOptional<z.ZodNumber>;
270
+ dense: z.ZodOptional<z.ZodObject<{
271
+ everyMs: z.ZodNumber;
272
+ ranges: z.ZodArray<z.ZodObject<{
273
+ fromSec: z.ZodNumber;
274
+ toSec: z.ZodNumber;
275
+ }, z.core.$strip>>;
276
+ }, z.core.$strip>>;
164
277
  }, z.core.$strip>>;
165
278
  includeAudio: z.ZodBoolean;
166
279
  maxLifeMs: z.ZodNumber;
@@ -197,6 +310,13 @@ export declare const recordingExportCapability: {
197
310
  timelapse: z.ZodOptional<z.ZodObject<{
198
311
  everyMs: z.ZodNumber;
199
312
  outputFps: z.ZodOptional<z.ZodNumber>;
313
+ dense: z.ZodOptional<z.ZodObject<{
314
+ everyMs: z.ZodNumber;
315
+ ranges: z.ZodArray<z.ZodObject<{
316
+ fromSec: z.ZodNumber;
317
+ toSec: z.ZodNumber;
318
+ }, z.core.$strip>>;
319
+ }, z.core.$strip>>;
200
320
  }, z.core.$strip>>;
201
321
  includeAudio: z.ZodBoolean;
202
322
  maxLifeMs: z.ZodNumber;
@@ -234,6 +354,13 @@ export declare const recordingExportCapability: {
234
354
  timelapse: z.ZodOptional<z.ZodObject<{
235
355
  everyMs: z.ZodNumber;
236
356
  outputFps: z.ZodOptional<z.ZodNumber>;
357
+ dense: z.ZodOptional<z.ZodObject<{
358
+ everyMs: z.ZodNumber;
359
+ ranges: z.ZodArray<z.ZodObject<{
360
+ fromSec: z.ZodNumber;
361
+ toSec: z.ZodNumber;
362
+ }, z.core.$strip>>;
363
+ }, z.core.$strip>>;
237
364
  }, z.core.$strip>>;
238
365
  includeAudio: z.ZodBoolean;
239
366
  maxLifeMs: z.ZodNumber;
@@ -271,6 +398,13 @@ export declare const recordingExportCapability: {
271
398
  timelapse: z.ZodOptional<z.ZodObject<{
272
399
  everyMs: z.ZodNumber;
273
400
  outputFps: z.ZodOptional<z.ZodNumber>;
401
+ dense: z.ZodOptional<z.ZodObject<{
402
+ everyMs: z.ZodNumber;
403
+ ranges: z.ZodArray<z.ZodObject<{
404
+ fromSec: z.ZodNumber;
405
+ toSec: z.ZodNumber;
406
+ }, z.core.$strip>>;
407
+ }, z.core.$strip>>;
274
408
  }, z.core.$strip>>;
275
409
  includeAudio: z.ZodBoolean;
276
410
  maxLifeMs: z.ZodNumber;
@@ -300,6 +434,31 @@ export declare const recordingExportCapability: {
300
434
  url: z.ZodString;
301
435
  endpoints: z.ZodArray<z.ZodString>;
302
436
  }, z.core.$strip>, "query">;
437
+ /**
438
+ * The finished file's BYTES, base64, for a caller that must republish them
439
+ * somewhere a session-less fetcher can reach.
440
+ *
441
+ * `getDownloadUrl` is the right answer for a human: the download route is
442
+ * served `access: 'authenticated'`, which a browser satisfies and a
443
+ * notifier BACKEND does not. It answers a RELATIVE path, so it is not even
444
+ * a URL an outside fetcher could try. This method exists for the one case
445
+ * that needs the other thing — a scheduled timelapse whose video has to
446
+ * become a public attachment on the notification artifact plane.
447
+ *
448
+ * Deliberately narrow: `ready` only (a queued, rendering, failed, expired
449
+ * or deleted export has no file, and answering "0 bytes" for one is how a
450
+ * caller ships an empty attachment), still inside its lifetime, and under
451
+ * {@link RECORDING_EXPORT_MAX_READ_BYTES}. Every refusal throws with the
452
+ * reason — none of them is silent.
453
+ */
454
+ readonly readExportBytes: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
455
+ exportId: z.ZodString;
456
+ }, z.core.$strip>, z.ZodObject<{
457
+ base64: z.ZodString;
458
+ contentType: z.ZodString;
459
+ name: z.ZodString;
460
+ bytes: z.ZodNumber;
461
+ }, z.core.$strip>, "query">;
303
462
  };
304
463
  };
305
464
  export type IRecordingExportProvider = InferProvider<typeof recordingExportCapability>;
@@ -6359,6 +6359,13 @@ export type AppRouter = TrpcCoreRouter<{
6359
6359
  output: z.infer<typeof recordingExportCapability.methods.getDownloadUrl.output>;
6360
6360
  meta: object;
6361
6361
  }>;
6362
+ readExportBytes: TRPCQueryProcedure<{
6363
+ input: {
6364
+ [x: string]: unknown;
6365
+ } & z.input<typeof recordingExportCapability.methods.readExportBytes.input>;
6366
+ output: z.infer<typeof recordingExportCapability.methods.readExportBytes.output>;
6367
+ meta: object;
6368
+ }>;
6362
6369
  }>>;
6363
6370
  sceneMonitor: TRPCBuiltRouter<{
6364
6371
  ctx: TrpcContext;
@@ -259,7 +259,7 @@ export declare const CAPABILITY_NAMES: {
259
259
  readonly ptzAutotrack: "ptz-autotrack";
260
260
  readonly reboot: "reboot";
261
261
  readonly recording: "recording";
262
- readonly recordingExport: "recordingExport";
262
+ readonly recordingExport: "recording-export";
263
263
  readonly sceneMonitor: "scene-monitor";
264
264
  readonly scriptRunner: "script-runner";
265
265
  readonly serverManagement: "server-management";
@@ -462,7 +462,7 @@ export interface CapabilityRouterMap<TRouter = unknown> {
462
462
  readonly zones: TRouter;
463
463
  }
464
464
  /** Capability names whose mode is `singleton` (125 caps). */
465
- export declare const SINGLETON_CAPABILITY_NAMES: readonly ["accessories", "addon-pages", "addon-settings", "addon-widgets", "addons", "admin-ui", "air-quality-sensor", "alarm-panel", "alerts", "ambient-light-sensor", "audio-analysis", "audio-analyzer", "audio-codec", "audio-metrics", "automation-control", "backup", "battery", "binary", "brightness", "button", "camera-credentials", "camera-pipeline-config", "camera-streams", "carbon-monoxide", "climate-control", "color", "connectivity", "consumables", "contact", "control", "core-blocks", "cover", "day-night", "decoder", "detection-pipeline", "device-adoption", "device-discovery", "device-manager", "device-ops", "device-state", "device-status", "doorbell", "enum-sensor", "event-emitter", "events", "face-gallery", "fan-control", "feature-probe", "filesystem-browse", "flood", "gas", "humidifier", "humidity-sensor", "image", "image-settings", "integrations", "intercom", "lawn-mower-control", "llm-runtime", "local-network", "lock-control", "media-player", "metrics-provider", "model-convert", "model-distributor", "motion", "motion-detection", "motion-trigger", "motion-zones", "native-object-detection", "network-quality", "nodes", "notification-rules", "notifier", "numeric-sensor", "osd", "osd-manager", "pet-feeder", "pipeline-analytics", "pipeline-executor", "pipeline-orchestrator", "pipeline-runner", "plate-gallery", "platform-probe", "power-meter", "presence", "pressure-sensor", "privacy-mask", "ptz", "ptz-autotrack", "reboot", "recording", "recordingExport", "scene-monitor", "script-runner", "server-management", "settings-store", "smoke", "snapshot", "sso-bridge", "storage", "storage-migration", "stream-broker", "stream-catalog", "stream-params", "switch", "system", "tamper", "temperature-sensor", "terminal-session", "toast", "update", "user-management", "vacuum-control", "valve", "vector-store", "vibration", "videoclips", "viewer-ui", "water-heater", "weather", "webrtc-session", "zone-analytics", "zone-rules", "zones"];
465
+ export declare const SINGLETON_CAPABILITY_NAMES: readonly ["accessories", "addon-pages", "addon-settings", "addon-widgets", "addons", "admin-ui", "air-quality-sensor", "alarm-panel", "alerts", "ambient-light-sensor", "audio-analysis", "audio-analyzer", "audio-codec", "audio-metrics", "automation-control", "backup", "battery", "binary", "brightness", "button", "camera-credentials", "camera-pipeline-config", "camera-streams", "carbon-monoxide", "climate-control", "color", "connectivity", "consumables", "contact", "control", "core-blocks", "cover", "day-night", "decoder", "detection-pipeline", "device-adoption", "device-discovery", "device-manager", "device-ops", "device-state", "device-status", "doorbell", "enum-sensor", "event-emitter", "events", "face-gallery", "fan-control", "feature-probe", "filesystem-browse", "flood", "gas", "humidifier", "humidity-sensor", "image", "image-settings", "integrations", "intercom", "lawn-mower-control", "llm-runtime", "local-network", "lock-control", "media-player", "metrics-provider", "model-convert", "model-distributor", "motion", "motion-detection", "motion-trigger", "motion-zones", "native-object-detection", "network-quality", "nodes", "notification-rules", "notifier", "numeric-sensor", "osd", "osd-manager", "pet-feeder", "pipeline-analytics", "pipeline-executor", "pipeline-orchestrator", "pipeline-runner", "plate-gallery", "platform-probe", "power-meter", "presence", "pressure-sensor", "privacy-mask", "ptz", "ptz-autotrack", "reboot", "recording", "recording-export", "scene-monitor", "script-runner", "server-management", "settings-store", "smoke", "snapshot", "sso-bridge", "storage", "storage-migration", "stream-broker", "stream-catalog", "stream-params", "switch", "system", "tamper", "temperature-sensor", "terminal-session", "toast", "update", "user-management", "vacuum-control", "valve", "vector-store", "vibration", "videoclips", "viewer-ui", "water-heater", "weather", "webrtc-session", "zone-analytics", "zone-rules", "zones"];
466
466
  /** Union of singleton capability names (literal string union). */
467
467
  export type SingletonCapabilityName = typeof SINGLETON_CAPABILITY_NAMES[number];
468
468
  /** Capability names whose mode is `collection` (24 caps). */
@@ -6,7 +6,7 @@
6
6
  * scope+access check inside `protectedProcedure` (see
7
7
  * `server/backend/src/api/trpc/trpc.middleware.ts`).
8
8
  *
9
- * Coverage: 927 method paths across 123 capabilities.
9
+ * Coverage: 928 method paths across 123 capabilities.
10
10
  */
11
11
  import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
12
12
  export interface MethodAccessRecord {
@@ -88,7 +88,7 @@ export interface SystemProxy {
88
88
  readonly pipelineRunner: Pick<InferProvider<typeof pipelineRunnerCapability>, 'attachCamera' | 'reportMotion' | 'getLocalLoad' | 'getLocalMetrics' | 'getAllCameraMetrics' | 'getLocalCameras' | 'getNativeCrop' | 'runStatelessStep'>;
89
89
  readonly plateGallery: Pick<InferProvider<typeof plateGalleryCapability>, 'getPlateMedia' | 'searchPlates' | 'suggestPlateClusters' | 'correctPlateText' | 'deletePlate' | 'listVehicles' | 'createVehicle' | 'renameVehicle' | 'deleteVehicle' | 'listVehicleSamples' | 'removeVehicleSample' | 'assignPlate' | 'unassignPlate' | 'assignPlates' | 'unassignPlates'>;
90
90
  readonly recording: Pick<InferProvider<typeof recordingCapability>, 'getStorageUsage' | 'listOpsLog' | 'pauseForStorageMigration' | 'resumeForStorageMigration' | 'refreshStorageLocationsForMigration' | 'startStorageMigrationMove' | 'getStorageMigrationMoveStatus' | 'cancelStorageMigrationMove'>;
91
- readonly recordingExport: Pick<InferProvider<typeof recordingExportCapability>, 'getExport' | 'cancelExport' | 'deleteExport' | 'getDownloadUrl'>;
91
+ readonly recordingExport: Pick<InferProvider<typeof recordingExportCapability>, 'getExport' | 'cancelExport' | 'deleteExport' | 'getDownloadUrl' | 'readExportBytes'>;
92
92
  readonly serverManagement: Pick<InferProvider<typeof serverManagementCapability>, 'getServerPackageStatus' | 'checkServerUpdate' | 'applyServerUpdate' | 'rollbackServerUpdate' | 'restartServer'>;
93
93
  readonly settingsStore: Pick<InferProvider<typeof settingsStoreCapability>, 'get' | 'set' | 'query' | 'insert' | 'update' | 'delete' | 'deleteWhere' | 'updateWhere' | 'count' | 'histogram' | 'isEmpty' | 'declareCollection'>;
94
94
  readonly storage: Pick<InferProvider<typeof storageCapability>, 'resolve' | 'write' | 'read' | 'exists' | 'list' | 'delete' | 'getAvailableSpace' | 'beginUpload' | 'writeChunk' | 'finalizeUpload' | 'abortUpload' | 'beginDownload' | 'readChunk' | 'endDownload' | 'listLocations' | 'getDefaultLocation' | 'listLocationDeclarations' | 'upsertLocation' | 'deleteLocation' | 'testLocation' | 'listProviders' | 'testConfig'>;
package/dist/index.d.ts CHANGED
@@ -189,7 +189,7 @@ export { type PreparedAction, type PreparedAttachment, type PreparedNotification
189
189
  export { htmlToText, markdownToHtmlLite, markdownToText, type NotificationFormat as NotificationBodyFormat, resolveFormat, textToHtml, transcodeBody, } from './notification/format-transcode.js';
190
190
  export { isScheduleActive } from './notification/schedule.js';
191
191
  export type { TimelapseRule, TimelapseRuleInput, TimelapseRulePatch, TimelapseTemplate, } from './notification/timelapse-rule.js';
192
- export { TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, } from './notification/timelapse-rule.js';
192
+ export { readTimelapseGeneratedAt, TimelapseRuleInputSchema, TimelapseRulePatchSchema, TimelapseRuleSchema, TimelapseTemplateSchema, } from './notification/timelapse-rule.js';
193
193
  export { DEFAULT_DETAIL_CROP_CONVENTION, DETAIL_CROP_PADDING_FIELD, DETAIL_CROP_PADDING_KEY, DETAIL_CROP_SECTION_ID, DETAIL_CROP_SQUARE_KEY, type DetailCropConvention, DetailCropConventionSchema, type DetailCropRect, deriveDetailCropRect, type HydratedSettingsSection, type HydratedSettingsView, pickDetailCropConvention, readDetailCropConvention, } from './pipeline/detail-crop.js';
194
194
  export { DEFAULT_NATIVE_LEASE_SETTINGS, NATIVE_LEASE_ACTIVITY_FIELD, NATIVE_LEASE_ACTIVITY_KEY, NATIVE_LEASE_ADMISSION_FIELD, NATIVE_LEASE_ADMISSION_KEY, NATIVE_LEASE_BUDGET_FIELD, NATIVE_LEASE_BUDGET_KEY, NATIVE_LEASE_SECTION_ID, NATIVE_LEASE_TTL_FIELD, NATIVE_LEASE_TTL_KEY, type NativeLeaseAdmission, NativeLeaseAdmissionSchema, type NativeLeaseKnob, type NativeLeaseNumberKnob, type NativeLeaseSettings, type NativeLeaseSettingsOverride, NativeLeaseSettingsSchema, pickNativeLeaseOverride, readNativeLeaseOverride, } from './pipeline/native-lease.js';
195
195
  export { type ApiKeyRecord, ApiKeyRecordSchema, type CapScope, CapScopeSchema, type MethodAccess, MethodAccessSchema, type ScopedToken, ScopedTokenSchema, type TokenScope, TokenScopeSchema, type UserRecord, UserRecordSchema, } from './schemas/auth-records.js';