@camstack/types 1.2.188 → 1.2.189

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,80 @@
1
+ import { z } from 'zod';
2
+ import { type InferProvider } from './capability-definition.js';
3
+ import { DeviceType } from '../device/device-type.js';
4
+ /**
5
+ * The signals a device can emit to WAKE its own stream.
6
+ *
7
+ * A camera whose stream is built on demand sleeps until something asks for it,
8
+ * and "something" cannot be a consumer that is merely attached — a Frigate-style
9
+ * puller holds a session open for ever, and treating that as demand would keep
10
+ * a battery camera awake for ever, which is the whole thing the battery is for
11
+ * (D173). So the wake has to come from the CAMERA: an event it noticed by
12
+ * itself, with no stream running.
13
+ *
14
+ * ## The vocabulary is the PROVIDER'S, not ours
15
+ *
16
+ * Like `consumables`, this cap declares no vocabulary of its own. A provider
17
+ * names each signal with a `code` it chooses and a `label` an operator reads.
18
+ * Reolink offers motion and camera-native detection; another provider may offer
19
+ * a tamper, a doorbell press, a PIR, or something no camera in this fleet has
20
+ * yet. A fixed enum here would mean every new signal is a framework release.
21
+ *
22
+ * It is deliberately NOT derived from the caps a device already binds. Whether
23
+ * a camera CAN push firmware motion is expressed by `motionSources` containing
24
+ * `'onboard'`, and whether it does AI on-camera by the `native-object-detection`
25
+ * binding — but both answer "what drives the detection pipeline", which is a
26
+ * different question from "what may wake a sleeping stream". A camera can do
27
+ * the first and not be trusted with the second, and the operator picks per
28
+ * camera. Two questions, two authorities.
29
+ *
30
+ * ## Availability is not permission
31
+ *
32
+ * `listSignals` says what the device CAN emit. Whether a given signal actually
33
+ * wakes the stream is the operator's per-camera choice, held by the broker
34
+ * alongside the cooldown — see the stream-broker cap's wake settings. A
35
+ * provider declaring a signal is not a provider enabling it.
36
+ */
37
+ /** One signal a device can emit. */
38
+ export declare const StreamSignalSchema: z.ZodObject<{
39
+ code: z.ZodString;
40
+ label: z.ZodString;
41
+ recommended: z.ZodBoolean;
42
+ }, z.core.$strip>;
43
+ export type StreamSignal = z.infer<typeof StreamSignalSchema>;
44
+ export declare const StreamSignalsStatusSchema: z.ZodObject<{
45
+ signals: z.ZodArray<z.ZodObject<{
46
+ code: z.ZodString;
47
+ label: z.ZodString;
48
+ recommended: z.ZodBoolean;
49
+ }, z.core.$strip>>;
50
+ lastFetchedAt: z.ZodNumber;
51
+ }, z.core.$strip>;
52
+ export type StreamSignalsStatus = z.infer<typeof StreamSignalsStatusSchema>;
53
+ export declare const streamSignalsCapability: {
54
+ readonly name: "stream-signals";
55
+ readonly scope: "device";
56
+ readonly deviceNative: true;
57
+ readonly mode: "singleton";
58
+ readonly deviceTypes: DeviceType[];
59
+ readonly runtimeState: z.ZodObject<{
60
+ signals: z.ZodArray<z.ZodObject<{
61
+ code: z.ZodString;
62
+ label: z.ZodString;
63
+ recommended: z.ZodBoolean;
64
+ }, z.core.$strip>>;
65
+ lastFetchedAt: z.ZodNumber;
66
+ }, z.core.$strip>;
67
+ readonly methods: {
68
+ /**
69
+ * What this device can emit. Empty is a valid and common answer — most
70
+ * cameras have nothing to offer here, and an empty list is what makes the
71
+ * broker's picker show nothing rather than a false choice.
72
+ */
73
+ readonly listSignals: import("./capability-definition.js").CapabilityMethodSchema<z.ZodVoid, z.ZodReadonly<z.ZodArray<z.ZodObject<{
74
+ code: z.ZodString;
75
+ label: z.ZodString;
76
+ recommended: z.ZodBoolean;
77
+ }, z.core.$strip>>>, import("./capability-definition.js").CapabilityMethodKind>;
78
+ };
79
+ };
80
+ export type IStreamSignalsProvider = InferProvider<typeof streamSignalsCapability>;
@@ -359,6 +359,7 @@ export declare const webrtcSessionCapability: {
359
359
  }, z.core.$strip>], "kind">;
