@camstack/addon-remote-storage 1.2.27 → 1.2.28
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/s3.addon.js +1 -1
- package/dist/s3.addon.mjs +1 -1
- package/dist/sftp.addon.js +1 -1
- package/dist/sftp.addon.mjs +1 -1
- package/dist/{shared-3YApqgLa.mjs → shared-CWlFowyt.mjs} +272 -87
- package/dist/{shared-DSlbJzYc.js → shared-o62BwqYK.js} +272 -87
- package/dist/webdav.addon.js +1 -1
- package/dist/webdav.addon.mjs +1 -1
- package/package.json +1 -1
|
@@ -6631,7 +6631,7 @@ function method(input, output, options) {
|
|
|
6631
6631
|
input,
|
|
6632
6632
|
output,
|
|
6633
6633
|
kind: options?.kind ?? "query",
|
|
6634
|
-
auth: options
|
|
6634
|
+
...options?.auth !== void 0 ? { auth: options.auth } : {},
|
|
6635
6635
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
6636
6636
|
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
6637
6637
|
timeoutMs: options?.timeoutMs
|
|
@@ -6651,7 +6651,7 @@ function systemMethod(input, output, options) {
|
|
|
6651
6651
|
}
|
|
6652
6652
|
var StaticDirOutputSchema$1 = object({ staticDir: string() });
|
|
6653
6653
|
var VersionOutputSchema$1 = object({ version: string() });
|
|
6654
|
-
method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
|
|
6654
|
+
method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
|
|
6655
6655
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
6656
6656
|
DeviceType["Camera"] = "camera";
|
|
6657
6657
|
DeviceType["Hub"] = "hub";
|
|
@@ -6972,7 +6972,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
6972
6972
|
}({});
|
|
6973
6973
|
var StaticDirOutputSchema = object({ staticDir: string() });
|
|
6974
6974
|
var VersionOutputSchema = object({ version: string() });
|
|
6975
|
-
method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
|
|
6975
|
+
method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
|
|
6976
6976
|
/**
|
|
6977
6977
|
* device-ops — device-scoped cap that unifies the per-IDevice operations
|
|
6978
6978
|
* previously routed through the `.device-ops` Moleculer bridge service.
|
|
@@ -7586,24 +7586,6 @@ var RecordingRetentionSchema = object({
|
|
|
7586
7586
|
maxSizeGb: number().min(0).optional()
|
|
7587
7587
|
});
|
|
7588
7588
|
/**
|
|
7589
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7590
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7591
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7592
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7593
|
-
*
|
|
7594
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7595
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7596
|
-
* preset changed over time renders every historical window at the dims it was
|
|
7597
|
-
* written with.
|
|
7598
|
-
*/
|
|
7599
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
7600
|
-
"minimal",
|
|
7601
|
-
"low",
|
|
7602
|
-
"standard",
|
|
7603
|
-
"high",
|
|
7604
|
-
"max"
|
|
7605
|
-
]);
|
|
7606
|
-
/**
|
|
7607
7589
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7608
7590
|
*
|
|
7609
7591
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -7611,7 +7593,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
7611
7593
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
7612
7594
|
*
|
|
7613
7595
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
7614
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
7596
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
7597
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
7598
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
7599
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
7600
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
7615
7601
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
7616
7602
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
7617
7603
|
*/
|
|
@@ -7634,14 +7620,7 @@ var RecordingConfigSchema = object({
|
|
|
7634
7620
|
* "off" is the absence of a covering band, never a band value.
|
|
7635
7621
|
*/
|
|
7636
7622
|
bands: array(RecordingBandSchema).default([]),
|
|
7637
|
-
retention: RecordingRetentionSchema.optional()
|
|
7638
|
-
/**
|
|
7639
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7640
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7641
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
7642
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7643
|
-
*/
|
|
7644
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7623
|
+
retention: RecordingRetentionSchema.optional()
|
|
7645
7624
|
}).strict();
|
|
7646
7625
|
/**
|
|
7647
7626
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -7717,10 +7696,11 @@ var RelocateFootageInputSchema = object({
|
|
|
7717
7696
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
7718
7697
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
7719
7698
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
7720
|
-
var
|
|
7699
|
+
var RelocateMediaInputSchema = object({
|
|
7721
7700
|
toLocationId: string(),
|
|
7722
7701
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
7723
|
-
})
|
|
7702
|
+
});
|
|
7703
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
7724
7704
|
/** The independently selectable logical storage classes. `recordings`
|
|
7725
7705
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
7726
7706
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8015,7 +7995,26 @@ var LabelDefinitionSchema = object({
|
|
|
8015
7995
|
description: string().optional(),
|
|
8016
7996
|
icon: string().optional()
|
|
8017
7997
|
});
|
|
8018
|
-
|
|
7998
|
+
/**
|
|
7999
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8000
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8001
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8002
|
+
* detection pipeline executor actually routes.
|
|
8003
|
+
*
|
|
8004
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8005
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8006
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8007
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8008
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8009
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8010
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8011
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8012
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8013
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8014
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8015
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8016
|
+
*/
|
|
8017
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8019
8018
|
mapping: record(string(), _enum([
|
|
8020
8019
|
"person",
|
|
8021
8020
|
"vehicle",
|
|
@@ -8220,7 +8219,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8220
8219
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8221
8220
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8222
8221
|
*/
|
|
8223
|
-
classMap:
|
|
8222
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8224
8223
|
});
|
|
8225
8224
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8226
8225
|
format: literal("openvino"),
|
|
@@ -8250,7 +8249,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8250
8249
|
"segmentation"
|
|
8251
8250
|
]),
|
|
8252
8251
|
faceAlignment: boolean().optional(),
|
|
8253
|
-
classMap:
|
|
8252
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8254
8253
|
});
|
|
8255
8254
|
var ConvertResultSchema = object({
|
|
8256
8255
|
entry: ModelCatalogEntrySchema,
|
|
@@ -9113,7 +9112,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
9113
9112
|
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
9114
9113
|
sectionLabel: string().optional()
|
|
9115
9114
|
});
|
|
9116
|
-
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
9115
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
|
|
9117
9116
|
var AddonHttpRouteSchema = object({
|
|
9118
9117
|
method: _enum([
|
|
9119
9118
|
"GET",
|
|
@@ -9348,7 +9347,7 @@ var WidgetMetadataSchema = object({
|
|
|
9348
9347
|
defaultColumns: number().int().min(1).max(12).default(6),
|
|
9349
9348
|
defaultRows: number().int().min(1).max(12).default(1)
|
|
9350
9349
|
});
|
|
9351
|
-
method(_void(), array(WidgetMetadataSchema).readonly());
|
|
9350
|
+
method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
|
|
9352
9351
|
/**
|
|
9353
9352
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
9354
9353
|
* surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
|
|
@@ -10870,7 +10869,7 @@ var CustomModelDescriptorSchema = object({
|
|
|
10870
10869
|
stepId: string(),
|
|
10871
10870
|
entry: ModelCatalogEntrySchema
|
|
10872
10871
|
});
|
|
10873
|
-
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
10872
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
|
|
10874
10873
|
/**
|
|
10875
10874
|
* Query filter for settings-store collections.
|
|
10876
10875
|
*/
|
|
@@ -10957,7 +10956,8 @@ method(object({
|
|
|
10957
10956
|
}), _void(), { kind: "mutation" }), method(object({
|
|
10958
10957
|
namespace: string().optional(),
|
|
10959
10958
|
collection: string(),
|
|
10960
|
-
filter: QueryFilterSchema.optional()
|
|
10959
|
+
filter: QueryFilterSchema.optional(),
|
|
10960
|
+
columns: array(string()).readonly().optional()
|
|
10961
10961
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
10962
10962
|
namespace: string().optional(),
|
|
10963
10963
|
collection: string(),
|
|
@@ -11020,46 +11020,87 @@ var EngineInfoSchema = object({
|
|
|
11020
11020
|
kind: _enum(["relational", "vector"]),
|
|
11021
11021
|
displayName: string()
|
|
11022
11022
|
});
|
|
11023
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11023
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11024
11024
|
namespace: string().optional(),
|
|
11025
11025
|
collection: string(),
|
|
11026
11026
|
key: string()
|
|
11027
|
-
}), unknown()), method(object({
|
|
11027
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11028
11028
|
namespace: string().optional(),
|
|
11029
11029
|
collection: string(),
|
|
11030
11030
|
key: string(),
|
|
11031
11031
|
value: unknown()
|
|
11032
|
-
}), _void(), {
|
|
11032
|
+
}), _void(), {
|
|
11033
|
+
kind: "mutation",
|
|
11034
|
+
auth: "admin"
|
|
11035
|
+
}), method(object({
|
|
11033
11036
|
namespace: string().optional(),
|
|
11034
11037
|
collection: string(),
|
|
11035
|
-
filter: QueryFilterSchema.optional()
|
|
11036
|
-
|
|
11038
|
+
filter: QueryFilterSchema.optional(),
|
|
11039
|
+
/**
|
|
11040
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11041
|
+
*
|
|
11042
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11043
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11044
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11045
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11046
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11047
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11048
|
+
*
|
|
11049
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11050
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11051
|
+
* interface the engine destructures from. The field existed on both
|
|
11052
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11053
|
+
* registered provider against `InferProvider<cap>` —
|
|
11054
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11055
|
+
*
|
|
11056
|
+
* It is declared here anyway, and must stay in step with
|
|
11057
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11058
|
+
* to be able to see that this call carries a projection.
|
|
11059
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11060
|
+
*/
|
|
11061
|
+
columns: array(string()).readonly().optional()
|
|
11062
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11037
11063
|
namespace: string().optional(),
|
|
11038
11064
|
collection: string(),
|
|
11039
11065
|
record: SettingsRecordSchema
|
|
11040
|
-
}), _void(), {
|
|
11066
|
+
}), _void(), {
|
|
11067
|
+
kind: "mutation",
|
|
11068
|
+
auth: "admin"
|
|
11069
|
+
}), method(object({
|
|
11041
11070
|
namespace: string().optional(),
|
|
11042
11071
|
collection: string(),
|
|
11043
11072
|
id: string(),
|
|
11044
11073
|
data: record(string(), unknown())
|
|
11045
|
-
}), _void(), {
|
|
11074
|
+
}), _void(), {
|
|
11075
|
+
kind: "mutation",
|
|
11076
|
+
auth: "admin"
|
|
11077
|
+
}), method(object({
|
|
11046
11078
|
namespace: string().optional(),
|
|
11047
11079
|
collection: string(),
|
|
11048
11080
|
key: string()
|
|
11049
|
-
}), _void(), {
|
|
11081
|
+
}), _void(), {
|
|
11082
|
+
kind: "mutation",
|
|
11083
|
+
auth: "admin"
|
|
11084
|
+
}), method(object({
|
|
11050
11085
|
namespace: string().optional(),
|
|
11051
11086
|
collection: string(),
|
|
11052
11087
|
filter: MutationFilterSchema
|
|
11053
|
-
}), object({ deleted: number().int() }), {
|
|
11088
|
+
}), object({ deleted: number().int() }), {
|
|
11089
|
+
kind: "mutation",
|
|
11090
|
+
auth: "admin"
|
|
11091
|
+
}), method(object({
|
|
11054
11092
|
namespace: string().optional(),
|
|
11055
11093
|
collection: string(),
|
|
11056
11094
|
filter: MutationFilterSchema,
|
|
11057
11095
|
data: record(string(), unknown())
|
|
11058
|
-
}), object({ updated: number().int() }), {
|
|
11096
|
+
}), object({ updated: number().int() }), {
|
|
11097
|
+
kind: "mutation",
|
|
11098
|
+
auth: "admin"
|
|
11099
|
+
}), method(object({
|
|
11059
11100
|
namespace: string().optional(),
|
|
11060
11101
|
collection: string(),
|
|
11061
11102
|
filter: QueryFilterSchema.optional()
|
|
11062
|
-
}), number()), method(object({
|
|
11103
|
+
}), number(), { auth: "admin" }), method(object({
|
|
11063
11104
|
namespace: string().optional(),
|
|
11064
11105
|
collection: string(),
|
|
11065
11106
|
field: string(),
|
|
@@ -11069,15 +11110,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11069
11110
|
}), array(object({
|
|
11070
11111
|
bucket: number().int(),
|
|
11071
11112
|
count: number().int()
|
|
11072
|
-
})).readonly()), method(object({
|
|
11113
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11073
11114
|
namespace: string().optional(),
|
|
11074
11115
|
collection: string()
|
|
11075
|
-
}), boolean()), method(object({
|
|
11116
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11076
11117
|
namespace: string().optional(),
|
|
11077
11118
|
collection: string(),
|
|
11078
11119
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11079
11120
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11080
|
-
}), _void(), {
|
|
11121
|
+
}), _void(), {
|
|
11122
|
+
kind: "mutation",
|
|
11123
|
+
auth: "admin"
|
|
11124
|
+
});
|
|
11081
11125
|
/**
|
|
11082
11126
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11083
11127
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12205,7 +12249,7 @@ method(object({
|
|
|
12205
12249
|
crop: _instanceof(Uint8Array),
|
|
12206
12250
|
width: number(),
|
|
12207
12251
|
height: number()
|
|
12208
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12252
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12209
12253
|
/**
|
|
12210
12254
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12211
12255
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -12498,19 +12542,22 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
12498
12542
|
runtime: ManagedRuntimeConfigSchema,
|
|
12499
12543
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
12500
12544
|
timeoutMs: number().int().positive().optional()
|
|
12501
|
-
}), LlmGenerateResultSchema, {
|
|
12545
|
+
}), LlmGenerateResultSchema, {
|
|
12546
|
+
kind: "mutation",
|
|
12547
|
+
auth: "admin"
|
|
12548
|
+
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
12502
12549
|
kind: "mutation",
|
|
12503
12550
|
auth: "admin"
|
|
12504
12551
|
}), method(object({}), _void(), {
|
|
12505
12552
|
kind: "mutation",
|
|
12506
12553
|
auth: "admin"
|
|
12507
|
-
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12554
|
+
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12508
12555
|
kind: "mutation",
|
|
12509
12556
|
auth: "admin"
|
|
12510
12557
|
}), method(object({ file: string() }), _void(), {
|
|
12511
12558
|
kind: "mutation",
|
|
12512
12559
|
auth: "admin"
|
|
12513
|
-
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
12560
|
+
}), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
|
|
12514
12561
|
/**
|
|
12515
12562
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
12516
12563
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
@@ -15983,7 +16030,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
15983
16030
|
*/
|
|
15984
16031
|
refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
|
|
15985
16032
|
});
|
|
15986
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16033
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
15987
16034
|
/**
|
|
15988
16035
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
15989
16036
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17178,6 +17225,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
17178
17225
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17179
17226
|
kind: "mutation",
|
|
17180
17227
|
auth: "admin"
|
|
17228
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17229
|
+
kind: "mutation",
|
|
17230
|
+
auth: "admin"
|
|
17231
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17232
|
+
kind: "query",
|
|
17233
|
+
auth: "admin"
|
|
17234
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17235
|
+
kind: "mutation",
|
|
17236
|
+
auth: "admin"
|
|
17181
17237
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17182
17238
|
kind: "query",
|
|
17183
17239
|
auth: "admin"
|
|
@@ -17332,6 +17388,11 @@ object({
|
|
|
17332
17388
|
"jpeg"
|
|
17333
17389
|
])
|
|
17334
17390
|
});
|
|
17391
|
+
/**
|
|
17392
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
17393
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
17394
|
+
* other process or execution group.
|
|
17395
|
+
*/
|
|
17335
17396
|
var FrameRefSchema = object({
|
|
17336
17397
|
registryId: string().min(1),
|
|
17337
17398
|
id: string().min(1),
|
|
@@ -19497,7 +19558,7 @@ method(object({
|
|
|
19497
19558
|
* linking rather than produce an eternal token.
|
|
19498
19559
|
*/
|
|
19499
19560
|
ttlSec: union([number().int().positive(), literal("never")]).optional()
|
|
19500
|
-
}), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
|
|
19561
|
+
}), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
|
|
19501
19562
|
var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
19502
19563
|
providerId: string().min(1),
|
|
19503
19564
|
displayName: string().min(1),
|
|
@@ -19592,10 +19653,13 @@ var EvictResultSchema = object({
|
|
|
19592
19653
|
/** True when the provider has nothing left it is willing to drop on this location. */
|
|
19593
19654
|
exhausted: boolean()
|
|
19594
19655
|
});
|
|
19595
|
-
method(object({ locationId: string() }), EvictableUsageSchema), method(object({
|
|
19656
|
+
method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
|
|
19596
19657
|
locationId: string(),
|
|
19597
19658
|
targetBytes: number().int().positive()
|
|
19598
|
-
}), EvictResultSchema, {
|
|
19659
|
+
}), EvictResultSchema, {
|
|
19660
|
+
kind: "mutation",
|
|
19661
|
+
auth: "admin"
|
|
19662
|
+
});
|
|
19599
19663
|
method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
|
|
19600
19664
|
kind: "mutation",
|
|
19601
19665
|
auth: "admin"
|
|
@@ -19681,43 +19745,82 @@ var storageProviderCapability = {
|
|
|
19681
19745
|
mode: "collection",
|
|
19682
19746
|
internal: true,
|
|
19683
19747
|
methods: {
|
|
19748
|
+
/**
|
|
19749
|
+
* Every method below except `testLocation` had NO `auth` override —
|
|
19750
|
+
* `internal: true` did not gate the mount (see the 2026-08-26 note on
|
|
19751
|
+
* `data-store-provider`), so this was reachable on the AppRouter by ANY
|
|
19752
|
+
* authenticated session at the default `auth: 'protected'`: arbitrary
|
|
19753
|
+
* read/write/delete/list against any storage location the operator has
|
|
19754
|
+
* configured, keyed only by a caller-supplied `location` + `relativePath`
|
|
19755
|
+
* — the same "public consumers never see this cap" claim that was false
|
|
19756
|
+
* for `data-store-provider`, here gating raw file I/O instead of raw
|
|
19757
|
+
* settings rows. The only legitimate caller,
|
|
19758
|
+
* `addon-registry.service.ts`'s `activeStorageProvider`, calls the
|
|
19759
|
+
* provider object directly (in-process) — never tRPC — so `auth: 'admin'`
|
|
19760
|
+
* on every method costs it nothing. Public consumers already go through
|
|
19761
|
+
* the separate `storage` singleton cap.
|
|
19762
|
+
*/
|
|
19684
19763
|
/** Self-description for the "Add location" wizard. */
|
|
19685
|
-
getProviderInfo: method(_void(), ProviderInfoSchema),
|
|
19764
|
+
getProviderInfo: method(_void(), ProviderInfoSchema, { auth: "admin" }),
|
|
19686
19765
|
/** Validate config + probe connectivity. Called on add and on edit. */
|
|
19687
19766
|
testLocation: method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }),
|
|
19688
19767
|
resolve: method(object({
|
|
19689
19768
|
location: StorageLocationSchema,
|
|
19690
19769
|
relativePath: string()
|
|
19691
|
-
}), string()),
|
|
19770
|
+
}), string(), { auth: "admin" }),
|
|
19692
19771
|
write: method(object({
|
|
19693
19772
|
location: StorageLocationSchema,
|
|
19694
19773
|
relativePath: string(),
|
|
19695
19774
|
data: _instanceof(Uint8Array)
|
|
19696
|
-
}), _void(), {
|
|
19775
|
+
}), _void(), {
|
|
19776
|
+
kind: "mutation",
|
|
19777
|
+
auth: "admin"
|
|
19778
|
+
}),
|
|
19697
19779
|
read: method(object({
|
|
19698
19780
|
location: StorageLocationSchema,
|
|
19699
19781
|
relativePath: string()
|
|
19700
|
-
}), _instanceof(Uint8Array)),
|
|
19782
|
+
}), _instanceof(Uint8Array), { auth: "admin" }),
|
|
19701
19783
|
exists: method(object({
|
|
19702
19784
|
location: StorageLocationSchema,
|
|
19703
19785
|
relativePath: string()
|
|
19704
|
-
}), boolean()),
|
|
19786
|
+
}), boolean(), { auth: "admin" }),
|
|
19705
19787
|
list: method(object({
|
|
19706
19788
|
location: StorageLocationSchema,
|
|
19707
19789
|
prefix: string().optional()
|
|
19708
|
-
}), array(string()).readonly()),
|
|
19790
|
+
}), array(string()).readonly(), { auth: "admin" }),
|
|
19709
19791
|
delete: method(object({
|
|
19710
19792
|
location: StorageLocationSchema,
|
|
19711
19793
|
relativePath: string()
|
|
19712
|
-
}), _void(), {
|
|
19713
|
-
|
|
19714
|
-
|
|
19715
|
-
|
|
19716
|
-
|
|
19717
|
-
|
|
19718
|
-
|
|
19719
|
-
|
|
19720
|
-
|
|
19794
|
+
}), _void(), {
|
|
19795
|
+
kind: "mutation",
|
|
19796
|
+
auth: "admin"
|
|
19797
|
+
}),
|
|
19798
|
+
getAvailableSpace: method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }),
|
|
19799
|
+
beginUpload: method(BeginUploadInputSchema, BeginUploadResultSchema, {
|
|
19800
|
+
kind: "mutation",
|
|
19801
|
+
auth: "admin"
|
|
19802
|
+
}),
|
|
19803
|
+
writeChunk: method(WriteChunkInputSchema, _void(), {
|
|
19804
|
+
kind: "mutation",
|
|
19805
|
+
auth: "admin"
|
|
19806
|
+
}),
|
|
19807
|
+
finalizeUpload: method(FinalizeUploadInputSchema, _void(), {
|
|
19808
|
+
kind: "mutation",
|
|
19809
|
+
auth: "admin"
|
|
19810
|
+
}),
|
|
19811
|
+
abortUpload: method(AbortUploadInputSchema, _void(), {
|
|
19812
|
+
kind: "mutation",
|
|
19813
|
+
auth: "admin"
|
|
19814
|
+
}),
|
|
19815
|
+
beginDownload: method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
|
|
19816
|
+
kind: "mutation",
|
|
19817
|
+
auth: "admin"
|
|
19818
|
+
}),
|
|
19819
|
+
readChunk: method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }),
|
|
19820
|
+
endDownload: method(EndDownloadInputSchema, _void(), {
|
|
19821
|
+
kind: "mutation",
|
|
19822
|
+
auth: "admin"
|
|
19823
|
+
})
|
|
19721
19824
|
}
|
|
19722
19825
|
};
|
|
19723
19826
|
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
@@ -19977,7 +20080,8 @@ method(object({
|
|
|
19977
20080
|
access: "create"
|
|
19978
20081
|
}), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
|
|
19979
20082
|
kind: "mutation",
|
|
19980
|
-
access: "view"
|
|
20083
|
+
access: "view",
|
|
20084
|
+
auth: "admin"
|
|
19981
20085
|
}), method(object({
|
|
19982
20086
|
/** Required — the user the assertion belongs to (verified). */
|
|
19983
20087
|
userId: string(),
|
|
@@ -19985,10 +20089,12 @@ method(object({
|
|
|
19985
20089
|
response: record(string(), unknown())
|
|
19986
20090
|
}), object({ verified: boolean() }), {
|
|
19987
20091
|
kind: "mutation",
|
|
19988
|
-
access: "view"
|
|
20092
|
+
access: "view",
|
|
20093
|
+
auth: "admin"
|
|
19989
20094
|
}), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
|
|
19990
20095
|
kind: "mutation",
|
|
19991
|
-
access: "view"
|
|
20096
|
+
access: "view",
|
|
20097
|
+
auth: "admin"
|
|
19992
20098
|
}), method(object({
|
|
19993
20099
|
/** AuthenticationResponseJSON from the browser. */
|
|
19994
20100
|
response: record(string(), unknown()) }), object({
|
|
@@ -19996,7 +20102,8 @@ response: record(string(), unknown()) }), object({
|
|
|
19996
20102
|
userId: string().nullable()
|
|
19997
20103
|
}), {
|
|
19998
20104
|
kind: "mutation",
|
|
19999
|
-
access: "view"
|
|
20105
|
+
access: "view",
|
|
20106
|
+
auth: "admin"
|
|
20000
20107
|
}), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
|
|
20001
20108
|
userId: string(),
|
|
20002
20109
|
credentialId: string()
|
|
@@ -20168,7 +20275,19 @@ var VectorStatsResultSchema = object({
|
|
|
20168
20275
|
/** False when the backend ranks approximately. */
|
|
20169
20276
|
exact: boolean()
|
|
20170
20277
|
});
|
|
20171
|
-
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20278
|
+
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20279
|
+
kind: "mutation",
|
|
20280
|
+
auth: "admin"
|
|
20281
|
+
}), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
|
|
20282
|
+
kind: "mutation",
|
|
20283
|
+
auth: "admin"
|
|
20284
|
+
}), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
|
|
20285
|
+
kind: "mutation",
|
|
20286
|
+
auth: "admin"
|
|
20287
|
+
}), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
|
|
20288
|
+
kind: "mutation",
|
|
20289
|
+
auth: "admin"
|
|
20290
|
+
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
20172
20291
|
var ClipSchema = object({
|
|
20173
20292
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
20174
20293
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -21891,7 +22010,27 @@ var MediaFileLiteSchema$1 = object({
|
|
|
21891
22010
|
sizeBytes: number(),
|
|
21892
22011
|
timestamp: number()
|
|
21893
22012
|
});
|
|
21894
|
-
method(
|
|
22013
|
+
method(object({
|
|
22014
|
+
/**
|
|
22015
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
22016
|
+
*
|
|
22017
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
22018
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
22019
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
22020
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
22021
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
22022
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
22023
|
+
*
|
|
22024
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
22025
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
22026
|
+
*
|
|
22027
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
22028
|
+
* next train** — the hub router validates cap inputs against its own
|
|
22029
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
22030
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
22031
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
22032
|
+
*/
|
|
22033
|
+
includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
|
|
21895
22034
|
kind: "mutation",
|
|
21896
22035
|
auth: "admin"
|
|
21897
22036
|
}), method(object({
|
|
@@ -24038,8 +24177,10 @@ var PlateInfoSchema = object({
|
|
|
24038
24177
|
keyFrameMediaKey: string().optional(),
|
|
24039
24178
|
base64: string().optional(),
|
|
24040
24179
|
/**
|
|
24041
|
-
* Same crop as a data-plane URL
|
|
24042
|
-
* never inlines JPEG; `listPlates`
|
|
24180
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
24181
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
24182
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
24183
|
+
* left at its `true` default.
|
|
24043
24184
|
*/
|
|
24044
24185
|
cropUrl: string().optional()
|
|
24045
24186
|
});
|
|
@@ -24059,14 +24200,34 @@ var PlateClusterSchema = object({
|
|
|
24059
24200
|
});
|
|
24060
24201
|
method(object({
|
|
24061
24202
|
deviceId: number().int().optional(),
|
|
24062
|
-
limit: number().int().positive().optional()
|
|
24203
|
+
limit: number().int().positive().optional(),
|
|
24204
|
+
/**
|
|
24205
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
24206
|
+
* behaviour, kept so no caller breaks.
|
|
24207
|
+
*
|
|
24208
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
24209
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
24210
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
24211
|
+
* metadata without them — and the browser then caches the images.
|
|
24212
|
+
*
|
|
24213
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
24214
|
+
* plates were the one gallery list left without it.
|
|
24215
|
+
*
|
|
24216
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
24217
|
+
* next train.** The hub router validates cap inputs against its own
|
|
24218
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
24219
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
24220
|
+
*/
|
|
24221
|
+
includeCrops: boolean().optional()
|
|
24063
24222
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
24064
24223
|
deviceId: number().int(),
|
|
24065
24224
|
trackId: string()
|
|
24066
24225
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
24067
24226
|
text: string().min(1),
|
|
24068
24227
|
maxDistance: number().int().min(0).optional(),
|
|
24069
|
-
limit: number().int().positive().optional()
|
|
24228
|
+
limit: number().int().positive().optional(),
|
|
24229
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
24230
|
+
includeCrops: boolean().optional()
|
|
24070
24231
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
24071
24232
|
maxDistance: number().int().min(0).optional(),
|
|
24072
24233
|
minClusterSize: number().int().min(2).optional(),
|
|
@@ -24080,7 +24241,13 @@ method(object({
|
|
|
24080
24241
|
}), method(object({ plateId: string() }), _void(), {
|
|
24081
24242
|
kind: "mutation",
|
|
24082
24243
|
auth: "admin"
|
|
24083
|
-
}), method(
|
|
24244
|
+
}), method(object({
|
|
24245
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
24246
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
24247
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
24248
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
24249
|
+
* resolves to `false` and is exactly the intended default. */
|
|
24250
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
24084
24251
|
kind: "mutation",
|
|
24085
24252
|
auth: "admin"
|
|
24086
24253
|
}), method(object({
|
|
@@ -29457,6 +29624,12 @@ Object.freeze({
|
|
|
29457
29624
|
addonId: null,
|
|
29458
29625
|
access: "create"
|
|
29459
29626
|
},
|
|
29627
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
29628
|
+
capName: "pipeline-analytics",
|
|
29629
|
+
capScope: "device",
|
|
29630
|
+
addonId: null,
|
|
29631
|
+
access: "create"
|
|
29632
|
+
},
|
|
29460
29633
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
29461
29634
|
capName: "pipeline-analytics",
|
|
29462
29635
|
capScope: "device",
|
|
@@ -29631,6 +29804,12 @@ Object.freeze({
|
|
|
29631
29804
|
addonId: null,
|
|
29632
29805
|
access: "view"
|
|
29633
29806
|
},
|
|
29807
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
29808
|
+
capName: "pipeline-analytics",
|
|
29809
|
+
capScope: "device",
|
|
29810
|
+
addonId: null,
|
|
29811
|
+
access: "view"
|
|
29812
|
+
},
|
|
29634
29813
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
29635
29814
|
capName: "pipeline-analytics",
|
|
29636
29815
|
capScope: "device",
|
|
@@ -29709,6 +29888,12 @@ Object.freeze({
|
|
|
29709
29888
|
addonId: null,
|
|
29710
29889
|
access: "create"
|
|
29711
29890
|
},
|
|
29891
|
+
"pipelineAnalytics.relocateMedia": {
|
|
29892
|
+
capName: "pipeline-analytics",
|
|
29893
|
+
capScope: "device",
|
|
29894
|
+
addonId: null,
|
|
29895
|
+
access: "create"
|
|
29896
|
+
},
|
|
29712
29897
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
29713
29898
|
capName: "pipeline-analytics",
|
|
29714
29899
|
capScope: "device",
|