@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.
- package/dist/addon.js +2 -2
- package/dist/addon.mjs +2 -2
- package/dist/camera/stream-pick.d.ts +71 -0
- package/dist/capabilities/camera-streams.cap.d.ts +10 -0
- package/dist/capabilities/index.d.ts +4 -2
- package/dist/capabilities/notification-rules.cap.d.ts +48 -0
- package/dist/capabilities/osd-manager.cap.d.ts +18 -0
- package/dist/capabilities/stream-broker.cap.d.ts +37 -0
- package/dist/capabilities/stream-signals.cap.d.ts +80 -0
- package/dist/capabilities/webrtc-session.cap.d.ts +1 -0
- package/dist/enums/event-category.d.ts +14 -0
- package/dist/enums.js +1 -1
- package/dist/enums.mjs +1 -1
- package/dist/{event-category-ZyX6jcse.mjs → event-category-BVDXG4tB.mjs} +14 -0
- package/dist/{event-category-yW4s1MGD.js → event-category-BVfsrBYA.js} +14 -0
- package/dist/generated/addon-api.d.ts +22 -0
- package/dist/generated/capability-router-map.d.ts +5 -2
- package/dist/generated/device-local-state.d.ts +3 -0
- package/dist/generated/device-proxy.d.ts +4 -1
- package/dist/generated/device-scoped-caps.d.ts +1 -1
- package/dist/generated/method-access-map.d.ts +1 -1
- package/dist/generated/method-device-selectors.d.ts +2 -2
- package/dist/generated/runtime-state-durability.d.ts +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +365 -30
- package/dist/index.mjs +360 -31
- package/dist/{sleep-DXsYD0RX.js → sleep-D7dV-FZB.js} +6 -2
- package/dist/{sleep-DBKu2-U5.mjs → sleep-DEuj7E3j.mjs} +6 -2
- package/package.json +1 -1
|
@@ -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-
|
|
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-
|
|
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` (
|
|
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:
|
|
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:
|
|
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:
|
|
10
|
-
*
|
|
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`.
|
|
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';
|