@camstack/addon-auth 1.2.31 → 1.2.32
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/{dist-vL-NDuYW.js → dist-B6a8uEfA.js} +280 -79
- package/dist/{dist-6THxfX54.mjs → dist-BeC0y_6H.mjs} +280 -79
- package/dist/magic-link/auth-magic-link.addon.js +1 -1
- package/dist/magic-link/auth-magic-link.addon.mjs +1 -1
- package/dist/oidc/auth-oidc.addon.js +1 -1
- package/dist/oidc/auth-oidc.addon.mjs +1 -1
- package/dist/webauthn/_stub.js +1 -1
- package/dist/webauthn/{_virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-I0MqpFdH.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_auth_webauthn_widgets-B3kL38dB.mjs} +3 -3
- package/dist/webauthn/{_virtual_mf___mfe_internal__addon_auth_webauthn_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CcTe3K8y.mjs → _virtual_mf___mfe_internal__addon_auth_webauthn_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CwFDt7M3.mjs} +1 -1
- package/dist/webauthn/auth-webauthn.addon.js +1 -1
- package/dist/webauthn/auth-webauthn.addon.mjs +1 -1
- package/dist/webauthn/{hostInit-03i7cidW.mjs → hostInit-a_0bNTOh.mjs} +3 -3
- package/dist/webauthn/remoteEntry.js +1 -1
- package/package.json +1 -1
|
@@ -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.
|
|
@@ -7715,24 +7715,6 @@ var RecordingRetentionSchema = object({
|
|
|
7715
7715
|
maxSizeGb: number().min(0).optional()
|
|
7716
7716
|
});
|
|
7717
7717
|
/**
|
|
7718
|
-
* Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
|
|
7719
|
-
* sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
|
|
7720
|
-
* previews at. Five graduated steps; absent on a config = `standard` (the
|
|
7721
|
-
* shipped default, matching `sheet-geometry`/`sheet-composer`).
|
|
7722
|
-
*
|
|
7723
|
-
* Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
|
|
7724
|
-
* Each window's index sidecar carries its own tile dims, so a camera whose
|
|
7725
|
-
* preset changed over time renders every historical window at the dims it was
|
|
7726
|
-
* written with.
|
|
7727
|
-
*/
|
|
7728
|
-
var ScrubThumbnailPresetSchema = _enum([
|
|
7729
|
-
"minimal",
|
|
7730
|
-
"low",
|
|
7731
|
-
"standard",
|
|
7732
|
-
"high",
|
|
7733
|
-
"max"
|
|
7734
|
-
]);
|
|
7735
|
-
/**
|
|
7736
7718
|
* The full per-camera recording intent — the wire shape of a RecordingTarget.
|
|
7737
7719
|
*
|
|
7738
7720
|
* `bands` is the ONLY authored recording intent: what to record, when, and on
|
|
@@ -7740,7 +7722,11 @@ var ScrubThumbnailPresetSchema = _enum([
|
|
|
7740
7722
|
* other field is a storage knob (profiles, segment length, retention, scrub).
|
|
7741
7723
|
*
|
|
7742
7724
|
* STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
|
|
7743
|
-
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30
|
|
7725
|
+
* `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
|
|
7726
|
+
* and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
|
|
7727
|
+
* deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
|
|
7728
|
+
* (D62: a switch that writes a store nobody reads is worse than no switch).
|
|
7729
|
+
* Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
|
|
7744
7730
|
* A stale caller must fail loudly — silently stripping its legacy intent would
|
|
7745
7731
|
* persist a band-less config, i.e. silently stop recording the camera.
|
|
7746
7732
|
*/
|
|
@@ -7763,14 +7749,7 @@ var RecordingConfigSchema = object({
|
|
|
7763
7749
|
* "off" is the absence of a covering band, never a band value.
|
|
7764
7750
|
*/
|
|
7765
7751
|
bands: array(RecordingBandSchema).default([]),
|
|
7766
|
-
retention: RecordingRetentionSchema.optional()
|
|
7767
|
-
/**
|
|
7768
|
-
* Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
|
|
7769
|
-
* timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
|
|
7770
|
-
* windows only — existing sheets are immutable, and each window's index
|
|
7771
|
-
* carries its own tile dims so mixed-preset history renders correctly.
|
|
7772
|
-
*/
|
|
7773
|
-
scrubThumbnails: ScrubThumbnailPresetSchema.optional()
|
|
7752
|
+
retention: RecordingRetentionSchema.optional()
|
|
7774
7753
|
}).strict();
|
|
7775
7754
|
/**
|
|
7776
7755
|
* Entity-relocation job state (storage entity-routing spec, Phase 4).
|
|
@@ -7846,10 +7825,11 @@ var RelocateFootageInputSchema = object({
|
|
|
7846
7825
|
* `RecordingConfig.enabled` or camera wrapper bindings. */
|
|
7847
7826
|
var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
|
|
7848
7827
|
var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
|
|
7849
|
-
var
|
|
7828
|
+
var RelocateMediaInputSchema = object({
|
|
7850
7829
|
toLocationId: string(),
|
|
7851
7830
|
throttleMbps: number().min(1).max(1e3).optional()
|
|
7852
|
-
})
|
|
7831
|
+
});
|
|
7832
|
+
var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
|
|
7853
7833
|
/** The independently selectable logical storage classes. `recordings`
|
|
7854
7834
|
* encompasses the high and mid segment profiles; `recordingsLow` is low
|
|
7855
7835
|
* segments; `eventMedia` is post-analysis blobs. */
|
|
@@ -8144,7 +8124,26 @@ var LabelDefinitionSchema = object({
|
|
|
8144
8124
|
description: string().optional(),
|
|
8145
8125
|
icon: string().optional()
|
|
8146
8126
|
});
|
|
8147
|
-
|
|
8127
|
+
/**
|
|
8128
|
+
* Wire schema for a per-model CATALOG classMap override
|
|
8129
|
+
* (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
|
|
8130
|
+
* restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
|
|
8131
|
+
* detection pipeline executor actually routes.
|
|
8132
|
+
*
|
|
8133
|
+
* This is deliberately a DIFFERENT, narrower shape than the general-purpose
|
|
8134
|
+
* `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
|
|
8135
|
+
* and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
|
|
8136
|
+
* enum) — the two used to share the name `ClassMapDefinition`/
|
|
8137
|
+
* `ClassMapDefinitionSchema`, which made the schema-type-twin guard
|
|
8138
|
+
* (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
|
|
8139
|
+
* are not: it is two different concepts colliding on a name. Keep this type
|
|
8140
|
+
* under its own name rather than reusing `ClassMapDefinition` — reusing it
|
|
8141
|
+
* would either narrow every `ClassMapDefinition` consumer to the four
|
|
8142
|
+
* detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
|
|
8143
|
+
* schema exists for (see the "rejects a classMap whose target is not a
|
|
8144
|
+
* detection macro" test in `model-catalog-schema.test.ts`).
|
|
8145
|
+
*/
|
|
8146
|
+
var DetectionCatalogClassMapSchema = object({
|
|
8148
8147
|
mapping: record(string(), _enum([
|
|
8149
8148
|
"person",
|
|
8150
8149
|
"vehicle",
|
|
@@ -8349,7 +8348,7 @@ var ModelCatalogEntrySchema = object({
|
|
|
8349
8348
|
* applies (Frigate / COCO public catalog). Set on a custom model whose raw
|
|
8350
8349
|
* labels already ARE the CamStack macros (Scrypted identity map).
|
|
8351
8350
|
*/
|
|
8352
|
-
classMap:
|
|
8351
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8353
8352
|
});
|
|
8354
8353
|
var ConvertTargetSchema = discriminatedUnion("format", [object({
|
|
8355
8354
|
format: literal("openvino"),
|
|
@@ -8379,7 +8378,7 @@ var ModelConvertMetadataSchema = object({
|
|
|
8379
8378
|
"segmentation"
|
|
8380
8379
|
]),
|
|
8381
8380
|
faceAlignment: boolean().optional(),
|
|
8382
|
-
classMap:
|
|
8381
|
+
classMap: DetectionCatalogClassMapSchema.optional()
|
|
8383
8382
|
});
|
|
8384
8383
|
var ConvertResultSchema = object({
|
|
8385
8384
|
entry: ModelCatalogEntrySchema,
|
|
@@ -9242,7 +9241,7 @@ var AddonPageDeclarationSchema = object({
|
|
|
9242
9241
|
/** Display label for a CUSTOM `section` id (ignored for well-known ids). */
|
|
9243
9242
|
sectionLabel: string().optional()
|
|
9244
9243
|
});
|
|
9245
|
-
method(_void(), array(AddonPageDeclarationSchema).readonly());
|
|
9244
|
+
method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
|
|
9246
9245
|
var AddonHttpRouteSchema = object({
|
|
9247
9246
|
method: _enum([
|
|
9248
9247
|
"GET",
|
|
@@ -9501,7 +9500,20 @@ var addonWidgetsSourceCapability = {
|
|
|
9501
9500
|
scope: "system",
|
|
9502
9501
|
mode: "collection",
|
|
9503
9502
|
internal: true,
|
|
9504
|
-
methods: {
|
|
9503
|
+
methods: {
|
|
9504
|
+
/**
|
|
9505
|
+
* `internal: true` did not gate the mount (see the 2026-08-26 note on
|
|
9506
|
+
* `data-store-provider`) — this was reachable on the AppRouter by ANY
|
|
9507
|
+
* authenticated session at the default `auth: 'protected'`. The only
|
|
9508
|
+
* consumer, the `addon-widgets-aggregator` builtin, reads it via
|
|
9509
|
+
* `ctx.capabilities.getCollection('addon-widgets-source')` — LOCAL-PROCESS
|
|
9510
|
+
* only, never tRPC. The public, enriched listing admin-ui actually
|
|
9511
|
+
* consumes is the separate `addon-widgets` cap (`listWidgets` there is
|
|
9512
|
+
* gated separately, and a `preAuth: true` widget is surfaced through the
|
|
9513
|
+
* PUBLIC `auth.listLoginMethods` contribution channel instead) —
|
|
9514
|
+
* neither is affected by this change.
|
|
9515
|
+
*/
|
|
9516
|
+
listWidgets: method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" }) }
|
|
9505
9517
|
};
|
|
9506
9518
|
/**
|
|
9507
9519
|
* `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
|
|
@@ -11037,7 +11049,7 @@ var CustomModelDescriptorSchema = object({
|
|
|
11037
11049
|
stepId: string(),
|
|
11038
11050
|
entry: ModelCatalogEntrySchema
|
|
11039
11051
|
});
|
|
11040
|
-
method(_void(), array(CustomModelDescriptorSchema).readonly());
|
|
11052
|
+
method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
|
|
11041
11053
|
/**
|
|
11042
11054
|
* Query filter for settings-store collections.
|
|
11043
11055
|
*/
|
|
@@ -11124,7 +11136,8 @@ method(object({
|
|
|
11124
11136
|
}), _void(), { kind: "mutation" }), method(object({
|
|
11125
11137
|
namespace: string().optional(),
|
|
11126
11138
|
collection: string(),
|
|
11127
|
-
filter: QueryFilterSchema.optional()
|
|
11139
|
+
filter: QueryFilterSchema.optional(),
|
|
11140
|
+
columns: array(string()).readonly().optional()
|
|
11128
11141
|
}), array(SettingsRecordSchema).readonly()), method(object({
|
|
11129
11142
|
namespace: string().optional(),
|
|
11130
11143
|
collection: string(),
|
|
@@ -11187,46 +11200,87 @@ var EngineInfoSchema = object({
|
|
|
11187
11200
|
kind: _enum(["relational", "vector"]),
|
|
11188
11201
|
displayName: string()
|
|
11189
11202
|
});
|
|
11190
|
-
method(_void(), EngineInfoSchema), method(object({
|
|
11203
|
+
method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
11191
11204
|
namespace: string().optional(),
|
|
11192
11205
|
collection: string(),
|
|
11193
11206
|
key: string()
|
|
11194
|
-
}), unknown()), method(object({
|
|
11207
|
+
}), unknown(), { auth: "admin" }), method(object({
|
|
11195
11208
|
namespace: string().optional(),
|
|
11196
11209
|
collection: string(),
|
|
11197
11210
|
key: string(),
|
|
11198
11211
|
value: unknown()
|
|
11199
|
-
}), _void(), {
|
|
11212
|
+
}), _void(), {
|
|
11213
|
+
kind: "mutation",
|
|
11214
|
+
auth: "admin"
|
|
11215
|
+
}), method(object({
|
|
11200
11216
|
namespace: string().optional(),
|
|
11201
11217
|
collection: string(),
|
|
11202
|
-
filter: QueryFilterSchema.optional()
|
|
11203
|
-
|
|
11218
|
+
filter: QueryFilterSchema.optional(),
|
|
11219
|
+
/**
|
|
11220
|
+
* SQL-level column projection — MUST mirror `settings-store.query`.
|
|
11221
|
+
*
|
|
11222
|
+
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
11223
|
+
* was wrong — corrected 2026-08-26 after the hop map
|
|
11224
|
+
* (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
|
|
11225
|
+
* There is **no Zod parse at all** between the door and the engine: the
|
|
11226
|
+
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
11227
|
+
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
11228
|
+
*
|
|
11229
|
+
* What actually lost `columns` was the THIRD declaration of this shape:
|
|
11230
|
+
* `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
|
|
11231
|
+
* interface the engine destructures from. The field existed on both
|
|
11232
|
+
* schemas and the engine still never read it, because nothing checks a
|
|
11233
|
+
* registered provider against `InferProvider<cap>` —
|
|
11234
|
+
* `ProviderRegistration.provider` is typed `object`.
|
|
11235
|
+
*
|
|
11236
|
+
* It is declared here anyway, and must stay in step with
|
|
11237
|
+
* `settings-store.query`: a caller reading only the cap definitions has
|
|
11238
|
+
* to be able to see that this call carries a projection.
|
|
11239
|
+
* `data-door-schema-parity.spec.ts` keeps the two aligned.
|
|
11240
|
+
*/
|
|
11241
|
+
columns: array(string()).readonly().optional()
|
|
11242
|
+
}), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
|
|
11204
11243
|
namespace: string().optional(),
|
|
11205
11244
|
collection: string(),
|
|
11206
11245
|
record: SettingsRecordSchema
|
|
11207
|
-
}), _void(), {
|
|
11246
|
+
}), _void(), {
|
|
11247
|
+
kind: "mutation",
|
|
11248
|
+
auth: "admin"
|
|
11249
|
+
}), method(object({
|
|
11208
11250
|
namespace: string().optional(),
|
|
11209
11251
|
collection: string(),
|
|
11210
11252
|
id: string(),
|
|
11211
11253
|
data: record(string(), unknown())
|
|
11212
|
-
}), _void(), {
|
|
11254
|
+
}), _void(), {
|
|
11255
|
+
kind: "mutation",
|
|
11256
|
+
auth: "admin"
|
|
11257
|
+
}), method(object({
|
|
11213
11258
|
namespace: string().optional(),
|
|
11214
11259
|
collection: string(),
|
|
11215
11260
|
key: string()
|
|
11216
|
-
}), _void(), {
|
|
11261
|
+
}), _void(), {
|
|
11262
|
+
kind: "mutation",
|
|
11263
|
+
auth: "admin"
|
|
11264
|
+
}), method(object({
|
|
11217
11265
|
namespace: string().optional(),
|
|
11218
11266
|
collection: string(),
|
|
11219
11267
|
filter: MutationFilterSchema
|
|
11220
|
-
}), object({ deleted: number().int() }), {
|
|
11268
|
+
}), object({ deleted: number().int() }), {
|
|
11269
|
+
kind: "mutation",
|
|
11270
|
+
auth: "admin"
|
|
11271
|
+
}), method(object({
|
|
11221
11272
|
namespace: string().optional(),
|
|
11222
11273
|
collection: string(),
|
|
11223
11274
|
filter: MutationFilterSchema,
|
|
11224
11275
|
data: record(string(), unknown())
|
|
11225
|
-
}), object({ updated: number().int() }), {
|
|
11276
|
+
}), object({ updated: number().int() }), {
|
|
11277
|
+
kind: "mutation",
|
|
11278
|
+
auth: "admin"
|
|
11279
|
+
}), method(object({
|
|
11226
11280
|
namespace: string().optional(),
|
|
11227
11281
|
collection: string(),
|
|
11228
11282
|
filter: QueryFilterSchema.optional()
|
|
11229
|
-
}), number()), method(object({
|
|
11283
|
+
}), number(), { auth: "admin" }), method(object({
|
|
11230
11284
|
namespace: string().optional(),
|
|
11231
11285
|
collection: string(),
|
|
11232
11286
|
field: string(),
|
|
@@ -11236,15 +11290,18 @@ method(_void(), EngineInfoSchema), method(object({
|
|
|
11236
11290
|
}), array(object({
|
|
11237
11291
|
bucket: number().int(),
|
|
11238
11292
|
count: number().int()
|
|
11239
|
-
})).readonly()), method(object({
|
|
11293
|
+
})).readonly(), { auth: "admin" }), method(object({
|
|
11240
11294
|
namespace: string().optional(),
|
|
11241
11295
|
collection: string()
|
|
11242
|
-
}), boolean()), method(object({
|
|
11296
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
11243
11297
|
namespace: string().optional(),
|
|
11244
11298
|
collection: string(),
|
|
11245
11299
|
columns: array(CollectionColumnSchema).readonly(),
|
|
11246
11300
|
indexes: array(CollectionIndexSchema).readonly().optional()
|
|
11247
|
-
}), _void(), {
|
|
11301
|
+
}), _void(), {
|
|
11302
|
+
kind: "mutation",
|
|
11303
|
+
auth: "admin"
|
|
11304
|
+
});
|
|
11248
11305
|
/**
|
|
11249
11306
|
* shm ring usage stats for a `frameSink: 'shm'` decoder session —
|
|
11250
11307
|
* exposed via `decoder.getShmStats` so downstream consumers can
|
|
@@ -12372,7 +12429,7 @@ method(object({
|
|
|
12372
12429
|
crop: _instanceof(Uint8Array),
|
|
12373
12430
|
width: number(),
|
|
12374
12431
|
height: number()
|
|
12375
|
-
}), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
|
|
12432
|
+
}), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
|
|
12376
12433
|
/**
|
|
12377
12434
|
* filesystem-browse — per-node capability for browsing the node's local
|
|
12378
12435
|
* filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
|
|
@@ -12665,19 +12722,22 @@ method(LlmGenerateBaseInputSchema.extend({
|
|
|
12665
12722
|
runtime: ManagedRuntimeConfigSchema,
|
|
12666
12723
|
/** The managed profile's timeout, threaded by the hub provider. */
|
|
12667
12724
|
timeoutMs: number().int().positive().optional()
|
|
12668
|
-
}), LlmGenerateResultSchema, {
|
|
12725
|
+
}), LlmGenerateResultSchema, {
|
|
12726
|
+
kind: "mutation",
|
|
12727
|
+
auth: "admin"
|
|
12728
|
+
}), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
|
|
12669
12729
|
kind: "mutation",
|
|
12670
12730
|
auth: "admin"
|
|
12671
12731
|
}), method(object({}), _void(), {
|
|
12672
12732
|
kind: "mutation",
|
|
12673
12733
|
auth: "admin"
|
|
12674
|
-
}), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12734
|
+
}), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
|
|
12675
12735
|
kind: "mutation",
|
|
12676
12736
|
auth: "admin"
|
|
12677
12737
|
}), method(object({ file: string() }), _void(), {
|
|
12678
12738
|
kind: "mutation",
|
|
12679
12739
|
auth: "admin"
|
|
12680
|
-
}), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
|
|
12740
|
+
}), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
|
|
12681
12741
|
/**
|
|
12682
12742
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
12683
12743
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
@@ -16158,7 +16218,7 @@ var OauthIntegrationDescriptorSchema = object({
|
|
|
16158
16218
|
*/
|
|
16159
16219
|
refreshTokenTtlSec: union([number().int().positive(), literal("never")]).optional()
|
|
16160
16220
|
});
|
|
16161
|
-
method(_void(), OauthIntegrationDescriptorSchema);
|
|
16221
|
+
method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" });
|
|
16162
16222
|
/**
|
|
16163
16223
|
* pipeline-analytics — device-scoped wrapper cap. Refines raw
|
|
16164
16224
|
* per-frame detections emitted by the pipeline runner into tracked
|
|
@@ -17353,6 +17413,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
17353
17413
|
}), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17354
17414
|
kind: "mutation",
|
|
17355
17415
|
auth: "admin"
|
|
17416
|
+
}), method(RelocateMediaInputSchema, object({ jobId: string() }), {
|
|
17417
|
+
kind: "mutation",
|
|
17418
|
+
auth: "admin"
|
|
17419
|
+
}), method(object({}), array(RelocateJobSchema).readonly(), {
|
|
17420
|
+
kind: "query",
|
|
17421
|
+
auth: "admin"
|
|
17422
|
+
}), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
|
|
17423
|
+
kind: "mutation",
|
|
17424
|
+
auth: "admin"
|
|
17356
17425
|
}), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
|
|
17357
17426
|
kind: "query",
|
|
17358
17427
|
auth: "admin"
|
|
@@ -17507,6 +17576,11 @@ object({
|
|
|
17507
17576
|
"jpeg"
|
|
17508
17577
|
])
|
|
17509
17578
|
});
|
|
17579
|
+
/**
|
|
17580
|
+
* Process-local frame identity. It is serializable so it can ride an in-process
|
|
17581
|
+
* capability call, but `registryId` deliberately prevents resolution in any
|
|
17582
|
+
* other process or execution group.
|
|
17583
|
+
*/
|
|
17510
17584
|
var FrameRefSchema = object({
|
|
17511
17585
|
registryId: string().min(1),
|
|
17512
17586
|
id: string().min(1),
|
|
@@ -19672,7 +19746,7 @@ method(object({
|
|
|
19672
19746
|
* linking rather than produce an eternal token.
|
|
19673
19747
|
*/
|
|
19674
19748
|
ttlSec: union([number().int().positive(), literal("never")]).optional()
|
|
19675
|
-
}), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
|
|
19749
|
+
}), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
|
|
19676
19750
|
var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
|
|
19677
19751
|
providerId: string().min(1),
|
|
19678
19752
|
displayName: string().min(1),
|
|
@@ -19767,10 +19841,13 @@ var EvictResultSchema = object({
|
|
|
19767
19841
|
/** True when the provider has nothing left it is willing to drop on this location. */
|
|
19768
19842
|
exhausted: boolean()
|
|
19769
19843
|
});
|
|
19770
|
-
method(object({ locationId: string() }), EvictableUsageSchema), method(object({
|
|
19844
|
+
method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
|
|
19771
19845
|
locationId: string(),
|
|
19772
19846
|
targetBytes: number().int().positive()
|
|
19773
|
-
}), EvictResultSchema, {
|
|
19847
|
+
}), EvictResultSchema, {
|
|
19848
|
+
kind: "mutation",
|
|
19849
|
+
auth: "admin"
|
|
19850
|
+
});
|
|
19774
19851
|
method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
|
|
19775
19852
|
kind: "mutation",
|
|
19776
19853
|
auth: "admin"
|
|
@@ -19830,26 +19907,50 @@ var ReadChunkInputSchema = object({
|
|
|
19830
19907
|
length: number()
|
|
19831
19908
|
});
|
|
19832
19909
|
var EndDownloadInputSchema = object({ downloadId: string() });
|
|
19833
|
-
method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
19910
|
+
method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
|
|
19834
19911
|
location: StorageLocationSchema,
|
|
19835
19912
|
relativePath: string()
|
|
19836
|
-
}), string()), method(object({
|
|
19913
|
+
}), string(), { auth: "admin" }), method(object({
|
|
19837
19914
|
location: StorageLocationSchema,
|
|
19838
19915
|
relativePath: string(),
|
|
19839
19916
|
data: _instanceof(Uint8Array)
|
|
19840
|
-
}), _void(), {
|
|
19917
|
+
}), _void(), {
|
|
19918
|
+
kind: "mutation",
|
|
19919
|
+
auth: "admin"
|
|
19920
|
+
}), method(object({
|
|
19841
19921
|
location: StorageLocationSchema,
|
|
19842
19922
|
relativePath: string()
|
|
19843
|
-
}), _instanceof(Uint8Array)), method(object({
|
|
19923
|
+
}), _instanceof(Uint8Array), { auth: "admin" }), method(object({
|
|
19844
19924
|
location: StorageLocationSchema,
|
|
19845
19925
|
relativePath: string()
|
|
19846
|
-
}), boolean()), method(object({
|
|
19926
|
+
}), boolean(), { auth: "admin" }), method(object({
|
|
19847
19927
|
location: StorageLocationSchema,
|
|
19848
19928
|
prefix: string().optional()
|
|
19849
|
-
}), array(string()).readonly()), method(object({
|
|
19929
|
+
}), array(string()).readonly(), { auth: "admin" }), method(object({
|
|
19850
19930
|
location: StorageLocationSchema,
|
|
19851
19931
|
relativePath: string()
|
|
19852
|
-
}), _void(), {
|
|
19932
|
+
}), _void(), {
|
|
19933
|
+
kind: "mutation",
|
|
19934
|
+
auth: "admin"
|
|
19935
|
+
}), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
|
|
19936
|
+
kind: "mutation",
|
|
19937
|
+
auth: "admin"
|
|
19938
|
+
}), method(WriteChunkInputSchema, _void(), {
|
|
19939
|
+
kind: "mutation",
|
|
19940
|
+
auth: "admin"
|
|
19941
|
+
}), method(FinalizeUploadInputSchema, _void(), {
|
|
19942
|
+
kind: "mutation",
|
|
19943
|
+
auth: "admin"
|
|
19944
|
+
}), method(AbortUploadInputSchema, _void(), {
|
|
19945
|
+
kind: "mutation",
|
|
19946
|
+
auth: "admin"
|
|
19947
|
+
}), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
|
|
19948
|
+
kind: "mutation",
|
|
19949
|
+
auth: "admin"
|
|
19950
|
+
}), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
|
|
19951
|
+
kind: "mutation",
|
|
19952
|
+
auth: "admin"
|
|
19953
|
+
});
|
|
19853
19954
|
/** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
|
|
19854
19955
|
var ProfileSettingsSchemaBridge = unknown().nullable();
|
|
19855
19956
|
var ProfileSettingsBagSchema = record(string(), unknown());
|
|
@@ -20113,9 +20214,28 @@ var userPasskeysCapability = {
|
|
|
20113
20214
|
auth: "admin",
|
|
20114
20215
|
access: "create"
|
|
20115
20216
|
}),
|
|
20217
|
+
/**
|
|
20218
|
+
* The four methods below had NO `auth` override — `internal: true` did
|
|
20219
|
+
* not gate the mount (see the 2026-08-26 note on `data-store-provider`),
|
|
20220
|
+
* so they were reachable on the AppRouter at the default
|
|
20221
|
+
* `auth: 'protected'` (any authenticated session), inconsistent with
|
|
20222
|
+
* every other method on this cap (all already `auth: 'admin'`).
|
|
20223
|
+
*
|
|
20224
|
+
* ⚠ Checked before gating: these are also the PRE-AUTH login-ceremony
|
|
20225
|
+
* methods, so admin-gating them here must not break login for an
|
|
20226
|
+
* unauthenticated principal. It doesn't — the real login path is the
|
|
20227
|
+
* PUBLIC `auth.beginAuthentication` / `auth.finishAuthentication` /
|
|
20228
|
+
* `auth.beginDiscoverableAuthentication` / `auth.finishDiscoverableAuthentication`
|
|
20229
|
+
* procedures in `server/backend/src/api/core/auth.router.ts`, which call
|
|
20230
|
+
* `provider.beginAuthentication(...)` etc. directly against the
|
|
20231
|
+
* capability-registry-resolved provider — never through this cap's own
|
|
20232
|
+
* tRPC route. `auth: 'admin'` here only closes a redundant, unused
|
|
20233
|
+
* second entry point onto the same ceremony.
|
|
20234
|
+
*/
|
|
20116
20235
|
beginAuthentication: method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20117
20236
|
kind: "mutation",
|
|
20118
|
-
access: "view"
|
|
20237
|
+
access: "view",
|
|
20238
|
+
auth: "admin"
|
|
20119
20239
|
}),
|
|
20120
20240
|
finishAuthentication: method(object({
|
|
20121
20241
|
/** Required — the user the assertion belongs to (verified). */
|
|
@@ -20124,11 +20244,13 @@ var userPasskeysCapability = {
|
|
|
20124
20244
|
response: record(string(), unknown())
|
|
20125
20245
|
}), object({ verified: boolean() }), {
|
|
20126
20246
|
kind: "mutation",
|
|
20127
|
-
access: "view"
|
|
20247
|
+
access: "view",
|
|
20248
|
+
auth: "admin"
|
|
20128
20249
|
}),
|
|
20129
20250
|
beginDiscoverableAuthentication: method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
|
|
20130
20251
|
kind: "mutation",
|
|
20131
|
-
access: "view"
|
|
20252
|
+
access: "view",
|
|
20253
|
+
auth: "admin"
|
|
20132
20254
|
}),
|
|
20133
20255
|
finishDiscoverableAuthentication: method(object({
|
|
20134
20256
|
/** AuthenticationResponseJSON from the browser. */
|
|
@@ -20137,7 +20259,8 @@ response: record(string(), unknown()) }), object({
|
|
|
20137
20259
|
userId: string().nullable()
|
|
20138
20260
|
}), {
|
|
20139
20261
|
kind: "mutation",
|
|
20140
|
-
access: "view"
|
|
20262
|
+
access: "view",
|
|
20263
|
+
auth: "admin"
|
|
20141
20264
|
}),
|
|
20142
20265
|
listPasskeys: method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }),
|
|
20143
20266
|
removePasskey: method(object({
|
|
@@ -20315,7 +20438,19 @@ var VectorStatsResultSchema = object({
|
|
|
20315
20438
|
/** False when the backend ranks approximately. */
|
|
20316
20439
|
exact: boolean()
|
|
20317
20440
|
});
|
|
20318
|
-
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20441
|
+
method(VectorDeclareIndexInputSchema, _void(), {
|
|
20442
|
+
kind: "mutation",
|
|
20443
|
+
auth: "admin"
|
|
20444
|
+
}), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
|
|
20445
|
+
kind: "mutation",
|
|
20446
|
+
auth: "admin"
|
|
20447
|
+
}), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
|
|
20448
|
+
kind: "mutation",
|
|
20449
|
+
auth: "admin"
|
|
20450
|
+
}), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
|
|
20451
|
+
kind: "mutation",
|
|
20452
|
+
auth: "admin"
|
|
20453
|
+
}), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
|
|
20319
20454
|
var ClipSchema = object({
|
|
20320
20455
|
/** Opaque, provider-namespaced id. The default provider encodes the time
|
|
20321
20456
|
* window so `getClipPlayback` is self-contained (no event re-query). */
|
|
@@ -22038,7 +22173,27 @@ var MediaFileLiteSchema$1 = object({
|
|
|
22038
22173
|
sizeBytes: number(),
|
|
22039
22174
|
timestamp: number()
|
|
22040
22175
|
});
|
|
22041
|
-
method(
|
|
22176
|
+
method(object({
|
|
22177
|
+
/**
|
|
22178
|
+
* Inline {@link IdentitySchema.coverBase64} on every row.
|
|
22179
|
+
*
|
|
22180
|
+
* Default `false`, the same inversion `listRecentFaces` and
|
|
22181
|
+
* `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
|
|
22182
|
+
* why the burden belongs on the caller that WANTS the bytes). Measured
|
|
22183
|
+
* on the live hub the same day: four identities cost 40,979 B with the
|
|
22184
|
+
* covers inline, ~10 KB of base64 per row, on a query this UI mounts
|
|
22185
|
+
* four times and the viewer holds at `staleTime: 30_000`.
|
|
22186
|
+
*
|
|
22187
|
+
* Nothing loses its avatar: `coverMediaKey` is already on every row and
|
|
22188
|
+
* the `event-media` plane serves that key `immutable` with an ETag.
|
|
22189
|
+
*
|
|
22190
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
22191
|
+
* next train** — the hub router validates cap inputs against its own
|
|
22192
|
+
* compiled Zod and strips a key it does not know. Until then the
|
|
22193
|
+
* provider sees `undefined`, which resolves to `false`: the cheap shape
|
|
22194
|
+
* is what ships, and the opt-in becomes reachable when the train lands.
|
|
22195
|
+
*/
|
|
22196
|
+
includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
|
|
22042
22197
|
kind: "mutation",
|
|
22043
22198
|
auth: "admin"
|
|
22044
22199
|
}), method(object({
|
|
@@ -24185,8 +24340,10 @@ var PlateInfoSchema = object({
|
|
|
24185
24340
|
keyFrameMediaKey: string().optional(),
|
|
24186
24341
|
base64: string().optional(),
|
|
24187
24342
|
/**
|
|
24188
|
-
* Same crop as a data-plane URL
|
|
24189
|
-
* never inlines JPEG; `listPlates`
|
|
24343
|
+
* Same crop as a data-plane URL, always present when the plate has a stored
|
|
24344
|
+
* crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
|
|
24345
|
+
* and `searchPlates` inline the crop only when their `includeCrops` input is
|
|
24346
|
+
* left at its `true` default.
|
|
24190
24347
|
*/
|
|
24191
24348
|
cropUrl: string().optional()
|
|
24192
24349
|
});
|
|
@@ -24206,14 +24363,34 @@ var PlateClusterSchema = object({
|
|
|
24206
24363
|
});
|
|
24207
24364
|
method(object({
|
|
24208
24365
|
deviceId: number().int().optional(),
|
|
24209
|
-
limit: number().int().positive().optional()
|
|
24366
|
+
limit: number().int().positive().optional(),
|
|
24367
|
+
/**
|
|
24368
|
+
* Inline the base64 crop on every row. Default `true` — the existing
|
|
24369
|
+
* behaviour, kept so no caller breaks.
|
|
24370
|
+
*
|
|
24371
|
+
* Set `false` once the caller renders {@link PlateInfo.cropUrl}.
|
|
24372
|
+
* Measured on the live hub at the 500 rows the Plates view asks for:
|
|
24373
|
+
* 879,403 B and 27.7 s with the crops inline, against a few KiB of
|
|
24374
|
+
* metadata without them — and the browser then caches the images.
|
|
24375
|
+
*
|
|
24376
|
+
* This is the plate twin of `faceGallery.listRecentFaces`'s option;
|
|
24377
|
+
* plates were the one gallery list left without it.
|
|
24378
|
+
*
|
|
24379
|
+
* **This is an INPUT field, so it does not reach the addon until the
|
|
24380
|
+
* next train.** The hub router validates cap inputs against its own
|
|
24381
|
+
* compiled Zod and strips a key it does not know. Until the train
|
|
24382
|
+
* ships, sending `false` is harmless and keeps the crops inline.
|
|
24383
|
+
*/
|
|
24384
|
+
includeCrops: boolean().optional()
|
|
24210
24385
|
}).optional(), array(PlateInfoSchema).readonly()), method(object({
|
|
24211
24386
|
deviceId: number().int(),
|
|
24212
24387
|
trackId: string()
|
|
24213
24388
|
}), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
|
|
24214
24389
|
text: string().min(1),
|
|
24215
24390
|
maxDistance: number().int().min(0).optional(),
|
|
24216
|
-
limit: number().int().positive().optional()
|
|
24391
|
+
limit: number().int().positive().optional(),
|
|
24392
|
+
/** See `listPlates.includeCrops`. Default `true`. */
|
|
24393
|
+
includeCrops: boolean().optional()
|
|
24217
24394
|
}), array(PlateInfoSchema).readonly()), method(object({
|
|
24218
24395
|
maxDistance: number().int().min(0).optional(),
|
|
24219
24396
|
minClusterSize: number().int().min(2).optional(),
|
|
@@ -24227,7 +24404,13 @@ method(object({
|
|
|
24227
24404
|
}), method(object({ plateId: string() }), _void(), {
|
|
24228
24405
|
kind: "mutation",
|
|
24229
24406
|
auth: "admin"
|
|
24230
|
-
}), method(
|
|
24407
|
+
}), method(object({
|
|
24408
|
+
/** Inline {@link VehicleSchema.coverBase64} on every row. Default
|
|
24409
|
+
* `false` — the vehicle twin of `faceGallery.listIdentities`'s
|
|
24410
|
+
* option; `coverMediaKey` + the `event-media` plane carry the picture.
|
|
24411
|
+
* INPUT field: stripped by the hub router until the train ships, which
|
|
24412
|
+
* resolves to `false` and is exactly the intended default. */
|
|
24413
|
+
includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
|
|
24231
24414
|
kind: "mutation",
|
|
24232
24415
|
auth: "admin"
|
|
24233
24416
|
}), method(object({
|
|
@@ -29604,6 +29787,12 @@ Object.freeze({
|
|
|
29604
29787
|
addonId: null,
|
|
29605
29788
|
access: "create"
|
|
29606
29789
|
},
|
|
29790
|
+
"pipelineAnalytics.cancelRelocateMedia": {
|
|
29791
|
+
capName: "pipeline-analytics",
|
|
29792
|
+
capScope: "device",
|
|
29793
|
+
addonId: null,
|
|
29794
|
+
access: "create"
|
|
29795
|
+
},
|
|
29607
29796
|
"pipelineAnalytics.cancelStorageMigrationMove": {
|
|
29608
29797
|
capName: "pipeline-analytics",
|
|
29609
29798
|
capScope: "device",
|
|
@@ -29778,6 +29967,12 @@ Object.freeze({
|
|
|
29778
29967
|
addonId: null,
|
|
29779
29968
|
access: "view"
|
|
29780
29969
|
},
|
|
29970
|
+
"pipelineAnalytics.listRelocateMediaJobs": {
|
|
29971
|
+
capName: "pipeline-analytics",
|
|
29972
|
+
capScope: "device",
|
|
29973
|
+
addonId: null,
|
|
29974
|
+
access: "view"
|
|
29975
|
+
},
|
|
29781
29976
|
"pipelineAnalytics.listRetrainAnnotations": {
|
|
29782
29977
|
capName: "pipeline-analytics",
|
|
29783
29978
|
capScope: "device",
|
|
@@ -29856,6 +30051,12 @@ Object.freeze({
|
|
|
29856
30051
|
addonId: null,
|
|
29857
30052
|
access: "create"
|
|
29858
30053
|
},
|
|
30054
|
+
"pipelineAnalytics.relocateMedia": {
|
|
30055
|
+
capName: "pipeline-analytics",
|
|
30056
|
+
capScope: "device",
|
|
30057
|
+
addonId: null,
|
|
30058
|
+
access: "create"
|
|
30059
|
+
},
|
|
29859
30060
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
29860
30061
|
capName: "pipeline-analytics",
|
|
29861
30062
|
capScope: "device",
|