360
360
  epoch: z.ZodNumber;
361
361
  }, z.core.$strip>>;
362
+ alive: z.ZodBoolean;
362
363
  }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
363
364
  };
364
365
  /** BIG PLAN 2: declarative mount hint — read by `@camstack/system` `buildCapRouters`. */
@@ -614,6 +614,20 @@ export declare enum EventCategory {
614
614
  * pull-reconcile from the provider's `getStatus` on reconnect. */
615
615
  MeshNetworkChanged = "network.mesh.changed",
616
616
  BackupCompleted = "backup.completed",
617
+ /**
618
+ * A whole backup RUN finished — every destination attempted, win or lose.
619
+ *
620
+ * `backup.completed` fires once per DESTINATION, which is the right grain for
621
+ * a progress UI and the wrong one for a notification: an operator with three
622
+ * destinations would be told three times. And a run where two of three
623
+ * destinations succeeded is not a clean success — a single "backup
624
+ * completed" that hid the failed one would be a lie, so the count of each is
625
+ * carried here and the message says both.
626
+ *
627
+ * Emitted by the backup orchestrator only after the destination loop, so a
628
+ * run that dies during the BUILD phase produces no completion at all.
629
+ */
630
+ BackupRunCompleted = "backup.run-completed",
617
631
  BackupRestored = "backup.restored",
618
632
  NotificationDispatched = "notification.dispatched",
619
633
  NotificationFailed = "notification.failed",
package/dist/enums.js CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_event_category = require("./event-category-yW4s1MGD.js");
2
+ const require_event_category = require("./event-category-BVfsrBYA.js");
3
3
  //#region src/enums/event-source-type.ts
4
4
  var EventSourceType = /* @__PURE__ */ function(EventSourceType) {
5
5
  EventSourceType["Addon"] = "addon";
package/dist/enums.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { t as EventCategory } from "./event-category-ZyX6jcse.mjs";
1
+ import { t as EventCategory } from "./event-category-BVDXG4tB.mjs";
2
2
  //#region src/enums/event-source-type.ts
3
3
  var EventSourceType = /* @__PURE__ */ function(EventSourceType) {
4
4
  EventSourceType["Addon"] = "addon";
@@ -615,6 +615,20 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
615
615
  * pull-reconcile from the provider's `getStatus` on reconnect. */
616
616
  EventCategory["MeshNetworkChanged"] = "network.mesh.changed";
617
617
  EventCategory["BackupCompleted"] = "backup.completed";
618
+ /**
619
+ * A whole backup RUN finished — every destination attempted, win or lose.
620
+ *
621
+ * `backup.completed` fires once per DESTINATION, which is the right grain for
622
+ * a progress UI and the wrong one for a notification: an operator with three
623
+ * destinations would be told three times. And a run where two of three
624
+ * destinations succeeded is not a clean success — a single "backup
625
+ * completed" that hid the failed one would be a lie, so the count of each is
626
+ * carried here and the message says both.
627
+ *
628
+ * Emitted by the backup orchestrator only after the destination loop, so a
629
+ * run that dies during the BUILD phase produces no completion at all.
630
+ */
631
+ EventCategory["BackupRunCompleted"] = "backup.run-completed";
618
632
  EventCategory["BackupRestored"] = "backup.restored";
619
633
  EventCategory["NotificationDispatched"] = "notification.dispatched";
620
634
  EventCategory["NotificationFailed"] = "notification.failed";
@@ -615,6 +615,20 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
615
615
  * pull-reconcile from the provider's `getStatus` on reconnect. */
616
616
  EventCategory["MeshNetworkChanged"] = "network.mesh.changed";
617
617
  EventCategory["BackupCompleted"] = "backup.completed";
618
+ /**
619
+ * A whole backup RUN finished — every destination attempted, win or lose.
620
+ *
621
+ * `backup.completed` fires once per DESTINATION, which is the right grain for
622
+ * a progress UI and the wrong one for a notification: an operator with three
623
+ * destinations would be told three times. And a run where two of three
624
+ * destinations succeeded is not a clean success — a single "backup
625
+ * completed" that hid the failed one would be a lie, so the count of each is
626
+ * carried here and the message says both.
627
+ *
628
+ * Emitted by the backup orchestrator only after the destination loop, so a
629
+ * run that dies during the BUILD phase produces no completion at all.
630
+ */
631
+ EventCategory["BackupRunCompleted"] = "backup.run-completed";
618
632
  EventCategory["BackupRestored"] = "backup.restored";
619
633
  EventCategory["NotificationDispatched"] = "notification.dispatched";
620
634
  EventCategory["NotificationFailed"] = "notification.failed";
@@ -110,6 +110,7 @@ import type { storageCapability } from '../capabilities/storage.cap.js';
110
110
  import type { streamBrokerCapability } from '../capabilities/stream-broker.cap.js';
111
111
  import type { streamCatalogCapability } from '../capabilities/stream-catalog.cap.js';
112
112
  import type { streamParamsCapability } from '../capabilities/stream-params.cap.js';
113
+ import type { streamSignalsCapability } from '../capabilities/stream-signals.cap.js';
113
114
  import type { switchCapability } from '../capabilities/switch.cap.js';
114
115
  import type { systemCapability } from '../capabilities/system.cap.js';
115
116
  import type { terminalSessionCapability } from '../capabilities/terminal-session.cap.js';
@@ -7788,6 +7789,13 @@ export type AppRouter = TrpcCoreRouter<{
7788
7789
  output: z.infer<typeof DEVICE_SETTINGS_CONTRIBUTION_METHODS.applyDeviceSettingsPatch.output>;
7789
7790
  meta: object;
7790
7791
  }>;
7792
+ reportStreamSignal: TRPCMutationProcedure<{
7793
+ input: {
7794
+ [x: string]: unknown;
7795
+ } & z.input<typeof streamBrokerCapability.methods.reportStreamSignal.input>;
7796
+ output: z.infer<typeof streamBrokerCapability.methods.reportStreamSignal.output>;
7797
+ meta: object;
7798
+ }>;
7791
7799
  publishCameraStream: TRPCMutationProcedure<{
7792
7800
  input: {
7793
7801
  [x: string]: unknown;
@@ -8090,6 +8098,20 @@ export type AppRouter = TrpcCoreRouter<{
8090
8098
  meta: object;
8091
8099
  }>;
8092
8100
  }>>;
8101
+ streamSignals: TRPCBuiltRouter<{
8102
+ ctx: TrpcContext;
8103
+ meta: object;
8104
+ errorShape: AugmentedErrorShape;
8105
+ transformer: true;
8106
+ }, TRPCDecorateCreateRouterOptions<{
8107
+ listSignals: TRPCQueryProcedure<{
8108
+ input: {
8109
+ nodeId?: string | undefined;
8110
+ } | undefined;
8111
+ output: z.infer<typeof streamSignalsCapability.methods.listSignals.output>;
8112
+ meta: object;
8113
+ }>;
8114
+ }>>;
8093
8115
  switch: TRPCBuiltRouter<{
8094
8116
  ctx: TrpcContext;
8095
8117
  meta: object;
@@ -132,6 +132,7 @@ export { storageProviderCapability } from '../capabilities/storage-provider.cap.
132
132
  export { streamBrokerCapability } from '../capabilities/stream-broker.cap.js';
133
133
  export { streamCatalogCapability } from '../capabilities/stream-catalog.cap.js';
134
134
  export { streamParamsCapability } from '../capabilities/stream-params.cap.js';
135
+ export { streamSignalsCapability } from '../capabilities/stream-signals.cap.js';
135
136
  export { switchCapability } from '../capabilities/switch.cap.js';
136
137
  export { systemCapability } from '../capabilities/system.cap.js';
137
138
  export { tamperCapability } from '../capabilities/tamper.cap.js';
@@ -289,6 +290,7 @@ export declare const CAPABILITY_NAMES: {
289
290
  readonly streamBroker: "stream-broker";
290
291
  readonly streamCatalog: "stream-catalog";
291
292
  readonly streamParams: "stream-params";
293
+ readonly streamSignals: "stream-signals";
292
294
  readonly switch: "switch";
293
295
  readonly system: "system";
294
296
  readonly tamper: "tamper";
@@ -459,6 +461,7 @@ export interface CapabilityRouterMap<TRouter = unknown> {
459
461
  readonly streamBroker: TRouter;
460
462
  readonly streamCatalog: TRouter;
461
463
  readonly streamParams: TRouter;
464
+ readonly streamSignals: TRouter;
462
465
  readonly switch: TRouter;
463
466
  readonly system: TRouter;
464
467
  readonly tamper: TRouter;
@@ -482,8 +485,8 @@ export interface CapabilityRouterMap<TRouter = unknown> {
482
485
  readonly zoneRules: TRouter;
483
486
  readonly zones: TRouter;
484
487
  }
485
- /** Capability names whose mode is `singleton` (128 caps). */
486
- 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", "navigation", "network-link", "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", "recording-signal", "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"];
488
+ /** Capability names whose mode is `singleton` (129 caps). */
489
+ 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", "navigation", "network-link", "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", "recording-signal", "scene-monitor", "script-runner", "server-management", "settings-store", "smoke", "snapshot", "sso-bridge", "storage", "storage-migration", "stream-broker", "stream-catalog", "stream-params", "stream-signals", "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"];
487
490
  /** Union of singleton capability names (literal string union). */
488
491
  export type SingletonCapabilityName = typeof SINGLETON_CAPABILITY_NAMES[number];
489
492
  /** Capability names whose mode is `collection` (28 caps). */
@@ -54,6 +54,7 @@ import { scriptRunnerCapability } from '../capabilities/script-runner.cap.js';
54
54
  import { smokeCapability } from '../capabilities/smoke.cap.js';
55
55
  import { streamCatalogCapability } from '../capabilities/stream-catalog.cap.js';
56
56
  import { streamParamsCapability } from '../capabilities/stream-params.cap.js';
57
+ import { streamSignalsCapability } from '../capabilities/stream-signals.cap.js';
57
58
  import { switchCapability } from '../capabilities/switch.cap.js';
58
59
  import { tamperCapability } from '../capabilities/tamper.cap.js';
59
60
  import { temperatureSensorCapability } from '../capabilities/temperature-sensor.cap.js';
@@ -133,6 +134,7 @@ export interface DeviceLocalState {
133
134
  smoke: InferRuntimeState<typeof smokeCapability>;
134
135
  streamCatalog: InferRuntimeState<typeof streamCatalogCapability>;
135
136
  streamParams: InferRuntimeState<typeof streamParamsCapability>;
137
+ streamSignals: InferRuntimeState<typeof streamSignalsCapability>;
136
138
  switch: InferRuntimeState<typeof switchCapability>;
137
139
  tamper: InferRuntimeState<typeof tamperCapability>;
138
140
  temperatureSensor: InferRuntimeState<typeof temperatureSensorCapability>;
@@ -222,6 +224,7 @@ export interface CapNameToRuntimeStateMap {
222
224
  'smoke': InferRuntimeState<typeof smokeCapability>;
223
225
  'stream-catalog': InferRuntimeState<typeof streamCatalogCapability>;
224
226
  'stream-params': InferRuntimeState<typeof streamParamsCapability>;
227
+ 'stream-signals': InferRuntimeState<typeof streamSignalsCapability>;
225
228
  'switch': InferRuntimeState<typeof switchCapability>;
226
229
  'tamper': InferRuntimeState<typeof tamperCapability>;
227
230
  'temperature-sensor': InferRuntimeState<typeof temperatureSensorCapability>;
@@ -71,6 +71,7 @@ import type { smokeCapability } from '../capabilities/smoke.cap.js';
71
71
  import type { snapshotCapability } from '../capabilities/snapshot.cap.js';
72
72
  import type { streamCatalogCapability } from '../capabilities/stream-catalog.cap.js';
73
73
  import type { streamParamsCapability } from '../capabilities/stream-params.cap.js';
74
+ import type { streamSignalsCapability } from '../capabilities/stream-signals.cap.js';
74
75
  import type { switchCapability } from '../capabilities/switch.cap.js';
75
76
  import type { tamperCapability } from '../capabilities/tamper.cap.js';
76
77
  import type { temperatureSensorCapability } from '../capabilities/temperature-sensor.cap.js';
@@ -164,6 +165,7 @@ export interface DeviceProxyState {
164
165
  readonly smoke: SliceHandle<InferRuntimeState<typeof smokeCapability>>;
165
166
  readonly streamCatalog: SliceHandle<InferRuntimeState<typeof streamCatalogCapability>>;
166
167
  readonly streamParams: SliceHandle<InferRuntimeState<typeof streamParamsCapability>>;
168
+ readonly streamSignals: SliceHandle<InferRuntimeState<typeof streamSignalsCapability>>;
167
169
  readonly switch: SliceHandle<InferRuntimeState<typeof switchCapability>>;
168
170
  readonly tamper: SliceHandle<InferRuntimeState<typeof tamperCapability>>;
169
171
  readonly temperatureSensor: SliceHandle<InferRuntimeState<typeof temperatureSensorCapability>>;
@@ -264,6 +266,7 @@ export interface DeviceProxy {
264
266
  readonly snapshot?: InferDeviceProxyCap<typeof snapshotCapability>;
265
267
  readonly streamCatalog?: InferDeviceProxyCap<typeof streamCatalogCapability>;
266
268
  readonly streamParams?: InferDeviceProxyCap<typeof streamParamsCapability>;
269
+ readonly streamSignals?: InferDeviceProxyCap<typeof streamSignalsCapability>;
267
270
  readonly switch?: InferDeviceProxyCap<typeof switchCapability>;
268
271
  readonly tamper?: InferDeviceProxyCap<typeof tamperCapability>;
269
272
  readonly temperatureSensor?: InferDeviceProxyCap<typeof temperatureSensorCapability>;
@@ -295,7 +298,7 @@ export interface DeviceProxy {
295
298
  readonly plateGallery: Pick<InferDeviceProxyCap<typeof plateGalleryCapability>, 'listPlates' | 'getPlateByTrack'>;
296
299
  readonly recording: Pick<InferDeviceProxyCap<typeof recordingCapability>, 'getAvailability' | 'getDaysWithRecordings' | 'getPlaybackManifest' | 'getDeviceConfig' | 'locateSegment' | 'readSegmentBytes' | 'readGopBytes' | 'readWindowBytes' | 'setDeviceConfig' | 'rescanStorage' | 'pruneFootage' | 'deleteFootprint' | 'renderGif' | 'renderClip' | 'getStatus' | 'getDeviceSettingsContribution' | 'getDeviceLiveContribution' | 'applyDeviceSettingsPatch'>;
297
300
  readonly recordingExport: Pick<InferDeviceProxyCap<typeof recordingExportCapability>, 'listExports'>;
298
- readonly streamBroker: Pick<InferDeviceProxyCap<typeof streamBrokerCapability>, 'publishCameraStream' | 'retractCameraStream' | 'assignProfile' | 'unassignProfile' | 'forgetDeviceHardware' | 'renderPreBufferClip' | 'produceEventMedia' | 'restartProfile' | 'getDeviceAudioMute' | 'setDeviceAudioMute' | 'getDeviceSettingsContribution' | 'getDeviceLiveContribution' | 'applyDeviceSettingsPatch'>;
301
+ readonly streamBroker: Pick<InferDeviceProxyCap<typeof streamBrokerCapability>, 'reportStreamSignal' | 'publishCameraStream' | 'retractCameraStream' | 'assignProfile' | 'unassignProfile' | 'forgetDeviceHardware' | 'renderPreBufferClip' | 'produceEventMedia' | 'restartProfile' | 'getDeviceAudioMute' | 'setDeviceAudioMute' | 'getDeviceSettingsContribution' | 'getDeviceLiveContribution' | 'applyDeviceSettingsPatch'>;
299
302
  }
300
303
  /**
301
304
  * Build a DeviceProxy that pre-binds deviceId + nodeId on every method call
@@ -5,7 +5,7 @@
5
5
  * can answer "may a rule actuate this?" without importing the schema barrel
6
6
  * (~144MB RSS per runner, D28).
7
7
  *
8
- * Coverage: 83 device-scoped capabilities.
8
+ * Coverage: 84 device-scoped capabilities.
9
9
  */
10
10
  export declare const DEVICE_SCOPED_CAPS: ReadonlySet<string>;
11
11
  /**
@@ -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: 1032 method paths across 129 capabilities.
9
+ * Coverage: 1034 method paths across 130 capabilities.
10
10
  */
11
11
  import type { CapabilityMethodAccess } from '../capabilities/capability-definition.js';
12
12
  export interface MethodAccessRecord {
@@ -6,8 +6,8 @@
6
6
  * system-scope cap that takes a deviceId was previously never device-filtered
7
7
  * — see the generator header).
8
8
  *
9
- * Coverage: 375 methods carry a device reference, of which
10
- * 139 are on SYSTEM-scope caps.
9
+ * Coverage: 376 methods carry a device reference, of which
10
+ * 140 are on SYSTEM-scope caps.
11
11
  *
12
12
  * Top-level fields, number arrays, and one-level arrays of objects carrying
13
13
  * a numeric device field (targets[].deviceId) are all mapped; the matcher
@@ -11,7 +11,7 @@ export interface RuntimeStatePolicy {
11
11
  }
12
12
  /**
13
13
  * Per-cap runtime-state policy, projected from every `*.cap.ts` that declares
14
- * `runtimeState`. 67 caps: 35 `restored`, 32 `session`.
14
+ * `runtimeState`. 68 caps: 35 `restored`, 33 `session`.
15
15
  *
16
16
  * A cap absent from this map has no runtime-state slice at all. A cap PRESENT
17
17
  * with `durability: 'session'` has one and has decided not to keep it.
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ export type { IAuthProvider } from './capabilities/auth-provider.cap.js';
11
11
  export type { DisposerChainOptions, DisposerFn } from './disposer-chain.js';
12
12
  export { DisposerChain } from './disposer-chain.js';
13
13
  export * from './encode-profile.js';
14
+ export * from './camera/stream-pick.js';
14
15
  export * from './ffmpeg/encode-defaults.js';
15
16
  export * from './ffmpeg/fmp4-box-splitter.js';
16
17
  export * from './ffmpeg/hwaccel.js';