@camstack/types 1.2.105 → 1.2.107
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/capabilities/addons.cap.d.ts +4 -4
- package/dist/capabilities/battery.cap.d.ts +4 -4
- package/dist/capabilities/control.cap.d.ts +4 -4
- package/dist/capabilities/core-blocks.cap.d.ts +8 -8
- package/dist/capabilities/custom-model-registry.cap.d.ts +4 -4
- package/dist/capabilities/data-store-provider.cap.d.ts +18 -0
- package/dist/capabilities/device-manager.cap.d.ts +1 -1
- package/dist/capabilities/face-gallery.cap.d.ts +3 -1
- package/dist/capabilities/llm-runtime.cap.d.ts +3 -3
- package/dist/capabilities/llm.cap.d.ts +4 -4
- package/dist/capabilities/model-convert.cap.d.ts +6 -6
- package/dist/capabilities/model-distributor.cap.d.ts +4 -4
- package/dist/capabilities/native-object-detection.cap.d.ts +15 -15
- package/dist/capabilities/notification-output.cap.d.ts +18 -18
- package/dist/capabilities/notification-rules.cap.d.ts +26 -26
- package/dist/capabilities/oauth-integration.cap.d.ts +2 -2
- package/dist/capabilities/osd-manager.cap.d.ts +14 -14
- package/dist/capabilities/pipeline-analytics.cap.d.ts +53 -53
- package/dist/capabilities/pipeline-executor.cap.d.ts +7 -7
- package/dist/capabilities/pipeline-orchestrator.cap.d.ts +19 -19
- package/dist/capabilities/plate-gallery.cap.d.ts +3 -1
- package/dist/capabilities/platform-probe.cap.d.ts +2 -2
- package/dist/capabilities/recording-export.cap.d.ts +7 -7
- package/dist/capabilities/recording.cap.d.ts +9 -30
- package/dist/capabilities/scene-monitor.cap.d.ts +8 -8
- package/dist/capabilities/settings-store.cap.d.ts +17 -2
- package/dist/capabilities/sso-bridge.cap.d.ts +3 -3
- package/dist/capabilities/storage-migration.cap.d.ts +1 -1
- package/dist/capabilities/stream-broker.cap.d.ts +6 -6
- package/dist/capabilities/user-management.cap.d.ts +20 -20
- package/dist/capabilities/vacuum-control.cap.d.ts +13 -13
- package/dist/encode-profile.d.ts +2 -2
- package/dist/generated/addon-api.d.ts +2 -6
- package/dist/health/wiring-health.d.ts +8 -8
- package/dist/index.js +126 -110
- package/dist/index.mjs +127 -105
- package/dist/interfaces/addon.d.ts +29 -7
- package/dist/interfaces/adoption-job.d.ts +2 -2
- package/dist/interfaces/ops-log.d.ts +2 -2
- package/dist/interfaces/recording-config.d.ts +7 -57
- package/dist/interfaces/relocate.d.ts +4 -4
- package/dist/interfaces/storage.d.ts +23 -0
- package/dist/lifecycle/job.d.ts +4 -4
- package/dist/schemas/auth-records.d.ts +4 -4
- package/dist/types/models.d.ts +7 -7
- package/package.json +1 -1
|
@@ -46,9 +46,9 @@ export type VacuumState = z.infer<typeof VacuumStateSchema>;
|
|
|
46
46
|
export declare const TankStatusSchema: z.ZodObject<{
|
|
47
47
|
level: z.ZodNullable<z.ZodNumber>;
|
|
48
48
|
status: z.ZodNullable<z.ZodEnum<{
|
|
49
|
+
full: "full";
|
|
49
50
|
ok: "ok";
|
|
50
51
|
low: "low";
|
|
51
|
-
full: "full";
|
|
52
52
|
}>>;
|
|
53
53
|
}, z.core.$strip>;
|
|
54
54
|
export type TankStatus = z.infer<typeof TankStatusSchema>;
|
|
@@ -68,33 +68,33 @@ export declare const VacuumControlStatusSchema: z.ZodObject<{
|
|
|
68
68
|
cleanWater: z.ZodNullable<z.ZodObject<{
|
|
69
69
|
level: z.ZodNullable<z.ZodNumber>;
|
|
70
70
|
status: z.ZodNullable<z.ZodEnum<{
|
|
71
|
+
full: "full";
|
|
71
72
|
ok: "ok";
|
|
72
73
|
low: "low";
|
|
73
|
-
full: "full";
|
|
74
74
|
}>>;
|
|
75
75
|
}, z.core.$strip>>;
|
|
76
76
|
dirtyWater: z.ZodNullable<z.ZodObject<{
|
|
77
77
|
level: z.ZodNullable<z.ZodNumber>;
|
|
78
78
|
status: z.ZodNullable<z.ZodEnum<{
|
|
79
|
+
full: "full";
|
|
79
80
|
ok: "ok";
|
|
80
81
|
low: "low";
|
|
81
|
-
full: "full";
|
|
82
82
|
}>>;
|
|
83
83
|
}, z.core.$strip>>;
|
|
84
84
|
detergent: z.ZodNullable<z.ZodObject<{
|
|
85
85
|
level: z.ZodNullable<z.ZodNumber>;
|
|
86
86
|
status: z.ZodNullable<z.ZodEnum<{
|
|
87
|
+
full: "full";
|
|
87
88
|
ok: "ok";
|
|
88
89
|
low: "low";
|
|
89
|
-
full: "full";
|
|
90
90
|
}>>;
|
|
91
91
|
}, z.core.$strip>>;
|
|
92
92
|
dustBin: z.ZodNullable<z.ZodObject<{
|
|
93
93
|
level: z.ZodNullable<z.ZodNumber>;
|
|
94
94
|
status: z.ZodNullable<z.ZodEnum<{
|
|
95
|
+
full: "full";
|
|
95
96
|
ok: "ok";
|
|
96
97
|
low: "low";
|
|
97
|
-
full: "full";
|
|
98
98
|
}>>;
|
|
99
99
|
}, z.core.$strip>>;
|
|
100
100
|
progressPercent: z.ZodNullable<z.ZodNumber>;
|
|
@@ -147,33 +147,33 @@ export declare const vacuumControlCapability: {
|
|
|
147
147
|
cleanWater: z.ZodNullable<z.ZodObject<{
|
|
148
148
|
level: z.ZodNullable<z.ZodNumber>;
|
|
149
149
|
status: z.ZodNullable<z.ZodEnum<{
|
|
150
|
+
full: "full";
|
|
150
151
|
ok: "ok";
|
|
151
152
|
low: "low";
|
|
152
|
-
full: "full";
|
|
153
153
|
}>>;
|
|
154
154
|
}, z.core.$strip>>;
|
|
155
155
|
dirtyWater: z.ZodNullable<z.ZodObject<{
|
|
156
156
|
level: z.ZodNullable<z.ZodNumber>;
|
|
157
157
|
status: z.ZodNullable<z.ZodEnum<{
|
|
158
|
+
full: "full";
|
|
158
159
|
ok: "ok";
|
|
159
160
|
low: "low";
|
|
160
|
-
full: "full";
|
|
161
161
|
}>>;
|
|
162
162
|
}, z.core.$strip>>;
|
|
163
163
|
detergent: z.ZodNullable<z.ZodObject<{
|
|
164
164
|
level: z.ZodNullable<z.ZodNumber>;
|
|
165
165
|
status: z.ZodNullable<z.ZodEnum<{
|
|
166
|
+
full: "full";
|
|
166
167
|
ok: "ok";
|
|
167
168
|
low: "low";
|
|
168
|
-
full: "full";
|
|
169
169
|
}>>;
|
|
170
170
|
}, z.core.$strip>>;
|
|
171
171
|
dustBin: z.ZodNullable<z.ZodObject<{
|
|
172
172
|
level: z.ZodNullable<z.ZodNumber>;
|
|
173
173
|
status: z.ZodNullable<z.ZodEnum<{
|
|
174
|
+
full: "full";
|
|
174
175
|
ok: "ok";
|
|
175
176
|
low: "low";
|
|
176
|
-
full: "full";
|
|
177
177
|
}>>;
|
|
178
178
|
}, z.core.$strip>>;
|
|
179
179
|
progressPercent: z.ZodNullable<z.ZodNumber>;
|
|
@@ -203,33 +203,33 @@ export declare const vacuumControlCapability: {
|
|
|
203
203
|
cleanWater: z.ZodNullable<z.ZodObject<{
|
|
204
204
|
level: z.ZodNullable<z.ZodNumber>;
|
|
205
205
|
status: z.ZodNullable<z.ZodEnum<{
|
|
206
|
+
full: "full";
|
|
206
207
|
ok: "ok";
|
|
207
208
|
low: "low";
|
|
208
|
-
full: "full";
|
|
209
209
|
}>>;
|
|
210
210
|
}, z.core.$strip>>;
|
|
211
211
|
dirtyWater: z.ZodNullable<z.ZodObject<{
|
|
212
212
|
level: z.ZodNullable<z.ZodNumber>;
|
|
213
213
|
status: z.ZodNullable<z.ZodEnum<{
|
|
214
|
+
full: "full";
|
|
214
215
|
ok: "ok";
|
|
215
216
|
low: "low";
|
|
216
|
-
full: "full";
|
|
217
217
|
}>>;
|
|
218
218
|
}, z.core.$strip>>;
|
|
219
219
|
detergent: z.ZodNullable<z.ZodObject<{
|
|
220
220
|
level: z.ZodNullable<z.ZodNumber>;
|
|
221
221
|
status: z.ZodNullable<z.ZodEnum<{
|
|
222
|
+
full: "full";
|
|
222
223
|
ok: "ok";
|
|
223
224
|
low: "low";
|
|
224
|
-
full: "full";
|
|
225
225
|
}>>;
|
|
226
226
|
}, z.core.$strip>>;
|
|
227
227
|
dustBin: z.ZodNullable<z.ZodObject<{
|
|
228
228
|
level: z.ZodNullable<z.ZodNumber>;
|
|
229
229
|
status: z.ZodNullable<z.ZodEnum<{
|
|
230
|
+
full: "full";
|
|
230
231
|
ok: "ok";
|
|
231
232
|
low: "low";
|
|
232
|
-
full: "full";
|
|
233
233
|
}>>;
|
|
234
234
|
}, z.core.$strip>>;
|
|
235
235
|
progressPercent: z.ZodNullable<z.ZodNumber>;
|
package/dist/encode-profile.d.ts
CHANGED
|
@@ -30,11 +30,11 @@ export declare const VideoEncodeSchema: z.ZodObject<{
|
|
|
30
30
|
gopFrames: z.ZodOptional<z.ZodNumber>;
|
|
31
31
|
bf: z.ZodOptional<z.ZodNumber>;
|
|
32
32
|
preset: z.ZodOptional<z.ZodEnum<{
|
|
33
|
+
fast: "fast";
|
|
33
34
|
ultrafast: "ultrafast";
|
|
34
35
|
superfast: "superfast";
|
|
35
36
|
veryfast: "veryfast";
|
|
36
37
|
faster: "faster";
|
|
37
|
-
fast: "fast";
|
|
38
38
|
medium: "medium";
|
|
39
39
|
}>>;
|
|
40
40
|
tune: z.ZodOptional<z.ZodEnum<{
|
|
@@ -77,11 +77,11 @@ export declare const EncodeProfileSchema: z.ZodObject<{
|
|
|
77
77
|
gopFrames: z.ZodOptional<z.ZodNumber>;
|
|
78
78
|
bf: z.ZodOptional<z.ZodNumber>;
|
|
79
79
|
preset: z.ZodOptional<z.ZodEnum<{
|
|
80
|
+
fast: "fast";
|
|
80
81
|
ultrafast: "ultrafast";
|
|
81
82
|
superfast: "superfast";
|
|
82
83
|
veryfast: "veryfast";
|
|
83
84
|
faster: "faster";
|
|
84
|
-
fast: "fast";
|
|
85
85
|
medium: "medium";
|
|
86
86
|
}>>;
|
|
87
87
|
tune: z.ZodOptional<z.ZodEnum<{
|
|
@@ -2876,9 +2876,7 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
2876
2876
|
transformer: true;
|
|
2877
2877
|
}, TRPCDecorateCreateRouterOptions<{
|
|
2878
2878
|
listIdentities: TRPCQueryProcedure<{
|
|
2879
|
-
input:
|
|
2880
|
-
nodeId?: string | undefined;
|
|
2881
|
-
} | undefined;
|
|
2879
|
+
input: z.input<typeof faceGalleryCapability.methods.listIdentities.input>;
|
|
2882
2880
|
output: z.infer<typeof faceGalleryCapability.methods.listIdentities.output>;
|
|
2883
2881
|
meta: object;
|
|
2884
2882
|
}>;
|
|
@@ -5919,9 +5917,7 @@ export type AppRouter = TrpcCoreRouter<{
|
|
|
5919
5917
|
meta: object;
|
|
5920
5918
|
}>;
|
|
5921
5919
|
listVehicles: TRPCQueryProcedure<{
|
|
5922
|
-
input:
|
|
5923
|
-
nodeId?: string | undefined;
|
|
5924
|
-
} | undefined;
|
|
5920
|
+
input: z.input<typeof plateGalleryCapability.methods.listVehicles.input>;
|
|
5925
5921
|
output: z.infer<typeof plateGalleryCapability.methods.listVehicles.output>;
|
|
5926
5922
|
meta: object;
|
|
5927
5923
|
}>;
|
|
@@ -11,18 +11,18 @@
|
|
|
11
11
|
import { z } from 'zod';
|
|
12
12
|
/** What kind of target a probe addressed. */
|
|
13
13
|
export declare const wiringProbeKindSchema: z.ZodEnum<{
|
|
14
|
-
widget: "widget";
|
|
15
14
|
device: "device";
|
|
16
15
|
singleton: "singleton";
|
|
16
|
+
widget: "widget";
|
|
17
17
|
}>;
|
|
18
18
|
export type WiringProbeKind = z.infer<typeof wiringProbeKindSchema>;
|
|
19
19
|
/** Result of probing a single (cap|widget [, device]) target. */
|
|
20
20
|
export declare const wiringProbeResultSchema: z.ZodObject<{
|
|
21
21
|
capName: z.ZodString;
|
|
22
22
|
kind: z.ZodEnum<{
|
|
23
|
-
widget: "widget";
|
|
24
23
|
device: "device";
|
|
25
24
|
singleton: "singleton";
|
|
25
|
+
widget: "widget";
|
|
26
26
|
}>;
|
|
27
27
|
deviceId: z.ZodOptional<z.ZodNumber>;
|
|
28
28
|
reachable: z.ZodBoolean;
|
|
@@ -36,9 +36,9 @@ export declare const wiringAddonHealthSchema: z.ZodObject<{
|
|
|
36
36
|
caps: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
37
37
|
capName: z.ZodString;
|
|
38
38
|
kind: z.ZodEnum<{
|
|
39
|
-
widget: "widget";
|
|
40
39
|
device: "device";
|
|
41
40
|
singleton: "singleton";
|
|
41
|
+
widget: "widget";
|
|
42
42
|
}>;
|
|
43
43
|
deviceId: z.ZodOptional<z.ZodNumber>;
|
|
44
44
|
reachable: z.ZodBoolean;
|
|
@@ -48,9 +48,9 @@ export declare const wiringAddonHealthSchema: z.ZodObject<{
|
|
|
48
48
|
widgets: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
49
49
|
capName: z.ZodString;
|
|
50
50
|
kind: z.ZodEnum<{
|
|
51
|
-
widget: "widget";
|
|
52
51
|
device: "device";
|
|
53
52
|
singleton: "singleton";
|
|
53
|
+
widget: "widget";
|
|
54
54
|
}>;
|
|
55
55
|
deviceId: z.ZodOptional<z.ZodNumber>;
|
|
56
56
|
reachable: z.ZodBoolean;
|
|
@@ -67,9 +67,9 @@ export declare const wiringNodeHealthSchema: z.ZodObject<{
|
|
|
67
67
|
caps: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
68
68
|
capName: z.ZodString;
|
|
69
69
|
kind: z.ZodEnum<{
|
|
70
|
-
widget: "widget";
|
|
71
70
|
device: "device";
|
|
72
71
|
singleton: "singleton";
|
|
72
|
+
widget: "widget";
|
|
73
73
|
}>;
|
|
74
74
|
deviceId: z.ZodOptional<z.ZodNumber>;
|
|
75
75
|
reachable: z.ZodBoolean;
|
|
@@ -79,9 +79,9 @@ export declare const wiringNodeHealthSchema: z.ZodObject<{
|
|
|
79
79
|
widgets: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
80
80
|
capName: z.ZodString;
|
|
81
81
|
kind: z.ZodEnum<{
|
|
82
|
-
widget: "widget";
|
|
83
82
|
device: "device";
|
|
84
83
|
singleton: "singleton";
|
|
84
|
+
widget: "widget";
|
|
85
85
|
}>;
|
|
86
86
|
deviceId: z.ZodOptional<z.ZodNumber>;
|
|
87
87
|
reachable: z.ZodBoolean;
|
|
@@ -103,9 +103,9 @@ export declare const wiringHealthSnapshotSchema: z.ZodObject<{
|
|
|
103
103
|
caps: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
104
104
|
capName: z.ZodString;
|
|
105
105
|
kind: z.ZodEnum<{
|
|
106
|
-
widget: "widget";
|
|
107
106
|
device: "device";
|
|
108
107
|
singleton: "singleton";
|
|
108
|
+
widget: "widget";
|
|
109
109
|
}>;
|
|
110
110
|
deviceId: z.ZodOptional<z.ZodNumber>;
|
|
111
111
|
reachable: z.ZodBoolean;
|
|
@@ -115,9 +115,9 @@ export declare const wiringHealthSnapshotSchema: z.ZodObject<{
|
|
|
115
115
|
widgets: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
116
116
|
capName: z.ZodString;
|
|
117
117
|
kind: z.ZodEnum<{
|
|
118
|
-
widget: "widget";
|
|
119
118
|
device: "device";
|
|
120
119
|
singleton: "singleton";
|
|
120
|
+
widget: "widget";
|
|
121
121
|
}>;
|
|
122
122
|
deviceId: z.ZodOptional<z.ZodNumber>;
|
|
123
123
|
reachable: z.ZodBoolean;
|
package/dist/index.js
CHANGED
|
@@ -1578,83 +1578,6 @@ var RecordingRetentionSchema = zod.z.object({
|
|
|
1578
1578
|
maxSizeGb: zod.z.number().min(0).optional()
|
|
1579
1579
|
});
|
|
1580
1580
|
/**
|
|
1581
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
1582
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
1583
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
1584
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
1585
|
-
*
|
|
1586
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
1587
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
1588
|
-
* preset changed over time renders every historical window at the dims it was
|
|
1589
|
-
* written with.
|
|
1590
|
-
*/
|
|
1591
|
-
var ScrubThumbnailPresetSchema = zod.z.enum([
|
|
1592
|
-
"minimal",
|
|
1593
|
-
"low",
|
|
1594
|
-
"standard",
|
|
1595
|
-
"high",
|
|
1596
|
-
"max"
|
|
1597
|
-
]);
|
|
1598
|
-
/** The default preset when a config omits `scrubThumbnails`. */
|
|
1599
|
-
var DEFAULT_SCRUB_THUMBNAIL_PRESET = "standard";
|
|
1600
|
-
/**
|
|
1601
|
-
* Preset → tile geometry + JPEG quality. Every step is 16:9; the graduated
|
|
1602
|
-
* ladder trades sheet size (and remote fetch cost) for scrub crispness.
|
|
1603
|
-
* `standard` matches the shipped `sheet-geometry`/`sheet-composer` defaults
|
|
1604
|
-
* (480×270 q72), so an unset config is byte-identical to today. The map is
|
|
1605
|
-
* strictly monotone in resolution AND quality across the ordered steps.
|
|
1606
|
-
*/
|
|
1607
|
-
var SCRUB_THUMBNAIL_PRESETS = {
|
|
1608
|
-
minimal: {
|
|
1609
|
-
tileWidth: 240,
|
|
1610
|
-
tileHeight: 135,
|
|
1611
|
-
quality: 55
|
|
1612
|
-
},
|
|
1613
|
-
low: {
|
|
1614
|
-
tileWidth: 320,
|
|
1615
|
-
tileHeight: 180,
|
|
1616
|
-
quality: 60
|
|
1617
|
-
},
|
|
1618
|
-
standard: {
|
|
1619
|
-
tileWidth: 480,
|
|
1620
|
-
tileHeight: 270,
|
|
1621
|
-
quality: 72
|
|
1622
|
-
},
|
|
1623
|
-
high: {
|
|
1624
|
-
tileWidth: 640,
|
|
1625
|
-
tileHeight: 360,
|
|
1626
|
-
quality: 80
|
|
1627
|
-
},
|
|
1628
|
-
max: {
|
|
1629
|
-
tileWidth: 960,
|
|
1630
|
-
tileHeight: 540,
|
|
1631
|
-
quality: 85
|
|
1632
|
-
}
|
|
1633
|
-
};
|
|
1634
|
-
/** Human labels for each preset (resolution-tagged), for settings UIs. */
|
|
1635
|
-
var SCRUB_THUMBNAIL_PRESET_LABELS = {
|
|
1636
|
-
minimal: "Minimal (240p)",
|
|
1637
|
-
low: "Low (320p)",
|
|
1638
|
-
standard: "Standard (480p)",
|
|
1639
|
-
high: "High (640p)",
|
|
1640
|
-
max: "Max (960p)"
|
|
1641
|
-
};
|
|
1642
|
-
/** Ordered low→high so a UI can render the ladder in graduated order. */
|
|
1643
|
-
var SCRUB_THUMBNAIL_PRESET_ORDER = [
|
|
1644
|
-
"minimal",
|
|
1645
|
-
"low",
|
|
1646
|
-
"standard",
|
|
1647
|
-
"high",
|
|
1648
|
-
"max"
|
|
1649
|
-
];
|
|
1650
|
-
/**
|
|
1651
|
-
* Resolve the geometry for a recording config's scrub-thumbnail preset,
|
|
1652
|
-
* defaulting to `standard` when unset. Pure — no I/O.
|
|
1653
|
-
*/
|
|
1654
|
-
function resolveScrubThumbnailGeometry(preset) {
|
|
1655
|
-
return SCRUB_THUMBNAIL_PRESETS[preset ?? "standard"];
|
|
1656
|
-
}
|
|
1657
|
-
/**
|
|
1658
1581
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
1659
1582
|
*
|
|
1660
1583
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -1662,7 +1585,11 @@ function resolveScrubThumbnailGeometry(preset) {
|
|
|
1662
1585
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
1663
1586
|
*
|
|
1664
1587
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
1665
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
1588
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
1589
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
1590
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
1591
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
1592
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
1666
1593
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
1667
1594
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
1668
1595
|
*/
|
|
@@ -1685,14 +1612,7 @@ var RecordingConfigSchema = zod.z.object({
|
|
|
1685
1612
|
* "off" is the absence of a covering band, never a band value.
|
|
1686
1613
|
*/
|
|
1687
1614
|
bands: zod.z.array(RecordingBandSchema).default([]),
|
|
1688
|
-
retention: RecordingRetentionSchema.optional()
|
|
1689
|
-
/**
|
|
1690
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
1691
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
1692
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
1693
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
1694
|
-
*/
|
|
1695
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
1615
|
+
retention: RecordingRetentionSchema.optional()
|
|
1696
1616
|
}).strict();
|
|
1697
1617
|
/**
|
|
1698
1618
|
* Derive the {@link RecordingStorageModeSchema} summary from the authoritative
|
|
@@ -7307,11 +7227,26 @@ var settingsStoreCapability = {
|
|
|
7307
7227
|
key: zod.z.string(),
|
|
7308
7228
|
value: zod.z.unknown()
|
|
7309
7229
|
}), zod.z.void(), { kind: "mutation" }),
|
|
7310
|
-
/**
|
|
7230
|
+
/**
|
|
7231
|
+
* Rows matching a filter.
|
|
7232
|
+
*
|
|
7233
|
+
* `columns` is a SQL-level projection: the engine SELECTs only those
|
|
7234
|
+
* columns (plus the primary key) instead of the whole row. It is the only
|
|
7235
|
+
* way to stop paying disk for a column that is discarded — a heavy JSON
|
|
7236
|
+
* column dominates the row, and dropping it in JS after the read pays every
|
|
7237
|
+
* byte first. Measured on the live `pipeline-analytics:tracks` table: a
|
|
7238
|
+
* 501-row page is 4.6 MB whole and 0.11 MB projected, same index, same
|
|
7239
|
+
* plan.
|
|
7240
|
+
*
|
|
7241
|
+
* The engine REFUSES a column it cannot serve rather than omitting it —
|
|
7242
|
+
* see `SettingsQueryInput.columns` for why a projection may not be
|
|
7243
|
+
* forgiving the way a predicate is.
|
|
7244
|
+
*/
|
|
7311
7245
|
query: require_sleep.method(zod.z.object({
|
|
7312
7246
|
namespace: zod.z.string().optional(),
|
|
7313
7247
|
collection: zod.z.string(),
|
|
7314
|
-
filter: QueryFilterSchema.optional()
|
|
7248
|
+
filter: QueryFilterSchema.optional(),
|
|
7249
|
+
columns: zod.z.array(zod.z.string()).readonly().optional()
|
|
7315
7250
|
}), zod.z.array(SettingsRecordSchema).readonly()),
|
|
7316
7251
|
/** Insert a new record. */
|
|
7317
7252
|
insert: require_sleep.method(zod.z.object({
|
|
@@ -7439,6 +7374,23 @@ var EngineInfoSchema = zod.z.object({
|
|
|
7439
7374
|
* go through `settings-store`; they never see this cap, and an engine
|
|
7440
7375
|
* never sees a caller.
|
|
7441
7376
|
*
|
|
7377
|
+
* ⚠ **`internal: true` DOES NOT gate the mount, and until 2026-08-26 this
|
|
7378
|
+
* comment claimed otherwise.** `resolveCapMount` never reads the field, so this
|
|
7379
|
+
* cap was live on the AppRouter with every method at the default
|
|
7380
|
+
* `auth: 'protected'` — i.e. readable by ANY authenticated session, admin or
|
|
7381
|
+
* not. Verified against the live hub: `dataStoreProvider.query` returned raw
|
|
7382
|
+
* settings rows including a provider credential, bypassing the secret redaction
|
|
7383
|
+
* that `deviceManager.listAll` and friends go through.
|
|
7384
|
+
*
|
|
7385
|
+
* Every method is now `auth: 'admin'` EXPLICITLY, including the five reads —
|
|
7386
|
+
* they had no options object at all, which is exactly how they kept the
|
|
7387
|
+
* permissive default while the mutations looked deliberate. The explicit
|
|
7388
|
+
* annotation is the fix that works today; making `internal` mean something at
|
|
7389
|
+
* mount time is the systemic one, and it is not free: 22 caps declare it, only
|
|
7390
|
+
* 4 are `mount: 'skip'`, and forcing admin on all of them would change the auth
|
|
7391
|
+
* of surfaces the viewer and admin-ui call as non-admin users. That decision is
|
|
7392
|
+
* the operator's, not a side effect of this file.
|
|
7393
|
+
*
|
|
7442
7394
|
* Design notes:
|
|
7443
7395
|
* - **Stateless dispatch.** Every method carries its own
|
|
7444
7396
|
* `namespace` + `collection`, so an engine keeps no per-caller state
|
|
@@ -7460,64 +7412,105 @@ var dataStoreProviderCapability = {
|
|
|
7460
7412
|
internal: true,
|
|
7461
7413
|
methods: {
|
|
7462
7414
|
/** Self-description — how the orchestrator picks a registrant. */
|
|
7463
|
-
getEngineInfo: require_sleep.method(zod.z.void(), EngineInfoSchema),
|
|
7415
|
+
getEngineInfo: require_sleep.method(zod.z.void(), EngineInfoSchema, { auth: "admin" }),
|
|
7464
7416
|
/** Get a single value by key from a collection. */
|
|
7465
7417
|
get: require_sleep.method(zod.z.object({
|
|
7466
7418
|
namespace: zod.z.string().optional(),
|
|
7467
7419
|
collection: zod.z.string(),
|
|
7468
7420
|
key: zod.z.string()
|
|
7469
|
-
}), zod.z.unknown()),
|
|
7421
|
+
}), zod.z.unknown(), { auth: "admin" }),
|
|
7470
7422
|
/** Set a value by key in a collection (upsert). */
|
|
7471
7423
|
set: require_sleep.method(zod.z.object({
|
|
7472
7424
|
namespace: zod.z.string().optional(),
|
|
7473
7425
|
collection: zod.z.string(),
|
|
7474
7426
|
key: zod.z.string(),
|
|
7475
7427
|
value: zod.z.unknown()
|
|
7476
|
-
}), zod.z.void(), {
|
|
7428
|
+
}), zod.z.void(), {
|
|
7429
|
+
kind: "mutation",
|
|
7430
|
+
auth: "admin"
|
|
7431
|
+
}),
|
|
7477
7432
|
/** Get all entries matching an optional filter. */
|
|
7478
7433
|
query: require_sleep.method(zod.z.object({
|
|
7479
7434
|
namespace: zod.z.string().optional(),
|
|
7480
7435
|
collection: zod.z.string(),
|
|
7481
|
-
filter: QueryFilterSchema.optional()
|
|
7482
|
-
|
|
7436
|
+
filter: QueryFilterSchema.optional(),
|
|
7437
|
+
/**
|
|
7438
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
7439
|
+
*
|
|
7440
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
7441
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
7442
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
7443
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
7444
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
7445
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
7446
|
+
*
|
|
7447
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
7448
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
7449
|
+
* interface the engine destructures from. The field existed on both
|
|
7450
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
7451
|
+
* registered provider against `InferProvider<cap>` —
|
|
7452
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
7453
|
+
*
|
|
7454
|
+
* It is declared here anyway, and must stay in step with
|
|
7455
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
7456
|
+
* to be able to see that this call carries a projection.
|
|
7457
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
7458
|
+
*/
|
|
7459
|
+
columns: zod.z.array(zod.z.string()).readonly().optional()
|
|
7460
|
+
}), zod.z.array(SettingsRecordSchema).readonly(), { auth: "admin" }),
|
|
7483
7461
|
/** Insert a new record. */
|
|
7484
7462
|
insert: require_sleep.method(zod.z.object({
|
|
7485
7463
|
namespace: zod.z.string().optional(),
|
|
7486
7464
|
collection: zod.z.string(),
|
|
7487
7465
|
record: SettingsRecordSchema
|
|
7488
|
-
}), zod.z.void(), {
|
|
7466
|
+
}), zod.z.void(), {
|
|
7467
|
+
kind: "mutation",
|
|
7468
|
+
auth: "admin"
|
|
7469
|
+
}),
|
|
7489
7470
|
/** Update an existing record by ID. */
|
|
7490
7471
|
update: require_sleep.method(zod.z.object({
|
|
7491
7472
|
namespace: zod.z.string().optional(),
|
|
7492
7473
|
collection: zod.z.string(),
|
|
7493
7474
|
id: zod.z.string(),
|
|
7494
7475
|
data: zod.z.record(zod.z.string(), zod.z.unknown())
|
|
7495
|
-
}), zod.z.void(), {
|
|
7476
|
+
}), zod.z.void(), {
|
|
7477
|
+
kind: "mutation",
|
|
7478
|
+
auth: "admin"
|
|
7479
|
+
}),
|
|
7496
7480
|
/** Delete a record by key/ID. */
|
|
7497
7481
|
delete: require_sleep.method(zod.z.object({
|
|
7498
7482
|
namespace: zod.z.string().optional(),
|
|
7499
7483
|
collection: zod.z.string(),
|
|
7500
7484
|
key: zod.z.string()
|
|
7501
|
-
}), zod.z.void(), {
|
|
7485
|
+
}), zod.z.void(), {
|
|
7486
|
+
kind: "mutation",
|
|
7487
|
+
auth: "admin"
|
|
7488
|
+
}),
|
|
7502
7489
|
/** Delete every record matching `filter`, in one statement. */
|
|
7503
7490
|
deleteWhere: require_sleep.method(zod.z.object({
|
|
7504
7491
|
namespace: zod.z.string().optional(),
|
|
7505
7492
|
collection: zod.z.string(),
|
|
7506
7493
|
filter: MutationFilterSchema
|
|
7507
|
-
}), zod.z.object({ deleted: zod.z.number().int() }), {
|
|
7494
|
+
}), zod.z.object({ deleted: zod.z.number().int() }), {
|
|
7495
|
+
kind: "mutation",
|
|
7496
|
+
auth: "admin"
|
|
7497
|
+
}),
|
|
7508
7498
|
/** Apply `data` to every record matching `filter`, in one statement. */
|
|
7509
7499
|
updateWhere: require_sleep.method(zod.z.object({
|
|
7510
7500
|
namespace: zod.z.string().optional(),
|
|
7511
7501
|
collection: zod.z.string(),
|
|
7512
7502
|
filter: MutationFilterSchema,
|
|
7513
7503
|
data: zod.z.record(zod.z.string(), zod.z.unknown())
|
|
7514
|
-
}), zod.z.object({ updated: zod.z.number().int() }), {
|
|
7504
|
+
}), zod.z.object({ updated: zod.z.number().int() }), {
|
|
7505
|
+
kind: "mutation",
|
|
7506
|
+
auth: "admin"
|
|
7507
|
+
}),
|
|
7515
7508
|
/** Count entries in a collection, optionally filtered. */
|
|
7516
7509
|
count: require_sleep.method(zod.z.object({
|
|
7517
7510
|
namespace: zod.z.string().optional(),
|
|
7518
7511
|
collection: zod.z.string(),
|
|
7519
7512
|
filter: QueryFilterSchema.optional()
|
|
7520
|
-
}), zod.z.number()),
|
|
7513
|
+
}), zod.z.number(), { auth: "admin" }),
|
|
7521
7514
|
/** Grouped counts per ((field-origin)/bucketSize) bucket, filtered. */
|
|
7522
7515
|
histogram: require_sleep.method(zod.z.object({
|
|
7523
7516
|
namespace: zod.z.string().optional(),
|
|
@@ -7529,19 +7522,22 @@ var dataStoreProviderCapability = {
|
|
|
7529
7522
|
}), zod.z.array(zod.z.object({
|
|
7530
7523
|
bucket: zod.z.number().int(),
|
|
7531
7524
|
count: zod.z.number().int()
|
|
7532
|
-
})).readonly()),
|
|
7525
|
+
})).readonly(), { auth: "admin" }),
|
|
7533
7526
|
/** Check if a collection is empty. */
|
|
7534
7527
|
isEmpty: require_sleep.method(zod.z.object({
|
|
7535
7528
|
namespace: zod.z.string().optional(),
|
|
7536
7529
|
collection: zod.z.string()
|
|
7537
|
-
}), zod.z.boolean()),
|
|
7530
|
+
}), zod.z.boolean(), { auth: "admin" }),
|
|
7538
7531
|
/** Declare a typed (SQL-backed) collection with columns + indexes. */
|
|
7539
7532
|
declareCollection: require_sleep.method(zod.z.object({
|
|
7540
7533
|
namespace: zod.z.string().optional(),
|
|
7541
7534
|
collection: zod.z.string(),
|
|
7542
7535
|
columns: zod.z.array(CollectionColumnSchema).readonly(),
|
|
7543
7536
|
indexes: zod.z.array(CollectionIndexSchema).readonly().optional()
|
|
7544
|
-
}), zod.z.void(), {
|
|
7537
|
+
}), zod.z.void(), {
|
|
7538
|
+
kind: "mutation",
|
|
7539
|
+
auth: "admin"
|
|
7540
|
+
})
|
|
7545
7541
|
}
|
|
7546
7542
|
};
|
|
7547
7543
|
//#endregion
|
|
@@ -23600,7 +23596,27 @@ var faceGalleryCapability = {
|
|
|
23600
23596
|
scope: "system",
|
|
23601
23597
|
mode: "singleton",
|
|
23602
23598
|
methods: {
|
|
23603
|
-
listIdentities: require_sleep.method(zod.z.
|
|
23599
|
+
listIdentities: require_sleep.method(zod.z.object({
|
|
23600
|
+
/**
|
|
23601
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
23602
|
+
*
|
|
23603
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
23604
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
23605
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
23606
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
23607
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
23608
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
23609
|
+
*
|
|
23610
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
23611
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
23612
|
+
*
|
|
23613
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
23614
|
+
* next train** — the hub router validates cap inputs against its own
|
|
23615
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
23616
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
23617
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
23618
|
+
*/
|
|
23619
|
+
includeCrops: zod.z.boolean().optional() }).optional(), zod.z.array(IdentitySchema).readonly()),
|
|
23604
23620
|
createIdentity: require_sleep.method(zod.z.object({ name: zod.z.string().min(1) }), IdentitySchema, {
|
|
23605
23621
|
kind: "mutation",
|
|
23606
23622
|
auth: "admin"
|
|
@@ -27048,7 +27064,13 @@ var plateGalleryCapability = {
|
|
|
27048
27064
|
kind: "mutation",
|
|
27049
27065
|
auth: "admin"
|
|
27050
27066
|
}),
|
|
27051
|
-
listVehicles: require_sleep.method(zod.z.
|
|
27067
|
+
listVehicles: require_sleep.method(zod.z.object({
|
|
27068
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
27069
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
27070
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
27071
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
27072
|
+
* resolves to `false` and is exactly the intended default. */
|
|
27073
|
+
includeCrops: zod.z.boolean().optional() }).optional(), zod.z.array(VehicleSchema).readonly()),
|
|
27052
27074
|
createVehicle: require_sleep.method(zod.z.object({ name: zod.z.string().min(1) }), VehicleSchema, {
|
|
27053
27075
|
kind: "mutation",
|
|
27054
27076
|
auth: "admin"
|
|
@@ -47860,7 +47882,6 @@ exports.DEFAULT_POOL_MEMORY_POLICY = DEFAULT_POOL_MEMORY_POLICY;
|
|
|
47860
47882
|
exports.DEFAULT_RECORDING_PROFILES = DEFAULT_RECORDING_PROFILES;
|
|
47861
47883
|
exports.DEFAULT_RETENTION = DEFAULT_RETENTION;
|
|
47862
47884
|
exports.DEFAULT_RUNTIME_STATE_DURABILITY = require_sleep.DEFAULT_RUNTIME_STATE_DURABILITY;
|
|
47863
|
-
exports.DEFAULT_SCRUB_THUMBNAIL_PRESET = DEFAULT_SCRUB_THUMBNAIL_PRESET;
|
|
47864
47885
|
exports.DEFAULT_TIMELAPSE_PREVIEW_TEXT = DEFAULT_TIMELAPSE_PREVIEW_TEXT;
|
|
47865
47886
|
exports.DETAIL_CROP_PADDING_FIELD = DETAIL_CROP_PADDING_FIELD;
|
|
47866
47887
|
exports.DETAIL_CROP_PADDING_KEY = DETAIL_CROP_PADDING_KEY;
|
|
@@ -48384,9 +48405,6 @@ exports.SCENE_DEFAULT_UNCOVERED_POLICY = SCENE_DEFAULT_UNCOVERED_POLICY;
|
|
|
48384
48405
|
exports.SCENE_DIVERGED = SCENE_DIVERGED;
|
|
48385
48406
|
exports.SCENE_RESET_RECAPTURES = SCENE_RESET_RECAPTURES;
|
|
48386
48407
|
exports.SCOPE_PRESETS = SCOPE_PRESETS;
|
|
48387
|
-
exports.SCRUB_THUMBNAIL_PRESETS = SCRUB_THUMBNAIL_PRESETS;
|
|
48388
|
-
exports.SCRUB_THUMBNAIL_PRESET_LABELS = SCRUB_THUMBNAIL_PRESET_LABELS;
|
|
48389
|
-
exports.SCRUB_THUMBNAIL_PRESET_ORDER = SCRUB_THUMBNAIL_PRESET_ORDER;
|
|
48390
48408
|
exports.SENSOR_FEATURES = SENSOR_FEATURES;
|
|
48391
48409
|
exports.SENSOR_MAP = SENSOR_MAP;
|
|
48392
48410
|
exports.SOURCE_INFO_METADATA_KEY = SOURCE_INFO_METADATA_KEY;
|
|
@@ -48409,7 +48427,6 @@ exports.ScopedTokenSchema = ScopedTokenSchema;
|
|
|
48409
48427
|
exports.ScopedTokenSummarySchema = ScopedTokenSummarySchema;
|
|
48410
48428
|
exports.ScoredObjectEventSchema = ScoredObjectEventSchema;
|
|
48411
48429
|
exports.ScriptRunnerStatusSchema = ScriptRunnerStatusSchema;
|
|
48412
|
-
exports.ScrubThumbnailPresetSchema = ScrubThumbnailPresetSchema;
|
|
48413
48430
|
exports.SearchResultSchema = SearchResultSchema;
|
|
48414
48431
|
exports.SendEmailInputSchema = SendEmailInputSchema;
|
|
48415
48432
|
exports.SendEmailResultSchema = SendEmailResultSchema;
|
|
@@ -48907,7 +48924,6 @@ exports.resolveMutate = resolveMutate;
|
|
|
48907
48924
|
exports.resolvePoolMemoryPolicy = resolvePoolMemoryPolicy;
|
|
48908
48925
|
exports.resolveRecordingProfiles = resolveRecordingProfiles;
|
|
48909
48926
|
exports.resolveRunnerId = resolveRunnerId;
|
|
48910
|
-
exports.resolveScrubThumbnailGeometry = resolveScrubThumbnailGeometry;
|
|
48911
48927
|
exports.resolveVariantModelId = resolveVariantModelId;
|
|
48912
48928
|
exports.resolveViewableDeviceIds = resolveViewableDeviceIds;
|
|
48913
48929
|
exports.roleSpec = roleSpec;
|