@camstack/addon-export-alexa 1.2.34 → 1.2.35

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.
@@ -6657,7 +6657,7 @@ function method(input, output, options) {
6657
6657
  input,
6658
6658
  output,
6659
6659
  kind: options?.kind ?? "query",
6660
- auth: options?.auth ?? "protected",
6660
+ ...options?.auth !== void 0 ? { auth: options.auth } : {},
6661
6661
  ...options?.access !== void 0 ? { access: options.access } : {},
6662
6662
  ...options?.caller !== void 0 ? { caller: options.caller } : {},
6663
6663
  timeoutMs: options?.timeoutMs
@@ -6677,7 +6677,7 @@ function systemMethod(input, output, options) {
6677
6677
  }
6678
6678
  var StaticDirOutputSchema$1 = object({ staticDir: string() });
6679
6679
  var VersionOutputSchema$1 = object({ version: string() });
6680
- method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
6680
+ method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
6681
6681
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
6682
6682
  DeviceType["Camera"] = "camera";
6683
6683
  DeviceType["Hub"] = "hub";
@@ -6998,7 +6998,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
6998
6998
  }({});
6999
6999
  var StaticDirOutputSchema = object({ staticDir: string() });
7000
7000
  var VersionOutputSchema = object({ version: string() });
7001
- method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
7001
+ method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
7002
7002
  /**
7003
7003
  * device-ops — device-scoped cap that unifies the per-IDevice operations
7004
7004
  * previously routed through the `.device-ops` Moleculer bridge service.
@@ -7769,24 +7769,6 @@ var RecordingRetentionSchema = object({
7769
7769
  maxSizeGb: number().min(0).optional()
7770
7770
  });
7771
7771
  /**
7772
- * Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
7773
- * sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
7774
- * previews at. Five graduated steps; absent on a config = `standard` (the
7775
- * shipped default, matching `sheet-geometry`/`sheet-composer`).
7776
- *
7777
- * Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
7778
- * Each window's index sidecar carries its own tile dims, so a camera whose
7779
- * preset changed over time renders every historical window at the dims it was
7780
- * written with.
7781
- */
7782
- var ScrubThumbnailPresetSchema = _enum([
7783
- "minimal",
7784
- "low",
7785
- "standard",
7786
- "high",
7787
- "max"
7788
- ]);
7789
- /**
7790
7772
  * The full per-camera recording intent — the wire shape of a RecordingTarget.
7791
7773
  *
7792
7774
  * `bands` is the ONLY authored recording intent: what to record, when, and on
@@ -7794,7 +7776,11 @@ var ScrubThumbnailPresetSchema = _enum([
7794
7776
  * other field is a storage knob (profiles, segment length, retention, scrub).
7795
7777
  *
7796
7778
  * STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
7797
- * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30.
7779
+ * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
7780
+ * and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
7781
+ * deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
7782
+ * (D62: a switch that writes a store nobody reads is worse than no switch).
7783
+ * Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
7798
7784
  * A stale caller must fail loudly — silently stripping its legacy intent would
7799
7785
  * persist a band-less config, i.e. silently stop recording the camera.
7800
7786
  */
@@ -7817,14 +7803,7 @@ var RecordingConfigSchema = object({
7817
7803
  * "off" is the absence of a covering band, never a band value.
7818
7804
  */
7819
7805
  bands: array(RecordingBandSchema).default([]),
7820
- retention: RecordingRetentionSchema.optional(),
7821
- /**
7822
- * Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
7823
- * timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
7824
- * windows only — existing sheets are immutable, and each window's index
7825
- * carries its own tile dims so mixed-preset history renders correctly.
7826
- */
7827
- scrubThumbnails: ScrubThumbnailPresetSchema.optional()
7806
+ retention: RecordingRetentionSchema.optional()
7828
7807
  }).strict();
7829
7808
  /**
7830
7809
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
@@ -7900,10 +7879,11 @@ var RelocateFootageInputSchema = object({
7900
7879
  * `RecordingConfig.enabled` or camera wrapper bindings. */
7901
7880
  var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7902
7881
  var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7903
- var StorageMigrationMediaMoveInputSchema = object({
7882
+ var RelocateMediaInputSchema = object({
7904
7883
  toLocationId: string(),
7905
7884
  throttleMbps: number().min(1).max(1e3).optional()
7906
- }).extend({ leaseId: string().min(1) });
7885
+ });
7886
+ var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
7907
7887
  /** The independently selectable logical storage classes. `recordings`
7908
7888
  * encompasses the high and mid segment profiles; `recordingsLow` is low
7909
7889
  * segments; `eventMedia` is post-analysis blobs. */
@@ -8252,7 +8232,26 @@ var LabelDefinitionSchema = object({
8252
8232
  description: string().optional(),
8253
8233
  icon: string().optional()
8254
8234
  });
