@camstack/addon-tailscale 1.2.28 → 1.2.29
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/client/tailscale.addon.js +1 -1
- package/dist/client/tailscale.addon.mjs +1 -1
- package/dist/{dist-B3EqlLnX.mjs → dist-BBIgF6Kz.mjs} +249 -79
- package/dist/{dist-CdQI1dFQ.js → dist-D7-pccbD.js} +249 -79
- package/dist/ingress/tailscale-ingress.addon.js +1 -1
- package/dist/ingress/tailscale-ingress.addon.mjs +1 -1
- package/package.json +1 -1
|
@@ -24,7 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
24
24
|
enumerable: true
|
|
25
25
|
}) : target, mod));
|
|
26
26
|
//#endregion
|
|
27
|
-
const require_dist = require("../dist-
|
|
27
|
+
const require_dist = require("../dist-D7-pccbD.js");
|
|
28
28
|
let node_child_process = require("node:child_process");
|
|
29
29
|
let node_util = require("node:util");
|
|
30
30
|
let node_fs = require("node:fs");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as EventCategory, i as BaseAddon, n as networkAccessCapability, r as BOOT_RECOVERY_BACKOFF_MS, t as meshNetworkCapability } from "../dist-
|
|
1
|
+
import { a as EventCategory, i as BaseAddon, n as networkAccessCapability, r as BOOT_RECOVERY_BACKOFF_MS, t as meshNetworkCapability } from "../dist-BBIgF6Kz.mjs";
|
|
2
2
|
import { execFile, spawn } from "node:child_process";
|
|
3
3
|
import { promisify } from "node:util";
|
|
4
4
|
import * as fs from "node:fs";
|
|
@@ -6629,7 +6629,7 @@ function method(input, output, options) {
|
|
|
6629
6629
|
input,
|
|
6630
6630
|
output,
|
|
6631
6631
|
kind: options?.kind ?? "query",
|
|
6632
|
-
auth: options
|
|
6632
|
+
...options?.auth !== void 0 ? { auth: options.auth } : {},
|
|
6633
6633
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
6634
6634
|
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
6635
6635
|
timeoutMs: options?.timeoutMs
|
|
@@ -6649,7 +6649,7 @@ function systemMethod(input, output, options) {
|
|
|
6649
6649
|
}
|
|
6650
6650
|
var StaticDirOutputSchema$1 = object({ staticDir: string() });
|
|
6651
6651
|
var VersionOutputSchema$1 = object({ version: string() });
|
|
6652
|
-
method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
|
|
6652
|
+
method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
|
|
6653
6653
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
6654
6654
|
DeviceType["Camera"] = "camera";
|
|
6655
6655
|
DeviceType["Hub"] = "hub";
|
|
@@ -6970,7 +6970,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
6970
6970
|
}({});
|
|
6971
6971
|
var StaticDirOutputSchema = object({ staticDir: string() });
|
|
6972
6972
|
var VersionOutputSchema = object({ version: string() });
|
|
6973
|
-
method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
|
|
6973
|
+
method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
|
|
6974
6974
|
/**
|
|
6975
6975
|
* device-ops — device-scoped cap that unifies the per-IDevice operations
|
|
6976
6976
|
* previously routed through the `.device-ops` Moleculer bridge service.
|
|
@@ -7618,24 +7618,6 @@ var RecordingRetentionSchema = object({
|
|
|
7618
7618
|
maxSizeGb: number().min(0).optional()
|
|
7619
7619
|
});
|
|
7620
7620
|
/**
|
|
7621
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7622
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7623
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7624
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7625
|
-
*
|
|
7626
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7627
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7628
|
-
* preset changed over time renders every historical window at the dims it was
|
|
7629
|
-
* written with.
|
|
7630
|
-
*/
|
|
7631
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
7632
|
-
"minimal",
|
|
7633
|
-
"low",
|
|
7634
|
-
"standard",
|
|
7635
|
-
"high",
|
|
7636
|
-
"max"
|
|
7637
|
-
]);
|
|
7638
|
-
/**
|
|
7639
7621
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7640
7622
|
*
|
|
7641
7623
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -7643,7 +7625,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
7643
7625
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
7644
7626
|
*
|
|
7645
7627
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
7646
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
7628
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
7629
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
7630
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
7631
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
7632
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
7647
7633
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
7648
7634
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
7649
7635
|
*/
|
|
@@ -7666,14 +7652,7 @@ var RecordingConfigSchema = object({
|
|
|
7666
7652
|
* "off" is the absence of a covering band, never a band value.
|
|
7667
7653
|
*/
|
|
7668
7654
|
bands: array(RecordingBandSchema).default([]),
|
|
7669
|
-
retention: RecordingRetentionSchema.optional()
|
|
7670
|
-
/**
|
|
7671
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7672
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7673
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
7674
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7675
|
-
*/
|
|
7676
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7655
|
+
retention: RecordingRetentionSchema.optional()
|
|
7677
7656
|
}).strict();
|
|
7678
7657
|
/**
|
|
7679
7658
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -7749,10 +7728,11 @@ var RelocateFootageInputSchema = object({
|
|
|
7749
7728
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
7750
7729
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
7751
7730
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
7752
|
-
var
|
|
7731
|
+
var RelocateMediaInputSchema = object({
|
|
7753
7732
|
toLocationId: string(),
|
|
7754
7733
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
7755
|
-
})
|
|
7734
|
+
});
|
|
7735
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
7756
7736
|
/** The independently selectable logical storage classes. `recordings`
|
|
7757
7737
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
7758
7738
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8047,7 +8027,26 @@ var LabelDefinitionSchema = object({
|
|
|
8047
8027
|
description: string().optional(),
|
|
8048
8028
|
icon: string().optional()
|
|
8049
8029
|
});
|
|
8050
|
-
|
|
8030
|
+
/**
|
|
8031
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8032
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8033
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8034
|
+
* detection pipeline executor actually routes.
|
|
8035
|
+
*
|
|
8036
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8037
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8038
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8039
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8040
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8041
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8042
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8043
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8044
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8045
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8046
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8047
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8048
|
+
*/
|
|
8049
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8051
8050
|
mapping: record(string(), _enum([
|
|
8052
8051
|
"person",
|
|
8053
8052
|
"vehicle",
|
|
@@ -8252,7 +8251,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8252
8251
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8253
8252
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8254
8253
|
*/
|
|
8255
|
-
classMap:
|
|
8254
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8256
8255
|
});
|
|
8257
8256
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8258
8257
|
format: literal("openvino"),
|
|
@@ -8282,7 +8281,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8282
8281
|
"segmentation"
|
|
8283
8282
|
]),
|
|
8284
8283
|
faceAlignment: boolean().optional(),
|
|
8285
|
-
classMap:
|
|
8284
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8286
8285
|
});
|
|
8287
8286
|
var ConvertResultSchema = object({
|
|
8288
8287
|
entry: ModelCatalogEntrySchema,
|
|
@@ -9145,7 +9144,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
9145
9144
|
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
9146
9145
|
sectionLabel: string().optional()
|
|
9147
9146
|
});
|
|
9148
|
-
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
9147
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
|
|
9149
9148
|
var AddonHttpRouteSchema = object({
|
|
9150
9149
|
method: _enum([
|
|
9151
9150
|
"GET",
|
|
@@ -9380,7 +9379,7 @@ var WidgetMetadataSchema = object({
|
|
|
9380
9379
|
defaultColumns: number().int().min(1).max(12).default(6),
|
|
9381
9380
|
defaultRows: number().int().min(1).max(12).default(1)
|
|
9382
9381
|
});
|
|
9383
|
-
method(_void(), array(WidgetMetadataSchema).readonly());
|
|
9382
|
+
method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
|
|
9384
9383
|
/**
|
|
9385
9384
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
9386
9385
|
* surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
|
|
@@ -10902,7 +10901,7 @@ var CustomModelDescriptorSchema = object({
|
|
|
10902
10901
|
stepId: string(),
|
|
10903
10902
|
entry: ModelCatalogEntrySchema
|
|
10904
10903
|
});
|
|
10905
|
-
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
10904
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
|
|
10906
10905
|
/**
|
|
10907
10906
|
* Query filter for settings-store collections.
|
|
10908
10907
|
*/
|
|
@@ -10989,7 +10988,8 @@ method(object({
|
|
|
10989
10988
|
}), _void(), { kind: "mutation" }), method(object({
|
|
10990
10989
|
namespace: string().optional(),
|
|
10991
10990
|
collection: string(),
|
|
10992
|
-
filter: QueryFilterSchema.optional()
|
|
10991
|
+
filter: QueryFilterSchema.optional(),
|
|
10992
|
+
columns: array(string()).readonly().optional()
|
|
10993
10993
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
10994
10994
|
namespace: string().optional(),
|
|
10995
10995
|
collection: string(),
|
|
@@ -11052,46 +11052,87 @@ var EngineInfoSchema = object({
|
|
|
11052
11052
|
kind: _enum(["relational", "vector"]),
|
|
11053
11053
|
displayName: string()
|
|
11054
11054
|
});
|
|
11055
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11055
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11056
11056
|
namespace: string().optional(),
|
|
11057
11057
|
collection: string(),
|
|
11058
11058
|
key: string()
|
|
11059
|
-
}), unknown()), method(object({
|
|
11059
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11060
11060
|
namespace: string().optional(),
|
|
11061
11061
|
collection: string(),
|
|
11062
11062
|
key: string(),
|
|
11063
11063
|
value: unknown()
|
|
11064
|
-
}), _void(), {
|
|
11064
|
+
}), _void(), {
|
|
11065
|
+
kind: "mutation",
|
|
11066
|
+
auth: "admin"
|
|
11067
|
+
}), method(object({
|
|
11065
11068
|
namespace: string().optional(),
|
|
11066
11069
|
collection: string(),
|
|
11067
|
-
filter: QueryFilterSchema.optional()
|
|
11068
|
-
|
|
11070
|
+
filter: QueryFilterSchema.optional(),
|
|
11071
|
+
/**
|
|
11072
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11073
|
+
*
|
|
11074
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11075
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11076
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11077
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11078
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11079
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11080
|
+
*
|
|
11081
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11082
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11083
|
+
* interface the engine destructures from. The field existed on both
|
|
11084
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11085
|
+
* registered provider against `InferProvider<cap>` —
|
|
11086
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11087
|
+
*
|
|
11088
|
+
* It is declared here anyway, and must stay in step with
|
|
11089
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11090
|
+
* to be able to see that this call carries a projection.
|
|
11091
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11092
|
+
*/
|
|
11093
|
+
columns: array(string()).readonly().optional()
|
|
11094
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11069
11095
|
namespace: string().optional(),
|
|
11070
11096
|
collection: string(),
|
|
11071
11097
|
record: SettingsRecordSchema
|
|
11072
|
-
}), _void(), {
|
|
11098
|
+
}), _void(), {
|
|
11099
|
+
kind: "mutation",
|
|
11100
|
+
auth: "admin"
|
|
11101
|
+
}), method(object({
|
|
11073
11102
|
namespace: string().optional(),
|
|
11074
11103
|
collection: string(),
|
|
11075
11104
|
id: string(),
|
|
11076
11105
|
data: record(string(), unknown())
|
|
11077
|
-
}), _void(), {
|
|
11106
|
+
}), _void(), {
|
|
11107
|
+
kind: "mutation",
|
|
11108
|
+
auth: "admin"
|
|
11109
|
+
}), method(object({
|
|
11078
11110
|
namespace: string().optional(),
|
|
11079
11111
|
collection: string(),
|
|
11080
11112
|
key: string()
|
|
11081
|
-
}), _void(), {
|
|
11113
|
+
}), _void(), {
|
|
11114
|
+
kind: "mutation",
|
|
11115
|
+
auth: "admin"
|
|
11116
|
+
}), method(object({
|
|
11082
11117
|
namespace: string().optional(),
|
|
11083
11118
|
collection: string(),
|
|
11084
11119
|
filter: MutationFilterSchema
|
|
11085
|
-
}), object({ deleted: number().int() }), {
|
|
11120
|
+
}), object({ deleted: number().int() }), {
|
|
11121
|
+
kind: "mutation",
|
|
11122
|
+
auth: "admin"
|
|
11123
|
+
}), method(object({
|
|
11086
11124
|
namespace: string().optional(),
|
|
11087
11125
|
collection: string(),
|
|
11088
11126
|
filter: MutationFilterSchema,
|
|
11089
11127
|
data: record(string(), unknown())
|
|
11090
|
-
}), object({ updated: number().int() }), {
|
|
11128
|
+
}), object({ updated: number().int() }), {
|
|
11129
|
+
kind: "mutation",
|
|
11130
|
+
auth: "admin"
|
|
11131
|
+
}), method(object({
|
|
11091
11132
|
namespace: string().optional(),
|
|
11092
11133
|
collection: string(),
|
|
11093
11134
|
filter: QueryFilterSchema.optional()
|
|
11094
|
-
}), number()), method(object({
|
|
11135
|
+
}), number(), { auth: "admin" }), method(object({
|
|
11095
11136
|
namespace: string().optional(),
|
|
11096
11137
|
collection: string(),
|
|
11097
11138
|
field: string(),
|
|
@@ -11101,15 +11142,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11101
11142
|
}), array(object({
|
|
11102
11143
|
bucket: number().int(),
|
|
11103
11144
|
count: number().int()
|
|
11104
|
-
})).readonly()), method(object({
|
|
11145
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11105
11146
|
namespace: string().optional(),
|
|
11106
11147
|
collection: string()
|
|
11107
|
-
}), boolean()), method(object({
|
|
11148
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11108
11149
|
namespace: string().optional(),
|
|
11109
11150
|
collection: string(),
|
|
11110
11151
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11111
11152
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11112
|
-
}), _void(), {
|
|
11153
|
+
}), _void(), {
|
|
11154
|
+
kind: "mutation",
|
|
11155
|
+
auth: "admin"
|
|
11156
|
+
});
|
|
11113
11157
|
/**
|
|
11114
11158
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11115
11159
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12237,7 +12281,7 @@ method(object({
|
|
|
12237
12281
|
crop: _instanceof(Uint8Array),
|
|
12238
12282
|
width: number(),
|
|
12239
12283
|
height: number()
|
|
12240
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12284
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12241
12285
|
/**
|
|
12242
12286
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12243
12287
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -12530,19 +12574,22 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
12530
12574
|
runtime: ManagedRuntimeConfigSchema,
|
|
12531
12575
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
12532
12576
|
timeoutMs: number().int().positive().optional()
|
|
12533
|
-
}), LlmGenerateResultSchema, {
|
|
12577
|
+
}), LlmGenerateResultSchema, {
|
|
12578
|
+
kind: "mutation",
|
|
12579
|
+
auth: "admin"
|
|
12580
|
+
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
12534
12581
|
kind: "mutation",
|
|
12535
12582
|
auth: "admin"
|
|
12536
12583
|
}), method(object({}), _void(), {
|
|
12537
12584
|
kind: "mutation",
|
|
12538
12585
|
auth: "admin"
|
|
12539
|
-
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12586
|
+
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12540
12587
|
kind: "mutation",
|
|
12541
12588
|
auth: "admin"
|
|
12542
12589
|
}), method(object({ file: string() }), _void(), {
|
|
12543
12590
|
kind: "mutation",
|
|
12544
12591
|
auth: "admin"
|
|
12545
|
-
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
12592
|
+
}), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
|
|
12546
12593
|
/**
|
|
12547
12594
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
12548
12595
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
@@ -16032,7 +16079,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
16032
16079
|
*/
|
|
16033
16080
|
refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
|
|
16034
16081
|
});
|
|
16035
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16082
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
16036
16083
|
/**
|
|
16037
16084
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
16038
16085
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17227,6 +17274,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
17227
17274
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17228
17275
|
kind: "mutation",
|
|
17229
17276
|
auth: "admin"
|
|
17277
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17278
|
+
kind: "mutation",
|
|
17279
|
+
auth: "admin"
|
|
17280
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17281
|
+
kind: "query",
|
|
17282
|
+
auth: "admin"
|
|
17283
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17284
|
+
kind: "mutation",
|
|
17285
|
+
auth: "admin"
|
|
17230
17286
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17231
17287
|
kind: "query",
|
|
17232
17288
|
auth: "admin"
|
|
@@ -17381,6 +17437,11 @@ object({
|
|
|
17381
17437
|
"jpeg"
|
|
17382
17438
|
])
|
|
17383
17439
|
});
|
|
17440
|
+
/**
|
|
17441
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
17442
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
17443
|
+
* other process or execution group.
|
|
17444
|
+
*/
|
|
17384
17445
|
var FrameRefSchema = object({
|
|
17385
17446
|
registryId: string().min(1),
|
|
17386
17447
|
id: string().min(1),
|
|
@@ -19546,7 +19607,7 @@ method(object({
|
|
|
19546
19607
|
* linking rather than produce an eternal token.
|
|
19547
19608
|
*/
|
|
19548
19609
|
ttlSec: union([number().int().positive(), literal("never")]).optional()
|
|
19549
|
-
}), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
|
|
19610
|
+
}), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
|
|
19550
19611
|
var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
19551
19612
|
providerId: string().min(1),
|
|
19552
19613
|
displayName: string().min(1),
|
|
@@ -19641,10 +19702,13 @@ var EvictResultSchema = object({
|
|
|
19641
19702
|
/** True when the provider has nothing left it is willing to drop on this location. */
|
|
19642
19703
|
exhausted: boolean()
|
|
19643
19704
|
});
|
|
19644
|
-
method(object({ locationId: string() }), EvictableUsageSchema), method(object({
|
|
19705
|
+
method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
|
|
19645
19706
|
locationId: string(),
|
|
19646
19707
|
targetBytes: number().int().positive()
|
|
19647
|
-
}), EvictResultSchema, {
|
|
19708
|
+
}), EvictResultSchema, {
|
|
19709
|
+
kind: "mutation",
|
|
19710
|
+
auth: "admin"
|
|
19711
|
+
});
|
|
19648
19712
|
method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
|
|
19649
19713
|
kind: "mutation",
|
|
19650
19714
|
auth: "admin"
|
|
@@ -19704,26 +19768,50 @@ var ReadChunkInputSchema = object({
|
|
|
19704
19768
|
length: number()
|
|
19705
19769
|
});
|
|
19706
19770
|
var EndDownloadInputSchema = object({ downloadId: string() });
|
|
19707
|
-
method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
19771
|
+
method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
19708
19772
|
location: StorageLocationSchema,
|
|
19709
19773
|
relativePath: string()
|
|
19710
|
-
}), string()), method(object({
|
|
19774
|
+
}), string(), { auth: "admin" }), method(object({
|
|
19711
19775
|
location: StorageLocationSchema,
|
|
19712
19776
|
relativePath: string(),
|
|
19713
19777
|
data: _instanceof(Uint8Array)
|
|
19714
|
-
}), _void(), {
|
|
19778
|
+
}), _void(), {
|
|
19779
|
+
kind: "mutation",
|
|
19780
|
+
auth: "admin"
|
|
19781
|
+
}), method(object({
|
|
19715
19782
|
location: StorageLocationSchema,
|
|
19716
19783
|
relativePath: string()
|
|
19717
|
-
}), _instanceof(Uint8Array)), method(object({
|
|
19784
|
+
}), _instanceof(Uint8Array), { auth: "admin" }), method(object({
|
|
19718
19785
|
location: StorageLocationSchema,
|
|
19719
19786
|
relativePath: string()
|
|
19720
|
-
}), boolean()), method(object({
|
|
19787
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
19721
19788
|
location: StorageLocationSchema,
|
|
19722
19789
|
prefix: string().optional()
|
|
19723
|
-
}), array(string()).readonly()), method(object({
|
|
19790
|
+
}), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
19724
19791
|
location: StorageLocationSchema,
|
|
19725
19792
|
relativePath: string()
|
|
19726
|
-
}), _void(), {
|
|
19793
|
+
}), _void(), {
|
|
19794
|
+
kind: "mutation",
|
|
19795
|
+
auth: "admin"
|
|
19796
|
+
}), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
|
|
19797
|
+
kind: "mutation",
|
|
19798
|
+
auth: "admin"
|
|
19799
|
+
}), method(WriteChunkInputSchema, _void(), {
|
|
19800
|
+
kind: "mutation",
|
|
19801
|
+
auth: "admin"
|
|
19802
|
+
}), method(FinalizeUploadInputSchema, _void(), {
|
|
19803
|
+
kind: "mutation",
|
|
19804
|
+
auth: "admin"
|
|
19805
|
+
}), method(AbortUploadInputSchema, _void(), {
|
|
19806
|
+
kind: "mutation",
|
|
19807
|
+
auth: "admin"
|
|
19808
|
+
}), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
|
|
19809
|
+
kind: "mutation",
|
|
19810
|
+
auth: "admin"
|
|
19811
|
+
}), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
|
|
19812
|
+
kind: "mutation",
|
|
19813
|
+
auth: "admin"
|
|
19814
|
+
});
|
|
19727
19815
|
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
19728
19816
|
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
19729
19817
|
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
@@ -19981,7 +20069,8 @@ method(object({
|
|
|
19981
20069
|
access: "create"
|
|
19982
20070
|
}), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
|
|
19983
20071
|
kind: "mutation",
|
|
19984
|
-
access: "view"
|
|
20072
|
+
access: "view",
|
|
20073
|
+
auth: "admin"
|
|
19985
20074
|
}), method(object({
|
|
19986
20075
|
/** Required — the user the assertion belongs to (verified). */
|
|
19987
20076
|
userId: string(),
|
|
@@ -19989,10 +20078,12 @@ method(object({
|
|
|
19989
20078
|
response: record(string(), unknown())
|
|
19990
20079
|
}), object({ verified: boolean() }), {
|
|
19991
20080
|
kind: "mutation",
|
|
19992
|
-
access: "view"
|
|
20081
|
+
access: "view",
|
|
20082
|
+
auth: "admin"
|
|
19993
20083
|
}), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
|
|
19994
20084
|
kind: "mutation",
|
|
19995
|
-
access: "view"
|
|
20085
|
+
access: "view",
|
|
20086
|
+
auth: "admin"
|
|
19996
20087
|
}), method(object({
|
|
19997
20088
|
/** AuthenticationResponseJSON from the browser. */
|
|
19998
20089
|
response: record(string(), unknown()) }), object({
|
|
@@ -20000,7 +20091,8 @@ response: record(string(), unknown()) }), object({
|
|
|
20000
20091
|
userId: string().nullable()
|
|
20001
20092
|
}), {
|
|
20002
20093
|
kind: "mutation",
|
|
20003
|
-
access: "view"
|
|
20094
|
+
access: "view",
|
|
20095
|
+
auth: "admin"
|
|
20004
20096
|
}), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
|
|
20005
20097
|
userId: string(),
|
|
20006
20098
|
credentialId: string()
|
|
@@ -20172,7 +20264,19 @@ var VectorStatsResultSchema = object({
|
|
|
20172
20264
|
/** False when the backend ranks approximately. */
|
|
20173
20265
|
exact: boolean()
|
|
20174
20266
|
});
|
|
20175
|
-
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20267
|
+
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20268
|
+
kind: "mutation",
|
|
20269
|
+
auth: "admin"
|
|
20270
|
+
}), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
|
|
20271
|
+
kind: "mutation",
|
|
20272
|
+
auth: "admin"
|
|
20273
|
+
}), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
|
|
20274
|
+
kind: "mutation",
|
|
20275
|
+
auth: "admin"
|
|
20276
|
+
}), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
|
|
20277
|
+
kind: "mutation",
|
|
20278
|
+
auth: "admin"
|
|
20279
|
+
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
20176
20280
|
var ClipSchema = object({
|
|
20177
20281
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
20178
20282
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -21895,7 +21999,27 @@ var MediaFileLiteSchema$1 = object({
|
|
|
21895
21999
|
sizeBytes: number(),
|
|
21896
22000
|
timestamp: number()
|
|
21897
22001
|
});
|
|
21898
|
-
method(
|
|
22002
|
+
method(object({
|
|
22003
|
+
/**
|
|
22004
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
22005
|
+
*
|
|
22006
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
22007
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
22008
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
22009
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
22010
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
22011
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
22012
|
+
*
|
|
22013
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
22014
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
22015
|
+
*
|
|
22016
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
22017
|
+
* next train** — the hub router validates cap inputs against its own
|
|
22018
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
22019
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
22020
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
22021
|
+
*/
|
|
22022
|
+
includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
|
|
21899
22023
|
kind: "mutation",
|
|
21900
22024
|
auth: "admin"
|
|
21901
22025
|
}), method(object({
|
|
@@ -24103,8 +24227,10 @@ var PlateInfoSchema = object({
|
|
|
24103
24227
|
keyFrameMediaKey: string().optional(),
|
|
24104
24228
|
base64: string().optional(),
|
|
24105
24229
|
/**
|
|
24106
|
-
* Same crop as a data-plane URL
|
|
24107
|
-
* never inlines JPEG; `listPlates`
|
|
24230
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
24231
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
24232
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
24233
|
+
* left at its `true` default.
|
|
24108
24234
|
*/
|
|
24109
24235
|
cropUrl: string().optional()
|
|
24110
24236
|
});
|
|
@@ -24124,14 +24250,34 @@ var PlateClusterSchema = object({
|
|
|
24124
24250
|
});
|
|
24125
24251
|
method(object({
|
|
24126
24252
|
deviceId: number().int().optional(),
|
|
24127
|
-
limit: number().int().positive().optional()
|
|
24253
|
+
limit: number().int().positive().optional(),
|
|
24254
|
+
/**
|
|
24255
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
24256
|
+
* behaviour, kept so no caller breaks.
|
|
24257
|
+
*
|
|
24258
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
24259
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
24260
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
24261
|
+
* metadata without them — and the browser then caches the images.
|
|
24262
|
+
*
|
|
24263
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
24264
|
+
* plates were the one gallery list left without it.
|
|
24265
|
+
*
|
|
24266
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
24267
|
+
* next train.** The hub router validates cap inputs against its own
|
|
24268
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
24269
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
24270
|
+
*/
|
|
24271
|
+
includeCrops: boolean().optional()
|
|
24128
24272
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
24129
24273
|
deviceId: number().int(),
|
|
24130
24274
|
trackId: string()
|
|
24131
24275
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
24132
24276
|
text: string().min(1),
|
|
24133
24277
|
maxDistance: number().int().min(0).optional(),
|
|
24134
|
-
limit: number().int().positive().optional()
|
|
24278
|
+
limit: number().int().positive().optional(),
|
|
24279
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
24280
|
+
includeCrops: boolean().optional()
|
|
24135
24281
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
24136
24282
|
maxDistance: number().int().min(0).optional(),
|
|
24137
24283
|
minClusterSize: number().int().min(2).optional(),
|
|
@@ -24145,7 +24291,13 @@ method(object({
|
|
|
24145
24291
|
}), method(object({ plateId: string() }), _void(), {
|
|
24146
24292
|
kind: "mutation",
|
|
24147
24293
|
auth: "admin"
|
|
24148
|
-
}), method(
|
|
24294
|
+
}), method(object({
|
|
24295
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
24296
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
24297
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
24298
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
24299
|
+
* resolves to `false` and is exactly the intended default. */
|
|
24300
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
24149
24301
|
kind: "mutation",
|
|
24150
24302
|
auth: "admin"
|
|
24151
24303
|
}), method(object({
|
|
@@ -29522,6 +29674,12 @@ Object.freeze({
|
|
|
29522
29674
|
addonId: null,
|
|
29523
29675
|
access: "create"
|
|
29524
29676
|
},
|
|
29677
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
29678
|
+
capName: "pipeline-analytics",
|
|
29679
|
+
capScope: "device",
|
|
29680
|
+
addonId: null,
|
|
29681
|
+
access: "create"
|
|
29682
|
+
},
|
|
29525
29683
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
29526
29684
|
capName: "pipeline-analytics",
|
|
29527
29685
|
capScope: "device",
|
|
@@ -29696,6 +29854,12 @@ Object.freeze({
|
|
|
29696
29854
|
addonId: null,
|
|
29697
29855
|
access: "view"
|
|
29698
29856
|
},
|
|
29857
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
29858
|
+
capName: "pipeline-analytics",
|
|
29859
|
+
capScope: "device",
|
|
29860
|
+
addonId: null,
|
|
29861
|
+
access: "view"
|
|
29862
|
+
},
|
|
29699
29863
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
29700
29864
|
capName: "pipeline-analytics",
|
|
29701
29865
|
capScope: "device",
|
|
@@ -29774,6 +29938,12 @@ Object.freeze({
|
|
|
29774
29938
|
addonId: null,
|
|
29775
29939
|
access: "create"
|
|
29776
29940
|
},
|
|
29941
|
+
"pipelineAnalytics.relocateMedia": {
|
|
29942
|
+
capName: "pipeline-analytics",
|
|
29943
|
+
capScope: "device",
|
|
29944
|
+
addonId: null,
|
|
29945
|
+
access: "create"
|
|
29946
|
+
},
|
|
29777
29947
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
29778
29948
|
capName: "pipeline-analytics",
|
|
29779
29949
|
capScope: "device",
|
|
@@ -6629,7 +6629,7 @@ function method(input, output, options) {
|
|
|
6629
6629
|
input,
|
|
6630
6630
|
output,
|
|
6631
6631
|
kind: options?.kind ?? "query",
|
|
6632
|
-
auth: options
|
|
6632
|
+
...options?.auth !== void 0 ? { auth: options.auth } : {},
|
|
6633
6633
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
6634
6634
|
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
6635
6635
|
timeoutMs: options?.timeoutMs
|
|
@@ -6649,7 +6649,7 @@ function systemMethod(input, output, options) {
|
|
|
6649
6649
|
}
|
|
6650
6650
|
var StaticDirOutputSchema$1 = object({ staticDir: string() });
|
|
6651
6651
|
var VersionOutputSchema$1 = object({ version: string() });
|
|
6652
|
-
method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
|
|
6652
|
+
method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
|
|
6653
6653
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
6654
6654
|
DeviceType["Camera"] = "camera";
|
|
6655
6655
|
DeviceType["Hub"] = "hub";
|
|
@@ -6970,7 +6970,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
6970
6970
|
}({});
|
|
6971
6971
|
var StaticDirOutputSchema = object({ staticDir: string() });
|
|
6972
6972
|
var VersionOutputSchema = object({ version: string() });
|
|
6973
|
-
method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
|
|
6973
|
+
method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
|
|
6974
6974
|
/**
|
|
6975
6975
|
* device-ops — device-scoped cap that unifies the per-IDevice operations
|
|
6976
6976
|
* previously routed through the `.device-ops` Moleculer bridge service.
|
|
@@ -7618,24 +7618,6 @@ var RecordingRetentionSchema = object({
|
|
|
7618
7618
|
maxSizeGb: number().min(0).optional()
|
|
7619
7619
|
});
|
|
7620
7620
|
/**
|
|
7621
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7622
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7623
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7624
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7625
|
-
*
|
|
7626
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7627
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7628
|
-
* preset changed over time renders every historical window at the dims it was
|
|
7629
|
-
* written with.
|
|
7630
|
-
*/
|
|
7631
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
7632
|
-
"minimal",
|
|
7633
|
-
"low",
|
|
7634
|
-
"standard",
|
|
7635
|
-
"high",
|
|
7636
|
-
"max"
|
|
7637
|
-
]);
|
|
7638
|
-
/**
|
|
7639
7621
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7640
7622
|
*
|
|
7641
7623
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -7643,7 +7625,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
7643
7625
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
7644
7626
|
*
|
|
7645
7627
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
7646
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
7628
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
7629
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
7630
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
7631
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
7632
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
7647
7633
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
7648
7634
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
7649
7635
|
*/
|
|
@@ -7666,14 +7652,7 @@ var RecordingConfigSchema = object({
|
|
|
7666
7652
|
* "off" is the absence of a covering band, never a band value.
|
|
7667
7653
|
*/
|
|
7668
7654
|
bands: array(RecordingBandSchema).default([]),
|
|
7669
|
-
retention: RecordingRetentionSchema.optional()
|
|
7670
|
-
/**
|
|
7671
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7672
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7673
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
7674
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7675
|
-
*/
|
|
7676
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7655
|
+
retention: RecordingRetentionSchema.optional()
|
|
7677
7656
|
}).strict();
|
|
7678
7657
|
/**
|
|
7679
7658
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -7749,10 +7728,11 @@ var RelocateFootageInputSchema = object({
|
|
|
7749
7728
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
7750
7729
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
7751
7730
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
7752
|
-
var
|
|
7731
|
+
var RelocateMediaInputSchema = object({
|
|
7753
7732
|
toLocationId: string(),
|
|
7754
7733
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
7755
|
-
})
|
|
7734
|
+
});
|
|
7735
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
7756
7736
|
/** The independently selectable logical storage classes. `recordings`
|
|
7757
7737
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
7758
7738
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8047,7 +8027,26 @@ var LabelDefinitionSchema = object({
|
|
|
8047
8027
|
description: string().optional(),
|
|
8048
8028
|
icon: string().optional()
|
|
8049
8029
|
});
|
|
8050
|
-
|
|
8030
|
+
/**
|
|
8031
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8032
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8033
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8034
|
+
* detection pipeline executor actually routes.
|
|
8035
|
+
*
|
|
8036
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8037
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8038
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8039
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8040
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8041
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8042
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8043
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8044
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8045
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8046
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8047
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8048
|
+
*/
|
|
8049
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8051
8050
|
mapping: record(string(), _enum([
|
|
8052
8051
|
"person",
|
|
8053
8052
|
"vehicle",
|
|
@@ -8252,7 +8251,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8252
8251
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8253
8252
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8254
8253
|
*/
|
|
8255
|
-
classMap:
|
|
8254
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8256
8255
|
});
|
|
8257
8256
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8258
8257
|
format: literal("openvino"),
|
|
@@ -8282,7 +8281,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8282
8281
|
"segmentation"
|
|
8283
8282
|
]),
|
|
8284
8283
|
faceAlignment: boolean().optional(),
|
|
8285
|
-
classMap:
|
|
8284
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8286
8285
|
});
|
|
8287
8286
|
var ConvertResultSchema = object({
|
|
8288
8287
|
entry: ModelCatalogEntrySchema,
|
|
@@ -9145,7 +9144,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
9145
9144
|
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
9146
9145
|
sectionLabel: string().optional()
|
|
9147
9146
|
});
|
|
9148
|
-
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
9147
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
|
|
9149
9148
|
var AddonHttpRouteSchema = object({
|
|
9150
9149
|
method: _enum([
|
|
9151
9150
|
"GET",
|
|
@@ -9380,7 +9379,7 @@ var WidgetMetadataSchema = object({
|
|
|
9380
9379
|
defaultColumns: number().int().min(1).max(12).default(6),
|
|
9381
9380
|
defaultRows: number().int().min(1).max(12).default(1)
|
|
9382
9381
|
});
|
|
9383
|
-
method(_void(), array(WidgetMetadataSchema).readonly());
|
|
9382
|
+
method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
|
|
9384
9383
|
/**
|
|
9385
9384
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
9386
9385
|
* surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
|
|
@@ -10902,7 +10901,7 @@ var CustomModelDescriptorSchema = object({
|
|
|
10902
10901
|
stepId: string(),
|
|
10903
10902
|
entry: ModelCatalogEntrySchema
|
|
10904
10903
|
});
|
|
10905
|
-
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
10904
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
|
|
10906
10905
|
/**
|
|
10907
10906
|
* Query filter for settings-store collections.
|
|
10908
10907
|
*/
|
|
@@ -10989,7 +10988,8 @@ method(object({
|
|
|
10989
10988
|
}), _void(), { kind: "mutation" }), method(object({
|
|
10990
10989
|
namespace: string().optional(),
|
|
10991
10990
|
collection: string(),
|
|
10992
|
-
filter: QueryFilterSchema.optional()
|
|
10991
|
+
filter: QueryFilterSchema.optional(),
|
|
10992
|
+
columns: array(string()).readonly().optional()
|
|
10993
10993
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
10994
10994
|
namespace: string().optional(),
|
|
10995
10995
|
collection: string(),
|
|
@@ -11052,46 +11052,87 @@ var EngineInfoSchema = object({
|
|
|
11052
11052
|
kind: _enum(["relational", "vector"]),
|
|
11053
11053
|
displayName: string()
|
|
11054
11054
|
});
|
|
11055
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11055
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11056
11056
|
namespace: string().optional(),
|
|
11057
11057
|
collection: string(),
|
|
11058
11058
|
key: string()
|
|
11059
|
-
}), unknown()), method(object({
|
|
11059
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11060
11060
|
namespace: string().optional(),
|
|
11061
11061
|
collection: string(),
|
|
11062
11062
|
key: string(),
|
|
11063
11063
|
value: unknown()
|
|
11064
|
-
}), _void(), {
|
|
11064
|
+
}), _void(), {
|
|
11065
|
+
kind: "mutation",
|
|
11066
|
+
auth: "admin"
|
|
11067
|
+
}), method(object({
|
|
11065
11068
|
namespace: string().optional(),
|
|
11066
11069
|
collection: string(),
|
|
11067
|
-
filter: QueryFilterSchema.optional()
|
|
11068
|
-
|
|
11070
|
+
filter: QueryFilterSchema.optional(),
|
|
11071
|
+
/**
|
|
11072
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11073
|
+
*
|
|
11074
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11075
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11076
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11077
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11078
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11079
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11080
|
+
*
|
|
11081
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11082
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11083
|
+
* interface the engine destructures from. The field existed on both
|
|
11084
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11085
|
+
* registered provider against `InferProvider<cap>` —
|
|
11086
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11087
|
+
*
|
|
11088
|
+
* It is declared here anyway, and must stay in step with
|
|
11089
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11090
|
+
* to be able to see that this call carries a projection.
|
|
11091
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11092
|
+
*/
|
|
11093
|
+
columns: array(string()).readonly().optional()
|
|
11094
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11069
11095
|
namespace: string().optional(),
|
|
11070
11096
|
collection: string(),
|
|
11071
11097
|
record: SettingsRecordSchema
|
|
11072
|
-
}), _void(), {
|
|
11098
|
+
}), _void(), {
|
|
11099
|
+
kind: "mutation",
|
|
11100
|
+
auth: "admin"
|
|
11101
|
+
}), method(object({
|
|
11073
11102
|
namespace: string().optional(),
|
|
11074
11103
|
collection: string(),
|
|
11075
11104
|
id: string(),
|
|
11076
11105
|
data: record(string(), unknown())
|
|
11077
|
-
}), _void(), {
|
|
11106
|
+
}), _void(), {
|
|
11107
|
+
kind: "mutation",
|
|
11108
|
+
auth: "admin"
|
|
11109
|
+
}), method(object({
|
|
11078
11110
|
namespace: string().optional(),
|
|
11079
11111
|
collection: string(),
|
|
11080
11112
|
key: string()
|
|
11081
|
-
}), _void(), {
|
|
11113
|
+
}), _void(), {
|
|
11114
|
+
kind: "mutation",
|
|
11115
|
+
auth: "admin"
|
|
11116
|
+
}), method(object({
|
|
11082
11117
|
namespace: string().optional(),
|
|
11083
11118
|
collection: string(),
|
|
11084
11119
|
filter: MutationFilterSchema
|
|
11085
|
-
}), object({ deleted: number().int() }), {
|
|
11120
|
+
}), object({ deleted: number().int() }), {
|
|
11121
|
+
kind: "mutation",
|
|
11122
|
+
auth: "admin"
|
|
11123
|
+
}), method(object({
|
|
11086
11124
|
namespace: string().optional(),
|
|
11087
11125
|
collection: string(),
|
|
11088
11126
|
filter: MutationFilterSchema,
|
|
11089
11127
|
data: record(string(), unknown())
|
|
11090
|
-
}), object({ updated: number().int() }), {
|
|
11128
|
+
}), object({ updated: number().int() }), {
|
|
11129
|
+
kind: "mutation",
|
|
11130
|
+
auth: "admin"
|
|
11131
|
+
}), method(object({
|
|
11091
11132
|
namespace: string().optional(),
|
|
11092
11133
|
collection: string(),
|
|
11093
11134
|
filter: QueryFilterSchema.optional()
|
|
11094
|
-
}), number()), method(object({
|
|
11135
|
+
}), number(), { auth: "admin" }), method(object({
|
|
11095
11136
|
namespace: string().optional(),
|
|
11096
11137
|
collection: string(),
|
|
11097
11138
|
field: string(),
|
|
@@ -11101,15 +11142,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11101
11142
|
}), array(object({
|
|
11102
11143
|
bucket: number().int(),
|
|
11103
11144
|
count: number().int()
|
|
11104
|
-
})).readonly()), method(object({
|
|
11145
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11105
11146
|
namespace: string().optional(),
|
|
11106
11147
|
collection: string()
|
|
11107
|
-
}), boolean()), method(object({
|
|
11148
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11108
11149
|
namespace: string().optional(),
|
|
11109
11150
|
collection: string(),
|
|
11110
11151
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11111
11152
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11112
|
-
}), _void(), {
|
|
11153
|
+
}), _void(), {
|
|
11154
|
+
kind: "mutation",
|
|
11155
|
+
auth: "admin"
|
|
11156
|
+
});
|
|
11113
11157
|
/**
|
|
11114
11158
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11115
11159
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12237,7 +12281,7 @@ method(object({
|
|
|
12237
12281
|
crop: _instanceof(Uint8Array),
|
|
12238
12282
|
width: number(),
|
|
12239
12283
|
height: number()
|
|
12240
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12284
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12241
12285
|
/**
|
|
12242
12286
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12243
12287
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -12530,19 +12574,22 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
12530
12574
|
runtime: ManagedRuntimeConfigSchema,
|
|
12531
12575
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
12532
12576
|
timeoutMs: number().int().positive().optional()
|
|
12533
|
-
}), LlmGenerateResultSchema, {
|
|
12577
|
+
}), LlmGenerateResultSchema, {
|
|
12578
|
+
kind: "mutation",
|
|
12579
|
+
auth: "admin"
|
|
12580
|
+
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
12534
12581
|
kind: "mutation",
|
|
12535
12582
|
auth: "admin"
|
|
12536
12583
|
}), method(object({}), _void(), {
|
|
12537
12584
|
kind: "mutation",
|
|
12538
12585
|
auth: "admin"
|
|
12539
|
-
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12586
|
+
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12540
12587
|
kind: "mutation",
|
|
12541
12588
|
auth: "admin"
|
|
12542
12589
|
}), method(object({ file: string() }), _void(), {
|
|
12543
12590
|
kind: "mutation",
|
|
12544
12591
|
auth: "admin"
|
|
12545
|
-
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
12592
|
+
}), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
|
|
12546
12593
|
/**
|
|
12547
12594
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
12548
12595
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
@@ -16032,7 +16079,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
16032
16079
|
*/
|
|
16033
16080
|
refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
|
|
16034
16081
|
});
|
|
16035
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16082
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
16036
16083
|
/**
|
|
16037
16084
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
16038
16085
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17227,6 +17274,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
17227
17274
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17228
17275
|
kind: "mutation",
|
|
17229
17276
|
auth: "admin"
|
|
17277
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17278
|
+
kind: "mutation",
|
|
17279
|
+
auth: "admin"
|
|
17280
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17281
|
+
kind: "query",
|
|
17282
|
+
auth: "admin"
|
|
17283
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17284
|
+
kind: "mutation",
|
|
17285
|
+
auth: "admin"
|
|
17230
17286
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17231
17287
|
kind: "query",
|
|
17232
17288
|
auth: "admin"
|
|
@@ -17381,6 +17437,11 @@ object({
|
|
|
17381
17437
|
"jpeg"
|
|
17382
17438
|
])
|
|
17383
17439
|
});
|
|
17440
|
+
/**
|
|
17441
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
17442
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
17443
|
+
* other process or execution group.
|
|
17444
|
+
*/
|
|
17384
17445
|
var FrameRefSchema = object({
|
|
17385
17446
|
registryId: string().min(1),
|
|
17386
17447
|
id: string().min(1),
|
|
@@ -19546,7 +19607,7 @@ method(object({
|
|
|
19546
19607
|
* linking rather than produce an eternal token.
|
|
19547
19608
|
*/
|
|
19548
19609
|
ttlSec: union([number().int().positive(), literal("never")]).optional()
|
|
19549
|
-
}), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
|
|
19610
|
+
}), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
|
|
19550
19611
|
var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
19551
19612
|
providerId: string().min(1),
|
|
19552
19613
|
displayName: string().min(1),
|
|
@@ -19641,10 +19702,13 @@ var EvictResultSchema = object({
|
|
|
19641
19702
|
/** True when the provider has nothing left it is willing to drop on this location. */
|
|
19642
19703
|
exhausted: boolean()
|
|
19643
19704
|
});
|
|
19644
|
-
method(object({ locationId: string() }), EvictableUsageSchema), method(object({
|
|
19705
|
+
method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
|
|
19645
19706
|
locationId: string(),
|
|
19646
19707
|
targetBytes: number().int().positive()
|
|
19647
|
-
}), EvictResultSchema, {
|
|
19708
|
+
}), EvictResultSchema, {
|
|
19709
|
+
kind: "mutation",
|
|
19710
|
+
auth: "admin"
|
|
19711
|
+
});
|
|
19648
19712
|
method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
|
|
19649
19713
|
kind: "mutation",
|
|
19650
19714
|
auth: "admin"
|
|
@@ -19704,26 +19768,50 @@ var ReadChunkInputSchema = object({
|
|
|
19704
19768
|
length: number()
|
|
19705
19769
|
});
|
|
19706
19770
|
var EndDownloadInputSchema = object({ downloadId: string() });
|
|
19707
|
-
method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
19771
|
+
method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
19708
19772
|
location: StorageLocationSchema,
|
|
19709
19773
|
relativePath: string()
|
|
19710
|
-
}), string()), method(object({
|
|
19774
|
+
}), string(), { auth: "admin" }), method(object({
|
|
19711
19775
|
location: StorageLocationSchema,
|
|
19712
19776
|
relativePath: string(),
|
|
19713
19777
|
data: _instanceof(Uint8Array)
|
|
19714
|
-
}), _void(), {
|
|
19778
|
+
}), _void(), {
|
|
19779
|
+
kind: "mutation",
|
|
19780
|
+
auth: "admin"
|
|
19781
|
+
}), method(object({
|
|
19715
19782
|
location: StorageLocationSchema,
|
|
19716
19783
|
relativePath: string()
|
|
19717
|
-
}), _instanceof(Uint8Array)), method(object({
|
|
19784
|
+
}), _instanceof(Uint8Array), { auth: "admin" }), method(object({
|
|
19718
19785
|
location: StorageLocationSchema,
|
|
19719
19786
|
relativePath: string()
|
|
19720
|
-
}), boolean()), method(object({
|
|
19787
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
19721
19788
|
location: StorageLocationSchema,
|
|
19722
19789
|
prefix: string().optional()
|
|
19723
|
-
}), array(string()).readonly()), method(object({
|
|
19790
|
+
}), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
19724
19791
|
location: StorageLocationSchema,
|
|
19725
19792
|
relativePath: string()
|
|
19726
|
-
}), _void(), {
|
|
19793
|
+
}), _void(), {
|
|
19794
|
+
kind: "mutation",
|
|
19795
|
+
auth: "admin"
|
|
19796
|
+
}), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
|
|
19797
|
+
kind: "mutation",
|
|
19798
|
+
auth: "admin"
|
|
19799
|
+
}), method(WriteChunkInputSchema, _void(), {
|
|
19800
|
+
kind: "mutation",
|
|
19801
|
+
auth: "admin"
|
|
19802
|
+
}), method(FinalizeUploadInputSchema, _void(), {
|
|
19803
|
+
kind: "mutation",
|
|
19804
|
+
auth: "admin"
|
|
19805
|
+
}), method(AbortUploadInputSchema, _void(), {
|
|
19806
|
+
kind: "mutation",
|
|
19807
|
+
auth: "admin"
|
|
19808
|
+
}), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
|
|
19809
|
+
kind: "mutation",
|
|
19810
|
+
auth: "admin"
|
|
19811
|
+
}), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
|
|
19812
|
+
kind: "mutation",
|
|
19813
|
+
auth: "admin"
|
|
19814
|
+
});
|
|
19727
19815
|
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
19728
19816
|
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
19729
19817
|
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
@@ -19981,7 +20069,8 @@ method(object({
|
|
|
19981
20069
|
access: "create"
|
|
19982
20070
|
}), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
|
|
19983
20071
|
kind: "mutation",
|
|
19984
|
-
access: "view"
|
|
20072
|
+
access: "view",
|
|
20073
|
+
auth: "admin"
|
|
19985
20074
|
}), method(object({
|
|
19986
20075
|
/** Required — the user the assertion belongs to (verified). */
|
|
19987
20076
|
userId: string(),
|
|
@@ -19989,10 +20078,12 @@ method(object({
|
|
|
19989
20078
|
response: record(string(), unknown())
|
|
19990
20079
|
}), object({ verified: boolean() }), {
|
|
19991
20080
|
kind: "mutation",
|
|
19992
|
-
access: "view"
|
|
20081
|
+
access: "view",
|
|
20082
|
+
auth: "admin"
|
|
19993
20083
|
}), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
|
|
19994
20084
|
kind: "mutation",
|
|
19995
|
-
access: "view"
|
|
20085
|
+
access: "view",
|
|
20086
|
+
auth: "admin"
|
|
19996
20087
|
}), method(object({
|
|
19997
20088
|
/** AuthenticationResponseJSON from the browser. */
|
|
19998
20089
|
response: record(string(), unknown()) }), object({
|
|
@@ -20000,7 +20091,8 @@ response: record(string(), unknown()) }), object({
|
|
|
20000
20091
|
userId: string().nullable()
|
|
20001
20092
|
}), {
|
|
20002
20093
|
kind: "mutation",
|
|
20003
|
-
access: "view"
|
|
20094
|
+
access: "view",
|
|
20095
|
+
auth: "admin"
|
|
20004
20096
|
}), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
|
|
20005
20097
|
userId: string(),
|
|
20006
20098
|
credentialId: string()
|
|
@@ -20172,7 +20264,19 @@ var VectorStatsResultSchema = object({
|
|
|
20172
20264
|
/** False when the backend ranks approximately. */
|
|
20173
20265
|
exact: boolean()
|
|
20174
20266
|
});
|
|
20175
|
-
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20267
|
+
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20268
|
+
kind: "mutation",
|
|
20269
|
+
auth: "admin"
|
|
20270
|
+
}), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
|
|
20271
|
+
kind: "mutation",
|
|
20272
|
+
auth: "admin"
|
|
20273
|
+
}), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
|
|
20274
|
+
kind: "mutation",
|
|
20275
|
+
auth: "admin"
|
|
20276
|
+
}), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
|
|
20277
|
+
kind: "mutation",
|
|
20278
|
+
auth: "admin"
|
|
20279
|
+
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
20176
20280
|
var ClipSchema = object({
|
|
20177
20281
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
20178
20282
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -21895,7 +21999,27 @@ var MediaFileLiteSchema$1 = object({
|
|
|
21895
21999
|
sizeBytes: number(),
|
|
21896
22000
|
timestamp: number()
|
|
21897
22001
|
});
|
|
21898
|
-
method(
|
|
22002
|
+
method(object({
|
|
22003
|
+
/**
|
|
22004
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
22005
|
+
*
|
|
22006
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
22007
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
22008
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
22009
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
22010
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
22011
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
22012
|
+
*
|
|
22013
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
22014
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
22015
|
+
*
|
|
22016
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
22017
|
+
* next train** — the hub router validates cap inputs against its own
|
|
22018
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
22019
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
22020
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
22021
|
+
*/
|
|
22022
|
+
includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
|
|
21899
22023
|
kind: "mutation",
|
|
21900
22024
|
auth: "admin"
|
|
21901
22025
|
}), method(object({
|
|
@@ -24103,8 +24227,10 @@ var PlateInfoSchema = object({
|
|
|
24103
24227
|
keyFrameMediaKey: string().optional(),
|
|
24104
24228
|
base64: string().optional(),
|
|
24105
24229
|
/**
|
|
24106
|
-
* Same crop as a data-plane URL
|
|
24107
|
-
* never inlines JPEG; `listPlates`
|
|
24230
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
24231
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
24232
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
24233
|
+
* left at its `true` default.
|
|
24108
24234
|
*/
|
|
24109
24235
|
cropUrl: string().optional()
|
|
24110
24236
|
});
|
|
@@ -24124,14 +24250,34 @@ var PlateClusterSchema = object({
|
|
|
24124
24250
|
});
|
|
24125
24251
|
method(object({
|
|
24126
24252
|
deviceId: number().int().optional(),
|
|
24127
|
-
limit: number().int().positive().optional()
|
|
24253
|
+
limit: number().int().positive().optional(),
|
|
24254
|
+
/**
|
|
24255
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
24256
|
+
* behaviour, kept so no caller breaks.
|
|
24257
|
+
*
|
|
24258
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
24259
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
24260
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
24261
|
+
* metadata without them — and the browser then caches the images.
|
|
24262
|
+
*
|
|
24263
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
24264
|
+
* plates were the one gallery list left without it.
|
|
24265
|
+
*
|
|
24266
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
24267
|
+
* next train.** The hub router validates cap inputs against its own
|
|
24268
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
24269
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
24270
|
+
*/
|
|
24271
|
+
includeCrops: boolean().optional()
|
|
24128
24272
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
24129
24273
|
deviceId: number().int(),
|
|
24130
24274
|
trackId: string()
|
|
24131
24275
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
24132
24276
|
text: string().min(1),
|
|
24133
24277
|
maxDistance: number().int().min(0).optional(),
|
|
24134
|
-
limit: number().int().positive().optional()
|
|
24278
|
+
limit: number().int().positive().optional(),
|
|
24279
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
24280
|
+
includeCrops: boolean().optional()
|
|
24135
24281
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
24136
24282
|
maxDistance: number().int().min(0).optional(),
|
|
24137
24283
|
minClusterSize: number().int().min(2).optional(),
|
|
@@ -24145,7 +24291,13 @@ method(object({
|
|
|
24145
24291
|
}), method(object({ plateId: string() }), _void(), {
|
|
24146
24292
|
kind: "mutation",
|
|
24147
24293
|
auth: "admin"
|
|
24148
|
-
}), method(
|
|
24294
|
+
}), method(object({
|
|
24295
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
24296
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
24297
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
24298
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
24299
|
+
* resolves to `false` and is exactly the intended default. */
|
|
24300
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
24149
24301
|
kind: "mutation",
|
|
24150
24302
|
auth: "admin"
|
|
24151
24303
|
}), method(object({
|
|
@@ -29522,6 +29674,12 @@ Object.freeze({
|
|
|
29522
29674
|
addonId: null,
|
|
29523
29675
|
access: "create"
|
|
29524
29676
|
},
|
|
29677
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
29678
|
+
capName: "pipeline-analytics",
|
|
29679
|
+
capScope: "device",
|
|
29680
|
+
addonId: null,
|
|
29681
|
+
access: "create"
|
|
29682
|
+
},
|
|
29525
29683
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
29526
29684
|
capName: "pipeline-analytics",
|
|
29527
29685
|
capScope: "device",
|
|
@@ -29696,6 +29854,12 @@ Object.freeze({
|
|
|
29696
29854
|
addonId: null,
|
|
29697
29855
|
access: "view"
|
|
29698
29856
|
},
|
|
29857
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
29858
|
+
capName: "pipeline-analytics",
|
|
29859
|
+
capScope: "device",
|
|
29860
|
+
addonId: null,
|
|
29861
|
+
access: "view"
|
|
29862
|
+
},
|
|
29699
29863
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
29700
29864
|
capName: "pipeline-analytics",
|
|
29701
29865
|
capScope: "device",
|
|
@@ -29774,6 +29938,12 @@ Object.freeze({
|
|
|
29774
29938
|
addonId: null,
|
|
29775
29939
|
access: "create"
|
|
29776
29940
|
},
|
|
29941
|
+
"pipelineAnalytics.relocateMedia": {
|
|
29942
|
+
capName: "pipeline-analytics",
|
|
29943
|
+
capScope: "device",
|
|
29944
|
+
addonId: null,
|
|
29945
|
+
access: "create"
|
|
29946
|
+
},
|
|
29777
29947
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
29778
29948
|
capName: "pipeline-analytics",
|
|
29779
29949
|
capScope: "device",
|
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
5
|
+
const require_dist = require("../dist-D7-pccbD.js");
|
|
6
6
|
let node_crypto = require("node:crypto");
|
|
7
7
|
let node_child_process = require("node:child_process");
|
|
8
8
|
//#region src/ingress/tailscale-cli.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as EventCategory, i as BaseAddon, n as networkAccessCapability } from "../dist-
|
|
1
|
+
import { a as EventCategory, i as BaseAddon, n as networkAccessCapability } from "../dist-BBIgF6Kz.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { execFile } from "node:child_process";
|
|
4
4
|
import { promisify } from "node:util";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-tailscale",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.29",
|
|
4
4
|
"description": "Tailscale bundle for CamStack — joins the host to a tailnet (client) and exposes the hub via Serve/Funnel (ingress). Multi-entry npm package shipping 2 addons under a single bundle.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|