@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
|
@@ -6654,7 +6654,7 @@ function method(input, output, options) {
|
|
|
6654
6654
|
input,
|
|
6655
6655
|
output,
|
|
6656
6656
|
kind: options?.kind ?? "query",
|
|
6657
|
-
auth: options
|
|
6657
|
+
...options?.auth !== void 0 ? { auth: options.auth } : {},
|
|
6658
6658
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
6659
6659
|
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
6660
6660
|
timeoutMs: options?.timeoutMs
|
|
@@ -6674,7 +6674,7 @@ function systemMethod(input, output, options) {
|
|
|
6674
6674
|
}
|
|
6675
6675
|
var StaticDirOutputSchema$1 = object({ staticDir: string() });
|
|
6676
6676
|
var VersionOutputSchema$1 = object({ version: string() });
|
|
6677
|
-
method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
|
|
6677
|
+
method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
|
|
6678
6678
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
6679
6679
|
DeviceType["Camera"] = "camera";
|
|
6680
6680
|
DeviceType["Hub"] = "hub";
|
|
@@ -6995,7 +6995,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
6995
6995
|
}({});
|
|
6996
6996
|
var StaticDirOutputSchema = object({ staticDir: string() });
|
|
6997
6997
|
var VersionOutputSchema = object({ version: string() });
|
|
6998
|
-
method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
|
|
6998
|
+
method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
|
|
6999
6999
|
/**
|
|
7000
7000
|
* device-ops — device-scoped cap that unifies the per-IDevice operations
|
|
7001
7001
|
* previously routed through the `.device-ops` Moleculer bridge service.
|
|
@@ -7609,24 +7609,6 @@ var RecordingRetentionSchema = object({
|
|
|
7609
7609
|
maxSizeGb: number().min(0).optional()
|
|
7610
7610
|
});
|
|
7611
7611
|
/**
|
|
7612
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7613
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7614
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7615
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7616
|
-
*
|
|
7617
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7618
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7619
|
-
* preset changed over time renders every historical window at the dims it was
|
|
7620
|
-
* written with.
|
|
7621
|
-
*/
|
|
7622
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
7623
|
-
"minimal",
|
|
7624
|
-
"low",
|
|
7625
|
-
"standard",
|
|
7626
|
-
"high",
|
|
7627
|
-
"max"
|
|
7628
|
-
]);
|
|
7629
|
-
/**
|
|
7630
7612
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7631
7613
|
*
|
|
7632
7614
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -7634,7 +7616,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
7634
7616
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
7635
7617
|
*
|
|
7636
7618
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
7637
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
7619
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
7620
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
7621
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
7622
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
7623
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
7638
7624
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
7639
7625
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
7640
7626
|
*/
|
|
@@ -7657,14 +7643,7 @@ var RecordingConfigSchema = object({
|
|
|
7657
7643
|
* "off" is the absence of a covering band, never a band value.
|
|
7658
7644
|
*/
|
|
7659
7645
|
bands: array(RecordingBandSchema).default([]),
|
|
7660
|
-
retention: RecordingRetentionSchema.optional()
|
|
7661
|
-
/**
|
|
7662
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7663
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7664
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
7665
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7666
|
-
*/
|
|
7667
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7646
|
+
retention: RecordingRetentionSchema.optional()
|
|
7668
7647
|
}).strict();
|
|
7669
7648
|
/**
|
|
7670
7649
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -7740,10 +7719,11 @@ var RelocateFootageInputSchema = object({
|
|
|
7740
7719
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
7741
7720
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
7742
7721
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
7743
|
-
var
|
|
7722
|
+
var RelocateMediaInputSchema = object({
|
|
7744
7723
|
toLocationId: string(),
|
|
7745
7724
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
7746
|
-
})
|
|
7725
|
+
});
|
|
7726
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
7747
7727
|
/** The independently selectable logical storage classes. `recordings`
|
|
7748
7728
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
7749
7729
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8038,7 +8018,26 @@ var LabelDefinitionSchema = object({
|
|
|
8038
8018
|
description: string().optional(),
|
|
8039
8019
|
icon: string().optional()
|
|
8040
8020
|
});
|
|
8041
|
-
|
|
8021
|
+
/**
|
|
8022
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8023
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8024
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8025
|
+
* detection pipeline executor actually routes.
|
|
8026
|
+
*
|
|
8027
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8028
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8029
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8030
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8031
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8032
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8033
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8034
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8035
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8036
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8037
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8038
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8039
|
+
*/
|
|
8040
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8042
8041
|
mapping: record(string(), _enum([
|
|
8043
8042
|
"person",
|
|
8044
8043
|
"vehicle",
|
|
@@ -8243,7 +8242,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8243
8242
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8244
8243
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8245
8244
|
*/
|
|
8246
|
-
classMap:
|
|
8245
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8247
8246
|
});
|
|
8248
8247
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8249
8248
|
format: literal("openvino"),
|
|
@@ -8273,7 +8272,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8273
8272
|
"segmentation"
|
|
8274
8273
|
]),
|
|
8275
8274
|
faceAlignment: boolean().optional(),
|
|
8276
|
-
classMap:
|
|
8275
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8277
8276
|
});
|
|
8278
8277
|
var ConvertResultSchema = object({
|
|
8279
8278
|
entry: ModelCatalogEntrySchema,
|
|
@@ -9136,7 +9135,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
9136
9135
|
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
9137
9136
|
sectionLabel: string().optional()
|
|
9138
9137
|
});
|
|
9139
|
-
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
9138
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
|
|
9140
9139
|
var AddonHttpRouteSchema = object({
|
|
9141
9140
|
method: _enum([
|
|
9142
9141
|
"GET",
|
|
@@ -9371,7 +9370,7 @@ var WidgetMetadataSchema = object({
|
|
|
9371
9370
|
defaultColumns: number().int().min(1).max(12).default(6),
|
|
9372
9371
|
defaultRows: number().int().min(1).max(12).default(1)
|
|
9373
9372
|
});
|
|
9374
|
-
method(_void(), array(WidgetMetadataSchema).readonly());
|
|
9373
|
+
method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
|
|
9375
9374
|
/**
|
|
9376
9375
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
9377
9376
|
* surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
|
|
@@ -10893,7 +10892,7 @@ var CustomModelDescriptorSchema = object({
|
|
|
10893
10892
|
stepId: string(),
|
|
10894
10893
|
entry: ModelCatalogEntrySchema
|
|
10895
10894
|
});
|
|
10896
|
-
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
10895
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
|
|
10897
10896
|
/**
|
|
10898
10897
|
* Query filter for settings-store collections.
|
|
10899
10898
|
*/
|
|
@@ -10980,7 +10979,8 @@ method(object({
|
|
|
10980
10979
|
}), _void(), { kind: "mutation" }), method(object({
|
|
10981
10980
|
namespace: string().optional(),
|
|
10982
10981
|
collection: string(),
|
|
10983
|
-
filter: QueryFilterSchema.optional()
|
|
10982
|
+
filter: QueryFilterSchema.optional(),
|
|
10983
|
+
columns: array(string()).readonly().optional()
|
|
10984
10984
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
10985
10985
|
namespace: string().optional(),
|
|
10986
10986
|
collection: string(),
|
|
@@ -11043,46 +11043,87 @@ var EngineInfoSchema = object({
|
|
|
11043
11043
|
kind: _enum(["relational", "vector"]),
|
|
11044
11044
|
displayName: string()
|
|
11045
11045
|
});
|
|
11046
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11046
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11047
11047
|
namespace: string().optional(),
|
|
11048
11048
|
collection: string(),
|
|
11049
11049
|
key: string()
|
|
11050
|
-
}), unknown()), method(object({
|
|
11050
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11051
11051
|
namespace: string().optional(),
|
|
11052
11052
|
collection: string(),
|
|
11053
11053
|
key: string(),
|
|
11054
11054
|
value: unknown()
|
|
11055
|
-
}), _void(), {
|
|
11055
|
+
}), _void(), {
|
|
11056
|
+
kind: "mutation",
|
|
11057
|
+
auth: "admin"
|
|
11058
|
+
}), method(object({
|
|
11056
11059
|
namespace: string().optional(),
|
|
11057
11060
|
collection: string(),
|
|
11058
|
-
filter: QueryFilterSchema.optional()
|
|
11059
|
-
|
|
11061
|
+
filter: QueryFilterSchema.optional(),
|
|
11062
|
+
/**
|
|
11063
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11064
|
+
*
|
|
11065
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11066
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11067
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11068
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11069
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11070
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11071
|
+
*
|
|
11072
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11073
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11074
|
+
* interface the engine destructures from. The field existed on both
|
|
11075
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11076
|
+
* registered provider against `InferProvider<cap>` —
|
|
11077
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11078
|
+
*
|
|
11079
|
+
* It is declared here anyway, and must stay in step with
|
|
11080
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11081
|
+
* to be able to see that this call carries a projection.
|
|
11082
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11083
|
+
*/
|
|
11084
|
+
columns: array(string()).readonly().optional()
|
|
11085
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11060
11086
|
namespace: string().optional(),
|
|
11061
11087
|
collection: string(),
|
|
11062
11088
|
record: SettingsRecordSchema
|
|
11063
|
-
}), _void(), {
|
|
11089
|
+
}), _void(), {
|
|
11090
|
+
kind: "mutation",
|
|
11091
|
+
auth: "admin"
|
|
11092
|
+
}), method(object({
|
|
11064
11093
|
namespace: string().optional(),
|
|
11065
11094
|
collection: string(),
|
|
11066
11095
|
id: string(),
|
|
11067
11096
|
data: record(string(), unknown())
|
|
11068
|
-
}), _void(), {
|
|
11097
|
+
}), _void(), {
|
|
11098
|
+
kind: "mutation",
|
|
11099
|
+
auth: "admin"
|
|
11100
|
+
}), method(object({
|
|
11069
11101
|
namespace: string().optional(),
|
|
11070
11102
|
collection: string(),
|
|
11071
11103
|
key: string()
|
|
11072
|
-
}), _void(), {
|
|
11104
|
+
}), _void(), {
|
|
11105
|
+
kind: "mutation",
|
|
11106
|
+
auth: "admin"
|
|
11107
|
+
}), method(object({
|
|
11073
11108
|
namespace: string().optional(),
|
|
11074
11109
|
collection: string(),
|
|
11075
11110
|
filter: MutationFilterSchema
|
|
11076
|
-
}), object({ deleted: number().int() }), {
|
|
11111
|
+
}), object({ deleted: number().int() }), {
|
|
11112
|
+
kind: "mutation",
|
|
11113
|
+
auth: "admin"
|
|
11114
|
+
}), method(object({
|
|
11077
11115
|
namespace: string().optional(),
|
|
11078
11116
|
collection: string(),
|
|
11079
11117
|
filter: MutationFilterSchema,
|
|
11080
11118
|
data: record(string(), unknown())
|
|
11081
|
-
}), object({ updated: number().int() }), {
|
|
11119
|
+
}), object({ updated: number().int() }), {
|
|
11120
|
+
kind: "mutation",
|
|
11121
|
+
auth: "admin"
|
|
11122
|
+
}), method(object({
|
|
11082
11123
|
namespace: string().optional(),
|
|
11083
11124
|
collection: string(),
|
|
11084
11125
|
filter: QueryFilterSchema.optional()
|
|
11085
|
-
}), number()), method(object({
|
|
11126
|
+
}), number(), { auth: "admin" }), method(object({
|
|
11086
11127
|
namespace: string().optional(),
|
|
11087
11128
|
collection: string(),
|
|
11088
11129
|
field: string(),
|
|
@@ -11092,15 +11133,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11092
11133
|
}), array(object({
|
|
11093
11134
|
bucket: number().int(),
|
|
11094
11135
|
count: number().int()
|
|
11095
|
-
})).readonly()), method(object({
|
|
11136
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11096
11137
|
namespace: string().optional(),
|
|
11097
11138
|
collection: string()
|
|
11098
|
-
}), boolean()), method(object({
|
|
11139
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11099
11140
|
namespace: string().optional(),
|
|
11100
11141
|
collection: string(),
|
|
11101
11142
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11102
11143
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11103
|
-
}), _void(), {
|
|
11144
|
+
}), _void(), {
|
|
11145
|
+
kind: "mutation",
|
|
11146
|
+
auth: "admin"
|
|
11147
|
+
});
|
|
11104
11148
|
/**
|
|
11105
11149
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11106
11150
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12228,7 +12272,7 @@ method(object({
|
|
|
12228
12272
|
crop: _instanceof(Uint8Array),
|
|
12229
12273
|
width: number(),
|
|
12230
12274
|
height: number()
|
|
12231
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12275
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12232
12276
|
/**
|
|
12233
12277
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12234
12278
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -12521,19 +12565,22 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
12521
12565
|
runtime: ManagedRuntimeConfigSchema,
|
|
12522
12566
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
12523
12567
|
timeoutMs: number().int().positive().optional()
|
|
12524
|
-
}), LlmGenerateResultSchema, {
|
|
12568
|
+
}), LlmGenerateResultSchema, {
|
|
12569
|
+
kind: "mutation",
|
|
12570
|
+
auth: "admin"
|
|
12571
|
+
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
12525
12572
|
kind: "mutation",
|
|
12526
12573
|
auth: "admin"
|
|
12527
12574
|
}), method(object({}), _void(), {
|
|
12528
12575
|
kind: "mutation",
|
|
12529
12576
|
auth: "admin"
|
|
12530
|
-
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12577
|
+
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12531
12578
|
kind: "mutation",
|
|
12532
12579
|
auth: "admin"
|
|
12533
12580
|
}), method(object({ file: string() }), _void(), {
|
|
12534
12581
|
kind: "mutation",
|
|
12535
12582
|
auth: "admin"
|
|
12536
|
-
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
12583
|
+
}), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
|
|
12537
12584
|
/**
|
|
12538
12585
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
12539
12586
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
@@ -16006,7 +16053,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
16006
16053
|
*/
|
|
16007
16054
|
refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
|
|
16008
16055
|
});
|
|
16009
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16056
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
16010
16057
|
/**
|
|
16011
16058
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
16012
16059
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17201,6 +17248,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
17201
17248
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17202
17249
|
kind: "mutation",
|
|
17203
17250
|
auth: "admin"
|
|
17251
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17252
|
+
kind: "mutation",
|
|
17253
|
+
auth: "admin"
|
|
17254
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17255
|
+
kind: "query",
|
|
17256
|
+
auth: "admin"
|
|
17257
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17258
|
+
kind: "mutation",
|
|
17259
|
+
auth: "admin"
|
|
17204
17260
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17205
17261
|
kind: "query",
|
|
17206
17262
|
auth: "admin"
|
|
@@ -17355,6 +17411,11 @@ object({
|
|
|
17355
17411
|
"jpeg"
|
|
17356
17412
|
])
|
|
17357
17413
|
});
|
|
17414
|
+
/**
|
|
17415
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
17416
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
17417
|
+
* other process or execution group.
|
|
17418
|
+
*/
|
|
17358
17419
|
var FrameRefSchema = object({
|
|
17359
17420
|
registryId: string().min(1),
|
|
17360
17421
|
id: string().min(1),
|
|
@@ -19520,7 +19581,7 @@ method(object({
|
|
|
19520
19581
|
* linking rather than produce an eternal token.
|
|
19521
19582
|
*/
|
|
19522
19583
|
ttlSec: union([number().int().positive(), literal("never")]).optional()
|
|
19523
|
-
}), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
|
|
19584
|
+
}), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
|
|
19524
19585
|
var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
19525
19586
|
providerId: string().min(1),
|
|
19526
19587
|
displayName: string().min(1),
|
|
@@ -19615,10 +19676,13 @@ var EvictResultSchema = object({
|
|
|
19615
19676
|
/** True when the provider has nothing left it is willing to drop on this location. */
|
|
19616
19677
|
exhausted: boolean()
|
|
19617
19678
|
});
|
|
19618
|
-
method(object({ locationId: string() }), EvictableUsageSchema), method(object({
|
|
19679
|
+
method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
|
|
19619
19680
|
locationId: string(),
|
|
19620
19681
|
targetBytes: number().int().positive()
|
|
19621
|
-
}), EvictResultSchema, {
|
|
19682
|
+
}), EvictResultSchema, {
|
|
19683
|
+
kind: "mutation",
|
|
19684
|
+
auth: "admin"
|
|
19685
|
+
});
|
|
19622
19686
|
method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
|
|
19623
19687
|
kind: "mutation",
|
|
19624
19688
|
auth: "admin"
|
|
@@ -19704,43 +19768,82 @@ var storageProviderCapability = {
|
|
|
19704
19768
|
mode: "collection",
|
|
19705
19769
|
internal: true,
|
|
19706
19770
|
methods: {
|
|
19771
|
+
/**
|
|
19772
|
+
* Every method below except `testLocation` had NO `auth` override —
|
|
19773
|
+
* `internal: true` did not gate the mount (see the 2026-08-26 note on
|
|
19774
|
+
* `data-store-provider`), so this was reachable on the AppRouter by ANY
|
|
19775
|
+
* authenticated session at the default `auth: 'protected'`: arbitrary
|
|
19776
|
+
* read/write/delete/list against any storage location the operator has
|
|
19777
|
+
* configured, keyed only by a caller-supplied `location` + `relativePath`
|
|
19778
|
+
* — the same "public consumers never see this cap" claim that was false
|
|
19779
|
+
* for `data-store-provider`, here gating raw file I/O instead of raw
|
|
19780
|
+
* settings rows. The only legitimate caller,
|
|
19781
|
+
* `addon-registry.service.ts`'s `activeStorageProvider`, calls the
|
|
19782
|
+
* provider object directly (in-process) — never tRPC — so `auth: 'admin'`
|
|
19783
|
+
* on every method costs it nothing. Public consumers already go through
|
|
19784
|
+
* the separate `storage` singleton cap.
|
|
19785
|
+
*/
|
|
19707
19786
|
/** Self-description for the "Add location" wizard. */
|
|
19708
|
-
getProviderInfo: method(_void(), ProviderInfoSchema),
|
|
19787
|
+
getProviderInfo: method(_void(), ProviderInfoSchema, { auth: "admin" }),
|
|
19709
19788
|
/** Validate config + probe connectivity. Called on add and on edit. */
|
|
19710
19789
|
testLocation: method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }),
|
|
19711
19790
|
resolve: method(object({
|
|
19712
19791
|
location: StorageLocationSchema,
|
|
19713
19792
|
relativePath: string()
|
|
19714
|
-
}), string()),
|
|
19793
|
+
}), string(), { auth: "admin" }),
|
|
19715
19794
|
write: method(object({
|
|
19716
19795
|
location: StorageLocationSchema,
|
|
19717
19796
|
relativePath: string(),
|
|
19718
19797
|
data: _instanceof(Uint8Array)
|
|
19719
|
-
}), _void(), {
|
|
19798
|
+
}), _void(), {
|
|
19799
|
+
kind: "mutation",
|
|
19800
|
+
auth: "admin"
|
|
19801
|
+
}),
|
|
19720
19802
|
read: method(object({
|
|
19721
19803
|
location: StorageLocationSchema,
|
|
19722
19804
|
relativePath: string()
|
|
19723
|
-
}), _instanceof(Uint8Array)),
|
|
19805
|
+
}), _instanceof(Uint8Array), { auth: "admin" }),
|
|
19724
19806
|
exists: method(object({
|
|
19725
19807
|
location: StorageLocationSchema,
|
|
19726
19808
|
relativePath: string()
|
|
19727
|
-
}), boolean()),
|
|
19809
|
+
}), boolean(), { auth: "admin" }),
|
|
19728
19810
|
list: method(object({
|
|
19729
19811
|
location: StorageLocationSchema,
|
|
19730
19812
|
prefix: string().optional()
|
|
19731
|
-
}), array(string()).readonly()),
|
|
19813
|
+
}), array(string()).readonly(), { auth: "admin" }),
|
|
19732
19814
|
delete: method(object({
|
|
19733
19815
|
location: StorageLocationSchema,
|
|
19734
19816
|
relativePath: string()
|
|
19735
|
-
}), _void(), {
|
|
19736
|
-
|
|
19737
|
-
|
|
19738
|
-
|
|
19739
|
-
|
|
19740
|
-
|
|
19741
|
-
|
|
19742
|
-
|
|
19743
|
-
|
|
19817
|
+
}), _void(), {
|
|
19818
|
+
kind: "mutation",
|
|
19819
|
+
auth: "admin"
|
|
19820
|
+
}),
|
|
19821
|
+
getAvailableSpace: method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }),
|
|
19822
|
+
beginUpload: method(BeginUploadInputSchema, BeginUploadResultSchema, {
|
|
19823
|
+
kind: "mutation",
|
|
19824
|
+
auth: "admin"
|
|
19825
|
+
}),
|
|
19826
|
+
writeChunk: method(WriteChunkInputSchema, _void(), {
|
|
19827
|
+
kind: "mutation",
|
|
19828
|
+
auth: "admin"
|
|
19829
|
+
}),
|
|
19830
|
+
finalizeUpload: method(FinalizeUploadInputSchema, _void(), {
|
|
19831
|
+
kind: "mutation",
|
|
19832
|
+
auth: "admin"
|
|
19833
|
+
}),
|
|
19834
|
+
abortUpload: method(AbortUploadInputSchema, _void(), {
|
|
19835
|
+
kind: "mutation",
|
|
19836
|
+
auth: "admin"
|
|
19837
|
+
}),
|
|
19838
|
+
beginDownload: method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
|
|
19839
|
+
kind: "mutation",
|
|
19840
|
+
auth: "admin"
|
|
19841
|
+
}),
|
|
19842
|
+
readChunk: method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }),
|
|
19843
|
+
endDownload: method(EndDownloadInputSchema, _void(), {
|
|
19844
|
+
kind: "mutation",
|
|
19845
|
+
auth: "admin"
|
|
19846
|
+
})
|
|
19744
19847
|
}
|
|
19745
19848
|
};
|
|
19746
19849
|
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
@@ -20000,7 +20103,8 @@ method(object({
|
|
|
20000
20103
|
access: "create"
|
|
20001
20104
|
}), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20002
20105
|
kind: "mutation",
|
|
20003
|
-
access: "view"
|
|
20106
|
+
access: "view",
|
|
20107
|
+
auth: "admin"
|
|
20004
20108
|
}), method(object({
|
|
20005
20109
|
/** Required — the user the assertion belongs to (verified). */
|
|
20006
20110
|
userId: string(),
|
|
@@ -20008,10 +20112,12 @@ method(object({
|
|
|
20008
20112
|
response: record(string(), unknown())
|
|
20009
20113
|
}), object({ verified: boolean() }), {
|
|
20010
20114
|
kind: "mutation",
|
|
20011
|
-
access: "view"
|
|
20115
|
+
access: "view",
|
|
20116
|
+
auth: "admin"
|
|
20012
20117
|
}), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20013
20118
|
kind: "mutation",
|
|
20014
|
-
access: "view"
|
|
20119
|
+
access: "view",
|
|
20120
|
+
auth: "admin"
|
|
20015
20121
|
}), method(object({
|
|
20016
20122
|
/** AuthenticationResponseJSON from the browser. */
|
|
20017
20123
|
response: record(string(), unknown()) }), object({
|
|
@@ -20019,7 +20125,8 @@ response: record(string(), unknown()) }), object({
|
|
|
20019
20125
|
userId: string().nullable()
|
|
20020
20126
|
}), {
|
|
20021
20127
|
kind: "mutation",
|
|
20022
|
-
access: "view"
|
|
20128
|
+
access: "view",
|
|
20129
|
+
auth: "admin"
|
|
20023
20130
|
}), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
|
|
20024
20131
|
userId: string(),
|
|
20025
20132
|
credentialId: string()
|
|
@@ -20191,7 +20298,19 @@ var VectorStatsResultSchema = object({
|
|
|
20191
20298
|
/** False when the backend ranks approximately. */
|
|
20192
20299
|
exact: boolean()
|
|
20193
20300
|
});
|
|
20194
|
-
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20301
|
+
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20302
|
+
kind: "mutation",
|
|
20303
|
+
auth: "admin"
|
|
20304
|
+
}), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
|
|
20305
|
+
kind: "mutation",
|
|
20306
|
+
auth: "admin"
|
|
20307
|
+
}), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
|
|
20308
|
+
kind: "mutation",
|
|
20309
|
+
auth: "admin"
|
|
20310
|
+
}), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
|
|
20311
|
+
kind: "mutation",
|
|
20312
|
+
auth: "admin"
|
|
20313
|
+
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
20195
20314
|
var ClipSchema = object({
|
|
20196
20315
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
20197
20316
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -21914,7 +22033,27 @@ var MediaFileLiteSchema$1 = object({
|
|
|
21914
22033
|
sizeBytes: number(),
|
|
21915
22034
|
timestamp: number()
|
|
21916
22035
|
});
|
|
21917
|
-
method(
|
|
22036
|
+
method(object({
|
|
22037
|
+
/**
|
|
22038
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
22039
|
+
*
|
|
22040
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
22041
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
22042
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
22043
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
22044
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
22045
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
22046
|
+
*
|
|
22047
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
22048
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
22049
|
+
*
|
|
22050
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
22051
|
+
* next train** — the hub router validates cap inputs against its own
|
|
22052
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
22053
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
22054
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
22055
|
+
*/
|
|
22056
|
+
includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
|
|
21918
22057
|
kind: "mutation",
|
|
21919
22058
|
auth: "admin"
|
|
21920
22059
|
}), method(object({
|
|
@@ -24061,8 +24200,10 @@ var PlateInfoSchema = object({
|
|
|
24061
24200
|
keyFrameMediaKey: string().optional(),
|
|
24062
24201
|
base64: string().optional(),
|
|
24063
24202
|
/**
|
|
24064
|
-
* Same crop as a data-plane URL
|
|
24065
|
-
* never inlines JPEG; `listPlates`
|
|
24203
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
24204
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
24205
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
24206
|
+
* left at its `true` default.
|
|
24066
24207
|
*/
|
|
24067
24208
|
cropUrl: string().optional()
|
|
24068
24209
|
});
|
|
@@ -24082,14 +24223,34 @@ var PlateClusterSchema = object({
|
|
|
24082
24223
|
});
|
|
24083
24224
|
method(object({
|
|
24084
24225
|
deviceId: number().int().optional(),
|
|
24085
|
-
limit: number().int().positive().optional()
|
|
24226
|
+
limit: number().int().positive().optional(),
|
|
24227
|
+
/**
|
|
24228
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
24229
|
+
* behaviour, kept so no caller breaks.
|
|
24230
|
+
*
|
|
24231
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
24232
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
24233
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
24234
|
+
* metadata without them — and the browser then caches the images.
|
|
24235
|
+
*
|
|
24236
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
24237
|
+
* plates were the one gallery list left without it.
|
|
24238
|
+
*
|
|
24239
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
24240
|
+
* next train.** The hub router validates cap inputs against its own
|
|
24241
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
24242
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
24243
|
+
*/
|
|
24244
|
+
includeCrops: boolean().optional()
|
|
24086
24245
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
24087
24246
|
deviceId: number().int(),
|
|
24088
24247
|
trackId: string()
|
|
24089
24248
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
24090
24249
|
text: string().min(1),
|
|
24091
24250
|
maxDistance: number().int().min(0).optional(),
|
|
24092
|
-
limit: number().int().positive().optional()
|
|
24251
|
+
limit: number().int().positive().optional(),
|
|
24252
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
24253
|
+
includeCrops: boolean().optional()
|
|
24093
24254
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
24094
24255
|
maxDistance: number().int().min(0).optional(),
|
|
24095
24256
|
minClusterSize: number().int().min(2).optional(),
|
|
@@ -24103,7 +24264,13 @@ method(object({
|
|
|
24103
24264
|
}), method(object({ plateId: string() }), _void(), {
|
|
24104
24265
|
kind: "mutation",
|
|
24105
24266
|
auth: "admin"
|
|
24106
|
-
}), method(
|
|
24267
|
+
}), method(object({
|
|
24268
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
24269
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
24270
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
24271
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
24272
|
+
* resolves to `false` and is exactly the intended default. */
|
|
24273
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
24107
24274
|
kind: "mutation",
|
|
24108
24275
|
auth: "admin"
|
|
24109
24276
|
}), method(object({
|
|
@@ -29480,6 +29647,12 @@ Object.freeze({
|
|
|
29480
29647
|
addonId: null,
|
|
29481
29648
|
access: "create"
|
|
29482
29649
|
},
|
|
29650
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
29651
|
+
capName: "pipeline-analytics",
|
|
29652
|
+
capScope: "device",
|
|
29653
|
+
addonId: null,
|
|
29654
|
+
access: "create"
|
|
29655
|
+
},
|
|
29483
29656
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
29484
29657
|
capName: "pipeline-analytics",
|
|
29485
29658
|
capScope: "device",
|
|
@@ -29654,6 +29827,12 @@ Object.freeze({
|
|
|
29654
29827
|
addonId: null,
|
|
29655
29828
|
access: "view"
|
|
29656
29829
|
},
|
|
29830
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
29831
|
+
capName: "pipeline-analytics",
|
|
29832
|
+
capScope: "device",
|
|
29833
|
+
addonId: null,
|
|
29834
|
+
access: "view"
|
|
29835
|
+
},
|
|
29657
29836
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
29658
29837
|
capName: "pipeline-analytics",
|
|
29659
29838
|
capScope: "device",
|
|
@@ -29732,6 +29911,12 @@ Object.freeze({
|
|
|
29732
29911
|
addonId: null,
|
|
29733
29912
|
access: "create"
|
|
29734
29913
|
},
|
|
29914
|
+
"pipelineAnalytics.relocateMedia": {
|
|
29915
|
+
capName: "pipeline-analytics",
|
|
29916
|
+
capScope: "device",
|
|
29917
|
+
addonId: null,
|
|
29918
|
+
access: "create"
|
|
29919
|
+
},
|
|
29735
29920
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
29736
29921
|
capName: "pipeline-analytics",
|
|
29737
29922
|
capScope: "device",
|