8255
- var ClassMapDefinitionSchema = object({
8235
+ /**
8236
+ * Wire schema for a per-model CATALOG classMap override
8237
+ * (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
8238
+ * restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
8239
+ * detection pipeline executor actually routes.
8240
+ *
8241
+ * This is deliberately a DIFFERENT, narrower shape than the general-purpose
8242
+ * `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
8243
+ * and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
8244
+ * enum) — the two used to share the name `ClassMapDefinition`/
8245
+ * `ClassMapDefinitionSchema`, which made the schema-type-twin guard
8246
+ * (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
8247
+ * are not: it is two different concepts colliding on a name. Keep this type
8248
+ * under its own name rather than reusing `ClassMapDefinition` — reusing it
8249
+ * would either narrow every `ClassMapDefinition` consumer to the four
8250
+ * detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
8251
+ * schema exists for (see the "rejects a classMap whose target is not a
8252
+ * detection macro" test in `model-catalog-schema.test.ts`).
8253
+ */
8254
+ var DetectionCatalogClassMapSchema = object({
8256
8255
  mapping: record(string(), _enum([
8257
8256
  "person",
8258
8257
  "vehicle",
@@ -8457,7 +8456,7 @@ var ModelCatalogEntrySchema = object({
8457
8456
  * applies (Frigate / COCO public catalog). Set on a custom model whose raw
8458
8457
  * labels already ARE the CamStack macros (Scrypted identity map).
8459
8458
  */
8460
- classMap: ClassMapDefinitionSchema.optional()
8459
+ classMap: DetectionCatalogClassMapSchema.optional()
8461
8460
  });
8462
8461
  var ConvertTargetSchema = discriminatedUnion("format", [object({
8463
8462
  format: literal("openvino"),
@@ -8487,7 +8486,7 @@ var ModelConvertMetadataSchema = object({
8487
8486
  "segmentation"
8488
8487
  ]),
8489
8488
  faceAlignment: boolean().optional(),
8490
- classMap: ClassMapDefinitionSchema.optional()
8489
+ classMap: DetectionCatalogClassMapSchema.optional()
8491
8490
  });
8492
8491
  var ConvertResultSchema = object({
8493
8492
  entry: ModelCatalogEntrySchema,
@@ -9357,7 +9356,7 @@ var AddonPageDeclarationSchema = object({
9357
9356
  /** Display label for a CUSTOM `section` id (ignored for well-known ids). */
9358
9357
  sectionLabel: string().optional()
9359
9358
  });
9360
- method(_void(), array(AddonPageDeclarationSchema).readonly());
9359
+ method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
9361
9360
  var AddonHttpRouteSchema = object({
9362
9361
  method: _enum([
9363
9362
  "GET",
@@ -9611,7 +9610,7 @@ var WidgetMetadataSchema = object({
9611
9610
  defaultColumns: number().int().min(1).max(12).default(6),
9612
9611
  defaultRows: number().int().min(1).max(12).default(1)
9613
9612
  });
9614
- method(_void(), array(WidgetMetadataSchema).readonly());
9613
+ method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
9615
9614
  /**
9616
9615
  * `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
9617
9616
  * surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
@@ -11155,7 +11154,7 @@ var CustomModelDescriptorSchema = object({
11155
11154
  stepId: string(),
11156
11155
  entry: ModelCatalogEntrySchema
11157
11156
  });
11158
- method(_void(), array(CustomModelDescriptorSchema).readonly());
11157
+ method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
11159
11158
  /**
11160
11159
  * Query filter for settings-store collections.
11161
11160
  */
@@ -11242,7 +11241,8 @@ method(object({
11242
11241
  }), _void(), { kind: "mutation" }), method(object({
11243
11242
  namespace: string().optional(),
11244
11243
  collection: string(),
11245
- filter: QueryFilterSchema.optional()
11244
+ filter: QueryFilterSchema.optional(),
11245
+ columns: array(string()).readonly().optional()
11246
11246
  }), array(SettingsRecordSchema).readonly()), method(object({
11247
11247
  namespace: string().optional(),
11248
11248
  collection: string(),
@@ -11305,46 +11305,87 @@ var EngineInfoSchema = object({
11305
11305
  kind: _enum(["relational", "vector"]),
11306
11306
  displayName: string()
11307
11307
  });
11308
- method(_void(), EngineInfoSchema), method(object({
11308
+ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
11309
11309
  namespace: string().optional(),
11310
11310
  collection: string(),
11311
11311
  key: string()
11312
- }), unknown()), method(object({
11312
+ }), unknown(), { auth: "admin" }), method(object({
11313
11313
  namespace: string().optional(),
11314
11314
  collection: string(),
11315
11315
  key: string(),
11316
11316
  value: unknown()
11317
- }), _void(), { kind: "mutation" }), method(object({
11317
+ }), _void(), {
11318
+ kind: "mutation",
11319
+ auth: "admin"
11320
+ }), method(object({
11318
11321
  namespace: string().optional(),
11319
11322
  collection: string(),
11320
- filter: QueryFilterSchema.optional()
11321
- }), array(SettingsRecordSchema).readonly()), method(object({
11323
+ filter: QueryFilterSchema.optional(),
11324
+ /**
11325
+ * SQL-level column projection — MUST mirror `settings-store.query`.
11326
+ *
11327
+ * ⚠ An earlier version of this comment blamed Zod stripping, and that
11328
+ * was wrong — corrected 2026-08-26 after the hop map
11329
+ * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
11330
+ * There is **no Zod parse at all** between the door and the engine: the
11331
+ * dispatcher forwards the payload verbatim and UDS carries it whole. A
11332
+ * field declared here reaches `SqliteSettingsBackend` either way.
11333
+ *
11334
+ * What actually lost `columns` was the THIRD declaration of this shape:
11335
+ * `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
11336
+ * interface the engine destructures from. The field existed on both
11337
+ * schemas and the engine still never read it, because nothing checks a
11338
+ * registered provider against `InferProvider<cap>` —
11339
+ * `ProviderRegistration.provider` is typed `object`.
11340
+ *
11341
+ * It is declared here anyway, and must stay in step with
11342
+ * `settings-store.query`: a caller reading only the cap definitions has
11343
+ * to be able to see that this call carries a projection.
11344
+ * `data-door-schema-parity.spec.ts` keeps the two aligned.
11345
+ */
11346
+ columns: array(string()).readonly().optional()
11347
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
11322
11348
  namespace: string().optional(),
11323
11349
  collection: string(),
11324
11350
  record: SettingsRecordSchema
11325
- }), _void(), { kind: "mutation" }), method(object({
11351
+ }), _void(), {
11352
+ kind: "mutation",
11353
+ auth: "admin"
11354
+ }), method(object({
11326
11355
  namespace: string().optional(),
11327
11356
  collection: string(),
11328
11357
  id: string(),
11329
11358
  data: record(string(), unknown())
11330
- }), _void(), { kind: "mutation" }), method(object({
11359
+ }), _void(), {
11360
+ kind: "mutation",
11361
+ auth: "admin"
11362
+ }), method(object({
11331
11363
  namespace: string().optional(),
11332
11364
  collection: string(),
11333
11365
  key: string()
11334
- }), _void(), { kind: "mutation" }), method(object({
11366
+ }), _void(), {
11367
+ kind: "mutation",
11368
+ auth: "admin"
11369
+ }), method(object({
11335
11370
  namespace: string().optional(),
11336
11371
  collection: string(),
11337
11372
  filter: MutationFilterSchema
11338
- }), object({ deleted: number().int() }), { kind: "mutation" }), method(object({
11373
+ }), object({ deleted: number().int() }), {
11374
+ kind: "mutation",
11375
+ auth: "admin"
11376
+ }), method(object({
11339
11377
  namespace: string().optional(),
11340
11378
  collection: string(),
11341
11379
  filter: MutationFilterSchema,
11342
11380
  data: record(string(), unknown())
11343
- }), object({ updated: number().int() }), { kind: "mutation" }), method(object({
11381
+ }), object({ updated: number().int() }), {
11382
+ kind: "mutation",
11383
+ auth: "admin"
11384
+ }), method(object({
11344
11385
  namespace: string().optional(),
11345
11386
  collection: string(),
11346
11387
  filter: QueryFilterSchema.optional()
11347
- }), number()), method(object({
11388
+ }), number(), { auth: "admin" }), method(object({
11348
11389
  namespace: string().optional(),
11349
11390
  collection: string(),
11350
11391
  field: string(),
@@ -11354,15 +11395,18 @@ method(_void(), EngineInfoSchema), method(object({
11354
11395
  }), array(object({
11355
11396
  bucket: number().int(),
11356
11397
  count: number().int()
11357
- })).readonly()), method(object({
11398
+ })).readonly(), { auth: "admin" }), method(object({
11358
11399
  namespace: string().optional(),
11359
11400
  collection: string()
11360
- }), boolean()), method(object({
11401
+ }), boolean(), { auth: "admin" }), method(object({
11361
11402
  namespace: string().optional(),
11362
11403
  collection: string(),
11363
11404
  columns: array(CollectionColumnSchema).readonly(),
11364
11405
  indexes: array(CollectionIndexSchema).readonly().optional()
11365
- }), _void(), { kind: "mutation" });
11406
+ }), _void(), {
11407
+ kind: "mutation",
11408
+ auth: "admin"
11409
+ });
11366
11410
  /**
11367
11411
  * shm ring usage stats for a `frameSink: 'shm'` decoder session —
11368
11412
  * exposed via `decoder.getShmStats` so downstream consumers can
@@ -12515,7 +12559,7 @@ method(object({
12515
12559
  crop: _instanceof(Uint8Array),
12516
12560
  width: number(),
12517
12561
  height: number()
12518
- }), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
12562
+ }), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
12519
12563
  /**
12520
12564
  * filesystem-browse — per-node capability for browsing the node's local
12521
12565
  * filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
@@ -12808,19 +12852,22 @@ method(LlmGenerateBaseInputSchema.extend({
12808
12852
  runtime: ManagedRuntimeConfigSchema,
12809
12853
  /** The managed profile's timeout, threaded by the hub provider. */
12810
12854
  timeoutMs: number().int().positive().optional()
12811
- }), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12855
+ }), LlmGenerateResultSchema, {
12856
+ kind: "mutation",
12857
+ auth: "admin"
12858
+ }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12812
12859
  kind: "mutation",
12813
12860
  auth: "admin"
12814
12861
  }), method(object({}), _void(), {
12815
12862
  kind: "mutation",
12816
12863
  auth: "admin"
12817
- }), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
12864
+ }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
12818
12865
  kind: "mutation",
12819
12866
  auth: "admin"
12820
12867
  }), method(object({ file: string() }), _void(), {
12821
12868
  kind: "mutation",
12822
12869
  auth: "admin"
12823
- }), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
12870
+ }), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
12824
12871
  /**
12825
12872
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
12826
12873
  * methods concat-fan across providers; single-row methods route to ONE
@@ -16298,7 +16345,17 @@ var oauthIntegrationCapability = {
16298
16345
  scope: "system",
16299
16346
  mode: "collection",
16300
16347
  internal: true,
16301
- methods: { getDescriptor: method(_void(), OauthIntegrationDescriptorSchema) }
16348
+ methods: {
16349
+ /**
16350
+ * `internal: true` did not gate the mount (see the 2026-08-26 note on
16351
+ * `data-store-provider`) — `getDescriptor` was reachable on the AppRouter
16352
+ * by ANY authenticated session at the default `auth: 'protected'`. The
16353
+ * real caller is `/api/oauth2/authorize` and `/api/oauth2/integrations`
16354
+ * (`oauth2-routes.ts`), which resolve the provider directly off the
16355
+ * capability registry — never through tRPC. `auth: 'admin'` closes the
16356
+ * tRPC surface without touching that path.
16357
+ */
16358
+ getDescriptor: method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" }) }
16302
16359
  };
16303
16360
  /**
16304
16361
  * pipeline-analytics — device-scoped wrapper cap. Refines raw
@@ -17494,6 +17551,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
17494
17551
  }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17495
17552
  kind: "mutation",
17496
17553
  auth: "admin"
17554
+ }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
17555
+ kind: "mutation",
17556
+ auth: "admin"
17557
+ }), method(object({}), array(RelocateJobSchema).readonly(), {
17558
+ kind: "query",
17559
+ auth: "admin"
17560
+ }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17561
+ kind: "mutation",
17562
+ auth: "admin"
17497
17563
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
17498
17564
  kind: "query",
17499
17565
  auth: "admin"
@@ -17648,6 +17714,11 @@ object({
17648
17714
  "jpeg"
17649
17715
  ])
17650
17716
  });
17717
+ /**
17718
+ * Process-local frame identity. It is serializable so it can ride an in-process
17719
+ * capability call, but `registryId` deliberately prevents resolution in any
17720
+ * other process or execution group.
17721
+ */
17651
17722
  var FrameRefSchema = object({
17652
17723
  registryId: string().min(1),
17653
17724
  id: string().min(1),
@@ -19813,7 +19884,7 @@ method(object({
19813
19884
  * linking rather than produce an eternal token.
19814
19885
  */
19815
19886
  ttlSec: union([number().int().positive(), literal("never")]).optional()
19816
- }), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
19887
+ }), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
19817
19888
  var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
19818
19889
  providerId: string().min(1),
19819
19890
  displayName: string().min(1),
@@ -19908,10 +19979,13 @@ var EvictResultSchema = object({
19908
19979
  /** True when the provider has nothing left it is willing to drop on this location. */
19909
19980
  exhausted: boolean()
19910
19981
  });
19911
- method(object({ locationId: string() }), EvictableUsageSchema), method(object({
19982
+ method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
19912
19983
  locationId: string(),
19913
19984
  targetBytes: number().int().positive()
19914
- }), EvictResultSchema, { kind: "mutation" });
19985
+ }), EvictResultSchema, {
19986
+ kind: "mutation",
19987
+ auth: "admin"
19988
+ });
19915
19989
  method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
19916
19990
  kind: "mutation",
19917
19991
  auth: "admin"
@@ -19971,26 +20045,50 @@ var ReadChunkInputSchema = object({
19971
20045
  length: number()
19972
20046
  });
19973
20047
  var EndDownloadInputSchema = object({ downloadId: string() });
19974
- method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
20048
+ method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
19975
20049
  location: StorageLocationSchema,
19976
20050
  relativePath: string()
19977
- }), string()), method(object({
20051
+ }), string(), { auth: "admin" }), method(object({
19978
20052
  location: StorageLocationSchema,
19979
20053
  relativePath: string(),
19980
20054
  data: _instanceof(Uint8Array)
19981
- }), _void(), { kind: "mutation" }), method(object({
20055
+ }), _void(), {
20056
+ kind: "mutation",
20057
+ auth: "admin"
20058
+ }), method(object({
19982
20059
  location: StorageLocationSchema,
19983
20060
  relativePath: string()
19984
- }), _instanceof(Uint8Array)), method(object({
20061
+ }), _instanceof(Uint8Array), { auth: "admin" }), method(object({
19985
20062
  location: StorageLocationSchema,
19986
20063
  relativePath: string()
19987
- }), boolean()), method(object({
20064
+ }), boolean(), { auth: "admin" }), method(object({
19988
20065
  location: StorageLocationSchema,
19989
20066
  prefix: string().optional()
19990
- }), array(string()).readonly()), method(object({
20067
+ }), array(string()).readonly(), { auth: "admin" }), method(object({
19991
20068
  location: StorageLocationSchema,
19992
20069
  relativePath: string()
19993
- }), _void(), { kind: "mutation" }), method(object({ location: StorageLocationSchema }), number().nullable()), method(BeginUploadInputSchema, BeginUploadResultSchema, { kind: "mutation" }), method(WriteChunkInputSchema, _void(), { kind: "mutation" }), method(FinalizeUploadInputSchema, _void(), { kind: "mutation" }), method(AbortUploadInputSchema, _void(), { kind: "mutation" }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, { kind: "mutation" }), method(ReadChunkInputSchema, _instanceof(Uint8Array)), method(EndDownloadInputSchema, _void(), { kind: "mutation" });
20070
+ }), _void(), {
20071
+ kind: "mutation",
20072
+ auth: "admin"
20073
+ }), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
20074
+ kind: "mutation",
20075
+ auth: "admin"
20076
+ }), method(WriteChunkInputSchema, _void(), {
20077
+ kind: "mutation",
20078
+ auth: "admin"
20079
+ }), method(FinalizeUploadInputSchema, _void(), {
20080
+ kind: "mutation",
20081
+ auth: "admin"
20082
+ }), method(AbortUploadInputSchema, _void(), {
20083
+ kind: "mutation",
20084
+ auth: "admin"
20085
+ }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
20086
+ kind: "mutation",
20087
+ auth: "admin"
20088
+ }), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
20089
+ kind: "mutation",
20090
+ auth: "admin"
20091
+ });
19994
20092
  /** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
19995
20093
  var ProfileSettingsSchemaBridge = unknown().nullable();
19996
20094
  var ProfileSettingsBagSchema = record(string(), unknown());
@@ -20248,7 +20346,8 @@ method(object({
20248
20346
  access: "create"
20249
20347
  }), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
20250
20348
  kind: "mutation",
20251
- access: "view"
20349
+ access: "view",
20350
+ auth: "admin"
20252
20351
  }), method(object({
20253
20352
  /** Required — the user the assertion belongs to (verified). */
