@camstack/addon-smtp-nodemailer 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/smtp.addon.js +249 -79
- package/dist/smtp.addon.mjs +249 -79
- package/package.json +1 -1
package/dist/smtp.addon.js
CHANGED
|
@@ -6667,7 +6667,7 @@ function method(input, output, options) {
|
|
|
6667
6667
|
input,
|
|
6668
6668
|
output,
|
|
6669
6669
|
kind: options?.kind ?? "query",
|
|
6670
|
-
auth: options
|
|
6670
|
+
...options?.auth !== void 0 ? { auth: options.auth } : {},
|
|
6671
6671
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
6672
6672
|
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
6673
6673
|
timeoutMs: options?.timeoutMs
|
|
@@ -6687,7 +6687,7 @@ function systemMethod(input, output, options) {
|
|
|
6687
6687
|
}
|
|
6688
6688
|
var StaticDirOutputSchema$1 = object({ staticDir: string() });
|
|
6689
6689
|
var VersionOutputSchema$1 = object({ version: string() });
|
|
6690
|
-
method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
|
|
6690
|
+
method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
|
|
6691
6691
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
6692
6692
|
DeviceType["Camera"] = "camera";
|
|
6693
6693
|
DeviceType["Hub"] = "hub";
|
|
@@ -7008,7 +7008,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
7008
7008
|
}({});
|
|
7009
7009
|
var StaticDirOutputSchema = object({ staticDir: string() });
|
|
7010
7010
|
var VersionOutputSchema = object({ version: string() });
|
|
7011
|
-
method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
|
|
7011
|
+
method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
|
|
7012
7012
|
/**
|
|
7013
7013
|
* device-ops — device-scoped cap that unifies the per-IDevice operations
|
|
7014
7014
|
* previously routed through the `.device-ops` Moleculer bridge service.
|
|
@@ -7622,24 +7622,6 @@ var RecordingRetentionSchema = object({
|
|
|
7622
7622
|
maxSizeGb: number().min(0).optional()
|
|
7623
7623
|
});
|
|
7624
7624
|
/**
|
|
7625
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7626
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7627
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7628
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7629
|
-
*
|
|
7630
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7631
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7632
|
-
* preset changed over time renders every historical window at the dims it was
|
|
7633
|
-
* written with.
|
|
7634
|
-
*/
|
|
7635
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
7636
|
-
"minimal",
|
|
7637
|
-
"low",
|
|
7638
|
-
"standard",
|
|
7639
|
-
"high",
|
|
7640
|
-
"max"
|
|
7641
|
-
]);
|
|
7642
|
-
/**
|
|
7643
7625
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7644
7626
|
*
|
|
7645
7627
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -7647,7 +7629,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
7647
7629
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
7648
7630
|
*
|
|
7649
7631
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
7650
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
7632
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
7633
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
7634
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
7635
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
7636
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
7651
7637
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
7652
7638
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
7653
7639
|
*/
|
|
@@ -7670,14 +7656,7 @@ var RecordingConfigSchema = object({
|
|
|
7670
7656
|
* "off" is the absence of a covering band, never a band value.
|
|
7671
7657
|
*/
|
|
7672
7658
|
bands: array(RecordingBandSchema).default([]),
|
|
7673
|
-
retention: RecordingRetentionSchema.optional()
|
|
7674
|
-
/**
|
|
7675
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7676
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7677
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
7678
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7679
|
-
*/
|
|
7680
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7659
|
+
retention: RecordingRetentionSchema.optional()
|
|
7681
7660
|
}).strict();
|
|
7682
7661
|
/**
|
|
7683
7662
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -7753,10 +7732,11 @@ var RelocateFootageInputSchema = object({
|
|
|
7753
7732
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
7754
7733
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
7755
7734
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
7756
|
-
var
|
|
7735
|
+
var RelocateMediaInputSchema = object({
|
|
7757
7736
|
toLocationId: string(),
|
|
7758
7737
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
7759
|
-
})
|
|
7738
|
+
});
|
|
7739
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
7760
7740
|
/** The independently selectable logical storage classes. `recordings`
|
|
7761
7741
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
7762
7742
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8051,7 +8031,26 @@ var LabelDefinitionSchema = object({
|
|
|
8051
8031
|
description: string().optional(),
|
|
8052
8032
|
icon: string().optional()
|
|
8053
8033
|
});
|
|
8054
|
-
|
|
8034
|
+
/**
|
|
8035
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8036
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8037
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8038
|
+
* detection pipeline executor actually routes.
|
|
8039
|
+
*
|
|
8040
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8041
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8042
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8043
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8044
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8045
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8046
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8047
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8048
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8049
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8050
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8051
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8052
|
+
*/
|
|
8053
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8055
8054
|
mapping: record(string(), _enum([
|
|
8056
8055
|
"person",
|
|
8057
8056
|
"vehicle",
|
|
@@ -8256,7 +8255,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8256
8255
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8257
8256
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8258
8257
|
*/
|
|
8259
|
-
classMap:
|
|
8258
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8260
8259
|
});
|
|
8261
8260
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8262
8261
|
format: literal("openvino"),
|
|
@@ -8286,7 +8285,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8286
8285
|
"segmentation"
|
|
8287
8286
|
]),
|
|
8288
8287
|
faceAlignment: boolean().optional(),
|
|
8289
|
-
classMap:
|
|
8288
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8290
8289
|
});
|
|
8291
8290
|
var ConvertResultSchema = object({
|
|
8292
8291
|
entry: ModelCatalogEntrySchema,
|
|
@@ -9149,7 +9148,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
9149
9148
|
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
9150
9149
|
sectionLabel: string().optional()
|
|
9151
9150
|
});
|
|
9152
|
-
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
9151
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
|
|
9153
9152
|
var AddonHttpRouteSchema = object({
|
|
9154
9153
|
method: _enum([
|
|
9155
9154
|
"GET",
|
|
@@ -9384,7 +9383,7 @@ var WidgetMetadataSchema = object({
|
|
|
9384
9383
|
defaultColumns: number().int().min(1).max(12).default(6),
|
|
9385
9384
|
defaultRows: number().int().min(1).max(12).default(1)
|
|
9386
9385
|
});
|
|
9387
|
-
method(_void(), array(WidgetMetadataSchema).readonly());
|
|
9386
|
+
method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
|
|
9388
9387
|
/**
|
|
9389
9388
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
9390
9389
|
* surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
|
|
@@ -10906,7 +10905,7 @@ var CustomModelDescriptorSchema = object({
|
|
|
10906
10905
|
stepId: string(),
|
|
10907
10906
|
entry: ModelCatalogEntrySchema
|
|
10908
10907
|
});
|
|
10909
|
-
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
10908
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
|
|
10910
10909
|
/**
|
|
10911
10910
|
* Query filter for settings-store collections.
|
|
10912
10911
|
*/
|
|
@@ -10993,7 +10992,8 @@ method(object({
|
|
|
10993
10992
|
}), _void(), { kind: "mutation" }), method(object({
|
|
10994
10993
|
namespace: string().optional(),
|
|
10995
10994
|
collection: string(),
|
|
10996
|
-
filter: QueryFilterSchema.optional()
|
|
10995
|
+
filter: QueryFilterSchema.optional(),
|
|
10996
|
+
columns: array(string()).readonly().optional()
|
|
10997
10997
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
10998
10998
|
namespace: string().optional(),
|
|
10999
10999
|
collection: string(),
|
|
@@ -11056,46 +11056,87 @@ var EngineInfoSchema = object({
|
|
|
11056
11056
|
kind: _enum(["relational", "vector"]),
|
|
11057
11057
|
displayName: string()
|
|
11058
11058
|
});
|
|
11059
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11059
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11060
11060
|
namespace: string().optional(),
|
|
11061
11061
|
collection: string(),
|
|
11062
11062
|
key: string()
|
|
11063
|
-
}), unknown()), method(object({
|
|
11063
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11064
11064
|
namespace: string().optional(),
|
|
11065
11065
|
collection: string(),
|
|
11066
11066
|
key: string(),
|
|
11067
11067
|
value: unknown()
|
|
11068
|
-
}), _void(), {
|
|
11068
|
+
}), _void(), {
|
|
11069
|
+
kind: "mutation",
|
|
11070
|
+
auth: "admin"
|
|
11071
|
+
}), method(object({
|
|
11069
11072
|
namespace: string().optional(),
|
|
11070
11073
|
collection: string(),
|
|
11071
|
-
filter: QueryFilterSchema.optional()
|
|
11072
|
-
|
|
11074
|
+
filter: QueryFilterSchema.optional(),
|
|
11075
|
+
/**
|
|
11076
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11077
|
+
*
|
|
11078
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11079
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11080
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11081
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11082
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11083
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11084
|
+
*
|
|
11085
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11086
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11087
|
+
* interface the engine destructures from. The field existed on both
|
|
11088
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11089
|
+
* registered provider against `InferProvider<cap>` —
|
|
11090
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11091
|
+
*
|
|
11092
|
+
* It is declared here anyway, and must stay in step with
|
|
11093
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11094
|
+
* to be able to see that this call carries a projection.
|
|
11095
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11096
|
+
*/
|
|
11097
|
+
columns: array(string()).readonly().optional()
|
|
11098
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11073
11099
|
namespace: string().optional(),
|
|
11074
11100
|
collection: string(),
|
|
11075
11101
|
record: SettingsRecordSchema
|
|
11076
|
-
}), _void(), {
|
|
11102
|
+
}), _void(), {
|
|
11103
|
+
kind: "mutation",
|
|
11104
|
+
auth: "admin"
|
|
11105
|
+
}), method(object({
|
|
11077
11106
|
namespace: string().optional(),
|
|
11078
11107
|
collection: string(),
|
|
11079
11108
|
id: string(),
|
|
11080
11109
|
data: record(string(), unknown())
|
|
11081
|
-
}), _void(), {
|
|
11110
|
+
}), _void(), {
|
|
11111
|
+
kind: "mutation",
|
|
11112
|
+
auth: "admin"
|
|
11113
|
+
}), method(object({
|
|
11082
11114
|
namespace: string().optional(),
|
|
11083
11115
|
collection: string(),
|
|
11084
11116
|
key: string()
|
|
11085
|
-
}), _void(), {
|
|
11117
|
+
}), _void(), {
|
|
11118
|
+
kind: "mutation",
|
|
11119
|
+
auth: "admin"
|
|
11120
|
+
}), method(object({
|
|
11086
11121
|
namespace: string().optional(),
|
|
11087
11122
|
collection: string(),
|
|
11088
11123
|
filter: MutationFilterSchema
|
|
11089
|
-
}), object({ deleted: number().int() }), {
|
|
11124
|
+
}), object({ deleted: number().int() }), {
|
|
11125
|
+
kind: "mutation",
|
|
11126
|
+
auth: "admin"
|
|
11127
|
+
}), method(object({
|
|
11090
11128
|
namespace: string().optional(),
|
|
11091
11129
|
collection: string(),
|
|
11092
11130
|
filter: MutationFilterSchema,
|
|
11093
11131
|
data: record(string(), unknown())
|
|
11094
|
-
}), object({ updated: number().int() }), {
|
|
11132
|
+
}), object({ updated: number().int() }), {
|
|
11133
|
+
kind: "mutation",
|
|
11134
|
+
auth: "admin"
|
|
11135
|
+
}), method(object({
|
|
11095
11136
|
namespace: string().optional(),
|
|
11096
11137
|
collection: string(),
|
|
11097
11138
|
filter: QueryFilterSchema.optional()
|
|
11098
|
-
}), number()), method(object({
|
|
11139
|
+
}), number(), { auth: "admin" }), method(object({
|
|
11099
11140
|
namespace: string().optional(),
|
|
11100
11141
|
collection: string(),
|
|
11101
11142
|
field: string(),
|
|
@@ -11105,15 +11146,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11105
11146
|
}), array(object({
|
|
11106
11147
|
bucket: number().int(),
|
|
11107
11148
|
count: number().int()
|
|
11108
|
-
})).readonly()), method(object({
|
|
11149
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11109
11150
|
namespace: string().optional(),
|
|
11110
11151
|
collection: string()
|
|
11111
|
-
}), boolean()), method(object({
|
|
11152
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11112
11153
|
namespace: string().optional(),
|
|
11113
11154
|
collection: string(),
|
|
11114
11155
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11115
11156
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11116
|
-
}), _void(), {
|
|
11157
|
+
}), _void(), {
|
|
11158
|
+
kind: "mutation",
|
|
11159
|
+
auth: "admin"
|
|
11160
|
+
});
|
|
11117
11161
|
/**
|
|
11118
11162
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11119
11163
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12241,7 +12285,7 @@ method(object({
|
|
|
12241
12285
|
crop: _instanceof(Uint8Array),
|
|
12242
12286
|
width: number(),
|
|
12243
12287
|
height: number()
|
|
12244
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12288
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12245
12289
|
/**
|
|
12246
12290
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12247
12291
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -12534,19 +12578,22 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
12534
12578
|
runtime: ManagedRuntimeConfigSchema,
|
|
12535
12579
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
12536
12580
|
timeoutMs: number().int().positive().optional()
|
|
12537
|
-
}), LlmGenerateResultSchema, {
|
|
12581
|
+
}), LlmGenerateResultSchema, {
|
|
12582
|
+
kind: "mutation",
|
|
12583
|
+
auth: "admin"
|
|
12584
|
+
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
12538
12585
|
kind: "mutation",
|
|
12539
12586
|
auth: "admin"
|
|
12540
12587
|
}), method(object({}), _void(), {
|
|
12541
12588
|
kind: "mutation",
|
|
12542
12589
|
auth: "admin"
|
|
12543
|
-
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12590
|
+
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12544
12591
|
kind: "mutation",
|
|
12545
12592
|
auth: "admin"
|
|
12546
12593
|
}), method(object({ file: string() }), _void(), {
|
|
12547
12594
|
kind: "mutation",
|
|
12548
12595
|
auth: "admin"
|
|
12549
|
-
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
12596
|
+
}), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
|
|
12550
12597
|
/**
|
|
12551
12598
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
12552
12599
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
@@ -16019,7 +16066,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
16019
16066
|
*/
|
|
16020
16067
|
refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
|
|
16021
16068
|
});
|
|
16022
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16069
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
16023
16070
|
/**
|
|
16024
16071
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
16025
16072
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17214,6 +17261,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
17214
17261
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17215
17262
|
kind: "mutation",
|
|
17216
17263
|
auth: "admin"
|
|
17264
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17265
|
+
kind: "mutation",
|
|
17266
|
+
auth: "admin"
|
|
17267
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17268
|
+
kind: "query",
|
|
17269
|
+
auth: "admin"
|
|
17270
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17271
|
+
kind: "mutation",
|
|
17272
|
+
auth: "admin"
|
|
17217
17273
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17218
17274
|
kind: "query",
|
|
17219
17275
|
auth: "admin"
|
|
@@ -17368,6 +17424,11 @@ object({
|
|
|
17368
17424
|
"jpeg"
|
|
17369
17425
|
])
|
|
17370
17426
|
});
|
|
17427
|
+
/**
|
|
17428
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
17429
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
17430
|
+
* other process or execution group.
|
|
17431
|
+
*/
|
|
17371
17432
|
var FrameRefSchema = object({
|
|
17372
17433
|
registryId: string().min(1),
|
|
17373
17434
|
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({
|
|
@@ -24042,8 +24166,10 @@ var PlateInfoSchema = object({
|
|
|
24042
24166
|
keyFrameMediaKey: string().optional(),
|
|
24043
24167
|
base64: string().optional(),
|
|
24044
24168
|
/**
|
|
24045
|
-
* Same crop as a data-plane URL
|
|
24046
|
-
* never inlines JPEG; `listPlates`
|
|
24169
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
24170
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
24171
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
24172
|
+
* left at its `true` default.
|
|
24047
24173
|
*/
|
|
24048
24174
|
cropUrl: string().optional()
|
|
24049
24175
|
});
|
|
@@ -24063,14 +24189,34 @@ var PlateClusterSchema = object({
|
|
|
24063
24189
|
});
|
|
24064
24190
|
method(object({
|
|
24065
24191
|
deviceId: number().int().optional(),
|
|
24066
|
-
limit: number().int().positive().optional()
|
|
24192
|
+
limit: number().int().positive().optional(),
|
|
24193
|
+
/**
|
|
24194
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
24195
|
+
* behaviour, kept so no caller breaks.
|
|
24196
|
+
*
|
|
24197
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
24198
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
24199
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
24200
|
+
* metadata without them — and the browser then caches the images.
|
|
24201
|
+
*
|
|
24202
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
24203
|
+
* plates were the one gallery list left without it.
|
|
24204
|
+
*
|
|
24205
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
24206
|
+
* next train.** The hub router validates cap inputs against its own
|
|
24207
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
24208
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
24209
|
+
*/
|
|
24210
|
+
includeCrops: boolean().optional()
|
|
24067
24211
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
24068
24212
|
deviceId: number().int(),
|
|
24069
24213
|
trackId: string()
|
|
24070
24214
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
24071
24215
|
text: string().min(1),
|
|
24072
24216
|
maxDistance: number().int().min(0).optional(),
|
|
24073
|
-
limit: number().int().positive().optional()
|
|
24217
|
+
limit: number().int().positive().optional(),
|
|
24218
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
24219
|
+
includeCrops: boolean().optional()
|
|
24074
24220
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
24075
24221
|
maxDistance: number().int().min(0).optional(),
|
|
24076
24222
|
minClusterSize: number().int().min(2).optional(),
|
|
@@ -24084,7 +24230,13 @@ method(object({
|
|
|
24084
24230
|
}), method(object({ plateId: string() }), _void(), {
|
|
24085
24231
|
kind: "mutation",
|
|
24086
24232
|
auth: "admin"
|
|
24087
|
-
}), method(
|
|
24233
|
+
}), method(object({
|
|
24234
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
24235
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
24236
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
24237
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
24238
|
+
* resolves to `false` and is exactly the intended default. */
|
|
24239
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
24088
24240
|
kind: "mutation",
|
|
24089
24241
|
auth: "admin"
|
|
24090
24242
|
}), method(object({
|
|
@@ -29461,6 +29613,12 @@ Object.freeze({
|
|
|
29461
29613
|
addonId: null,
|
|
29462
29614
|
access: "create"
|
|
29463
29615
|
},
|
|
29616
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
29617
|
+
capName: "pipeline-analytics",
|
|
29618
|
+
capScope: "device",
|
|
29619
|
+
addonId: null,
|
|
29620
|
+
access: "create"
|
|
29621
|
+
},
|
|
29464
29622
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
29465
29623
|
capName: "pipeline-analytics",
|
|
29466
29624
|
capScope: "device",
|
|
@@ -29635,6 +29793,12 @@ Object.freeze({
|
|
|
29635
29793
|
addonId: null,
|
|
29636
29794
|
access: "view"
|
|
29637
29795
|
},
|
|
29796
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
29797
|
+
capName: "pipeline-analytics",
|
|
29798
|
+
capScope: "device",
|
|
29799
|
+
addonId: null,
|
|
29800
|
+
access: "view"
|
|
29801
|
+
},
|
|
29638
29802
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
29639
29803
|
capName: "pipeline-analytics",
|
|
29640
29804
|
capScope: "device",
|
|
@@ -29713,6 +29877,12 @@ Object.freeze({
|
|
|
29713
29877
|
addonId: null,
|
|
29714
29878
|
access: "create"
|
|
29715
29879
|
},
|
|
29880
|
+
"pipelineAnalytics.relocateMedia": {
|
|
29881
|
+
capName: "pipeline-analytics",
|
|
29882
|
+
capScope: "device",
|
|
29883
|
+
addonId: null,
|
|
29884
|
+
access: "create"
|
|
29885
|
+
},
|
|
29716
29886
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
29717
29887
|
capName: "pipeline-analytics",
|
|
29718
29888
|
capScope: "device",
|
package/dist/smtp.addon.mjs
CHANGED
|
@@ -6665,7 +6665,7 @@ function method(input, output, options) {
|
|
|
6665
6665
|
input,
|
|
6666
6666
|
output,
|
|
6667
6667
|
kind: options?.kind ?? "query",
|
|
6668
|
-
auth: options
|
|
6668
|
+
...options?.auth !== void 0 ? { auth: options.auth } : {},
|
|
6669
6669
|
...options?.access !== void 0 ? { access: options.access } : {},
|
|
6670
6670
|
...options?.caller !== void 0 ? { caller: options.caller } : {},
|
|
6671
6671
|
timeoutMs: options?.timeoutMs
|
|
@@ -6685,7 +6685,7 @@ function systemMethod(input, output, options) {
|
|
|
6685
6685
|
}
|
|
6686
6686
|
var StaticDirOutputSchema$1 = object({ staticDir: string() });
|
|
6687
6687
|
var VersionOutputSchema$1 = object({ version: string() });
|
|
6688
|
-
method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
|
|
6688
|
+
method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
|
|
6689
6689
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
6690
6690
|
DeviceType["Camera"] = "camera";
|
|
6691
6691
|
DeviceType["Hub"] = "hub";
|
|
@@ -7006,7 +7006,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
7006
7006
|
}({});
|
|
7007
7007
|
var StaticDirOutputSchema = object({ staticDir: string() });
|
|
7008
7008
|
var VersionOutputSchema = object({ version: string() });
|
|
7009
|
-
method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
|
|
7009
|
+
method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
|
|
7010
7010
|
/**
|
|
7011
7011
|
* device-ops — device-scoped cap that unifies the per-IDevice operations
|
|
7012
7012
|
* previously routed through the `.device-ops` Moleculer bridge service.
|
|
@@ -7620,24 +7620,6 @@ var RecordingRetentionSchema = object({
|
|
|
7620
7620
|
maxSizeGb: number().min(0).optional()
|
|
7621
7621
|
});
|
|
7622
7622
|
/**
|
|
7623
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7624
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7625
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7626
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7627
|
-
*
|
|
7628
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7629
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7630
|
-
* preset changed over time renders every historical window at the dims it was
|
|
7631
|
-
* written with.
|
|
7632
|
-
*/
|
|
7633
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
7634
|
-
"minimal",
|
|
7635
|
-
"low",
|
|
7636
|
-
"standard",
|
|
7637
|
-
"high",
|
|
7638
|
-
"max"
|
|
7639
|
-
]);
|
|
7640
|
-
/**
|
|
7641
7623
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7642
7624
|
*
|
|
7643
7625
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -7645,7 +7627,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
7645
7627
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
7646
7628
|
*
|
|
7647
7629
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
7648
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
7630
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
7631
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
7632
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
7633
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
7634
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
7649
7635
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
7650
7636
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
7651
7637
|
*/
|
|
@@ -7668,14 +7654,7 @@ var RecordingConfigSchema = object({
|
|
|
7668
7654
|
* "off" is the absence of a covering band, never a band value.
|
|
7669
7655
|
*/
|
|
7670
7656
|
bands: array(RecordingBandSchema).default([]),
|
|
7671
|
-
retention: RecordingRetentionSchema.optional()
|
|
7672
|
-
/**
|
|
7673
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7674
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7675
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
7676
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7677
|
-
*/
|
|
7678
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7657
|
+
retention: RecordingRetentionSchema.optional()
|
|
7679
7658
|
}).strict();
|
|
7680
7659
|
/**
|
|
7681
7660
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -7751,10 +7730,11 @@ var RelocateFootageInputSchema = object({
|
|
|
7751
7730
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
7752
7731
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
7753
7732
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
7754
|
-
var
|
|
7733
|
+
var RelocateMediaInputSchema = object({
|
|
7755
7734
|
toLocationId: string(),
|
|
7756
7735
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
7757
|
-
})
|
|
7736
|
+
});
|
|
7737
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
7758
7738
|
/** The independently selectable logical storage classes. `recordings`
|
|
7759
7739
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
7760
7740
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8049,7 +8029,26 @@ var LabelDefinitionSchema = object({
|
|
|
8049
8029
|
description: string().optional(),
|
|
8050
8030
|
icon: string().optional()
|
|
8051
8031
|
});
|
|
8052
|
-
|
|
8032
|
+
/**
|
|
8033
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8034
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8035
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8036
|
+
* detection pipeline executor actually routes.
|
|
8037
|
+
*
|
|
8038
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8039
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8040
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8041
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8042
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8043
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8044
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8045
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8046
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8047
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8048
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8049
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8050
|
+
*/
|
|
8051
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8053
8052
|
mapping: record(string(), _enum([
|
|
8054
8053
|
"person",
|
|
8055
8054
|
"vehicle",
|
|
@@ -8254,7 +8253,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8254
8253
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8255
8254
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8256
8255
|
*/
|
|
8257
|
-
classMap:
|
|
8256
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8258
8257
|
});
|
|
8259
8258
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8260
8259
|
format: literal("openvino"),
|
|
@@ -8284,7 +8283,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8284
8283
|
"segmentation"
|
|
8285
8284
|
]),
|
|
8286
8285
|
faceAlignment: boolean().optional(),
|
|
8287
|
-
classMap:
|
|
8286
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8288
8287
|
});
|
|
8289
8288
|
var ConvertResultSchema = object({
|
|
8290
8289
|
entry: ModelCatalogEntrySchema,
|
|
@@ -9147,7 +9146,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
9147
9146
|
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
9148
9147
|
sectionLabel: string().optional()
|
|
9149
9148
|
});
|
|
9150
|
-
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
9149
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
|
|
9151
9150
|
var AddonHttpRouteSchema = object({
|
|
9152
9151
|
method: _enum([
|
|
9153
9152
|
"GET",
|
|
@@ -9382,7 +9381,7 @@ var WidgetMetadataSchema = object({
|
|
|
9382
9381
|
defaultColumns: number().int().min(1).max(12).default(6),
|
|
9383
9382
|
defaultRows: number().int().min(1).max(12).default(1)
|
|
9384
9383
|
});
|
|
9385
|
-
method(_void(), array(WidgetMetadataSchema).readonly());
|
|
9384
|
+
method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
|
|
9386
9385
|
/**
|
|
9387
9386
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
9388
9387
|
* surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
|
|
@@ -10904,7 +10903,7 @@ var CustomModelDescriptorSchema = object({
|
|
|
10904
10903
|
stepId: string(),
|
|
10905
10904
|
entry: ModelCatalogEntrySchema
|
|
10906
10905
|
});
|
|
10907
|
-
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
10906
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
|
|
10908
10907
|
/**
|
|
10909
10908
|
* Query filter for settings-store collections.
|
|
10910
10909
|
*/
|
|
@@ -10991,7 +10990,8 @@ method(object({
|
|
|
10991
10990
|
}), _void(), { kind: "mutation" }), method(object({
|
|
10992
10991
|
namespace: string().optional(),
|
|
10993
10992
|
collection: string(),
|
|
10994
|
-
filter: QueryFilterSchema.optional()
|
|
10993
|
+
filter: QueryFilterSchema.optional(),
|
|
10994
|
+
columns: array(string()).readonly().optional()
|
|
10995
10995
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
10996
10996
|
namespace: string().optional(),
|
|
10997
10997
|
collection: string(),
|
|
@@ -11054,46 +11054,87 @@ var EngineInfoSchema = object({
|
|
|
11054
11054
|
kind: _enum(["relational", "vector"]),
|
|
11055
11055
|
displayName: string()
|
|
11056
11056
|
});
|
|
11057
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11057
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11058
11058
|
namespace: string().optional(),
|
|
11059
11059
|
collection: string(),
|
|
11060
11060
|
key: string()
|
|
11061
|
-
}), unknown()), method(object({
|
|
11061
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11062
11062
|
namespace: string().optional(),
|
|
11063
11063
|
collection: string(),
|
|
11064
11064
|
key: string(),
|
|
11065
11065
|
value: unknown()
|
|
11066
|
-
}), _void(), {
|
|
11066
|
+
}), _void(), {
|
|
11067
|
+
kind: "mutation",
|
|
11068
|
+
auth: "admin"
|
|
11069
|
+
}), method(object({
|
|
11067
11070
|
namespace: string().optional(),
|
|
11068
11071
|
collection: string(),
|
|
11069
|
-
filter: QueryFilterSchema.optional()
|
|
11070
|
-
|
|
11072
|
+
filter: QueryFilterSchema.optional(),
|
|
11073
|
+
/**
|
|
11074
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11075
|
+
*
|
|
11076
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11077
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11078
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11079
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11080
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11081
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11082
|
+
*
|
|
11083
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11084
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11085
|
+
* interface the engine destructures from. The field existed on both
|
|
11086
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11087
|
+
* registered provider against `InferProvider<cap>` —
|
|
11088
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11089
|
+
*
|
|
11090
|
+
* It is declared here anyway, and must stay in step with
|
|
11091
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11092
|
+
* to be able to see that this call carries a projection.
|
|
11093
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11094
|
+
*/
|
|
11095
|
+
columns: array(string()).readonly().optional()
|
|
11096
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11071
11097
|
namespace: string().optional(),
|
|
11072
11098
|
collection: string(),
|
|
11073
11099
|
record: SettingsRecordSchema
|
|
11074
|
-
}), _void(), {
|
|
11100
|
+
}), _void(), {
|
|
11101
|
+
kind: "mutation",
|
|
11102
|
+
auth: "admin"
|
|
11103
|
+
}), method(object({
|
|
11075
11104
|
namespace: string().optional(),
|
|
11076
11105
|
collection: string(),
|
|
11077
11106
|
id: string(),
|
|
11078
11107
|
data: record(string(), unknown())
|
|
11079
|
-
}), _void(), {
|
|
11108
|
+
}), _void(), {
|
|
11109
|
+
kind: "mutation",
|
|
11110
|
+
auth: "admin"
|
|
11111
|
+
}), method(object({
|
|
11080
11112
|
namespace: string().optional(),
|
|
11081
11113
|
collection: string(),
|
|
11082
11114
|
key: string()
|
|
11083
|
-
}), _void(), {
|
|
11115
|
+
}), _void(), {
|
|
11116
|
+
kind: "mutation",
|
|
11117
|
+
auth: "admin"
|
|
11118
|
+
}), method(object({
|
|
11084
11119
|
namespace: string().optional(),
|
|
11085
11120
|
collection: string(),
|
|
11086
11121
|
filter: MutationFilterSchema
|
|
11087
|
-
}), object({ deleted: number().int() }), {
|
|
11122
|
+
}), object({ deleted: number().int() }), {
|
|
11123
|
+
kind: "mutation",
|
|
11124
|
+
auth: "admin"
|
|
11125
|
+
}), method(object({
|
|
11088
11126
|
namespace: string().optional(),
|
|
11089
11127
|
collection: string(),
|
|
11090
11128
|
filter: MutationFilterSchema,
|
|
11091
11129
|
data: record(string(), unknown())
|
|
11092
|
-
}), object({ updated: number().int() }), {
|
|
11130
|
+
}), object({ updated: number().int() }), {
|
|
11131
|
+
kind: "mutation",
|
|
11132
|
+
auth: "admin"
|
|
11133
|
+
}), method(object({
|
|
11093
11134
|
namespace: string().optional(),
|
|
11094
11135
|
collection: string(),
|
|
11095
11136
|
filter: QueryFilterSchema.optional()
|
|
11096
|
-
}), number()), method(object({
|
|
11137
|
+
}), number(), { auth: "admin" }), method(object({
|
|
11097
11138
|
namespace: string().optional(),
|
|
11098
11139
|
collection: string(),
|
|
11099
11140
|
field: string(),
|
|
@@ -11103,15 +11144,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11103
11144
|
}), array(object({
|
|
11104
11145
|
bucket: number().int(),
|
|
11105
11146
|
count: number().int()
|
|
11106
|
-
})).readonly()), method(object({
|
|
11147
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11107
11148
|
namespace: string().optional(),
|
|
11108
11149
|
collection: string()
|
|
11109
|
-
}), boolean()), method(object({
|
|
11150
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11110
11151
|
namespace: string().optional(),
|
|
11111
11152
|
collection: string(),
|
|
11112
11153
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11113
11154
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11114
|
-
}), _void(), {
|
|
11155
|
+
}), _void(), {
|
|
11156
|
+
kind: "mutation",
|
|
11157
|
+
auth: "admin"
|
|
11158
|
+
});
|
|
11115
11159
|
/**
|
|
11116
11160
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11117
11161
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12239,7 +12283,7 @@ method(object({
|
|
|
12239
12283
|
crop: _instanceof(Uint8Array),
|
|
12240
12284
|
width: number(),
|
|
12241
12285
|
height: number()
|
|
12242
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12286
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12243
12287
|
/**
|
|
12244
12288
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12245
12289
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -12532,19 +12576,22 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
12532
12576
|
runtime: ManagedRuntimeConfigSchema,
|
|
12533
12577
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
12534
12578
|
timeoutMs: number().int().positive().optional()
|
|
12535
|
-
}), LlmGenerateResultSchema, {
|
|
12579
|
+
}), LlmGenerateResultSchema, {
|
|
12580
|
+
kind: "mutation",
|
|
12581
|
+
auth: "admin"
|
|
12582
|
+
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
12536
12583
|
kind: "mutation",
|
|
12537
12584
|
auth: "admin"
|
|
12538
12585
|
}), method(object({}), _void(), {
|
|
12539
12586
|
kind: "mutation",
|
|
12540
12587
|
auth: "admin"
|
|
12541
|
-
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12588
|
+
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12542
12589
|
kind: "mutation",
|
|
12543
12590
|
auth: "admin"
|
|
12544
12591
|
}), method(object({ file: string() }), _void(), {
|
|
12545
12592
|
kind: "mutation",
|
|
12546
12593
|
auth: "admin"
|
|
12547
|
-
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
12594
|
+
}), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
|
|
12548
12595
|
/**
|
|
12549
12596
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
12550
12597
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
@@ -16017,7 +16064,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
16017
16064
|
*/
|
|
16018
16065
|
refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
|
|
16019
16066
|
});
|
|
16020
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16067
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
16021
16068
|
/**
|
|
16022
16069
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
16023
16070
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17212,6 +17259,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
17212
17259
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17213
17260
|
kind: "mutation",
|
|
17214
17261
|
auth: "admin"
|
|
17262
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17263
|
+
kind: "mutation",
|
|
17264
|
+
auth: "admin"
|
|
17265
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17266
|
+
kind: "query",
|
|
17267
|
+
auth: "admin"
|
|
17268
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17269
|
+
kind: "mutation",
|
|
17270
|
+
auth: "admin"
|
|
17215
17271
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17216
17272
|
kind: "query",
|
|
17217
17273
|
auth: "admin"
|
|
@@ -17366,6 +17422,11 @@ object({
|
|
|
17366
17422
|
"jpeg"
|
|
17367
17423
|
])
|
|
17368
17424
|
});
|
|
17425
|
+
/**
|
|
17426
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
17427
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
17428
|
+
* other process or execution group.
|
|
17429
|
+
*/
|
|
17369
17430
|
var FrameRefSchema = object({
|
|
17370
17431
|
registryId: string().min(1),
|
|
17371
17432
|
id: string().min(1),
|
|
@@ -19544,7 +19605,7 @@ method(object({
|
|
|
19544
19605
|
* linking rather than produce an eternal token.
|
|
19545
19606
|
*/
|
|
19546
19607
|
ttlSec: union([number().int().positive(), literal("never")]).optional()
|
|
19547
|
-
}), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
|
|
19608
|
+
}), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
|
|
19548
19609
|
var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
19549
19610
|
providerId: string().min(1),
|
|
19550
19611
|
displayName: string().min(1),
|
|
@@ -19639,10 +19700,13 @@ var EvictResultSchema = object({
|
|
|
19639
19700
|
/** True when the provider has nothing left it is willing to drop on this location. */
|
|
19640
19701
|
exhausted: boolean()
|
|
19641
19702
|
});
|
|
19642
|
-
method(object({ locationId: string() }), EvictableUsageSchema), method(object({
|
|
19703
|
+
method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
|
|
19643
19704
|
locationId: string(),
|
|
19644
19705
|
targetBytes: number().int().positive()
|
|
19645
|
-
}), EvictResultSchema, {
|
|
19706
|
+
}), EvictResultSchema, {
|
|
19707
|
+
kind: "mutation",
|
|
19708
|
+
auth: "admin"
|
|
19709
|
+
});
|
|
19646
19710
|
method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
|
|
19647
19711
|
kind: "mutation",
|
|
19648
19712
|
auth: "admin"
|
|
@@ -19702,26 +19766,50 @@ var ReadChunkInputSchema = object({
|
|
|
19702
19766
|
length: number()
|
|
19703
19767
|
});
|
|
19704
19768
|
var EndDownloadInputSchema = object({ downloadId: string() });
|
|
19705
|
-
method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
19769
|
+
method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
19706
19770
|
location: StorageLocationSchema,
|
|
19707
19771
|
relativePath: string()
|
|
19708
|
-
}), string()), method(object({
|
|
19772
|
+
}), string(), { auth: "admin" }), method(object({
|
|
19709
19773
|
location: StorageLocationSchema,
|
|
19710
19774
|
relativePath: string(),
|
|
19711
19775
|
data: _instanceof(Uint8Array)
|
|
19712
|
-
}), _void(), {
|
|
19776
|
+
}), _void(), {
|
|
19777
|
+
kind: "mutation",
|
|
19778
|
+
auth: "admin"
|
|
19779
|
+
}), method(object({
|
|
19713
19780
|
location: StorageLocationSchema,
|
|
19714
19781
|
relativePath: string()
|
|
19715
|
-
}), _instanceof(Uint8Array)), method(object({
|
|
19782
|
+
}), _instanceof(Uint8Array), { auth: "admin" }), method(object({
|
|
19716
19783
|
location: StorageLocationSchema,
|
|
19717
19784
|
relativePath: string()
|
|
19718
|
-
}), boolean()), method(object({
|
|
19785
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
19719
19786
|
location: StorageLocationSchema,
|
|
19720
19787
|
prefix: string().optional()
|
|
19721
|
-
}), array(string()).readonly()), method(object({
|
|
19788
|
+
}), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
19722
19789
|
location: StorageLocationSchema,
|
|
19723
19790
|
relativePath: string()
|
|
19724
|
-
}), _void(), {
|
|
19791
|
+
}), _void(), {
|
|
19792
|
+
kind: "mutation",
|
|
19793
|
+
auth: "admin"
|
|
19794
|
+
}), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
|
|
19795
|
+
kind: "mutation",
|
|
19796
|
+
auth: "admin"
|
|
19797
|
+
}), method(WriteChunkInputSchema, _void(), {
|
|
19798
|
+
kind: "mutation",
|
|
19799
|
+
auth: "admin"
|
|
19800
|
+
}), method(FinalizeUploadInputSchema, _void(), {
|
|
19801
|
+
kind: "mutation",
|
|
19802
|
+
auth: "admin"
|
|
19803
|
+
}), method(AbortUploadInputSchema, _void(), {
|
|
19804
|
+
kind: "mutation",
|
|
19805
|
+
auth: "admin"
|
|
19806
|
+
}), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
|
|
19807
|
+
kind: "mutation",
|
|
19808
|
+
auth: "admin"
|
|
19809
|
+
}), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
|
|
19810
|
+
kind: "mutation",
|
|
19811
|
+
auth: "admin"
|
|
19812
|
+
});
|
|
19725
19813
|
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
19726
19814
|
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
19727
19815
|
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
@@ -19979,7 +20067,8 @@ method(object({
|
|
|
19979
20067
|
access: "create"
|
|
19980
20068
|
}), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
|
|
19981
20069
|
kind: "mutation",
|
|
19982
|
-
access: "view"
|
|
20070
|
+
access: "view",
|
|
20071
|
+
auth: "admin"
|
|
19983
20072
|
}), method(object({
|
|
19984
20073
|
/** Required — the user the assertion belongs to (verified). */
|
|
19985
20074
|
userId: string(),
|
|
@@ -19987,10 +20076,12 @@ method(object({
|
|
|
19987
20076
|
response: record(string(), unknown())
|
|
19988
20077
|
}), object({ verified: boolean() }), {
|
|
19989
20078
|
kind: "mutation",
|
|
19990
|
-
access: "view"
|
|
20079
|
+
access: "view",
|
|
20080
|
+
auth: "admin"
|
|
19991
20081
|
}), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
|
|
19992
20082
|
kind: "mutation",
|
|
19993
|
-
access: "view"
|
|
20083
|
+
access: "view",
|
|
20084
|
+
auth: "admin"
|
|
19994
20085
|
}), method(object({
|
|
19995
20086
|
/** AuthenticationResponseJSON from the browser. */
|
|
19996
20087
|
response: record(string(), unknown()) }), object({
|
|
@@ -19998,7 +20089,8 @@ response: record(string(), unknown()) }), object({
|
|
|
19998
20089
|
userId: string().nullable()
|
|
19999
20090
|
}), {
|
|
20000
20091
|
kind: "mutation",
|
|
20001
|
-
access: "view"
|
|
20092
|
+
access: "view",
|
|
20093
|
+
auth: "admin"
|
|
20002
20094
|
}), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
|
|
20003
20095
|
userId: string(),
|
|
20004
20096
|
credentialId: string()
|
|
@@ -20170,7 +20262,19 @@ var VectorStatsResultSchema = object({
|
|
|
20170
20262
|
/** False when the backend ranks approximately. */
|
|
20171
20263
|
exact: boolean()
|
|
20172
20264
|
});
|
|
20173
|
-
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20265
|
+
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20266
|
+
kind: "mutation",
|
|
20267
|
+
auth: "admin"
|
|
20268
|
+
}), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
|
|
20269
|
+
kind: "mutation",
|
|
20270
|
+
auth: "admin"
|
|
20271
|
+
}), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
|
|
20272
|
+
kind: "mutation",
|
|
20273
|
+
auth: "admin"
|
|
20274
|
+
}), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
|
|
20275
|
+
kind: "mutation",
|
|
20276
|
+
auth: "admin"
|
|
20277
|
+
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
20174
20278
|
var ClipSchema = object({
|
|
20175
20279
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
20176
20280
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -21893,7 +21997,27 @@ var MediaFileLiteSchema$1 = object({
|
|
|
21893
21997
|
sizeBytes: number(),
|
|
21894
21998
|
timestamp: number()
|
|
21895
21999
|
});
|
|
21896
|
-
method(
|
|
22000
|
+
method(object({
|
|
22001
|
+
/**
|
|
22002
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
22003
|
+
*
|
|
22004
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
22005
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
22006
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
22007
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
22008
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
22009
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
22010
|
+
*
|
|
22011
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
22012
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
22013
|
+
*
|
|
22014
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
22015
|
+
* next train** — the hub router validates cap inputs against its own
|
|
22016
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
22017
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
22018
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
22019
|
+
*/
|
|
22020
|
+
includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
|
|
21897
22021
|
kind: "mutation",
|
|
21898
22022
|
auth: "admin"
|
|
21899
22023
|
}), method(object({
|
|
@@ -24040,8 +24164,10 @@ var PlateInfoSchema = object({
|
|
|
24040
24164
|
keyFrameMediaKey: string().optional(),
|
|
24041
24165
|
base64: string().optional(),
|
|
24042
24166
|
/**
|
|
24043
|
-
* Same crop as a data-plane URL
|
|
24044
|
-
* never inlines JPEG; `listPlates`
|
|
24167
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
24168
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
24169
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
24170
|
+
* left at its `true` default.
|
|
24045
24171
|
*/
|
|
24046
24172
|
cropUrl: string().optional()
|
|
24047
24173
|
});
|
|
@@ -24061,14 +24187,34 @@ var PlateClusterSchema = object({
|
|
|
24061
24187
|
});
|
|
24062
24188
|
method(object({
|
|
24063
24189
|
deviceId: number().int().optional(),
|
|
24064
|
-
limit: number().int().positive().optional()
|
|
24190
|
+
limit: number().int().positive().optional(),
|
|
24191
|
+
/**
|
|
24192
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
24193
|
+
* behaviour, kept so no caller breaks.
|
|
24194
|
+
*
|
|
24195
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
24196
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
24197
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
24198
|
+
* metadata without them — and the browser then caches the images.
|
|
24199
|
+
*
|
|
24200
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
24201
|
+
* plates were the one gallery list left without it.
|
|
24202
|
+
*
|
|
24203
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
24204
|
+
* next train.** The hub router validates cap inputs against its own
|
|
24205
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
24206
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
24207
|
+
*/
|
|
24208
|
+
includeCrops: boolean().optional()
|
|
24065
24209
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
24066
24210
|
deviceId: number().int(),
|
|
24067
24211
|
trackId: string()
|
|
24068
24212
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
24069
24213
|
text: string().min(1),
|
|
24070
24214
|
maxDistance: number().int().min(0).optional(),
|
|
24071
|
-
limit: number().int().positive().optional()
|
|
24215
|
+
limit: number().int().positive().optional(),
|
|
24216
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
24217
|
+
includeCrops: boolean().optional()
|
|
24072
24218
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
24073
24219
|
maxDistance: number().int().min(0).optional(),
|
|
24074
24220
|
minClusterSize: number().int().min(2).optional(),
|
|
@@ -24082,7 +24228,13 @@ method(object({
|
|
|
24082
24228
|
}), method(object({ plateId: string() }), _void(), {
|
|
24083
24229
|
kind: "mutation",
|
|
24084
24230
|
auth: "admin"
|
|
24085
|
-
}), method(
|
|
24231
|
+
}), method(object({
|
|
24232
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
24233
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
24234
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
24235
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
24236
|
+
* resolves to `false` and is exactly the intended default. */
|
|
24237
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
24086
24238
|
kind: "mutation",
|
|
24087
24239
|
auth: "admin"
|
|
24088
24240
|
}), method(object({
|
|
@@ -29459,6 +29611,12 @@ Object.freeze({
|
|
|
29459
29611
|
addonId: null,
|
|
29460
29612
|
access: "create"
|
|
29461
29613
|
},
|
|
29614
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
29615
|
+
capName: "pipeline-analytics",
|
|
29616
|
+
capScope: "device",
|
|
29617
|
+
addonId: null,
|
|
29618
|
+
access: "create"
|
|
29619
|
+
},
|
|
29462
29620
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
29463
29621
|
capName: "pipeline-analytics",
|
|
29464
29622
|
capScope: "device",
|
|
@@ -29633,6 +29791,12 @@ Object.freeze({
|
|
|
29633
29791
|
addonId: null,
|
|
29634
29792
|
access: "view"
|
|
29635
29793
|
},
|
|
29794
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
29795
|
+
capName: "pipeline-analytics",
|
|
29796
|
+
capScope: "device",
|
|
29797
|
+
addonId: null,
|
|
29798
|
+
access: "view"
|
|
29799
|
+
},
|
|
29636
29800
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
29637
29801
|
capName: "pipeline-analytics",
|
|
29638
29802
|
capScope: "device",
|
|
@@ -29711,6 +29875,12 @@ Object.freeze({
|
|
|
29711
29875
|
addonId: null,
|
|
29712
29876
|
access: "create"
|
|
29713
29877
|
},
|
|
29878
|
+
"pipelineAnalytics.relocateMedia": {
|
|
29879
|
+
capName: "pipeline-analytics",
|
|
29880
|
+
capScope: "device",
|
|
29881
|
+
addonId: null,
|
|
29882
|
+
access: "create"
|
|
29883
|
+
},
|
|
29714
29884
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
29715
29885
|
capName: "pipeline-analytics",
|
|
29716
29886
|
capScope: "device",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-smtp-nodemailer",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.28",
|
|
4
4
|
"description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by magic-link login + notifier addons.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|