@camstack/addon-provider-amcrest 0.2.29 → 0.2.30
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 +249 -79
- package/dist/addon.mjs +249 -79
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -6635,7 +6635,7 @@ function method(input, output, options) {
|
|
|
6635
6635
|
input,
|
|
6636
6636
|
output,
|
|
6637
6637
|
kind: options?.kind ?? "query",
|
|
6638
|
-
auth: options
|
|
6638
|
+
...options?.auth !== void 0 ? { auth: options.auth } : {},
|
|
6639
6639
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
6640
6640
|
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
6641
6641
|
timeoutMs: options?.timeoutMs
|
|
@@ -6659,7 +6659,7 @@ function event(data) {
|
|
|
6659
6659
|
}
|
|
6660
6660
|
var StaticDirOutputSchema$1 = object({ staticDir: string() });
|
|
6661
6661
|
var VersionOutputSchema$1 = object({ version: string() });
|
|
6662
|
-
method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
|
|
6662
|
+
method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
|
|
6663
6663
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
6664
6664
|
DeviceType["Camera"] = "camera";
|
|
6665
6665
|
DeviceType["Hub"] = "hub";
|
|
@@ -6980,7 +6980,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
6980
6980
|
}({});
|
|
6981
6981
|
var StaticDirOutputSchema = object({ staticDir: string() });
|
|
6982
6982
|
var VersionOutputSchema = object({ version: string() });
|
|
6983
|
-
method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
|
|
6983
|
+
method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
|
|
6984
6984
|
/**
|
|
6985
6985
|
* device-ops — device-scoped cap that unifies the per-IDevice operations
|
|
6986
6986
|
* previously routed through the `.device-ops` Moleculer bridge service.
|
|
@@ -7594,24 +7594,6 @@ var RecordingRetentionSchema = object({
|
|
|
7594
7594
|
maxSizeGb: number().min(0).optional()
|
|
7595
7595
|
});
|
|
7596
7596
|
/**
|
|
7597
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7598
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7599
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7600
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7601
|
-
*
|
|
7602
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7603
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7604
|
-
* preset changed over time renders every historical window at the dims it was
|
|
7605
|
-
* written with.
|
|
7606
|
-
*/
|
|
7607
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
7608
|
-
"minimal",
|
|
7609
|
-
"low",
|
|
7610
|
-
"standard",
|
|
7611
|
-
"high",
|
|
7612
|
-
"max"
|
|
7613
|
-
]);
|
|
7614
|
-
/**
|
|
7615
7597
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7616
7598
|
*
|
|
7617
7599
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -7619,7 +7601,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
7619
7601
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
7620
7602
|
*
|
|
7621
7603
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
7622
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
7604
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
7605
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
7606
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
7607
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
7608
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
7623
7609
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
7624
7610
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
7625
7611
|
*/
|
|
@@ -7642,14 +7628,7 @@ var RecordingConfigSchema = object({
|
|
|
7642
7628
|
* "off" is the absence of a covering band, never a band value.
|
|
7643
7629
|
*/
|
|
7644
7630
|
bands: array(RecordingBandSchema).default([]),
|
|
7645
|
-
retention: RecordingRetentionSchema.optional()
|
|
7646
|
-
/**
|
|
7647
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7648
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7649
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
7650
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7651
|
-
*/
|
|
7652
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7631
|
+
retention: RecordingRetentionSchema.optional()
|
|
7653
7632
|
}).strict();
|
|
7654
7633
|
/**
|
|
7655
7634
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -7725,10 +7704,11 @@ var RelocateFootageInputSchema = object({
|
|
|
7725
7704
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
7726
7705
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
7727
7706
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
7728
|
-
var
|
|
7707
|
+
var RelocateMediaInputSchema = object({
|
|
7729
7708
|
toLocationId: string(),
|
|
7730
7709
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
7731
|
-
})
|
|
7710
|
+
});
|
|
7711
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
7732
7712
|
/** The independently selectable logical storage classes. `recordings`
|
|
7733
7713
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
7734
7714
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8023,7 +8003,26 @@ var LabelDefinitionSchema = object({
|
|
|
8023
8003
|
description: string().optional(),
|
|
8024
8004
|
icon: string().optional()
|
|
8025
8005
|
});
|
|
8026
|
-
|
|
8006
|
+
/**
|
|
8007
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8008
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8009
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8010
|
+
* detection pipeline executor actually routes.
|
|
8011
|
+
*
|
|
8012
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8013
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8014
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8015
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8016
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8017
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8018
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8019
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8020
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8021
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8022
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8023
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8024
|
+
*/
|
|
8025
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8027
8026
|
mapping: record(string(), _enum([
|
|
8028
8027
|
"person",
|
|
8029
8028
|
"vehicle",
|
|
@@ -8228,7 +8227,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8228
8227
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8229
8228
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8230
8229
|
*/
|
|
8231
|
-
classMap:
|
|
8230
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8232
8231
|
});
|
|
8233
8232
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8234
8233
|
format: literal("openvino"),
|
|
@@ -8258,7 +8257,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8258
8257
|
"segmentation"
|
|
8259
8258
|
]),
|
|
8260
8259
|
faceAlignment: boolean().optional(),
|
|
8261
|
-
classMap:
|
|
8260
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8262
8261
|
});
|
|
8263
8262
|
var ConvertResultSchema = object({
|
|
8264
8263
|
entry: ModelCatalogEntrySchema,
|
|
@@ -9121,7 +9120,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
9121
9120
|
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
9122
9121
|
sectionLabel: string().optional()
|
|
9123
9122
|
});
|
|
9124
|
-
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
9123
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
|
|
9125
9124
|
var AddonHttpRouteSchema = object({
|
|
9126
9125
|
method: _enum([
|
|
9127
9126
|
"GET",
|
|
@@ -9356,7 +9355,7 @@ var WidgetMetadataSchema = object({
|
|
|
9356
9355
|
defaultColumns: number().int().min(1).max(12).default(6),
|
|
9357
9356
|
defaultRows: number().int().min(1).max(12).default(1)
|
|
9358
9357
|
});
|
|
9359
|
-
method(_void(), array(WidgetMetadataSchema).readonly());
|
|
9358
|
+
method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
|
|
9360
9359
|
/**
|
|
9361
9360
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
9362
9361
|
* surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
|
|
@@ -10980,7 +10979,7 @@ var CustomModelDescriptorSchema = object({
|
|
|
10980
10979
|
stepId: string(),
|
|
10981
10980
|
entry: ModelCatalogEntrySchema
|
|
10982
10981
|
});
|
|
10983
|
-
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
10982
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
|
|
10984
10983
|
/**
|
|
10985
10984
|
* Query filter for settings-store collections.
|
|
10986
10985
|
*/
|
|
@@ -11067,7 +11066,8 @@ method(object({
|
|
|
11067
11066
|
}), _void(), { kind: "mutation" }), method(object({
|
|
11068
11067
|
namespace: string().optional(),
|
|
11069
11068
|
collection: string(),
|
|
11070
|
-
filter: QueryFilterSchema.optional()
|
|
11069
|
+
filter: QueryFilterSchema.optional(),
|
|
11070
|
+
columns: array(string()).readonly().optional()
|
|
11071
11071
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
11072
11072
|
namespace: string().optional(),
|
|
11073
11073
|
collection: string(),
|
|
@@ -11130,46 +11130,87 @@ var EngineInfoSchema = object({
|
|
|
11130
11130
|
kind: _enum(["relational", "vector"]),
|
|
11131
11131
|
displayName: string()
|
|
11132
11132
|
});
|
|
11133
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11133
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11134
11134
|
namespace: string().optional(),
|
|
11135
11135
|
collection: string(),
|
|
11136
11136
|
key: string()
|
|
11137
|
-
}), unknown()), method(object({
|
|
11137
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11138
11138
|
namespace: string().optional(),
|
|
11139
11139
|
collection: string(),
|
|
11140
11140
|
key: string(),
|
|
11141
11141
|
value: unknown()
|
|
11142
|
-
}), _void(), {
|
|
11142
|
+
}), _void(), {
|
|
11143
|
+
kind: "mutation",
|
|
11144
|
+
auth: "admin"
|
|
11145
|
+
}), method(object({
|
|
11143
11146
|
namespace: string().optional(),
|
|
11144
11147
|
collection: string(),
|
|
11145
|
-
filter: QueryFilterSchema.optional()
|
|
11146
|
-
|
|
11148
|
+
filter: QueryFilterSchema.optional(),
|
|
11149
|
+
/**
|
|
11150
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11151
|
+
*
|
|
11152
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11153
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11154
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11155
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11156
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11157
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11158
|
+
*
|
|
11159
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11160
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11161
|
+
* interface the engine destructures from. The field existed on both
|
|
11162
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11163
|
+
* registered provider against `InferProvider<cap>` —
|
|
11164
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11165
|
+
*
|
|
11166
|
+
* It is declared here anyway, and must stay in step with
|
|
11167
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11168
|
+
* to be able to see that this call carries a projection.
|
|
11169
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11170
|
+
*/
|
|
11171
|
+
columns: array(string()).readonly().optional()
|
|
11172
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11147
11173
|
namespace: string().optional(),
|
|
11148
11174
|
collection: string(),
|
|
11149
11175
|
record: SettingsRecordSchema
|
|
11150
|
-
}), _void(), {
|
|
11176
|
+
}), _void(), {
|
|
11177
|
+
kind: "mutation",
|
|
11178
|
+
auth: "admin"
|
|
11179
|
+
}), method(object({
|
|
11151
11180
|
namespace: string().optional(),
|
|
11152
11181
|
collection: string(),
|
|
11153
11182
|
id: string(),
|
|
11154
11183
|
data: record(string(), unknown())
|
|
11155
|
-
}), _void(), {
|
|
11184
|
+
}), _void(), {
|
|
11185
|
+
kind: "mutation",
|
|
11186
|
+
auth: "admin"
|
|
11187
|
+
}), method(object({
|
|
11156
11188
|
namespace: string().optional(),
|
|
11157
11189
|
collection: string(),
|
|
11158
11190
|
key: string()
|
|
11159
|
-
}), _void(), {
|
|
11191
|
+
}), _void(), {
|
|
11192
|
+
kind: "mutation",
|
|
11193
|
+
auth: "admin"
|
|
11194
|
+
}), method(object({
|
|
11160
11195
|
namespace: string().optional(),
|
|
11161
11196
|
collection: string(),
|
|
11162
11197
|
filter: MutationFilterSchema
|
|
11163
|
-
}), object({ deleted: number().int() }), {
|
|
11198
|
+
}), object({ deleted: number().int() }), {
|
|
11199
|
+
kind: "mutation",
|
|
11200
|
+
auth: "admin"
|
|
11201
|
+
}), method(object({
|
|
11164
11202
|
namespace: string().optional(),
|
|
11165
11203
|
collection: string(),
|
|
11166
11204
|
filter: MutationFilterSchema,
|
|
11167
11205
|
data: record(string(), unknown())
|
|
11168
|
-
}), object({ updated: number().int() }), {
|
|
11206
|
+
}), object({ updated: number().int() }), {
|
|
11207
|
+
kind: "mutation",
|
|
11208
|
+
auth: "admin"
|
|
11209
|
+
}), method(object({
|
|
11169
11210
|
namespace: string().optional(),
|
|
11170
11211
|
collection: string(),
|
|
11171
11212
|
filter: QueryFilterSchema.optional()
|
|
11172
|
-
}), number()), method(object({
|
|
11213
|
+
}), number(), { auth: "admin" }), method(object({
|
|
11173
11214
|
namespace: string().optional(),
|
|
11174
11215
|
collection: string(),
|
|
11175
11216
|
field: string(),
|
|
@@ -11179,15 +11220,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11179
11220
|
}), array(object({
|
|
11180
11221
|
bucket: number().int(),
|
|
11181
11222
|
count: number().int()
|
|
11182
|
-
})).readonly()), method(object({
|
|
11223
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11183
11224
|
namespace: string().optional(),
|
|
11184
11225
|
collection: string()
|
|
11185
|
-
}), boolean()), method(object({
|
|
11226
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11186
11227
|
namespace: string().optional(),
|
|
11187
11228
|
collection: string(),
|
|
11188
11229
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11189
11230
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11190
|
-
}), _void(), {
|
|
11231
|
+
}), _void(), {
|
|
11232
|
+
kind: "mutation",
|
|
11233
|
+
auth: "admin"
|
|
11234
|
+
});
|
|
11191
11235
|
/**
|
|
11192
11236
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11193
11237
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12477,7 +12521,7 @@ method(object({
|
|
|
12477
12521
|
crop: _instanceof(Uint8Array),
|
|
12478
12522
|
width: number(),
|
|
12479
12523
|
height: number()
|
|
12480
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12524
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12481
12525
|
/**
|
|
12482
12526
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12483
12527
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -12770,19 +12814,22 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
12770
12814
|
runtime: ManagedRuntimeConfigSchema,
|
|
12771
12815
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
12772
12816
|
timeoutMs: number().int().positive().optional()
|
|
12773
|
-
}), LlmGenerateResultSchema, {
|
|
12817
|
+
}), LlmGenerateResultSchema, {
|
|
12818
|
+
kind: "mutation",
|
|
12819
|
+
auth: "admin"
|
|
12820
|
+
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
12774
12821
|
kind: "mutation",
|
|
12775
12822
|
auth: "admin"
|
|
12776
12823
|
}), method(object({}), _void(), {
|
|
12777
12824
|
kind: "mutation",
|
|
12778
12825
|
auth: "admin"
|
|
12779
|
-
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12826
|
+
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12780
12827
|
kind: "mutation",
|
|
12781
12828
|
auth: "admin"
|
|
12782
12829
|
}), method(object({ file: string() }), _void(), {
|
|
12783
12830
|
kind: "mutation",
|
|
12784
12831
|
auth: "admin"
|
|
12785
|
-
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
12832
|
+
}), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
|
|
12786
12833
|
/**
|
|
12787
12834
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
12788
12835
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
@@ -16293,7 +16340,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
16293
16340
|
*/
|
|
16294
16341
|
refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
|
|
16295
16342
|
});
|
|
16296
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16343
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
16297
16344
|
/**
|
|
16298
16345
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
16299
16346
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17488,6 +17535,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
17488
17535
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17489
17536
|
kind: "mutation",
|
|
17490
17537
|
auth: "admin"
|
|
17538
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17539
|
+
kind: "mutation",
|
|
17540
|
+
auth: "admin"
|
|
17541
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17542
|
+
kind: "query",
|
|
17543
|
+
auth: "admin"
|
|
17544
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17545
|
+
kind: "mutation",
|
|
17546
|
+
auth: "admin"
|
|
17491
17547
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17492
17548
|
kind: "query",
|
|
17493
17549
|
auth: "admin"
|
|
@@ -17642,6 +17698,11 @@ object({
|
|
|
17642
17698
|
"jpeg"
|
|
17643
17699
|
])
|
|
17644
17700
|
});
|
|
17701
|
+
/**
|
|
17702
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
17703
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
17704
|
+
* other process or execution group.
|
|
17705
|
+
*/
|
|
17645
17706
|
var FrameRefSchema = object({
|
|
17646
17707
|
registryId: string().min(1),
|
|
17647
17708
|
id: string().min(1),
|
|
@@ -19951,7 +20012,7 @@ method(object({
|
|
|
19951
20012
|
* linking rather than produce an eternal token.
|
|
19952
20013
|
*/
|
|
19953
20014
|
ttlSec: union([number().int().positive(), literal("never")]).optional()
|
|
19954
|
-
}), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
|
|
20015
|
+
}), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
|
|
19955
20016
|
var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
19956
20017
|
providerId: string().min(1),
|
|
19957
20018
|
displayName: string().min(1),
|
|
@@ -20046,10 +20107,13 @@ var EvictResultSchema = object({
|
|
|
20046
20107
|
/** True when the provider has nothing left it is willing to drop on this location. */
|
|
20047
20108
|
exhausted: boolean()
|
|
20048
20109
|
});
|
|
20049
|
-
method(object({ locationId: string() }), EvictableUsageSchema), method(object({
|
|
20110
|
+
method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
|
|
20050
20111
|
locationId: string(),
|
|
20051
20112
|
targetBytes: number().int().positive()
|
|
20052
|
-
}), EvictResultSchema, {
|
|
20113
|
+
}), EvictResultSchema, {
|
|
20114
|
+
kind: "mutation",
|
|
20115
|
+
auth: "admin"
|
|
20116
|
+
});
|
|
20053
20117
|
method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
|
|
20054
20118
|
kind: "mutation",
|
|
20055
20119
|
auth: "admin"
|
|
@@ -20109,26 +20173,50 @@ var ReadChunkInputSchema = object({
|
|
|
20109
20173
|
length: number()
|
|
20110
20174
|
});
|
|
20111
20175
|
var EndDownloadInputSchema = object({ downloadId: string() });
|
|
20112
|
-
method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
20176
|
+
method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
20113
20177
|
location: StorageLocationSchema,
|
|
20114
20178
|
relativePath: string()
|
|
20115
|
-
}), string()), method(object({
|
|
20179
|
+
}), string(), { auth: "admin" }), method(object({
|
|
20116
20180
|
location: StorageLocationSchema,
|
|
20117
20181
|
relativePath: string(),
|
|
20118
20182
|
data: _instanceof(Uint8Array)
|
|
20119
|
-
}), _void(), {
|
|
20183
|
+
}), _void(), {
|
|
20184
|
+
kind: "mutation",
|
|
20185
|
+
auth: "admin"
|
|
20186
|
+
}), method(object({
|
|
20120
20187
|
location: StorageLocationSchema,
|
|
20121
20188
|
relativePath: string()
|
|
20122
|
-
}), _instanceof(Uint8Array)), method(object({
|
|
20189
|
+
}), _instanceof(Uint8Array), { auth: "admin" }), method(object({
|
|
20123
20190
|
location: StorageLocationSchema,
|
|
20124
20191
|
relativePath: string()
|
|
20125
|
-
}), boolean()), method(object({
|
|
20192
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
20126
20193
|
location: StorageLocationSchema,
|
|
20127
20194
|
prefix: string().optional()
|
|
20128
|
-
}), array(string()).readonly()), method(object({
|
|
20195
|
+
}), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
20129
20196
|
location: StorageLocationSchema,
|
|
20130
20197
|
relativePath: string()
|
|
20131
|
-
}), _void(), {
|
|
20198
|
+
}), _void(), {
|
|
20199
|
+
kind: "mutation",
|
|
20200
|
+
auth: "admin"
|
|
20201
|
+
}), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
|
|
20202
|
+
kind: "mutation",
|
|
20203
|
+
auth: "admin"
|
|
20204
|
+
}), method(WriteChunkInputSchema, _void(), {
|
|
20205
|
+
kind: "mutation",
|
|
20206
|
+
auth: "admin"
|
|
20207
|
+
}), method(FinalizeUploadInputSchema, _void(), {
|
|
20208
|
+
kind: "mutation",
|
|
20209
|
+
auth: "admin"
|
|
20210
|
+
}), method(AbortUploadInputSchema, _void(), {
|
|
20211
|
+
kind: "mutation",
|
|
20212
|
+
auth: "admin"
|
|
20213
|
+
}), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
|
|
20214
|
+
kind: "mutation",
|
|
20215
|
+
auth: "admin"
|
|
20216
|
+
}), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
|
|
20217
|
+
kind: "mutation",
|
|
20218
|
+
auth: "admin"
|
|
20219
|
+
});
|
|
20132
20220
|
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
20133
20221
|
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
20134
20222
|
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
@@ -20386,7 +20474,8 @@ method(object({
|
|
|
20386
20474
|
access: "create"
|
|
20387
20475
|
}), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20388
20476
|
kind: "mutation",
|
|
20389
|
-
access: "view"
|
|
20477
|
+
access: "view",
|
|
20478
|
+
auth: "admin"
|
|
20390
20479
|
}), method(object({
|
|
20391
20480
|
/** Required — the user the assertion belongs to (verified). */
|
|
20392
20481
|
userId: string(),
|
|
@@ -20394,10 +20483,12 @@ method(object({
|
|
|
20394
20483
|
response: record(string(), unknown())
|
|
20395
20484
|
}), object({ verified: boolean() }), {
|
|
20396
20485
|
kind: "mutation",
|
|
20397
|
-
access: "view"
|
|
20486
|
+
access: "view",
|
|
20487
|
+
auth: "admin"
|
|
20398
20488
|
}), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20399
20489
|
kind: "mutation",
|
|
20400
|
-
access: "view"
|
|
20490
|
+
access: "view",
|
|
20491
|
+
auth: "admin"
|
|
20401
20492
|
}), method(object({
|
|
20402
20493
|
/** AuthenticationResponseJSON from the browser. */
|
|
20403
20494
|
response: record(string(), unknown()) }), object({
|
|
@@ -20405,7 +20496,8 @@ response: record(string(), unknown()) }), object({
|
|
|
20405
20496
|
userId: string().nullable()
|
|
20406
20497
|
}), {
|
|
20407
20498
|
kind: "mutation",
|
|
20408
|
-
access: "view"
|
|
20499
|
+
access: "view",
|
|
20500
|
+
auth: "admin"
|
|
20409
20501
|
}), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
|
|
20410
20502
|
userId: string(),
|
|
20411
20503
|
credentialId: string()
|
|
@@ -20577,7 +20669,19 @@ var VectorStatsResultSchema = object({
|
|
|
20577
20669
|
/** False when the backend ranks approximately. */
|
|
20578
20670
|
exact: boolean()
|
|
20579
20671
|
});
|
|
20580
|
-
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20672
|
+
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20673
|
+
kind: "mutation",
|
|
20674
|
+
auth: "admin"
|
|
20675
|
+
}), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
|
|
20676
|
+
kind: "mutation",
|
|
20677
|
+
auth: "admin"
|
|
20678
|
+
}), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
|
|
20679
|
+
kind: "mutation",
|
|
20680
|
+
auth: "admin"
|
|
20681
|
+
}), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
|
|
20682
|
+
kind: "mutation",
|
|
20683
|
+
auth: "admin"
|
|
20684
|
+
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
20581
20685
|
var ClipSchema = object({
|
|
20582
20686
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
20583
20687
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -23030,7 +23134,27 @@ var MediaFileLiteSchema$1 = object({
|
|
|
23030
23134
|
sizeBytes: number(),
|
|
23031
23135
|
timestamp: number()
|
|
23032
23136
|
});
|
|
23033
|
-
method(
|
|
23137
|
+
method(object({
|
|
23138
|
+
/**
|
|
23139
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
23140
|
+
*
|
|
23141
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
23142
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
23143
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
23144
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
23145
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
23146
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
23147
|
+
*
|
|
23148
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
23149
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
23150
|
+
*
|
|
23151
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
23152
|
+
* next train** — the hub router validates cap inputs against its own
|
|
23153
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
23154
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
23155
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
23156
|
+
*/
|
|
23157
|
+
includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
|
|
23034
23158
|
kind: "mutation",
|
|
23035
23159
|
auth: "admin"
|
|
23036
23160
|
}), method(object({
|
|
@@ -25966,8 +26090,10 @@ var PlateInfoSchema = object({
|
|
|
25966
26090
|
keyFrameMediaKey: string().optional(),
|
|
25967
26091
|
base64: string().optional(),
|
|
25968
26092
|
/**
|
|
25969
|
-
* Same crop as a data-plane URL
|
|
25970
|
-
* never inlines JPEG; `listPlates`
|
|
26093
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
26094
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
26095
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
26096
|
+
* left at its `true` default.
|
|
25971
26097
|
*/
|
|
25972
26098
|
cropUrl: string().optional()
|
|
25973
26099
|
});
|
|
@@ -25987,14 +26113,34 @@ var PlateClusterSchema = object({
|
|
|
25987
26113
|
});
|
|
25988
26114
|
method(object({
|
|
25989
26115
|
deviceId: number().int().optional(),
|
|
25990
|
-
limit: number().int().positive().optional()
|
|
26116
|
+
limit: number().int().positive().optional(),
|
|
26117
|
+
/**
|
|
26118
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
26119
|
+
* behaviour, kept so no caller breaks.
|
|
26120
|
+
*
|
|
26121
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
26122
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
26123
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
26124
|
+
* metadata without them — and the browser then caches the images.
|
|
26125
|
+
*
|
|
26126
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
26127
|
+
* plates were the one gallery list left without it.
|
|
26128
|
+
*
|
|
26129
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
26130
|
+
* next train.** The hub router validates cap inputs against its own
|
|
26131
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
26132
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
26133
|
+
*/
|
|
26134
|
+
includeCrops: boolean().optional()
|
|
25991
26135
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
25992
26136
|
deviceId: number().int(),
|
|
25993
26137
|
trackId: string()
|
|
25994
26138
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
25995
26139
|
text: string().min(1),
|
|
25996
26140
|
maxDistance: number().int().min(0).optional(),
|
|
25997
|
-
limit: number().int().positive().optional()
|
|
26141
|
+
limit: number().int().positive().optional(),
|
|
26142
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
26143
|
+
includeCrops: boolean().optional()
|
|
25998
26144
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
25999
26145
|
maxDistance: number().int().min(0).optional(),
|
|
26000
26146
|
minClusterSize: number().int().min(2).optional(),
|
|
@@ -26008,7 +26154,13 @@ method(object({
|
|
|
26008
26154
|
}), method(object({ plateId: string() }), _void(), {
|
|
26009
26155
|
kind: "mutation",
|
|
26010
26156
|
auth: "admin"
|
|
26011
|
-
}), method(
|
|
26157
|
+
}), method(object({
|
|
26158
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
26159
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
26160
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
26161
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
26162
|
+
* resolves to `false` and is exactly the intended default. */
|
|
26163
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
26012
26164
|
kind: "mutation",
|
|
26013
26165
|
auth: "admin"
|
|
26014
26166
|
}), method(object({
|
|
@@ -33715,6 +33867,12 @@ Object.freeze({
|
|
|
33715
33867
|
addonId: null,
|
|
33716
33868
|
access: "create"
|
|
33717
33869
|
},
|
|
33870
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
33871
|
+
capName: "pipeline-analytics",
|
|
33872
|
+
capScope: "device",
|
|
33873
|
+
addonId: null,
|
|
33874
|
+
access: "create"
|
|
33875
|
+
},
|
|
33718
33876
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
33719
33877
|
capName: "pipeline-analytics",
|
|
33720
33878
|
capScope: "device",
|
|
@@ -33889,6 +34047,12 @@ Object.freeze({
|
|
|
33889
34047
|
addonId: null,
|
|
33890
34048
|
access: "view"
|
|
33891
34049
|
},
|
|
34050
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
34051
|
+
capName: "pipeline-analytics",
|
|
34052
|
+
capScope: "device",
|
|
34053
|
+
addonId: null,
|
|
34054
|
+
access: "view"
|
|
34055
|
+
},
|
|
33892
34056
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
33893
34057
|
capName: "pipeline-analytics",
|
|
33894
34058
|
capScope: "device",
|
|
@@ -33967,6 +34131,12 @@ Object.freeze({
|
|
|
33967
34131
|
addonId: null,
|
|
33968
34132
|
access: "create"
|
|
33969
34133
|
},
|
|
34134
|
+
"pipelineAnalytics.relocateMedia": {
|
|
34135
|
+
capName: "pipeline-analytics",
|
|
34136
|
+
capScope: "device",
|
|
34137
|
+
addonId: null,
|
|
34138
|
+
access: "create"
|
|
34139
|
+
},
|
|
33970
34140
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
33971
34141
|
capName: "pipeline-analytics",
|
|
33972
34142
|
capScope: "device",
|
package/dist/addon.mjs
CHANGED
|
@@ -6636,7 +6636,7 @@ function method(input, output, options) {
|
|
|
6636
6636
|
input,
|
|
6637
6637
|
output,
|
|
6638
6638
|
kind: options?.kind ?? "query",
|
|
6639
|
-
auth: options
|
|
6639
|
+
...options?.auth !== void 0 ? { auth: options.auth } : {},
|
|
6640
6640
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
6641
6641
|
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
6642
6642
|
timeoutMs: options?.timeoutMs
|
|
@@ -6660,7 +6660,7 @@ function event(data) {
|
|
|
6660
6660
|
}
|
|
6661
6661
|
var StaticDirOutputSchema$1 = object({ staticDir: string() });
|
|
6662
6662
|
var VersionOutputSchema$1 = object({ version: string() });
|
|
6663
|
-
method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
|
|
6663
|
+
method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
|
|
6664
6664
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
6665
6665
|
DeviceType["Camera"] = "camera";
|
|
6666
6666
|
DeviceType["Hub"] = "hub";
|
|
@@ -6981,7 +6981,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
6981
6981
|
}({});
|
|
6982
6982
|
var StaticDirOutputSchema = object({ staticDir: string() });
|
|
6983
6983
|
var VersionOutputSchema = object({ version: string() });
|
|
6984
|
-
method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
|
|
6984
|
+
method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
|
|
6985
6985
|
/**
|
|
6986
6986
|
* device-ops — device-scoped cap that unifies the per-IDevice operations
|
|
6987
6987
|
* previously routed through the `.device-ops` Moleculer bridge service.
|
|
@@ -7595,24 +7595,6 @@ var RecordingRetentionSchema = object({
|
|
|
7595
7595
|
maxSizeGb: number().min(0).optional()
|
|
7596
7596
|
});
|
|
7597
7597
|
/**
|
|
7598
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7599
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7600
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7601
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7602
|
-
*
|
|
7603
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7604
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7605
|
-
* preset changed over time renders every historical window at the dims it was
|
|
7606
|
-
* written with.
|
|
7607
|
-
*/
|
|
7608
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
7609
|
-
"minimal",
|
|
7610
|
-
"low",
|
|
7611
|
-
"standard",
|
|
7612
|
-
"high",
|
|
7613
|
-
"max"
|
|
7614
|
-
]);
|
|
7615
|
-
/**
|
|
7616
7598
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7617
7599
|
*
|
|
7618
7600
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -7620,7 +7602,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
7620
7602
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
7621
7603
|
*
|
|
7622
7604
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
7623
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
7605
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
7606
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
7607
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
7608
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
7609
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
7624
7610
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
7625
7611
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
7626
7612
|
*/
|
|
@@ -7643,14 +7629,7 @@ var RecordingConfigSchema = object({
|
|
|
7643
7629
|
* "off" is the absence of a covering band, never a band value.
|
|
7644
7630
|
*/
|
|
7645
7631
|
bands: array(RecordingBandSchema).default([]),
|
|
7646
|
-
retention: RecordingRetentionSchema.optional()
|
|
7647
|
-
/**
|
|
7648
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7649
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7650
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
7651
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7652
|
-
*/
|
|
7653
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7632
|
+
retention: RecordingRetentionSchema.optional()
|
|
7654
7633
|
}).strict();
|
|
7655
7634
|
/**
|
|
7656
7635
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -7726,10 +7705,11 @@ var RelocateFootageInputSchema = object({
|
|
|
7726
7705
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
7727
7706
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
7728
7707
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
7729
|
-
var
|
|
7708
|
+
var RelocateMediaInputSchema = object({
|
|
7730
7709
|
toLocationId: string(),
|
|
7731
7710
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
7732
|
-
})
|
|
7711
|
+
});
|
|
7712
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
7733
7713
|
/** The independently selectable logical storage classes. `recordings`
|
|
7734
7714
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
7735
7715
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8024,7 +8004,26 @@ var LabelDefinitionSchema = object({
|
|
|
8024
8004
|
description: string().optional(),
|
|
8025
8005
|
icon: string().optional()
|
|
8026
8006
|
});
|
|
8027
|
-
|
|
8007
|
+
/**
|
|
8008
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8009
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8010
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8011
|
+
* detection pipeline executor actually routes.
|
|
8012
|
+
*
|
|
8013
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8014
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8015
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8016
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8017
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8018
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8019
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8020
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8021
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8022
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8023
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8024
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8025
|
+
*/
|
|
8026
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8028
8027
|
mapping: record(string(), _enum([
|
|
8029
8028
|
"person",
|
|
8030
8029
|
"vehicle",
|
|
@@ -8229,7 +8228,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8229
8228
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8230
8229
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8231
8230
|
*/
|
|
8232
|
-
classMap:
|
|
8231
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8233
8232
|
});
|
|
8234
8233
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8235
8234
|
format: literal("openvino"),
|
|
@@ -8259,7 +8258,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8259
8258
|
"segmentation"
|
|
8260
8259
|
]),
|
|
8261
8260
|
faceAlignment: boolean().optional(),
|
|
8262
|
-
classMap:
|
|
8261
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8263
8262
|
});
|
|
8264
8263
|
var ConvertResultSchema = object({
|
|
8265
8264
|
entry: ModelCatalogEntrySchema,
|
|
@@ -9122,7 +9121,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
9122
9121
|
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
9123
9122
|
sectionLabel: string().optional()
|
|
9124
9123
|
});
|
|
9125
|
-
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
9124
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
|
|
9126
9125
|
var AddonHttpRouteSchema = object({
|
|
9127
9126
|
method: _enum([
|
|
9128
9127
|
"GET",
|
|
@@ -9357,7 +9356,7 @@ var WidgetMetadataSchema = object({
|
|
|
9357
9356
|
defaultColumns: number().int().min(1).max(12).default(6),
|
|
9358
9357
|
defaultRows: number().int().min(1).max(12).default(1)
|
|
9359
9358
|
});
|
|
9360
|
-
method(_void(), array(WidgetMetadataSchema).readonly());
|
|
9359
|
+
method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
|
|
9361
9360
|
/**
|
|
9362
9361
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
9363
9362
|
* surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
|
|
@@ -10981,7 +10980,7 @@ var CustomModelDescriptorSchema = object({
|
|
|
10981
10980
|
stepId: string(),
|
|
10982
10981
|
entry: ModelCatalogEntrySchema
|
|
10983
10982
|
});
|
|
10984
|
-
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
10983
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
|
|
10985
10984
|
/**
|
|
10986
10985
|
* Query filter for settings-store collections.
|
|
10987
10986
|
*/
|
|
@@ -11068,7 +11067,8 @@ method(object({
|
|
|
11068
11067
|
}), _void(), { kind: "mutation" }), method(object({
|
|
11069
11068
|
namespace: string().optional(),
|
|
11070
11069
|
collection: string(),
|
|
11071
|
-
filter: QueryFilterSchema.optional()
|
|
11070
|
+
filter: QueryFilterSchema.optional(),
|
|
11071
|
+
columns: array(string()).readonly().optional()
|
|
11072
11072
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
11073
11073
|
namespace: string().optional(),
|
|
11074
11074
|
collection: string(),
|
|
@@ -11131,46 +11131,87 @@ var EngineInfoSchema = object({
|
|
|
11131
11131
|
kind: _enum(["relational", "vector"]),
|
|
11132
11132
|
displayName: string()
|
|
11133
11133
|
});
|
|
11134
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11134
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11135
11135
|
namespace: string().optional(),
|
|
11136
11136
|
collection: string(),
|
|
11137
11137
|
key: string()
|
|
11138
|
-
}), unknown()), method(object({
|
|
11138
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11139
11139
|
namespace: string().optional(),
|
|
11140
11140
|
collection: string(),
|
|
11141
11141
|
key: string(),
|
|
11142
11142
|
value: unknown()
|
|
11143
|
-
}), _void(), {
|
|
11143
|
+
}), _void(), {
|
|
11144
|
+
kind: "mutation",
|
|
11145
|
+
auth: "admin"
|
|
11146
|
+
}), method(object({
|
|
11144
11147
|
namespace: string().optional(),
|
|
11145
11148
|
collection: string(),
|
|
11146
|
-
filter: QueryFilterSchema.optional()
|
|
11147
|
-
|
|
11149
|
+
filter: QueryFilterSchema.optional(),
|
|
11150
|
+
/**
|
|
11151
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11152
|
+
*
|
|
11153
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11154
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11155
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11156
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11157
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11158
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11159
|
+
*
|
|
11160
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11161
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11162
|
+
* interface the engine destructures from. The field existed on both
|
|
11163
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11164
|
+
* registered provider against `InferProvider<cap>` —
|
|
11165
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11166
|
+
*
|
|
11167
|
+
* It is declared here anyway, and must stay in step with
|
|
11168
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11169
|
+
* to be able to see that this call carries a projection.
|
|
11170
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11171
|
+
*/
|
|
11172
|
+
columns: array(string()).readonly().optional()
|
|
11173
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11148
11174
|
namespace: string().optional(),
|
|
11149
11175
|
collection: string(),
|
|
11150
11176
|
record: SettingsRecordSchema
|
|
11151
|
-
}), _void(), {
|
|
11177
|
+
}), _void(), {
|
|
11178
|
+
kind: "mutation",
|
|
11179
|
+
auth: "admin"
|
|
11180
|
+
}), method(object({
|
|
11152
11181
|
namespace: string().optional(),
|
|
11153
11182
|
collection: string(),
|
|
11154
11183
|
id: string(),
|
|
11155
11184
|
data: record(string(), unknown())
|
|
11156
|
-
}), _void(), {
|
|
11185
|
+
}), _void(), {
|
|
11186
|
+
kind: "mutation",
|
|
11187
|
+
auth: "admin"
|
|
11188
|
+
}), method(object({
|
|
11157
11189
|
namespace: string().optional(),
|
|
11158
11190
|
collection: string(),
|
|
11159
11191
|
key: string()
|
|
11160
|
-
}), _void(), {
|
|
11192
|
+
}), _void(), {
|
|
11193
|
+
kind: "mutation",
|
|
11194
|
+
auth: "admin"
|
|
11195
|
+
}), method(object({
|
|
11161
11196
|
namespace: string().optional(),
|
|
11162
11197
|
collection: string(),
|
|
11163
11198
|
filter: MutationFilterSchema
|
|
11164
|
-
}), object({ deleted: number().int() }), {
|
|
11199
|
+
}), object({ deleted: number().int() }), {
|
|
11200
|
+
kind: "mutation",
|
|
11201
|
+
auth: "admin"
|
|
11202
|
+
}), method(object({
|
|
11165
11203
|
namespace: string().optional(),
|
|
11166
11204
|
collection: string(),
|
|
11167
11205
|
filter: MutationFilterSchema,
|
|
11168
11206
|
data: record(string(), unknown())
|
|
11169
|
-
}), object({ updated: number().int() }), {
|
|
11207
|
+
}), object({ updated: number().int() }), {
|
|
11208
|
+
kind: "mutation",
|
|
11209
|
+
auth: "admin"
|
|
11210
|
+
}), method(object({
|
|
11170
11211
|
namespace: string().optional(),
|
|
11171
11212
|
collection: string(),
|
|
11172
11213
|
filter: QueryFilterSchema.optional()
|
|
11173
|
-
}), number()), method(object({
|
|
11214
|
+
}), number(), { auth: "admin" }), method(object({
|
|
11174
11215
|
namespace: string().optional(),
|
|
11175
11216
|
collection: string(),
|
|
11176
11217
|
field: string(),
|
|
@@ -11180,15 +11221,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11180
11221
|
}), array(object({
|
|
11181
11222
|
bucket: number().int(),
|
|
11182
11223
|
count: number().int()
|
|
11183
|
-
})).readonly()), method(object({
|
|
11224
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11184
11225
|
namespace: string().optional(),
|
|
11185
11226
|
collection: string()
|
|
11186
|
-
}), boolean()), method(object({
|
|
11227
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11187
11228
|
namespace: string().optional(),
|
|
11188
11229
|
collection: string(),
|
|
11189
11230
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11190
11231
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11191
|
-
}), _void(), {
|
|
11232
|
+
}), _void(), {
|
|
11233
|
+
kind: "mutation",
|
|
11234
|
+
auth: "admin"
|
|
11235
|
+
});
|
|
11192
11236
|
/**
|
|
11193
11237
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11194
11238
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12478,7 +12522,7 @@ method(object({
|
|
|
12478
12522
|
crop: _instanceof(Uint8Array),
|
|
12479
12523
|
width: number(),
|
|
12480
12524
|
height: number()
|
|
12481
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12525
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12482
12526
|
/**
|
|
12483
12527
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12484
12528
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -12771,19 +12815,22 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
12771
12815
|
runtime: ManagedRuntimeConfigSchema,
|
|
12772
12816
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
12773
12817
|
timeoutMs: number().int().positive().optional()
|
|
12774
|
-
}), LlmGenerateResultSchema, {
|
|
12818
|
+
}), LlmGenerateResultSchema, {
|
|
12819
|
+
kind: "mutation",
|
|
12820
|
+
auth: "admin"
|
|
12821
|
+
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
12775
12822
|
kind: "mutation",
|
|
12776
12823
|
auth: "admin"
|
|
12777
12824
|
}), method(object({}), _void(), {
|
|
12778
12825
|
kind: "mutation",
|
|
12779
12826
|
auth: "admin"
|
|
12780
|
-
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12827
|
+
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12781
12828
|
kind: "mutation",
|
|
12782
12829
|
auth: "admin"
|
|
12783
12830
|
}), method(object({ file: string() }), _void(), {
|
|
12784
12831
|
kind: "mutation",
|
|
12785
12832
|
auth: "admin"
|
|
12786
|
-
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
12833
|
+
}), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
|
|
12787
12834
|
/**
|
|
12788
12835
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
12789
12836
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
@@ -16294,7 +16341,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
16294
16341
|
*/
|
|
16295
16342
|
refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
|
|
16296
16343
|
});
|
|
16297
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16344
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
16298
16345
|
/**
|
|
16299
16346
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
16300
16347
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17489,6 +17536,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
17489
17536
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17490
17537
|
kind: "mutation",
|
|
17491
17538
|
auth: "admin"
|
|
17539
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17540
|
+
kind: "mutation",
|
|
17541
|
+
auth: "admin"
|
|
17542
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17543
|
+
kind: "query",
|
|
17544
|
+
auth: "admin"
|
|
17545
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17546
|
+
kind: "mutation",
|
|
17547
|
+
auth: "admin"
|
|
17492
17548
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17493
17549
|
kind: "query",
|
|
17494
17550
|
auth: "admin"
|
|
@@ -17643,6 +17699,11 @@ object({
|
|
|
17643
17699
|
"jpeg"
|
|
17644
17700
|
])
|
|
17645
17701
|
});
|
|
17702
|
+
/**
|
|
17703
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
17704
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
17705
|
+
* other process or execution group.
|
|
17706
|
+
*/
|
|
17646
17707
|
var FrameRefSchema = object({
|
|
17647
17708
|
registryId: string().min(1),
|
|
17648
17709
|
id: string().min(1),
|
|
@@ -19952,7 +20013,7 @@ method(object({
|
|
|
19952
20013
|
* linking rather than produce an eternal token.
|
|
19953
20014
|
*/
|
|
19954
20015
|
ttlSec: union([number().int().positive(), literal("never")]).optional()
|
|
19955
|
-
}), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
|
|
20016
|
+
}), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
|
|
19956
20017
|
var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
19957
20018
|
providerId: string().min(1),
|
|
19958
20019
|
displayName: string().min(1),
|
|
@@ -20047,10 +20108,13 @@ var EvictResultSchema = object({
|
|
|
20047
20108
|
/** True when the provider has nothing left it is willing to drop on this location. */
|
|
20048
20109
|
exhausted: boolean()
|
|
20049
20110
|
});
|
|
20050
|
-
method(object({ locationId: string() }), EvictableUsageSchema), method(object({
|
|
20111
|
+
method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
|
|
20051
20112
|
locationId: string(),
|
|
20052
20113
|
targetBytes: number().int().positive()
|
|
20053
|
-
}), EvictResultSchema, {
|
|
20114
|
+
}), EvictResultSchema, {
|
|
20115
|
+
kind: "mutation",
|
|
20116
|
+
auth: "admin"
|
|
20117
|
+
});
|
|
20054
20118
|
method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
|
|
20055
20119
|
kind: "mutation",
|
|
20056
20120
|
auth: "admin"
|
|
@@ -20110,26 +20174,50 @@ var ReadChunkInputSchema = object({
|
|
|
20110
20174
|
length: number()
|
|
20111
20175
|
});
|
|
20112
20176
|
var EndDownloadInputSchema = object({ downloadId: string() });
|
|
20113
|
-
method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
20177
|
+
method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
20114
20178
|
location: StorageLocationSchema,
|
|
20115
20179
|
relativePath: string()
|
|
20116
|
-
}), string()), method(object({
|
|
20180
|
+
}), string(), { auth: "admin" }), method(object({
|
|
20117
20181
|
location: StorageLocationSchema,
|
|
20118
20182
|
relativePath: string(),
|
|
20119
20183
|
data: _instanceof(Uint8Array)
|
|
20120
|
-
}), _void(), {
|
|
20184
|
+
}), _void(), {
|
|
20185
|
+
kind: "mutation",
|
|
20186
|
+
auth: "admin"
|
|
20187
|
+
}), method(object({
|
|
20121
20188
|
location: StorageLocationSchema,
|
|
20122
20189
|
relativePath: string()
|
|
20123
|
-
}), _instanceof(Uint8Array)), method(object({
|
|
20190
|
+
}), _instanceof(Uint8Array), { auth: "admin" }), method(object({
|
|
20124
20191
|
location: StorageLocationSchema,
|
|
20125
20192
|
relativePath: string()
|
|
20126
|
-
}), boolean()), method(object({
|
|
20193
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
20127
20194
|
location: StorageLocationSchema,
|
|
20128
20195
|
prefix: string().optional()
|
|
20129
|
-
}), array(string()).readonly()), method(object({
|
|
20196
|
+
}), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
20130
20197
|
location: StorageLocationSchema,
|
|
20131
20198
|
relativePath: string()
|
|
20132
|
-
}), _void(), {
|
|
20199
|
+
}), _void(), {
|
|
20200
|
+
kind: "mutation",
|
|
20201
|
+
auth: "admin"
|
|
20202
|
+
}), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
|
|
20203
|
+
kind: "mutation",
|
|
20204
|
+
auth: "admin"
|
|
20205
|
+
}), method(WriteChunkInputSchema, _void(), {
|
|
20206
|
+
kind: "mutation",
|
|
20207
|
+
auth: "admin"
|
|
20208
|
+
}), method(FinalizeUploadInputSchema, _void(), {
|
|
20209
|
+
kind: "mutation",
|
|
20210
|
+
auth: "admin"
|
|
20211
|
+
}), method(AbortUploadInputSchema, _void(), {
|
|
20212
|
+
kind: "mutation",
|
|
20213
|
+
auth: "admin"
|
|
20214
|
+
}), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
|
|
20215
|
+
kind: "mutation",
|
|
20216
|
+
auth: "admin"
|
|
20217
|
+
}), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
|
|
20218
|
+
kind: "mutation",
|
|
20219
|
+
auth: "admin"
|
|
20220
|
+
});
|
|
20133
20221
|
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
20134
20222
|
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
20135
20223
|
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
@@ -20387,7 +20475,8 @@ method(object({
|
|
|
20387
20475
|
access: "create"
|
|
20388
20476
|
}), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20389
20477
|
kind: "mutation",
|
|
20390
|
-
access: "view"
|
|
20478
|
+
access: "view",
|
|
20479
|
+
auth: "admin"
|
|
20391
20480
|
}), method(object({
|
|
20392
20481
|
/** Required — the user the assertion belongs to (verified). */
|
|
20393
20482
|
userId: string(),
|
|
@@ -20395,10 +20484,12 @@ method(object({
|
|
|
20395
20484
|
response: record(string(), unknown())
|
|
20396
20485
|
}), object({ verified: boolean() }), {
|
|
20397
20486
|
kind: "mutation",
|
|
20398
|
-
access: "view"
|
|
20487
|
+
access: "view",
|
|
20488
|
+
auth: "admin"
|
|
20399
20489
|
}), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20400
20490
|
kind: "mutation",
|
|
20401
|
-
access: "view"
|
|
20491
|
+
access: "view",
|
|
20492
|
+
auth: "admin"
|
|
20402
20493
|
}), method(object({
|
|
20403
20494
|
/** AuthenticationResponseJSON from the browser. */
|
|
20404
20495
|
response: record(string(), unknown()) }), object({
|
|
@@ -20406,7 +20497,8 @@ response: record(string(), unknown()) }), object({
|
|
|
20406
20497
|
userId: string().nullable()
|
|
20407
20498
|
}), {
|
|
20408
20499
|
kind: "mutation",
|
|
20409
|
-
access: "view"
|
|
20500
|
+
access: "view",
|
|
20501
|
+
auth: "admin"
|
|
20410
20502
|
}), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
|
|
20411
20503
|
userId: string(),
|
|
20412
20504
|
credentialId: string()
|
|
@@ -20578,7 +20670,19 @@ var VectorStatsResultSchema = object({
|
|
|
20578
20670
|
/** False when the backend ranks approximately. */
|
|
20579
20671
|
exact: boolean()
|
|
20580
20672
|
});
|
|
20581
|
-
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20673
|
+
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20674
|
+
kind: "mutation",
|
|
20675
|
+
auth: "admin"
|
|
20676
|
+
}), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
|
|
20677
|
+
kind: "mutation",
|
|
20678
|
+
auth: "admin"
|
|
20679
|
+
}), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
|
|
20680
|
+
kind: "mutation",
|
|
20681
|
+
auth: "admin"
|
|
20682
|
+
}), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
|
|
20683
|
+
kind: "mutation",
|
|
20684
|
+
auth: "admin"
|
|
20685
|
+
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
20582
20686
|
var ClipSchema = object({
|
|
20583
20687
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
20584
20688
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -23031,7 +23135,27 @@ var MediaFileLiteSchema$1 = object({
|
|
|
23031
23135
|
sizeBytes: number(),
|
|
23032
23136
|
timestamp: number()
|
|
23033
23137
|
});
|
|
23034
|
-
method(
|
|
23138
|
+
method(object({
|
|
23139
|
+
/**
|
|
23140
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
23141
|
+
*
|
|
23142
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
23143
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
23144
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
23145
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
23146
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
23147
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
23148
|
+
*
|
|
23149
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
23150
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
23151
|
+
*
|
|
23152
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
23153
|
+
* next train** — the hub router validates cap inputs against its own
|
|
23154
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
23155
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
23156
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
23157
|
+
*/
|
|
23158
|
+
includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
|
|
23035
23159
|
kind: "mutation",
|
|
23036
23160
|
auth: "admin"
|
|
23037
23161
|
}), method(object({
|
|
@@ -25967,8 +26091,10 @@ var PlateInfoSchema = object({
|
|
|
25967
26091
|
keyFrameMediaKey: string().optional(),
|
|
25968
26092
|
base64: string().optional(),
|
|
25969
26093
|
/**
|
|
25970
|
-
* Same crop as a data-plane URL
|
|
25971
|
-
* never inlines JPEG; `listPlates`
|
|
26094
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
26095
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
26096
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
26097
|
+
* left at its `true` default.
|
|
25972
26098
|
*/
|
|
25973
26099
|
cropUrl: string().optional()
|
|
25974
26100
|
});
|
|
@@ -25988,14 +26114,34 @@ var PlateClusterSchema = object({
|
|
|
25988
26114
|
});
|
|
25989
26115
|
method(object({
|
|
25990
26116
|
deviceId: number().int().optional(),
|
|
25991
|
-
limit: number().int().positive().optional()
|
|
26117
|
+
limit: number().int().positive().optional(),
|
|
26118
|
+
/**
|
|
26119
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
26120
|
+
* behaviour, kept so no caller breaks.
|
|
26121
|
+
*
|
|
26122
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
26123
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
26124
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
26125
|
+
* metadata without them — and the browser then caches the images.
|
|
26126
|
+
*
|
|
26127
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
26128
|
+
* plates were the one gallery list left without it.
|
|
26129
|
+
*
|
|
26130
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
26131
|
+
* next train.** The hub router validates cap inputs against its own
|
|
26132
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
26133
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
26134
|
+
*/
|
|
26135
|
+
includeCrops: boolean().optional()
|
|
25992
26136
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
25993
26137
|
deviceId: number().int(),
|
|
25994
26138
|
trackId: string()
|
|
25995
26139
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
25996
26140
|
text: string().min(1),
|
|
25997
26141
|
maxDistance: number().int().min(0).optional(),
|
|
25998
|
-
limit: number().int().positive().optional()
|
|
26142
|
+
limit: number().int().positive().optional(),
|
|
26143
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
26144
|
+
includeCrops: boolean().optional()
|
|
25999
26145
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
26000
26146
|
maxDistance: number().int().min(0).optional(),
|
|
26001
26147
|
minClusterSize: number().int().min(2).optional(),
|
|
@@ -26009,7 +26155,13 @@ method(object({
|
|
|
26009
26155
|
}), method(object({ plateId: string() }), _void(), {
|
|
26010
26156
|
kind: "mutation",
|
|
26011
26157
|
auth: "admin"
|
|
26012
|
-
}), method(
|
|
26158
|
+
}), method(object({
|
|
26159
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
26160
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
26161
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
26162
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
26163
|
+
* resolves to `false` and is exactly the intended default. */
|
|
26164
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
26013
26165
|
kind: "mutation",
|
|
26014
26166
|
auth: "admin"
|
|
26015
26167
|
}), method(object({
|
|
@@ -33716,6 +33868,12 @@ Object.freeze({
|
|
|
33716
33868
|
addonId: null,
|
|
33717
33869
|
access: "create"
|
|
33718
33870
|
},
|
|
33871
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
33872
|
+
capName: "pipeline-analytics",
|
|
33873
|
+
capScope: "device",
|
|
33874
|
+
addonId: null,
|
|
33875
|
+
access: "create"
|
|
33876
|
+
},
|
|
33719
33877
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
33720
33878
|
capName: "pipeline-analytics",
|
|
33721
33879
|
capScope: "device",
|
|
@@ -33890,6 +34048,12 @@ Object.freeze({
|
|
|
33890
34048
|
addonId: null,
|
|
33891
34049
|
access: "view"
|
|
33892
34050
|
},
|
|
34051
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
34052
|
+
capName: "pipeline-analytics",
|
|
34053
|
+
capScope: "device",
|
|
34054
|
+
addonId: null,
|
|
34055
|
+
access: "view"
|
|
34056
|
+
},
|
|
33893
34057
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
33894
34058
|
capName: "pipeline-analytics",
|
|
33895
34059
|
capScope: "device",
|
|
@@ -33968,6 +34132,12 @@ Object.freeze({
|
|
|
33968
34132
|
addonId: null,
|
|
33969
34133
|
access: "create"
|
|
33970
34134
|
},
|
|
34135
|
+
"pipelineAnalytics.relocateMedia": {
|
|
34136
|
+
capName: "pipeline-analytics",
|
|
34137
|
+
capScope: "device",
|
|
34138
|
+
addonId: null,
|
|
34139
|
+
access: "create"
|
|
34140
|
+
},
|
|
33971
34141
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
33972
34142
|
capName: "pipeline-analytics",
|
|
33973
34143
|
capScope: "device",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-amcrest",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.30",
|
|
4
4
|
"description": "Amcrest/Dahua camera device provider addon for CamStack — Dahua CGI over HTTP(S) with digest auth (snapshot, RTSP catalog, PTZ, image/day-night config)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|