20254
20353
  userId: string(),
@@ -20256,10 +20355,12 @@ method(object({
20256
20355
  response: record(string(), unknown())
20257
20356
  }), object({ verified: boolean() }), {
20258
20357
  kind: "mutation",
20259
- access: "view"
20358
+ access: "view",
20359
+ auth: "admin"
20260
20360
  }), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
20261
20361
  kind: "mutation",
20262
- access: "view"
20362
+ access: "view",
20363
+ auth: "admin"
20263
20364
  }), method(object({
20264
20365
  /** AuthenticationResponseJSON from the browser. */
20265
20366
  response: record(string(), unknown()) }), object({
@@ -20267,7 +20368,8 @@ response: record(string(), unknown()) }), object({
20267
20368
  userId: string().nullable()
20268
20369
  }), {
20269
20370
  kind: "mutation",
20270
- access: "view"
20371
+ access: "view",
20372
+ auth: "admin"
20271
20373
  }), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
20272
20374
  userId: string(),
20273
20375
  credentialId: string()
@@ -20439,7 +20541,19 @@ var VectorStatsResultSchema = object({
20439
20541
  /** False when the backend ranks approximately. */
20440
20542
  exact: boolean()
20441
20543
  });
20442
- method(VectorDeclareIndexInputSchema, _void(), { kind: "mutation" }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, { kind: "mutation" }), method(VectorQueryInputSchema, VectorQueryResultSchema), method(VectorGetInputSchema, VectorGetResultSchema), method(VectorDeleteInputSchema, VectorDeleteResultSchema, { kind: "mutation" }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, { kind: "mutation" }), method(VectorStatsInputSchema, VectorStatsResultSchema);
20544
+ method(VectorDeclareIndexInputSchema, _void(), {
20545
+ kind: "mutation",
20546
+ auth: "admin"
20547
+ }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
20548
+ kind: "mutation",
20549
+ auth: "admin"
20550
+ }), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
20551
+ kind: "mutation",
20552
+ auth: "admin"
20553
+ }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
20554
+ kind: "mutation",
20555
+ auth: "admin"
20556
+ }), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
20443
20557
  var ClipSchema = object({
20444
20558
  /** Opaque, provider-namespaced id. The default provider encodes the time
20445
20559
  * window so `getClipPlayback` is self-contained (no event re-query). */
@@ -22162,7 +22276,27 @@ var MediaFileLiteSchema$1 = object({
22162
22276
  sizeBytes: number(),
22163
22277
  timestamp: number()
22164
22278
  });
22165
- method(_void(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
22279
+ method(object({
22280
+ /**
22281
+ * Inline {@link IdentitySchema.coverBase64} on every row.
22282
+ *
22283
+ * Default `false`, the same inversion `listRecentFaces` and
22284
+ * `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
22285
+ * why the burden belongs on the caller that WANTS the bytes). Measured
22286
+ * on the live hub the same day: four identities cost 40,979 B with the
22287
+ * covers inline, ~10 KB of base64 per row, on a query this UI mounts
22288
+ * four times and the viewer holds at `staleTime: 30_000`.
22289
+ *
22290
+ * Nothing loses its avatar: `coverMediaKey` is already on every row and
22291
+ * the `event-media` plane serves that key `immutable` with an ETag.
22292
+ *
22293
+ * **This is an INPUT field, so it does not reach the addon until the
22294
+ * next train** — the hub router validates cap inputs against its own
22295
+ * compiled Zod and strips a key it does not know. Until then the
22296
+ * provider sees `undefined`, which resolves to `false`: the cheap shape
22297
+ * is what ships, and the opt-in becomes reachable when the train lands.
22298
+ */
22299
+ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
22166
22300
  kind: "mutation",
22167
22301
  auth: "admin"
22168
22302
  }), method(object({
@@ -24309,8 +24443,10 @@ var PlateInfoSchema = object({
24309
24443
  keyFrameMediaKey: string().optional(),
24310
24444
  base64: string().optional(),
24311
24445
  /**
24312
- * Same crop as a data-plane URL. `getPlateByTrack` returns this and
24313
- * never inlines JPEG; `listPlates` still inlines for the admin-ui.
24446
+ * Same crop as a data-plane URL, always present when the plate has a stored
24447
+ * crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
24448
+ * and `searchPlates` inline the crop only when their `includeCrops` input is
24449
+ * left at its `true` default.
24314
24450
  */
24315
24451
  cropUrl: string().optional()
24316
24452
  });
@@ -24330,14 +24466,34 @@ var PlateClusterSchema = object({
24330
24466
  });
24331
24467
  method(object({
24332
24468
  deviceId: number().int().optional(),
24333
- limit: number().int().positive().optional()
24469
+ limit: number().int().positive().optional(),
24470
+ /**
24471
+ * Inline the base64 crop on every row. Default `true` — the existing
24472
+ * behaviour, kept so no caller breaks.
24473
+ *
24474
+ * Set `false` once the caller renders {@link PlateInfo.cropUrl}.
24475
+ * Measured on the live hub at the 500 rows the Plates view asks for:
24476
+ * 879,403 B and 27.7 s with the crops inline, against a few KiB of
24477
+ * metadata without them — and the browser then caches the images.
24478
+ *
24479
+ * This is the plate twin of `faceGallery.listRecentFaces`'s option;
24480
+ * plates were the one gallery list left without it.
24481
+ *
24482
+ * **This is an INPUT field, so it does not reach the addon until the
24483
+ * next train.** The hub router validates cap inputs against its own
24484
+ * compiled Zod and strips a key it does not know. Until the train
24485
+ * ships, sending `false` is harmless and keeps the crops inline.
24486
+ */
24487
+ includeCrops: boolean().optional()
24334
24488
  }).optional(), array(PlateInfoSchema).readonly()), method(object({
24335
24489
  deviceId: number().int(),
24336
24490
  trackId: string()
24337
24491
  }), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
24338
24492
  text: string().min(1),
24339
24493
  maxDistance: number().int().min(0).optional(),
24340
- limit: number().int().positive().optional()
24494
+ limit: number().int().positive().optional(),
24495
+ /** See `listPlates.includeCrops`. Default `true`. */
24496
+ includeCrops: boolean().optional()
24341
24497
  }), array(PlateInfoSchema).readonly()), method(object({
24342
24498
  maxDistance: number().int().min(0).optional(),
24343
24499
  minClusterSize: number().int().min(2).optional(),
@@ -24351,7 +24507,13 @@ method(object({
24351
24507
  }), method(object({ plateId: string() }), _void(), {
24352
24508
  kind: "mutation",
24353
24509
  auth: "admin"
24354
- }), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
24510
+ }), method(object({
24511
+ /** Inline {@link VehicleSchema.coverBase64} on every row. Default
24512
+ * `false` — the vehicle twin of `faceGallery.listIdentities`'s
24513
+ * option; `coverMediaKey` + the `event-media` plane carry the picture.
24514
+ * INPUT field: stripped by the hub router until the train ships, which
24515
+ * resolves to `false` and is exactly the intended default. */
24516
+ includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
24355
24517
  kind: "mutation",
24356
24518
  auth: "admin"
24357
24519
  }), method(object({
@@ -29728,6 +29890,12 @@ Object.freeze({
29728
29890
  addonId: null,
29729
29891
  access: "create"
29730
29892
  },
29893
+ "pipelineAnalytics.cancelRelocateMedia": {
29894
+ capName: "pipeline-analytics",
29895
+ capScope: "device",
29896
+ addonId: null,
29897
+ access: "create"
29898
+ },
29731
29899
  "pipelineAnalytics.cancelStorageMigrationMove": {
29732
29900
  capName: "pipeline-analytics",
29733
29901
  capScope: "device",
@@ -29902,6 +30070,12 @@ Object.freeze({
29902
30070
  addonId: null,
29903
30071
  access: "view"
29904
30072
  },
30073
+ "pipelineAnalytics.listRelocateMediaJobs": {
30074
+ capName: "pipeline-analytics",
30075
+ capScope: "device",
30076
+ addonId: null,
30077
+ access: "view"
30078
+ },
29905
30079
  "pipelineAnalytics.listRetrainAnnotations": {
29906
30080
  capName: "pipeline-analytics",
29907
30081
  capScope: "device",
@@ -29980,6 +30154,12 @@ Object.freeze({
29980
30154
  addonId: null,
29981
30155
  access: "create"
29982
30156
  },
30157
+ "pipelineAnalytics.relocateMedia": {
30158
+ capName: "pipeline-analytics",
30159
+ capScope: "device",
30160
+ addonId: null,
30161
+ access: "create"
30162
+ },
29983
30163
  "pipelineAnalytics.restageRetrainTrack": {
29984
30164
  capName: "pipeline-analytics",
29985
30165
  capScope: "device",
@@ -6630,7 +6630,7 @@ function method(input, output, options) {
6630
6630
  input,
6631
6631
  output,
6632
6632
  kind: options?.kind ?? "query",
6633
- auth: options?.auth ?? "protected",
6633
+ ...options?.auth !== void 0 ? { auth: options.auth } : {},
6634
6634
  ...options?.access !== void 0 ? { access: options.access } : {},
6635
6635
  ...options?.caller !== void 0 ? { caller: options.caller } : {},
6636
6636
  timeoutMs: options?.timeoutMs
@@ -6650,7 +6650,7 @@ function systemMethod(input, output, options) {
6650
6650
  }
6651
6651
  var StaticDirOutputSchema$1 = object({ staticDir: string() });
6652
6652
  var VersionOutputSchema$1 = object({ version: string() });
6653
- method(_void(), StaticDirOutputSchema$1), method(_void(), VersionOutputSchema$1);
6653
+ method(_void(), StaticDirOutputSchema$1, { auth: "admin" }), method(_void(), VersionOutputSchema$1, { auth: "admin" });
6654
6654
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
6655
6655
  DeviceType["Camera"] = "camera";
6656
6656
  DeviceType["Hub"] = "hub";
@@ -6971,7 +6971,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
6971
6971
  }({});
6972
6972
  var StaticDirOutputSchema = object({ staticDir: string() });
6973
6973
  var VersionOutputSchema = object({ version: string() });
6974
- method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
6974
+ method(_void(), StaticDirOutputSchema, { auth: "admin" }), method(_void(), VersionOutputSchema, { auth: "admin" });
6975
6975
  /**
6976
6976
  * device-ops — device-scoped cap that unifies the per-IDevice operations
6977
6977
  * previously routed through the `.device-ops` Moleculer bridge service.
@@ -7742,24 +7742,6 @@ var RecordingRetentionSchema = object({
7742
7742
  maxSizeGb: number().min(0).optional()
7743
7743
  });
7744
7744
  /**
7745
- * Scrub-thumbnail fidelity preset — the single per-camera selector bundling the
7746
- * sprite tile RESOLUTION + JPEG QUALITY the recorder packs timeline-scrub
7747
- * previews at. Five graduated steps; absent on a config = `standard` (the
7748
- * shipped default, matching `sheet-geometry`/`sheet-composer`).
7749
- *
7750
- * Existing sheets are IMMUTABLE — a changed preset applies to NEW windows only.
7751
- * Each window's index sidecar carries its own tile dims, so a camera whose
7752
- * preset changed over time renders every historical window at the dims it was
7753
- * written with.
7754
- */
7755
- var ScrubThumbnailPresetSchema = _enum([
7756
- "minimal",
7757
- "low",
7758
- "standard",
7759
- "high",
7760
- "max"
7761
- ]);
7762
- /**
7763
7745
  * The full per-camera recording intent — the wire shape of a RecordingTarget.
7764
7746
  *
7765
7747
  * `bands` is the ONLY authored recording intent: what to record, when, and on
@@ -7767,7 +7749,11 @@ var ScrubThumbnailPresetSchema = _enum([
7767
7749
  * other field is a storage knob (profiles, segment length, retention, scrub).
7768
7750
  *
7769
7751
  * STRICT on purpose: the legacy authoring surface (`schedule`/`schedules`/
7770
- * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30.
7752
+ * `triggers`/`preBufferSec`/`postBufferSec`/`rules`) was retired 2026-07-30,
7753
+ * and `scrubThumbnails` — a five-step fidelity knob for a sprite tier that was
7754
+ * deleted on 2026-07-24 and had ZERO consumers in the recorder — on 2026-08-25
7755
+ * (D62: a switch that writes a store nobody reads is worse than no switch).
7756
+ * Stored rows keep loading: the READ schema is `.strip()` (config-store.ts).
7771
7757
  * A stale caller must fail loudly — silently stripping its legacy intent would
7772
7758
  * persist a band-less config, i.e. silently stop recording the camera.
7773
7759
  */
@@ -7790,14 +7776,7 @@ var RecordingConfigSchema = object({
7790
7776
  * "off" is the absence of a covering band, never a band value.
7791
7777
  */
7792
7778
  bands: array(RecordingBandSchema).default([]),
7793
- retention: RecordingRetentionSchema.optional(),
7794
- /**
7795
- * Per-camera scrub-thumbnail fidelity preset (resolution + JPEG quality for
7796
- * timeline-scrub sprite previews). Absent = `standard`. Applies to NEW
7797
- * windows only — existing sheets are immutable, and each window's index
7798
- * carries its own tile dims so mixed-preset history renders correctly.
7799
- */
7800
- scrubThumbnails: ScrubThumbnailPresetSchema.optional()
7779
+ retention: RecordingRetentionSchema.optional()
7801
7780
  }).strict();
7802
7781
  /**
7803
7782
  * Entity-relocation job state (storage entity-routing spec, Phase 4).
@@ -7873,10 +7852,11 @@ var RelocateFootageInputSchema = object({
7873
7852
  * `RecordingConfig.enabled` or camera wrapper bindings. */
7874
7853
  var StorageMigrationLeaseInputSchema = object({ leaseId: string().min(1) });
7875
7854
  var StorageMigrationFootageMoveInputSchema = RelocateFootageInputSchema.extend({ leaseId: string().min(1) });
7876
- var StorageMigrationMediaMoveInputSchema = object({
7855
+ var RelocateMediaInputSchema = object({
7877
7856
  toLocationId: string(),
7878
7857
  throttleMbps: number().min(1).max(1e3).optional()
7879
- }).extend({ leaseId: string().min(1) });
7858
+ });
7859
+ var StorageMigrationMediaMoveInputSchema = RelocateMediaInputSchema.extend({ leaseId: string().min(1) });
7880
7860
  /** The independently selectable logical storage classes. `recordings`
7881
7861
  * encompasses the high and mid segment profiles; `recordingsLow` is low
7882
7862
  * segments; `eventMedia` is post-analysis blobs. */
@@ -8225,7 +8205,26 @@ var LabelDefinitionSchema = object({
8225
8205
  description: string().optional(),
8226
8206
  icon: string().optional()
8227
8207
  });
8228
- var ClassMapDefinitionSchema = object({
8208
+ /**
8209
+ * Wire schema for a per-model CATALOG classMap override
8210
+ * (`ModelCatalogEntry.classMap` / `ModelConvertMetadata.classMap`) —
8211
+ * restricted to {@link CLASS_MAP_MACRO_TARGETS}, the only macros the
8212
+ * detection pipeline executor actually routes.
8213
+ *
8214
+ * This is deliberately a DIFFERENT, narrower shape than the general-purpose
8215
+ * `ClassMapDefinition` interface above (e.g. `IDetectionAddon.getClassMap()`
8216
+ * and the audio `YAMNET_TO_MACRO` catalog both use macro targets outside this
8217
+ * enum) — the two used to share the name `ClassMapDefinition`/
8218
+ * `ClassMapDefinitionSchema`, which made the schema-type-twin guard
8219
+ * (`scripts/check-schema-type-twins.ts`) flag them as a duplicated shape. They
8220
+ * are not: it is two different concepts colliding on a name. Keep this type
8221
+ * under its own name rather than reusing `ClassMapDefinition` — reusing it
8222
+ * would either narrow every `ClassMapDefinition` consumer to the four
8223
+ * detection macros (breaking `YAMNET_TO_MACRO`) or drop the validation this
8224
+ * schema exists for (see the "rejects a classMap whose target is not a
8225
+ * detection macro" test in `model-catalog-schema.test.ts`).
8226
+ */
8227
+ var DetectionCatalogClassMapSchema = object({
8229
8228
  mapping: record(string(), _enum([
8230
8229
  "person",
8231
8230
  "vehicle",
@@ -8430,7 +8429,7 @@ var ModelCatalogEntrySchema = object({
8430
8429
  * applies (Frigate / COCO public catalog). Set on a custom model whose raw
8431
8430
  * labels already ARE the CamStack macros (Scrypted identity map).
8432
8431
  */
8433
- classMap: ClassMapDefinitionSchema.optional()
8432
+ classMap: DetectionCatalogClassMapSchema.optional()
8434
8433
  });
8435
8434
  var ConvertTargetSchema = discriminatedUnion("format", [object({
8436
8435
  format: literal("openvino"),
@@ -8460,7 +8459,7 @@ var ModelConvertMetadataSchema = object({
8460
8459
  "segmentation"
8461
8460
  ]),
8462
8461
  faceAlignment: boolean().optional(),
8463
- classMap: ClassMapDefinitionSchema.optional()
8462
+ classMap: DetectionCatalogClassMapSchema.optional()
8464
8463
  });
8465
8464
  var ConvertResultSchema = object({
8466
8465
  entry: ModelCatalogEntrySchema,
@@ -9330,7 +9329,7 @@ var AddonPageDeclarationSchema = object({
9330
9329
  /** Display label for a CUSTOM `section` id (ignored for well-known ids). */
9331
9330
  sectionLabel: string().optional()
9332
9331
  });
9333
- method(_void(), array(AddonPageDeclarationSchema).readonly());
9332
+ method(_void(), array(AddonPageDeclarationSchema).readonly(), { auth: "admin" });
9334
9333
  var AddonHttpRouteSchema = object({
9335
9334
  method: _enum([
9336
9335
  "GET",
@@ -9584,7 +9583,7 @@ var WidgetMetadataSchema = object({
9584
9583
  defaultColumns: number().int().min(1).max(12).default(6),
9585
9584
  defaultRows: number().int().min(1).max(12).default(1)
9586
9585
  });
9587
- method(_void(), array(WidgetMetadataSchema).readonly());
9586
+ method(_void(), array(WidgetMetadataSchema).readonly(), { auth: "admin" });
9588
9587
  /**
9589
9588
  * `addon-widgets` — system-scoped singleton aggregator cap. Public-facing
9590
9589
  * surface that admin-ui consumes through `useAddonWidgetsListWidgets()`.
@@ -11128,7 +11127,7 @@ var CustomModelDescriptorSchema = object({
11128
11127
  stepId: string(),
11129
11128
  entry: ModelCatalogEntrySchema
11130
11129
  });
11131
- method(_void(), array(CustomModelDescriptorSchema).readonly());
11130
+ method(_void(), array(CustomModelDescriptorSchema).readonly(), { auth: "admin" });
11132
11131
  /**
11133
11132
  * Query filter for settings-store collections.
11134
11133
  */
@@ -11215,7 +11214,8 @@ method(object({
11215
11214
  }), _void(), { kind: "mutation" }), method(object({
11216
11215
  namespace: string().optional(),
11217
11216
  collection: string(),
11218
- filter: QueryFilterSchema.optional()
11217
+ filter: QueryFilterSchema.optional(),
11218
+ columns: array(string()).readonly().optional()
11219
11219
  }), array(SettingsRecordSchema).readonly()), method(object({
11220
11220
  namespace: string().optional(),
11221
11221
  collection: string(),
@@ -11278,46 +11278,87 @@ var EngineInfoSchema = object({
11278
11278
  kind: _enum(["relational", "vector"]),
11279
11279
  displayName: string()
11280
11280
  });
11281
- method(_void(), EngineInfoSchema), method(object({
11281
+ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
11282
11282
  namespace: string().optional(),
11283
11283
  collection: string(),
11284
11284
  key: string()
11285
- }), unknown()), method(object({
11285
+ }), unknown(), { auth: "admin" }), method(object({
11286
11286
  namespace: string().optional(),
11287
11287
  collection: string(),
11288
11288
  key: string(),
11289
11289
  value: unknown()
11290
- }), _void(), { kind: "mutation" }), method(object({
11290
+ }), _void(), {
11291
+ kind: "mutation",
11292
+ auth: "admin"
11293
+ }), method(object({
11291
11294
  namespace: string().optional(),
11292
11295
  collection: string(),
11293
- filter: QueryFilterSchema.optional()
11294
- }), array(SettingsRecordSchema).readonly()), method(object({
11296
+ filter: QueryFilterSchema.optional(),
11297
+ /**
11298
+ * SQL-level column projection — MUST mirror `settings-store.query`.
11299
+ *
11300
+ * ⚠ An earlier version of this comment blamed Zod stripping, and that
11301
+ * was wrong — corrected 2026-08-26 after the hop map
11302
+ * (`docs/design/2026-08-26-mappa-hop-argomenti.md`) traced the path.
11303
+ * There is **no Zod parse at all** between the door and the engine: the
11304
+ * dispatcher forwards the payload verbatim and UDS carries it whole. A
11305
+ * field declared here reaches `SqliteSettingsBackend` either way.
11306
+ *
11307
+ * What actually lost `columns` was the THIRD declaration of this shape:
11308
+ * `SettingsQueryInput` in `interfaces/storage.ts`, a hand-written TS
11309
+ * interface the engine destructures from. The field existed on both
11310
+ * schemas and the engine still never read it, because nothing checks a
11311
+ * registered provider against `InferProvider<cap>` —
11312
+ * `ProviderRegistration.provider` is typed `object`.
11313
+ *
11314
+ * It is declared here anyway, and must stay in step with
11315
+ * `settings-store.query`: a caller reading only the cap definitions has
11316
+ * to be able to see that this call carries a projection.
11317
+ * `data-door-schema-parity.spec.ts` keeps the two aligned.
11318
+ */
11319
+ columns: array(string()).readonly().optional()
11320
+ }), array(SettingsRecordSchema).readonly(), { auth: "admin" }), method(object({
11295
11321
  namespace: string().optional(),
11296
11322
  collection: string(),
11297
11323
  record: SettingsRecordSchema
11298
- }), _void(), { kind: "mutation" }), method(object({
11324
+ }), _void(), {
11325
+ kind: "mutation",
11326
+ auth: "admin"
11327
+ }), method(object({
11299
11328
  namespace: string().optional(),
11300
11329
  collection: string(),
11301
11330
  id: string(),
11302
11331
  data: record(string(), unknown())
11303
- }), _void(), { kind: "mutation" }), method(object({
11332
+ }), _void(), {
11333
+ kind: "mutation",
11334
+ auth: "admin"
11335
+ }), method(object({
11304
11336
  namespace: string().optional(),
11305
11337
  collection: string(),
11306
11338
  key: string()
11307
- }), _void(), { kind: "mutation" }), method(object({
11339
+ }), _void(), {
11340
+ kind: "mutation",
11341
+ auth: "admin"
11342
+ }), method(object({
11308
11343
  namespace: string().optional(),
11309
11344
  collection: string(),
11310
11345
  filter: MutationFilterSchema
11311
- }), object({ deleted: number().int() }), { kind: "mutation" }), method(object({
11346
+ }), object({ deleted: number().int() }), {
11347
+ kind: "mutation",
11348
+ auth: "admin"
11349
+ }), method(object({
11312
11350
  namespace: string().optional(),
11313
11351
  collection: string(),
11314
11352
  filter: MutationFilterSchema,
11315
11353
  data: record(string(), unknown())
11316
- }), object({ updated: number().int() }), { kind: "mutation" }), method(object({
11354
+ }), object({ updated: number().int() }), {
11355
+ kind: "mutation",
11356
+ auth: "admin"
11357
+ }), method(object({
11317
11358
  namespace: string().optional(),
11318
11359
  collection: string(),
11319
11360
  filter: QueryFilterSchema.optional()
11320
- }), number()), method(object({
11361
+ }), number(), { auth: "admin" }), method(object({
11321
11362
  namespace: string().optional(),
11322
11363
  collection: string(),
11323
11364
  field: string(),
@@ -11327,15 +11368,18 @@ method(_void(), EngineInfoSchema), method(object({
11327
11368
  }), array(object({
11328
11369
  bucket: number().int(),
11329
11370
  count: number().int()
11330
- })).readonly()), method(object({
11371
+ })).readonly(), { auth: "admin" }), method(object({
11331
11372
  namespace: string().optional(),
11332
11373
  collection: string()
11333
- }), boolean()), method(object({
11374
+ }), boolean(), { auth: "admin" }), method(object({
11334
11375
  namespace: string().optional(),
11335
11376
  collection: string(),
11336
11377
  columns: array(CollectionColumnSchema).readonly(),
11337
11378
  indexes: array(CollectionIndexSchema).readonly().optional()
11338
- }), _void(), { kind: "mutation" });
11379
+ }), _void(), {
11380
+ kind: "mutation",
11381
+ auth: "admin"
11382
+ });
11339
11383
  /**
11340
11384
  * shm ring usage stats for a `frameSink: 'shm'` decoder session —
11341
11385
  * exposed via `decoder.getShmStats` so downstream consumers can
@@ -12488,7 +12532,7 @@ method(object({
12488
12532
  crop: _instanceof(Uint8Array),
12489
12533
  width: number(),
12490
12534
  height: number()
12491
- }), EmbeddingResultSchema), method(object({ text: string() }), EmbeddingResultSchema), method(_void(), EmbeddingInfoSchema);
12535
+ }), EmbeddingResultSchema, { auth: "admin" }), method(object({ text: string() }), EmbeddingResultSchema, { auth: "admin" }), method(_void(), EmbeddingInfoSchema, { auth: "admin" });
12492
12536
  /**
12493
12537
  * filesystem-browse — per-node capability for browsing the node's local
12494
12538
  * filesystem. Reads are unconfined (whole filesystem, from `/` down); WRITES
@@ -12781,19 +12825,22 @@ method(LlmGenerateBaseInputSchema.extend({
12781
12825
  runtime: ManagedRuntimeConfigSchema,
12782
12826
  /** The managed profile's timeout, threaded by the hub provider. */
12783
12827
  timeoutMs: number().int().positive().optional()
12784
- }), LlmGenerateResultSchema, { kind: "mutation" }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12828
+ }), LlmGenerateResultSchema, {
12829
+ kind: "mutation",
12830
+ auth: "admin"
12831
+ }), method(object({ runtime: ManagedRuntimeConfigSchema }), LlmRuntimeStatusSchema, {
12785
12832
  kind: "mutation",
12786
12833
  auth: "admin"
12787
12834
  }), method(object({}), _void(), {
12788
12835
  kind: "mutation",
12789
12836
  auth: "admin"
12790
- }), method(object({}), LlmRuntimeStatusSchema), method(object({ model: ManagedModelRefSchema }), _void(), {
12837
+ }), method(object({}), LlmRuntimeStatusSchema, { auth: "admin" }), method(object({ model: ManagedModelRefSchema }), _void(), {
12791
12838
  kind: "mutation",
12792
12839
  auth: "admin"
12793
12840
  }), method(object({ file: string() }), _void(), {
12794
12841
  kind: "mutation",
12795
12842
  auth: "admin"
12796
- }), method(object({}), array(LlmNodeModelSchema)), method(object({}), LlmRuntimeDiskUsageSchema);
12843
+ }), method(object({}), array(LlmNodeModelSchema), { auth: "admin" }), method(object({}), LlmRuntimeDiskUsageSchema, { auth: "admin" });
12797
12844
  /**
12798
12845
  * `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
12799
12846
  * methods concat-fan across providers; single-row methods route to ONE
@@ -16271,7 +16318,17 @@ var oauthIntegrationCapability = {
16271
16318
  scope: "system",
16272
16319
  mode: "collection",
16273
16320
  internal: true,
16274
- methods: { getDescriptor: method(_void(), OauthIntegrationDescriptorSchema) }
16321
+ methods: {
16322
+ /**
16323
+ * `internal: true` did not gate the mount (see the 2026-08-26 note on
16324
+ * `data-store-provider`) — `getDescriptor` was reachable on the AppRouter
16325
+ * by ANY authenticated session at the default `auth: 'protected'`. The
16326
+ * real caller is `/api/oauth2/authorize` and `/api/oauth2/integrations`
16327
+ * (`oauth2-routes.ts`), which resolve the provider directly off the
16328
+ * capability registry — never through tRPC. `auth: 'admin'` closes the
16329
+ * tRPC surface without touching that path.
16330
+ */
16331
+ getDescriptor: method(_void(), OauthIntegrationDescriptorSchema, { auth: "admin" }) }
16275
16332
  };
16276
16333
  /**
16277
16334
  * pipeline-analytics — device-scoped wrapper cap. Refines raw
@@ -17467,6 +17524,15 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
17467
17524
  }), method(object({ jobId: string() }), RelocateJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17468
17525
  kind: "mutation",
17469
17526
  auth: "admin"
17527
+ }), method(RelocateMediaInputSchema, object({ jobId: string() }), {
17528
+ kind: "mutation",
17529
+ auth: "admin"
17530
+ }), method(object({}), array(RelocateJobSchema).readonly(), {
17531
+ kind: "query",
17532
+ auth: "admin"
17533
+ }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
17534
+ kind: "mutation",
17535
+ auth: "admin"
17470
17536
  }), method(OpsLogQueryInputSchema, array(OpsLogEntrySchema).readonly(), {
17471
17537
  kind: "query",
17472
17538
  auth: "admin"
@@ -17621,6 +17687,11 @@ object({
17621
17687
  "jpeg"
17622
17688
  ])
17623
17689
  });
17690
+ /**
17691
+ * Process-local frame identity. It is serializable so it can ride an in-process
17692
+ * capability call, but `registryId` deliberately prevents resolution in any
17693
+ * other process or execution group.
17694
+ */
17624
17695
  var FrameRefSchema = object({
17625
17696
  registryId: string().min(1),
17626
17697
  id: string().min(1),
@@ -19786,7 +19857,7 @@ method(object({
19786
19857
  * linking rather than produce an eternal token.
19787
19858
  */
19788
19859
  ttlSec: union([number().int().positive(), literal("never")]).optional()
19789
- }), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
19860
+ }), object({ token: string() }), { auth: "admin" }), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable(), { auth: "admin" });
19790
19861
  var ProviderListEntrySchema = discriminatedUnion("shouldSaveDiskSpace", [object({
19791
19862
  providerId: string().min(1),
19792
19863
  displayName: string().min(1),
@@ -19881,10 +19952,13 @@ var EvictResultSchema = object({
19881
19952
  /** True when the provider has nothing left it is willing to drop on this location. */
19882
19953
  exhausted: boolean()
19883
19954
  });
19884
- method(object({ locationId: string() }), EvictableUsageSchema), method(object({
19955
+ method(object({ locationId: string() }), EvictableUsageSchema, { auth: "admin" }), method(object({
19885
19956
  locationId: string(),
19886
19957
  targetBytes: number().int().positive()
19887
- }), EvictResultSchema, { kind: "mutation" });
19958
+ }), EvictResultSchema, {
19959
+ kind: "mutation",
19960
+ auth: "admin"
19961
+ });
19888
19962
  method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin" }), method(StorageMigrationInputSchema, object({ jobId: string() }), {
19889
19963
  kind: "mutation",
19890
19964
  auth: "admin"
@@ -19944,26 +20018,50 @@ var ReadChunkInputSchema = object({
19944
20018
  length: number()
19945
20019
  });
19946
20020
  var EndDownloadInputSchema = object({ downloadId: string() });
19947
- method(_void(), ProviderInfoSchema), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
20021
+ method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config: record(string(), unknown()) }), TestLocationResultSchema, { auth: "admin" }), method(object({
19948
20022
  location: StorageLocationSchema,
19949
20023
  relativePath: string()
19950
- }), string()), method(object({
20024
+ }), string(), { auth: "admin" }), method(object({
19951
20025
  location: StorageLocationSchema,
19952
20026
  relativePath: string(),
19953
20027
  data: _instanceof(Uint8Array)
19954
- }), _void(), { kind: "mutation" }), method(object({
20028
+ }), _void(), {
20029
+ kind: "mutation",
20030
+ auth: "admin"
20031
+ }), method(object({
19955
20032
  location: StorageLocationSchema,
19956
20033
  relativePath: string()
19957
- }), _instanceof(Uint8Array)), method(object({
20034
+ }), _instanceof(Uint8Array), { auth: "admin" }), method(object({
19958
20035
  location: StorageLocationSchema,
19959
20036
  relativePath: string()
19960
- }), boolean()), method(object({
20037
+ }), boolean(), { auth: "admin" }), method(object({
19961
20038
  location: StorageLocationSchema,
19962
20039
  prefix: string().optional()
19963
- }), array(string()).readonly()), method(object({
20040
+ }), array(string()).readonly(), { auth: "admin" }), method(object({
19964
20041
  location: StorageLocationSchema,
19965
20042
  relativePath: string()
19966
- }), _void(), { kind: "mutation" }), method(object({ location: StorageLocationSchema }), number().nullable()), method(BeginUploadInputSchema, BeginUploadResultSchema, { kind: "mutation" }), method(WriteChunkInputSchema, _void(), { kind: "mutation" }), method(FinalizeUploadInputSchema, _void(), { kind: "mutation" }), method(AbortUploadInputSchema, _void(), { kind: "mutation" }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, { kind: "mutation" }), method(ReadChunkInputSchema, _instanceof(Uint8Array)), method(EndDownloadInputSchema, _void(), { kind: "mutation" });
20043
+ }), _void(), {
20044
+ kind: "mutation",
20045
+ auth: "admin"
20046
+ }), method(object({ location: StorageLocationSchema }), number().nullable(), { auth: "admin" }), method(BeginUploadInputSchema, BeginUploadResultSchema, {
20047
+ kind: "mutation",
20048
+ auth: "admin"
20049
+ }), method(WriteChunkInputSchema, _void(), {
20050
+ kind: "mutation",
20051
+ auth: "admin"
20052
+ }), method(FinalizeUploadInputSchema, _void(), {
20053
+ kind: "mutation",
20054
+ auth: "admin"
20055
+ }), method(AbortUploadInputSchema, _void(), {
20056
+ kind: "mutation",
20057
+ auth: "admin"
20058
+ }), method(BeginDownloadInputSchema, BeginDownloadResultSchema, {
20059
+ kind: "mutation",
20060
+ auth: "admin"
20061
+ }), method(ReadChunkInputSchema, _instanceof(Uint8Array), { auth: "admin" }), method(EndDownloadInputSchema, _void(), {
20062
+ kind: "mutation",
20063
+ auth: "admin"
20064
+ });
19967
20065
  /** Profile-exported FormBuilder schema. Shape is ConfigUISchema at the UI. */
19968
20066
  var ProfileSettingsSchemaBridge = unknown().nullable();
19969
20067
  var ProfileSettingsBagSchema = record(string(), unknown());
@@ -20221,7 +20319,8 @@ method(object({
20221
20319
  access: "create"
20222
20320
  }), method(object({ userId: string().optional() }), object({ optionsJSON: record(string(), unknown()) }), {
20223
20321
  kind: "mutation",
20224
- access: "view"
20322
+ access: "view",
20323
+ auth: "admin"
20225
20324
  }), method(object({
20226
20325
  /** Required — the user the assertion belongs to (verified). */
20227
20326
  userId: string(),
@@ -20229,10 +20328,12 @@ method(object({
20229
20328
  response: record(string(), unknown())
20230
20329
  }), object({ verified: boolean() }), {
20231
20330
  kind: "mutation",
20232
- access: "view"
20331
+ access: "view",
20332
+ auth: "admin"
20233
20333
  }), method(object({}), object({ optionsJSON: record(string(), unknown()) }), {
20234
20334
  kind: "mutation",
20235
- access: "view"
20335
+ access: "view",
20336
+ auth: "admin"
20236
20337
  }), method(object({
20237
20338
  /** AuthenticationResponseJSON from the browser. */
20238
20339
  response: record(string(), unknown()) }), object({
@@ -20240,7 +20341,8 @@ response: record(string(), unknown()) }), object({
20240
20341
  userId: string().nullable()
20241
20342
  }), {
20242
20343
  kind: "mutation",
20243
- access: "view"
20344
+ access: "view",
20345
+ auth: "admin"
20244
20346
  }), method(object({ userId: string() }), array(PasskeySummarySchema), { auth: "admin" }), method(object({
20245
20347
  userId: string(),
20246
20348
  credentialId: string()
@@ -20412,7 +20514,19 @@ var VectorStatsResultSchema = object({
20412
20514
  /** False when the backend ranks approximately. */
20413
20515
  exact: boolean()
20414
20516
  });
20415
- method(VectorDeclareIndexInputSchema, _void(), { kind: "mutation" }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, { kind: "mutation" }), method(VectorQueryInputSchema, VectorQueryResultSchema), method(VectorGetInputSchema, VectorGetResultSchema), method(VectorDeleteInputSchema, VectorDeleteResultSchema, { kind: "mutation" }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, { kind: "mutation" }), method(VectorStatsInputSchema, VectorStatsResultSchema);
20517
+ method(VectorDeclareIndexInputSchema, _void(), {
20518
+ kind: "mutation",
20519
+ auth: "admin"
20520
+ }), method(VectorUpsertInputSchema, VectorUpsertResultSchema, {
20521
+ kind: "mutation",
20522
+ auth: "admin"
20523
+ }), method(VectorQueryInputSchema, VectorQueryResultSchema, { auth: "admin" }), method(VectorGetInputSchema, VectorGetResultSchema, { auth: "admin" }), method(VectorDeleteInputSchema, VectorDeleteResultSchema, {
20524
+ kind: "mutation",
20525
+ auth: "admin"
20526
+ }), method(VectorDeleteByFilterInputSchema, VectorDeleteResultSchema, {
20527
+ kind: "mutation",
20528
+ auth: "admin"
20529
+ }), method(VectorStatsInputSchema, VectorStatsResultSchema, { auth: "admin" });
20416
20530
  var ClipSchema = object({
20417
20531
  /** Opaque, provider-namespaced id. The default provider encodes the time
20418
20532
  * window so `getClipPlayback` is self-contained (no event re-query). */
@@ -22135,7 +22249,27 @@ var MediaFileLiteSchema$1 = object({
22135
22249
  sizeBytes: number(),
22136
22250
  timestamp: number()
22137
22251
  });
22138
- method(_void(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
22252
+ method(object({
22253
+ /**
22254
+ * Inline {@link IdentitySchema.coverBase64} on every row.
22255
+ *
22256
+ * Default `false`, the same inversion `listRecentFaces` and
22257
+ * `listPlates` took on 2026-08-25 (see `include-crops-default.ts` for
22258
+ * why the burden belongs on the caller that WANTS the bytes). Measured
22259
+ * on the live hub the same day: four identities cost 40,979 B with the
22260
+ * covers inline, ~10 KB of base64 per row, on a query this UI mounts
22261
+ * four times and the viewer holds at `staleTime: 30_000`.
22262
+ *
22263
+ * Nothing loses its avatar: `coverMediaKey` is already on every row and
22264
+ * the `event-media` plane serves that key `immutable` with an ETag.
22265
+ *
22266
+ * **This is an INPUT field, so it does not reach the addon until the
22267
+ * next train** — the hub router validates cap inputs against its own
22268
+ * compiled Zod and strips a key it does not know. Until then the
22269
+ * provider sees `undefined`, which resolves to `false`: the cheap shape
22270
+ * is what ships, and the opt-in becomes reachable when the train lands.
22271
+ */
22272
+ includeCrops: boolean().optional() }).optional(), array(IdentitySchema).readonly()), method(object({ name: string().min(1) }), IdentitySchema, {
22139
22273
  kind: "mutation",
22140
22274
  auth: "admin"
22141
22275
  }), method(object({
@@ -24282,8 +24416,10 @@ var PlateInfoSchema = object({
24282
24416
  keyFrameMediaKey: string().optional(),
24283
24417
  base64: string().optional(),
24284
24418
  /**
24285
- * Same crop as a data-plane URL. `getPlateByTrack` returns this and
24286
- * never inlines JPEG; `listPlates` still inlines for the admin-ui.
24419
+ * Same crop as a data-plane URL, always present when the plate has a stored
24420
+ * crop. `getPlateByTrack` returns this and never inlines JPEG; `listPlates`
24421
+ * and `searchPlates` inline the crop only when their `includeCrops` input is
24422
+ * left at its `true` default.
24287
24423
  */
24288
24424
  cropUrl: string().optional()
24289
24425
  });
@@ -24303,14 +24439,34 @@ var PlateClusterSchema = object({
24303
24439
  });
24304
24440
  method(object({
24305
24441
  deviceId: number().int().optional(),
24306
- limit: number().int().positive().optional()
24442
+ limit: number().int().positive().optional(),
24443
+ /**
24444
+ * Inline the base64 crop on every row. Default `true` — the existing
24445
+ * behaviour, kept so no caller breaks.
24446
+ *
24447
+ * Set `false` once the caller renders {@link PlateInfo.cropUrl}.
24448
+ * Measured on the live hub at the 500 rows the Plates view asks for:
24449
+ * 879,403 B and 27.7 s with the crops inline, against a few KiB of
24450
+ * metadata without them — and the browser then caches the images.
24451
+ *
24452
+ * This is the plate twin of `faceGallery.listRecentFaces`'s option;
24453
+ * plates were the one gallery list left without it.
24454
+ *
24455
+ * **This is an INPUT field, so it does not reach the addon until the
24456
+ * next train.** The hub router validates cap inputs against its own
24457
+ * compiled Zod and strips a key it does not know. Until the train
24458
+ * ships, sending `false` is harmless and keeps the crops inline.
24459
+ */
24460
+ includeCrops: boolean().optional()
24307
24461
  }).optional(), array(PlateInfoSchema).readonly()), method(object({
24308
24462
  deviceId: number().int(),
24309
24463
  trackId: string()
24310
24464
  }), PlateInfoSchema.nullable()), method(object({ plateId: string() }), array(MediaFileLiteSchema).readonly()), method(object({
24311
24465
  text: string().min(1),
24312
24466
  maxDistance: number().int().min(0).optional(),
24313
- limit: number().int().positive().optional()
24467
+ limit: number().int().positive().optional(),
24468
+ /** See `listPlates.includeCrops`. Default `true`. */
24469
+ includeCrops: boolean().optional()
24314
24470
  }), array(PlateInfoSchema).readonly()), method(object({
24315
24471
  maxDistance: number().int().min(0).optional(),
24316
24472
  minClusterSize: number().int().min(2).optional(),
@@ -24324,7 +24480,13 @@ method(object({
24324
24480
  }), method(object({ plateId: string() }), _void(), {
24325
24481
  kind: "mutation",
24326
24482
  auth: "admin"
24327
- }), method(_void(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
24483
+ }), method(object({
24484
+ /** Inline {@link VehicleSchema.coverBase64} on every row. Default
24485
+ * `false` — the vehicle twin of `faceGallery.listIdentities`'s
24486
+ * option; `coverMediaKey` + the `event-media` plane carry the picture.
24487
+ * INPUT field: stripped by the hub router until the train ships, which
24488
+ * resolves to `false` and is exactly the intended default. */
24489
+ includeCrops: boolean().optional() }).optional(), array(VehicleSchema).readonly()), method(object({ name: string().min(1) }), VehicleSchema, {
24328
24490
  kind: "mutation",
24329
24491
  auth: "admin"
24330
24492
  }), method(object({
@@ -29701,6 +29863,12 @@ Object.freeze({
29701
29863
  addonId: null,
29702
29864
  access: "create"
29703
29865
  },
29866
+ "pipelineAnalytics.cancelRelocateMedia": {
29867
+ capName: "pipeline-analytics",
29868
+ capScope: "device",
29869
+ addonId: null,
29870
+ access: "create"
29871
+ },
29704
29872
  "pipelineAnalytics.cancelStorageMigrationMove": {
29705
29873
  capName: "pipeline-analytics",
29706
29874
  capScope: "device",
@@ -29875,6 +30043,12 @@ Object.freeze({
29875
30043
  addonId: null,
29876
30044
  access: "view"
29877
30045
  },
30046
+ "pipelineAnalytics.listRelocateMediaJobs": {
30047
+ capName: "pipeline-analytics",
30048
+ capScope: "device",
30049
+ addonId: null,
30050
+ access: "view"
30051
+ },
29878
30052
  "pipelineAnalytics.listRetrainAnnotations": {
29879
30053
  capName: "pipeline-analytics",
29880
30054
  capScope: "device",
@@ -29953,6 +30127,12 @@ Object.freeze({
29953
30127
  addonId: null,
29954
30128
  access: "create"
29955
30129
  },
30130
+ "pipelineAnalytics.relocateMedia": {
30131
+ capName: "pipeline-analytics",
30132
+ capScope: "device",
30133
+ addonId: null,
30134
+ access: "create"
30135
+ },
29956
30136
  "pipelineAnalytics.restageRetrainTrack": {
29957
30137
  capName: "pipeline-analytics",
29958
30138
  capScope: "device",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-alexa",
3
- "version": "1.2.34",
3
+ "version": "1.2.35",
4
4
  "description": "Alexa Smart Home Skill export — hub-side OAuth provider + directive handler. The companion AWS Lambda forwards Alexa directives to this addon's /addon/export-alexa/directive endpoint.",
5
5
  "keywords": [
6
6
  "camstack",